TCC89播放代码与 LOG 对应

阅读与测试 Telechips 平台下音频播放 Filter,同时对比 WinCE 下标准的 Overlay 音频播放过程。了解音频播放过程,记录如下:

(1)

1 CheckCoCreateInstance(hr, CLSID_FilterGraph, IID_IGraphBuilder, (void **)&mpGraph, TEXT("CLSID_FilterGraph fail")); 
2   原型: BOOL CFilterControl::CheckCoCreateInstance(HRESULT &hr, REFCLSID rclsid, REFIID riid, LPVOID* ppv, LPCTSTR pszErrorMessage)
3   调用 CoCreateInstance 的代码 : hr = ::CoCreateInstance(rclsid, NULL, CLSCTX_INPROC_SERVER, riid, ppv);
加载模块: quartz.dll
加载模块: mmtimer.dll
加载模块: waveapic.dll

(2)

1 hr = CoCreateInstance((REFCLSID)CLSID_AudioRender, NULL, CLSCTX_INPROC, (REFIID)IID_IBaseFilter, (void **)&m_pAudioRenderFilter);
2     hr = mpGraph->AddFilter(m_pAudioRenderFilter,L"Audio Renderer");
3     
4     hr = mpGraph->AddFilter(m_pAudioOutputControlFilter,L"TCC Audio Output Control Filter");
加载模块: TCCAudioOutputControlFilter.dll
对应实现: TWS893x_200FiltersTCCAudioOutputControlFilterTCCAudioOutputControlFilter.cpp
 1 CFactoryTemplate g_Templates[] = 
 2   {
 3     {
 4       L"TCC Audio Output Control Filter",
 5       &CLSID_TCCAudioOutputControlFilter,
 6       CAudioOutputControlFilter::CreateInstance,      // Create a new instance of this class
 7       NULL,
 8       &sudTCCAudioOutputControlFilter
 9     },
10   };

(3)

1 hr = CoCreateInstance((REFCLSID)CLSID_TCCDEQ, NULL, CLSCTX_INPROC, (REFIID)IID_IBaseFilter, (void **)&m_pDEQFilter);
2     // DEQ Filter Add
3     if(SUCCEEDED(hr))
4       hr = mpGraph->AddFilter(m_pDEQFilter,L"TCC DEQ Filter");
加载模块: TCCDEQFilter.dll


(4)

1 hr = mpGraph->RenderFile(FileName,NULL);
加载模块: TCCCDKAudioDecFilter.dll
加载模块: TCCCDKDemuxFilter.dll
[ CDK  DEMUX ] Audio Demuxer is MP3
========================================================
[ CDK  DEMUX ]Start Time        : 1999-10-29 07:21:08

[ CDK  DEMUX ]Demux Type        : AUDIO(8)
[ CDK  DEMUX ]Video Width       : 0
[ CDK  DEMUX ]Video Height      : 0
[ CDK  DEMUX ]Video Frame Rate  : 0.00
[ CDK  DEMUX ]Video BitRate     : Unknown
[ CDK  DEMUX ]Extra Data Length : 0
[ CDK  DEMUX ]Seekable          : Seekable
[ CDK  DEMUX ]AspectRatio       : 4 x 3
--------------------------------------------------------
[ CDK  DEMUX ]Audio Track Num    : 1
 [0]Audio nFormatId   : MP3(0x55)
 [0]Avg Bytes Per Sec : 16000
 [0]Bits Per Sample   : 16
 [0]Block Align       : 0
 [0]nChannels         : 2
 [0]SamplePerSec      : 44100
 [0]nExtraDataLength  : 0
--------------------------------------------------------
[ CDK  DEMUX ]Total Subtitle Num   : 0
[ CDK  DEMUX ]Current Subtitle Num : 0
========================================================
[ CDK  AUDIO ][CCDKAudioDecFilter::CheckInputType,1180] AUDIO_ID_MP3 
--------------------------------------------------------
[ CDK  DEMUX ]Audio Stream ID                : Audio0
[ CDK  DEMUX ]Audio Ouptut Buffer Num        : 128
[ CDK  DEMUX ]Audio Ouptut 1 Buffer Size     : 32[Kbytes]
[ CDK  DEMUX ]Audio Ouptut Buffer total Size : 4[Mbytes]
--------------------------------------------------------
--------------------------------------------------------
[ CDK  AUDIO ]Audio Ouptut Buffer Num        : 16
[ CDK  AUDIO ]Audio Ouptut 1 Buffer Size     : 512[Kbytes]
[ CDK  AUDIO ]Audio Ouptut Buffer total Size : 8[Mbytes]
--------------------------------------------------------
--------------------------------------------------------
[ CDK  AUDIO ]Audio Ouptut Buffer Num        : 16
[ CDK  AUDIO ]Audio Ouptut 1 Buffer Size     : 512[Kbytes]
[ CDK  AUDIO ]Audio Ouptut Buffer total Size : 8[Mbytes]
--------------------------------------------------------

(5)

1 HRESULT hr = mpGraph->QueryInterface(IID_IMediaControl, (void **)&p_mc);
2    if (hr == S_OK)
3    {
4     hr = p_mc->Run();
5     mIsRunning = TRUE;
6     if (FAILED(hr))
7       printf("Fail : RunGraph(ret=0x%x)
", hr);    // Leo 失败后 mIsRunning 的值?
8     SAFE_RELEASE(p_mc);
9    }
[ CDK  DEMUX ]CDK Audio DMX Seek Time : 0
========================================================
[ CDK  DEMUX ]Seek Position : 0(00:00:00)
[ CDK  DEMUX ]Real Position : 0(00:00:00)
[ CDK  DEMUX ]Seek duration : 3[ms]
========================================================
 1 // +  +  +  +  +  +  + +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  
 2 // +  +  微软标准 DirectShow 播放音频
 3 IGraphBuilder *m_pGB;
 4 IMediaControl *m_pMC;
 5 IMediaEventEx *m_pME;
 6 IBasicAudio   *m_pBA;
 7 IMediaSeeking *m_pMS;
 8 
 9 // Initialize COM 
10 if(CoInitializeEx(NULL,COINIT_MULTITHREADED) != S_OK)
11 {
12   goto END;
13 }
14 
15 // Get the interface for DirectShow's GraphBuilder
16 if(CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void **)&m_pGB) != S_OK)
17 {
18   goto END;
19 }
20 
21 // Have the graph construct its the appropriate graph automatically
22 if(m_pGB->RenderFile(m_szFileName, NULL) != NOERROR)
23 {
24   goto END;
25 }
26 
27 // QueryInterface for DirectShow interfaces
28 if(m_pGB->QueryInterface(IID_IMediaControl, (void **)&m_pMC) != NOERROR)
29 {
30   goto END;
31 }
32 if(m_pGB->QueryInterface(IID_IMediaEventEx, (void **)&m_pME) != NOERROR)
33 {
34   goto END;
35 }
36 if(m_pGB->QueryInterface(IID_IMediaSeeking, (void **)&m_pMS) != NOERROR)
37 {
38   goto END;
39 }
40 
41 // Query for audio interfaces, which may not be relevant for video-only files
42 if(m_pGB->QueryInterface(IID_IBasicAudio, (void **)&m_pBA) != NOERROR)
43 {
44  goto END;
45 }
原文地址:https://www.cnblogs.com/91program/p/5205077.html