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 }