Skip to contentSkip to conversation

How to tell libv4l2 which src_fmt should be prefered?

DISCUSSION Andreas Weber 2 participants 2 messages Jan 18, 2014 Media (V4L/DVB)

lore
Share & tools
lore
#0 lore raw

Dear maintainer and user,

Is there a way to tell libv4l2 which native source format it should prefer to convert from? For example my uvcvideo webcam supports natively YUYV and MJPG (see output below) and when I request V4L2_PIX_FMT_RGB24 I see in the logs:

...
VIDIOC_S_FMT app requesting: RGB3
VIDIOC_S_FMT converting from: YUYV
request == VIDIOC_S_FMT
pixelformat: RGB3 640x480
field: 1 bytesperline: 1920 imagesize921600
colorspace: 8, priv: 0
...

So it picks up YUYV as source format. I had a look at v4lconvert_try_format but can see no way how to do this.

Regards, Andy

$ v4l2-ctl --list-formats
ioctl: VIDIOC_ENUM_FMT
	Index       : 0
	Type        : Video Capture
	Pixel Format: 'YUYV'
	Name        : YUV 4:2:2 (YUYV)

Index : 1
Type : Video Capture
Pixel Format: 'MJPG' (compressed)
Name : MJPEG

$ v4l2-ctl -w -D
Driver Info (using libv4l2):
	Driver name   : uvcvideo
	Card type     : UVC Camera (046d:0825)
	Bus info      : usb-0000:00:16.2-2
	Driver version: 3.2.51
	Capabilities  : 0x05000001
		Video Capture
		Read/Write
		Streaming
#1 lore raw

Hi,

Quoted 7 lines · Andreas Weber

Is there a way to tell libv4l2 which native source format it should prefer to convert from? For example my uvcvideo webcam supports natively YUYV and MJPG (see output below)
...

So it picks up YUYV as source format. I had a look at v4lconvert_try_format but can see no way how to do this.

If I understand the source correctly the table at [1] is the brain of the conversion. MJPEG has a rank of 7, YUYV has a rank of 5. So YUYV is chosen. The function that picks the conversion path is at [2].

Currently there is no way to influence the decision. Why do you want to do this?

Thanks,
Gregor

[1] http://git.linuxtv.org/v4l-utils.git/blob/HEAD:/lib/libv4lconvert/libv4lconvert.c#l75
[2] http://git.linuxtv.org/v4l-utils.git/blob/HEAD:/lib/libv4lconvert/libv4lconvert.c#l379