当前位置: 代码迷 >> WinCE >> 在CE60下使用6410如何对H.263/H.264/MPEG-4文件进行解码?6410的硬件解码功能在AP里面如何去调用
  详细解决方案

在CE60下使用6410如何对H.263/H.264/MPEG-4文件进行解码?6410的硬件解码功能在AP里面如何去调用

热度:383   发布时间:2016-04-28 13:47:51.0
在CE60下使用6410怎么对H.263/H.264/MPEG-4文件进行解码?6410的硬件解码功能在AP里面怎么去调用?
在CE60下使用6410怎么对H.263/H.264/MPEG-4文件进行解码?6410的硬件解码功能在AP里面怎么去调用?

------解决方案--------------------
应该找三星的MFC的文档,或者参考三星BSP里面的sample code
------解决方案--------------------
三星写了一个directshow Filter,在代码在"SAMPLES\DSHOWFILTERS"中,然后注册到系统中(注册表文件在"FILES\mfc_filter.reg")就可以了,播放器如mediaplayer 通过directshow Filter调用MFC解码
------解决方案--------------------
不好意思LS是?
Directshow根据系统中注册的文件类型的FILTER去调用自动调用的,比如注册信息如下:
[HKEY_CLASSES_ROOT\.264]
@="videofile"
"Content Type"="video/h264"
[HKEY_CLASSES_ROOT\MIME\Database\Content Type\video/h264]
"Extension"=".264"
[HKEY_CLASSES_ROOT\Media Type\Extensions\.264]
"Source Filter"="{1A821B27-D2F4-4e22-9496-3C7D0F612EC2}"
当播放扩展名为.264的文件时系统会去调用{1A821B27-D2F4-4e22-9496-3C7D0F612EC2}过滤器
------解决方案--------------------
让directshow自动选择filter最简单应用程序通用性比较好,不过你需要自己写一个filter(三星提供了一个filter的例子,你可以参考),或是干脆直接使用MFC硬件解码(三星也提供了例程)。使用filter,应用程序几句话就可以实现视频播放了网上例子很多,以后硬件平台改动只需写filter就可以了,程序几乎不用改动。如不知道你有没有三星的例子,如果需要我发给你吧。
directshow自动选择filter
//-------------------------
#include "stdafx.h"
#include <dshow.h>
#pragma comment(lib, "Strmiids.lib")

int _tmain(int argc, _TCHAR* argv[])
{
IGraphBuilder *pGraph = NULL;
IMediaControl *pControl = NULL;
IMediaEvent *pEvent = NULL;

// 初始化COM 库
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
printf("ERROR - Could not initialize COM library");
return -1;
}
// 创建过滤器图表管理器对象
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph);
if (FAILED(hr))
{
printf("ERROR - Could not create the Filter Graph Manager.");
return -1;
}
// 获得控制和事件接口
hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
// 建立过滤器图表
hr = pGraph->RenderFile(_T("\\NandFlash\\ChangHong.avi"), NULL);
if (SUCCEEDED(hr))
{
// 播放
hr = pControl->Run();
if (SUCCEEDED(hr))
{
// 等待播放结束
long evCode;
pEvent->WaitForCompletion(INFINITE, &evCode);
}
}
pControl->Release();
pEvent->Release();
pGraph->Release();
CoUninitialize();
return 0;
}
//-------------------------
  相关解决方案