Kết hợp mã phát âm thanh và nhật ký hệ thống TCC89

Quá trình phân tích và kiểm tra bộ lọc phát âm thanh trên nền tảng Telechips, đồng thời so sánh với quy trình phát âm thanh tiêu chuẩn qua Overlay trong WinCE. Dưới đây là các bước thực hiện và ghi nhận:

(1)

1 CheckCoCreateInstance(hr, CLSID_FilterGraph, IID_IGraphBuilder, (void **)&mpGraph, TEXT("CLSID_FilterGraph fail")); 
2   Hàm: BOOL CFilterControl::CheckCoCreateInstance(HRESULT &hr, REFCLSID rclsid, REFIID riid, LPVOID* ppv, LPCTSTR pszErrorMessage)
3   Mã gọi CoCreateInstance: hr = ::CoCreateInstance(rclsid, NULL, CLSCTX_INPROC_SERVER, riid, ppv);
Nạp module: quartz.dll
Nạp module: mmtimer.dll
Nạp module: 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");
Nạp module: TCCAudioOutputControlFilter.dll
Đường dẫn thực thi: TWS893x_200\Filters\TCCAudioOutputControlFilter\TCCAudioOutputControlFilter.cpp
 1 CFactoryTemplate g_Templates[] = 
 2   {
 3     {
 4       L"TCC Audio Output Control Filter",
 5       &CLSID_TCCAudioOutputControlFilter,
 6       CAudioOutputControlFilter::CreateInstance,      // Khởi tạo một thể hiện mới của lớp này
 7       NULL,
 8       &sudTCCAudioOutputControlFilter
 9     },
10   };

(3)

1 hr = CoCreateInstance((REFCLSID)CLSID_TCCDEQ, NULL, CLSCTX_INPROC, (REFIID)IID_IBaseFilter, (void **)&m_pDEQFilter);
2     // Thêm bộ lọc DEQ
3     if(SUCCEEDED(hr))
4       hr = mpGraph->AddFilter(m_pDEQFilter,L"TCC DEQ Filter");
Nạp module: TCCDEQFilter.dll

(4)

1 hr = mpGraph->RenderFile(FileName,NULL);
Nạp module: TCCCDKAudioDecFilter.dll
Nạp module: TCCCDKDemuxFilter.dll
[ CDK  DEMUX ] Audio Demuxer là MP3
========================================================
[ CDK  DEMUX ]Thời gian bắt đầu       : 1999-10-29 07:21:08

[ CDK  DEMUX ]Loại Demux           : AUDIO(8)
[ CDK  DEMUX ]Chiều rộng Video      : 0
[ CDK  DEMUX ]Chiều cao Video       : 0
[ CDK  DEMUX ]Tốc độ khung hình    : 0.00
[ CDK  DEMUX ]Tốc độ bit Video      : Không xác định
[ CDK  DEMUX ]Độ dài dữ liệu bổ sung : 0
[ CDK  DEMUX ]Có thể tìm kiếm        : Có thể tìm kiếm
[ CDK  DEMUX ]Tỷ lệ khung hình     : 4 x 3
--------------------------------------------------------
[ CDK  DEMUX ]Số lượng track âm thanh : 1
 [0]ID định dạng       : MP3(0x55)
 [0]Bytes trung bình/giây : 16000
 [0]Bit mỗi mẫu        : 16
 [0]Bộ căn chỉnh khối   : 0
 [0]Kênh               : 2
 [0]Mẫu mỗi giây        : 44100
 [0]Độ dài dữ liệu bổ sung : 0
--------------------------------------------------------
[ CDK  DEMUX ]Tổng số phụ đề       : 0
[ CDK  DEMUX ]Số phụ đề hiện tại    : 0
========================================================
[ CDK  AUDIO ][CCDKAudioDecFilter::CheckInputType,1180] AUDIO_ID_MP3 
--------------------------------------------------------
[ CDK  DEMUX ]ID luồng âm thanh       : Audio0
[ CDK  DEMUX ]Số lượng buffer đầu ra   : 128
[ CDK  DEMUX ]Kích thước buffer 1     : 32[Kbytes]
[ CDK  DEMUX ]Tổng kích thước buffer   : 4[Mbytes]
--------------------------------------------------------
--------------------------------------------------------
[ CDK  AUDIO ]Số lượng buffer đầu ra   : 16
[ CDK  AUDIO ]Kích thước buffer 1     : 512[Kbytes]
[ CDK  AUDIO ]Tổng kích thước buffer   : 8[Mbytes]
--------------------------------------------------------
--------------------------------------------------------
[ CDK  AUDIO ]Số lượng buffer đầu ra   : 16
[ CDK  AUDIO ]Kích thước buffer 1     : 512[Kbytes]
[ CDK  AUDIO ]Tổng kích thước buffer   : 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("Lỗi : RunGraph(ret=0x%x)\r\n", hr);    // Leo giá trị mIsRunning sau khi lỗi?
8     SAFE_RELEASE(p_mc);
9    }
[ CDK  DEMUX ]Thời gian tìm kiếm âm thanh: 0
========================================================
[ CDK  DEMUX ]Vị trí tìm kiếm : 0(00:00:00)
[ CDK  DEMUX ]Vị trí thực tế   : 0(00:00:00)
[ CDK  DEMUX ]Thời lượng tìm kiếm : 3[ms]
========================================================
 1 // +  +  +  +  +  +  + +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  
 2 // +  +  Phát âm thanh tiêu chuẩn DirectShow của Microsoft
 3 IGraphBuilder *m_pGB;
 4 IMediaControl *m_pMC;
 5 IMediaEventEx *m_pME;
 6 IBasicAudio   *m_pBA;
 7 IMediaSeeking *m_pMS;
 8 
 9 // Khởi tạo COM 
10 if(CoInitializeEx(NULL,COINIT_MULTITHREADED) != S_OK)
11 {
12   goto END;
13 }
14 
15 // Lấy giao diện cho GraphBuilder của DirectShow
16 if(CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void **)&m_pGB) != S_OK)
17 {
18   goto END;
19 }
20 
21 // Tự động xây dựng đồ thị phù hợp
22 if(m_pGB->RenderFile(m_szFileName, NULL) != NOERROR)
23 {
24   goto END;
25 }
26 
27 // Truy vấn giao diện cho các thành phần DirectShow
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 // Truy vấn giao diện âm thanh, có thể không áp dụng với file chỉ có video
42 if(m_pGB->QueryInterface(IID_IBasicAudio, (void **)&m_pBA) != NOERROR)
43 {
44  goto END;
45 }

Thẻ: DirectShow Telechips TCC89 AudioPlayback overlay

Đăng vào ngày 16 tháng 7 lúc 13:02