directshow用vmr9播放yuv数据流为什么只能输入640*480的?

美丽海洋 2011-09-13 05:47:07
我根据ball的例子写了一个过滤器,接受外部YUV的数据流,送入vender播放;进入的数据只能是640*480或是320*240的,(我用graphedt.exe测试成功),为什么会这样,
我输入720*576就显示不出来了,我用graphedt.exe测试也不成功,为什么?
希望大侠可以给解决一下,谢谢了。
...全文
181 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
美丽海洋 2011-09-18
  • 打赏
  • 举报
回复
开起来没有人理会我了
我用的是vmr播放yv12时有的机器可以有的机器不可以,不知道为什么?
i420依然的不可以。
美丽海洋 2011-09-14
  • 打赏
  • 举报
回复
pvi->bmiHeader.biWidth = 720;//m_iImageWidth;
pvi->bmiHeader.biHeight = 576;//m_iImageHeight;

这样就不对了,真的不知为什么?
美丽海洋 2011-09-14
  • 打赏
  • 举报
回复
从我上面贴出的代码可以看出来我已经重新设置pvi了,但是不知道为什么就是不能改变高和宽,我用RGB试了是可以改变高和宽的?不知道为什么?郁闷很长时间了?
ArcRain 2011-09-14
  • 打赏
  • 举报
回复
ball这个例子用的颜色空间是RGB的,而且它代码里的宽高是320x240固定的。
如果你的颜色空间是IYUV,那么
pvi->bmiHeader.biBitCount
pvi->bmiHeader.biSizeImage
都需要根据IYUV的特征来重新填。
可以参考下这里的说明:http://baike.baidu.com/view/708133.htm
美丽海洋 2011-09-13
  • 打赏
  • 举报
回复
我在VideoInfoHeader中已经设置了,设置如下代码:
VIDEOINFO *pvi = (VIDEOINFO *) pmt->AllocFormatBuffer(sizeof(VIDEOINFO));
if(NULL == pvi)
return(E_OUTOFMEMORY);

ZeroMemory(pvi, sizeof(VIDEOINFO));

SetRectEmpty(&(pvi->rcSource)); // we want the whole image area rendered.
SetRectEmpty(&(pvi->rcTarget)); // no particular destination rectangle

pvi->bmiHeader.biCompression = MAKEFOURCC('I','4','2','0');
pvi->bmiHeader.biBitCount = 16;
pvi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pvi->bmiHeader.biWidth = m_iImageWidth;
pvi->bmiHeader.biHeight = m_iImageHeight;
pvi->bmiHeader.biPlanes = 1;
pvi->AvgTimePerFrame = 40;
pvi->bmiHeader.biClrImportant = 0;
DWORD d = GetBitmapSize(&pvi->bmiHeader);
pvi->bmiHeader.biSizeImage = d;
ArcRain 2011-09-13
  • 打赏
  • 举报
回复
MediaType设置时相关的VideoInfoHeader设置的大小是多少?

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧