我正在编写一个 gstreamer 插件,可以就地修改缓冲区。我使用 GST_VIDEO_FRAME_WIDTH(frame) 和 GST_VIDEO_FRAME_HEIGHT(frame) 来获取缓冲区的宽度和高度。然而,这并不能反映屏幕上实际显示的内容。
带有裁剪的示例管道:
xinit /usr/local/usr/bin/gst-launch-1.0 videotestsrc ! videoconvert ! video/x-raw,format=BGRx,width=500,height=500 ! videocrop top=100 left=0 bottom=0 right=100 ! myplugin ! latencydetect debug=1 ! vaapisink sync=false
输出将为 400x400,但插件仍会看到 500x500 的缓冲区。
如何找到宽度、高度、xoffset 和 yoffset 以便我可以正确定位缓冲区中的像素?
我尝试检查盖子,它确实提供了正确的宽度和高度,但不包括偏移量。
videocrop
很可能不会更改缓冲区,但会向其中添加裁剪元数据。
有关元数据结构,请参阅 https://gstreamer.freedesktop.org/documentation/video/gstvideometa.html?gi-language=c#GstVideoCropMeta。
使用 https://gstreamer.freedesktop.org/documentation/video/gstvideometa.html#gst_buffer_get_video_crop_meta 从缓冲区获取此元数据。