2017-08-25 36 views
1

我使用示例抓取器过滤器从视频文件(mov,h264)中提取帧的原始数据。我使用BufferCB回调选项来接收数据。示例抓取器在数据中过滤奇怪的垃圾线

对于我来说,一切都很顺利,除了对于一些文件,我在文件中出现了一条奇怪的线(几乎穿过对角线)。我试图调试数据,并注意到在每一行中,数据中有2个零应该是255,并且它们逐列地改变它们的列位置。

以下是图像:

image

这里是它的原始数据第一个8×5像素:

enter image description here

这种情况与文件中的所有帧。这只是第一帧,因此它是完全白色的。

但是,Windows Media Player不显示此行。

任何想法是什么会导致这种情况,有没有办法解决它?

+2

什么是您的图像的分辨率?这可能是由于步长/间距,其中图像数据由于性能原因而被字节对齐,通常是4/8字节对齐。因此,如果你说8位RGB图像是一些奇数宽度,如178像素,那么做数学显示178 * 3 = 534,那么如果我们除以4 = 133.5,这意味着内存将有0.5 * 4字节= 2个字节的填充。 – EdChum

+0

你的观点击中了目标。我检查了这个问题的例子。它们的尺寸不能被4整除。实际的数据长度等于H×W×3 + 2×H。因此每行有2个字节的填充。我试图找到一种方法来做正确的数据处理。 – mbaros

+0

@EdChum,我试图通过巧妙的迭代消除这些额外的填充字节,但由于某种原因我失败了。我也需要反转数据,因为数据的第一个字节对应于图像的最后一行(顺便说一句,你知道为什么数据是颠倒过来的)。你知道什么才是解决这个问题的正确方法吗? – mbaros

回答

0

这不太可能是Sample Grabber错误,更可能是媒体类型的处理不正确,部分跨步对齐或忽略Sample Grabber连接上已更改的媒体类型/跨度。视觉效果对于预期和实际图像在某些属性中不同的问题类别是典型的。

首先要做的是在图形运行时检查引脚连接上的媒体类型。媒体类型可能与预期不同,也可能与运行图形时媒体类型不同。此外,媒体类型跟踪可让您计算出步幅并与代码中的比较。

请注意,RGB媒体类型通常具有与32位边界对齐的图像跨度。然后有时候过滤器更喜欢分配更大的缓冲区,尤其是。比视频的像素宽度更宽,出于性能原因,并在右侧填充视频。处理数据时应该处理这个问题。