解码YUV的filter
发布时间:2011-06-27 19:27:05 文章来源:www.iduyao.cn 采编人员:星星草
求助解码YUV的filter
最近在写一个解码yuv的transform filter,文件为.yuv格式,视频大小为320*240,内容为YYYY...Y共320*240个,UUUU..U共160*120个,VVVV...V共160*120.由于不想写SourceFilter,就用系统自带的一个叫做:File Source(Async.)的Source Filter,但是在GraphEdit中调试时,一连线就停止工作,debug时看到Source Filter传过来的视频格式为MEDIATYPE_NULL,和MEDIASUBTYPE_NULL,这样一步一步的调试也不知道哪出了问题,希望大家能帮我一下,谢谢!
下面是大概的源代码
#include <windows.h>
#include <streams.h>
#include <initguid.h>
#include <olectl.h>
#include <fstream>
#include "Decoder.h"
const AMOVIESETUP_MEDIATYPE sudPinTypes=
{
&MEDIATYPE_NULL,
&MEDIASUBTYPE_NULL
};
const AMOVIESETUP_MEDIATYPE outputpinType=
{
&MEDIATYPE_Video,
&MEDIASUBTYPE_NULL
};
const AMOVIESETUP_PIN sudPins[]=
{
{
L"Input", // Pins string name
FALSE, // Is it rendered
FALSE, // Is it an output
FALSE, // Are we allowed none
FALSE, // And allowed many
&CLSID_NULL, // Connects to filter
NULL, // Connects to pin
1, // Number of types
&sudPinTypes // Pin information
},
{
L"Output", // Pins string name
FALSE, // Is it rendered
TRUE, // Is it an output
FALSE, // Are we allowed none
FALSE, // And allowed many
&CLSID_NULL, // Connects to filter
NULL, // Connects to pin
1, // Number of types
&outputpinType // Pin information
}
};
const AMOVIESETUP_FILTER sudDecoder=
{
&CLSID_Decoder, // Filter CLSID
L"A test Decoder", // String name
MERIT_PREFERRED, // Filter merit
2, // Number of pins
sudPins // Pin information
};
CFactoryTemplate g_Templates[]=
{
{
L"A Test Decoder",
&CLSID_Decoder,
Decoder::CreateInstance,
NULL,
&sudDecoder
}
};
int g_cTemplates=sizeof(g_Templates)/sizeof(g_Templates[0]);
STDAPI DllRegisterServer()
{
return AMovieDllRegisterServer2(TRUE);
}
STDAPI DllUnregisterServer()
{
return AMovieDllRegisterServer2(FALSE);
}
extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);
//
// DllMain
//
BOOL APIENTRY DllMain(HANDLE hModule,DWORD dwReason,LPVOID lpReserved)
{
return DllEntryPoint((HINSTANCE)(hModule),dwReason,lpReserved);
}
//
// Debug
//
void Debuginfo(char *info)
{
FILE *pf;
fopen_s(&pf,"C:\\debug.txt","a+");
fprintf(pf,info);
fclose(pf);
}
Decoder::Decoder(TCHAR *tszName,LPUNKNOWN punk,HRESULT *phr):CTransformFilter(tszName, punk, CLSID_Decoder),fillnum(0),samplesize(115200),startTime(0)
{
buffers=(unsigned char *)malloc(1048576);//1048576:pow(2,20)
if(!buffers)
exit(-1);
}
Decoder::~Decoder()
{
free(buffers);
}
//
// CreateInstance
//
CUnknown *Decoder::CreateInstance(LPUNKNOWN punk, HRESULT *phr)
{
ASSERT(phr);
Debuginfo("now create an intance\n");
Decoder *pNewObject=new Decoder(NAME("A Test Decoder"), punk, phr);
if (pNewObject == NULL)
{
if (phr)
*phr = E_OUTOFMEMORY;
}
return pNewObject;
}
STDMETHODIMP Decoder::NonDelegatingQueryInterface(REFIID riid, void **ppv)
{
CheckPointer(ppv,E_POINTER);
return CTransformFilter::NonDelegatingQueryInterface(riid, ppv);
}
//
// Transform
//
HRESULT Decoder::Transform(IMediaSample *pIn, IMediaSample *pOut)
{
Debuginfo("in Transform\n");
CheckPointer(pIn,E_POINTER);
CheckPointer(pOut,E_POINTER);
Debuginfo("in Transform\n");
BYTE *pSourceBuffer,*pDestBuffer;
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
DSHOW push
推模式,ConnectDirect 的,为什么我一直反回错误
下级级用的是HAALI的一个东西,用CMemStream拉模式的时候是可以连接的
...
-
ffmpeg编码后视频速度不正确,质量也不好,求助,求助,求助,求助啊
对采集到得摄像头图像进行编码保存,发现得到的视频质量不好,而且速度不...
-
请问怎么在live555中接收jpeg
请问,我现在想接收一个服务器发送的jpeg 不知道怎么用live555做一个客户端, 接收它并显示。
请问应...
-
XP SP3 YUV420 的fiter依赖 在线等答案……
链接时媒体类型为WMMEDIASUBTYPE_I420
有的XP可以播放出来
有的就不行,请问不能播放...
-
如何获取通过麦克风来获取当前说话的音量?
使用Wave系统API采集音频输入的数据,当数据缓存区满了后,收到消息取得数据后,如何根据这里...
-
RFC3984 有没有完整的中文版本呢?
搜了几个 都是一半英文一半中文的。哎 郁闷!
------解决方案--------------------
英文的凑合...
-
介绍一个学习directshow和com、atl技术的网站
有一个学习directshow和com、atl技术的网站,还可以下视频教程,共享给大家: http://www...
-
攻击帖:jrtplib、live555是个垃圾,刚开始搞流媒体就用这玩意就是找s
不解释~
来丢我砖头吧~~
我分太多了用不完~ 支持的散分~~~
...
-
50分,寻找《Visual C++音频/视频处理技术及工程实践》的随书光盘?
急于使用其中的几个例程。若哪位好心人能够提供,非常感谢!!我的QQ:52...
-
h264的高宽比怎么获取?
我看标准里面只有样点的高宽比啊。
还有,bit rate可以读出来吗?
------解决方案--------------------
是要...