2016-07-07 3 views
2

Windows Media Foundation AACでエンコードされたファイルのオーディオデータを取得します。適切な方法は、オーディオのサンプルを1つ保管するIMFSample *を宣言することです。 VS2015では、このクラスにメソッドgetDouble()があることがわかりますが、MSDN documentationには何もありません。ここでWindows Media Foundation:AACで復号化されたデータを取得する

は私がやろうとしています例の一部です:

IMFSample *pSample(NULL); 

    hr = m_pReader->ReadSample(
     MF_SOURCE_READER_FIRST_AUDIO_STREAM, // [in] DWORD dwStreamIndex, 
     0,         // [in] DWORD dwControlFlags, 
     NULL,        // [out] DWORD *pdwActualStreamIndex, 
     &dwFlags,       // [out] DWORD *pdwStreamFlags, 
     &timestamp,       // [out] LONGLONG *pllTimestamp, 
     &pSample);       // [out] IMFSample **ppSample 

pSampleは私が欲しいものである最後の引数。

今、私は現在のをデコードしたサンプルデータにdouble、float、またはbyteポインタを取得したいと考えています。

どうすればいいですか?

ありがとうございます。

答えて

2

まずバッファにサンプルを変換します。

Microsoft::WRL::ComPtr<IMFMediaBuffer> mediaBuffer; 
sample->ConvertToContiguousBuffer(&mediaBuffer) 

そして、その内部へのポインタを取得するためにバッファをロック:データの形式は、あなたに返されるかを指定するには

BYTE *audioData = nullptr; 
DWORD sampleBufferLength = 0; 
mediaBuffer->Lock(&audioData, nullptr, &sampleBufferLength); 
// use audioData... 
mediaBuffer->Unlock(); 

をあなたのリーダーにSetCurrentMediaTypeを使用してください(最初にこれを1回行います)。

そしてpl MFでどこでもスマートなポインタを使用すると、痛みの世界に入るでしょう。 Microsoft::WRL::ComPtr<XXX>はあなたの友人です!私はこのサンプルコードでHRESULTをチェックアウトしていますが、間違いなくそれをしたいと思っています。

+0

返信ありがとうございました。私は別の質問がある。これから得られるデータは、デコードされていない権利ですか? – mbaros

+1

@mbarosこれは、デコードされたデータです。生のサンプルを表す[0〜1.0の範囲内の]浮動小数点のリストです。 –

関連する問題