• 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 }
  • 相关阅读:
    GCD多线程使用
    高德地图引入库错误std::string::find_first_of(char const*, unsigned long, unsigned long) const"
    vim配置 高亮+自动缩进+行号+折叠+优化
    设置MAC 下 Vim 语法高亮显示
    The platform of the target `Pods` (iOS 4.3) is not compatible 错误
    使用GCD创建单例
    使用Draw rect 绘制圆角矩形
    使用第三方类、库需要注意的正则类RegexKitLite的使用
    NSDate 时区转换问题
    UISlider设置按钮透明
  • 原文地址:https://www.cnblogs.com/91program/p/5205077.html
Copyright © 2020-2023  润新知