Setting overlay parameters on v4l2sink fails
Andreas Naumann
dev at andin.de
Fri Jan 22 05:12:56 PST 2016
Hi,
i observed positioning of video overlays using the v4l2sink parameters
like 'overlay-left' doesnt work. Digging a little I found out the
VIDIOC_G_FMT/VIDIOC_S_FMT ioctl's dont reach the overlay-driver due to
being filtered in the kernels v4l2 ioctl dispatcher functions because my
driver is not a VFL_DIR_RX but TX type.
After reading the Linux for Video API docu, it seems that the S/G_FMT
function are indeed intended for the Capture/Rx part of the Video
Overlay Interface. Somehow I cant image such a device but anyway, the
code that checks for RX is in place since 2012.
Now, the gstreamer v4l2sink does need a TX device doesnt it? So with
current kernels, the video-overlay ioctls cant ever work, or what am I
missing?
Digging further I came across another type, that is
V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY. This is per API doc intended for
output and shares the data structures for S/G_FMT ioctls with
V4L2_BUF_TYPE_VIDEO_OVERLAY. So I tried telling my driver that he
supports such an interface and redirected the existing s/g_fmt function
pointers (as I saw in some other implementation, I think omap).
On v4l2sink side its a oneliner to change to using that interface (
gst_v4l2sink_sync_overlay_fields()).
Voila, the positioning works!
Now, is this the way to go or what do the experts think?
cheers,
Andreas
More information about the gstreamer-devel
mailing list