【发布时间】:2018-12-26 08:42:41
【问题描述】:
我正在研究 gstreamer1.0-libav (1.6.3),试图从 gstreamer 0.10 移植基于 FPGA 的自定义 H264 视频加速。
数据平面 (YUV) 过去在 gstreamer 0.10 中由简单的 malloc 分配,因此我们只需将 AVFrame.data[i] 指针替换为指向视频加速核心中的内存的指针。在 gstreamer 1.12 中似乎要复杂得多。
对于初学者,我尝试将 YUV 平面从 AVFrame.data[i] 复制到单独的缓冲区 - 效果很好!由于我还没有看到获得 AVFrame.data[i] 大小的直接方法,并且我认识到 data[0]、data[1]、data[2] 似乎在一个连续的缓冲区中,所以我只是使用了(data[1] - data [0]) 分别表示 Y 平面的大小和 (data[2] - data[1]) 分别表示 U/V 平面的大小。这工作正常,期待一种情况:
- 输入 H264 流,分辨率为 800x600 或更高
- 相机被遮住了(夹克、手……)
这会导致使用如上所述确定的大小在 V 平面 (data[2]) 的 memcpy 中出现 SEGFAULT。在覆盖相机之前,流显示完全正常......所以由于某种原因,暗屏改变了平面尺寸?
我的最终目标是用我的自定义内存分配替换 gstreamer 分配的 data[i] 指针(用于进一步处理)......这些缓冲区的确切分配位置,我可以更改它们以及如何获得每个缓冲区的大小平面(数据[0],数据[1],数据[2])?
【问题讨论】:
标签: ffmpeg h.264 libavcodec libav gstreamer-1.0