YV12序列如何让directshow直接播放?

nodirection 2012-11-01 03:30:37
在不对YV12序列进行变换的前提下如何才能让VMR直接播放出正常的视频?

调试发现在Graph Run之后改变了之前连接时协商好的媒体类型(图像尺寸变了),导致最终播放出来的现象是条纹.

输出是YV12,开始协商的媒体类型是352x288,等Run之后,媒体类型就变成了:384x-288,图像就是条纹,如果是YUY2输出的话,就会变成:512x-288

各位大牛,怎么办啊。
...全文
384 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
rageliu 2012-11-23
  • 打赏
  • 举报
回复
就是一个格式动态变化的问题. 你在filter里响应它的新格式请求,按新格式排列就行了 或是直接向上游filter递交新格式请求,让它直接按新格式给你传数据,这样你都不用自己排列
nodirection 2012-11-13
  • 打赏
  • 举报
回复
非常感谢guyue6670大哥,他告诉我数据对齐的问题。 无意中发现了一个帖子,里面有一个对齐算法。一试竟然成功显示了。 代码: if(nWidth == nWidthRender) { memcpy(pOutData, pData, lOutLen); } else { for(int i = 0; i < nHeight; i++) { memcpy(pOutData, pData, nWidth); pData += nWidth; pOutData += nWidthRender; } for(int i = 0; i < (nHeight >> 1) * 2; i++) { memcpy(pOutData, pData, nWidth >> 1); pData += nWidth >> 1; pOutData += nWidthRender >> 1; } } 我是在我source filter里的fillbuffer里加这段代码 谢谢这个帖子:http://blog.csdn.net/xuxinhua/article/details/6858304
jjjweiren 2012-11-13
  • 打赏
  • 举报
回复
为了将结果告诉大家,只好用另一个号回复一下。
nodirection 2012-11-05
  • 打赏
  • 举报
回复
继续在线等。
nodirection 2012-11-05
  • 打赏
  • 举报
回复
我的代码,大牛帮我看看啊。我真的好急啊。 HRESULT CBallStream::GetMediaType(int iPosition, CMediaType *pmt) { CheckPointer(pmt,E_POINTER); CAutoLock cAutoLock(m_pFilter->pStateLock()); if(iPosition < 0) { return E_INVALIDARG; } // Have we run off the end of types? if(iPosition > 0) { return VFW_S_NO_MORE_ITEMS; } pmt->InitMediaType(); pmt->SetType(&MEDIATYPE_Video); pmt->SetSubtype(&MEDIASUBTYPE_YV12); pmt->SetFormatType(&FORMAT_VideoInfo2); //pmt-> SetType (&MEDIATYPE_Video); //pmt-> SetSubtype (&MEDIASUBTYPE_RGB24); //pmt-> SetFormatType(&FORMAT_VideoInfo); pmt->SetTemporalCompression(false); VIDEOINFOHEADER2 *pvi = (VIDEOINFOHEADER2 *)pmt->AllocFormatBuffer(sizeof(VIDEOINFOHEADER2)); ZeroMemory(pvi, sizeof(VIDEOINFOHEADER2)); pvi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); pvi->bmiHeader.biPlanes = 1; pvi->bmiHeader.biBitCount = 24; pvi->bmiHeader.biWidth = 704; pvi->bmiHeader.biHeight = 576; pvi->bmiHeader.biSizeImage = DIBSIZE(pvi->bmiHeader); pvi->bmiHeader.biCompression = MAKEFOURCC('Y','V','1','2'); pvi->AvgTimePerFrame = /*10000000 / 60;*/333667; pvi->dwInterlaceFlags = 0; //AMINTERLACE_IsInterlaced | AMINTERLACE_Field1First; // | AMINTERLACE_FieldPatBothIrregular | AMINTERLACE_DisplayModeBobOnly; pvi->dwCopyProtectFlags = AMCOPYPROTECT_RestrictDuplication; pvi->dwPictAspectRatioX = (DWORD)pvi->bmiHeader.biWidth; pvi->dwPictAspectRatioY = (DWORD)pvi->bmiHeader.biHeight; pmt->SetSampleSize(pvi->bmiHeader.biSizeImage); SetRect(&pvi->rcSource, 0, 0, 704, 576); SetRect(&pvi->rcTarget, 0, 0, 704, 576); return NOERROR; } // GetMediaType
nodirection 2012-11-02
  • 打赏
  • 举报
回复
谢谢,谢谢sure
帅惊联合国 2012-11-02
  • 打赏
  • 举报
回复
有心无力。。。 不过帮顶 !
nodirection 2012-11-02
  • 打赏
  • 举报
回复
自己顶一下。
nodirection 2012-11-02
  • 打赏
  • 举报
回复
难得的友情哦。呵呵
nodirection 2012-11-02
  • 打赏
  • 举报
回复
感谢顶我。
nanjun520 2012-11-02
  • 打赏
  • 举报
回复
汗 真心的不懂 顶一下
nodirection 2012-11-02
  • 打赏
  • 举报
回复
回帖都有分,谢谢。
mindsky 2012-11-02
  • 打赏
  • 举报
回复
不懂,但是路过帮顶!
nodirection 2012-11-01
  • 打赏
  • 举报
回复
好无助啊。

1,451

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计/Flash/Silverlight 开发 图象工具使用
社区管理员
  • 图象工具使用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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