自己写的编码DMO,在InternalProcessInput()函数中,pBuffer->GetBufferAndLength()得到的buffer长度为什么是0?

紫去秋来 2008-09-24 10:22:19

我正在用 DShow 写一个转码程序,思路是先 Render 一个媒体文件,然后用自己写的两个 DMO 替换 Filter 链路的最后一级 Video Render Filter 和 Audio Render Filter,然后将 DMO 的输出 Pin 连上一个 Dump Filter (Write File),现在碰到的问题是: 在 Video Encode DMO 中的 InternalProcessInput 函数中取上一级 Filter 传入的数据,调用 pBuffer->GetBufferAndLength(&m_pData, &m_nData) 取得的 Buffer 长度竟然是 0,而在 Audio Encode DMO 中调用 IMediaBuffer 的 相同函数:GetBufferAndLength() 得到的长度是对的。

为什么 Video Encode DMO 中得到的上级 Filter 传来的数据长度是 0? 有没有人知道?高分求教。

补充一点:因为只做转码,所以 Filter Graph 已经设为不使用参考时钟。

...全文
72 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
UDX协议 2008-09-24
  • 打赏
  • 举报
回复
写filter和dmo原理基本上差不多。

写filter相对简单而且有很多参靠。
紫去秋来 2008-09-24
  • 打赏
  • 举报
回复

这么快就有人回复,谢谢 wwwllg,我还在找原因,实在没办法只能重写一个 Video Encode Filter 不用DMO了。
UDX协议 2008-09-24
  • 打赏
  • 举报
回复
我已经明白你的意思了。我想从你的思路上来说,应该是正确的,你相当于接管了render自己做再次转码。

我初步估计 你的video部分完全照搬了audio部分,可能哪里变量处理上没有处理好。从原理上应该不存在你现有的问题 。
紫去秋来 2008-09-24
  • 打赏
  • 举报
回复

问题找到原因了:和我用的媒体文件有关,这种情况只在使用 MOV 文件做源文件时出现,使用 mpg wmv 等文件都不会出现这个问题,这可能是因为 MOV 文件的解码 Filter 有特殊的需求或设置。

谢谢 wwwllg 参与讨论,分数相送。
紫去秋来 2008-09-24
  • 打赏
  • 举报
回复

郁闷啊。
紫去秋来 2008-09-24
  • 打赏
  • 举报
回复

不要 audio,只使用 video 连接,输出的每个 video buffer 的长度就是正常的。

我已经写了一个 Filter 代替原来的 Video Encoder DMO,问题还是存在,和使用 DMO 一样:得到的上级 Filter 传来的数据长度是 0。
UDX协议 2008-09-24
  • 打赏
  • 举报
回复
你先不要audio试一下。
紫去秋来 2008-09-24
  • 打赏
  • 举报
回复

我试过保持 Filter Graph 使用参考时钟,结果还是一样。

2,543

社区成员

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

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