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

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

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

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

各位大牛,怎么办啊。
...全文
451 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
  • 打赏
  • 举报
回复
好无助啊。
内容概要:本文档为成都科洛威尔科技有限公司生产的MIL-1394B仿真板卡的API函数使用手册,详细介绍了该板卡在Windows和Linux环境下进行MIL-1394B/AS5643总线协议仿真和测试所需的API函数、数据结构、使用流程及例程。板卡支持CC(控制计算机)、RN(远程节点)和BM(总线监控)三种工作模式,提供丰富的函数用于设备管理、节点控制、消息收发、故障注入、中断处理等功能,并涵盖数据包格式、发送接收流程、错误检测机制等关键技术细节。手册还提供了函数调用示例和典型应用场景,帮助开发者快速掌握板卡的开发与调试。; 适合人群:从事航空电子、嵌入式系统或工业自动化领域,具备C/C++编程基础并熟悉总线通信协议的1-3年工作经验的软硬件研发工程师。; 使用场景及目标:①在复杂总线环境中实现高精度数据仿真与测试;②开发基于MIL-1394B协议的通信系统;③进行消息收发控制、时序偏移管理、错误注入测试及中断响应处理等高级功能验证;④通过API调用实现对板卡工作模式、数据流、状态监测的全面控制。; 阅读建议:建议结合配套的demo示例程序进行实践,重点理解各函数的调用时序与参数配置逻辑,尤其关注STOF时序控制、消息发送模式、错误注入机制等核心功能的实现原理。使用前需仔细阅读“基本使用流程”与“附录”部分,确保正确配置硬件环境与通信参数。

1,451

社区成员

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

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