dug into some docs on the image sensor, and found the test patterns!
and two full resolution:
recall: ubuntu touch + updated ffmpeg.
settings for v4l2-ctl (test_pattern changed to 1 – 4)
v4l2-ctl -d /dev/video1 -l User Controls contrast (int) : min=0 max=255 step=1 default=0 value=0 flags=slider saturation (int) : min=0 max=255 step=1 default=64 value=64 flags=slider hue (int) : min=0 max=359 step=1 default=0 value=0 flags=slider white_balance_automatic (bool) : default=1 value=1 flags=update red_balance (int) : min=0 max=4095 step=1 default=0 value=0 flags=inactive, slider blue_balance (int) : min=0 max=4095 step=1 default=0 value=0 flags=inactive, slider exposure (int) : min=0 max=65535 step=1 default=0 value=16384 gain_automatic (bool) : default=1 value=1 flags=update gain (int) : min=0 max=1023 step=1 default=0 value=16 flags=inactive, volatile horizontal_flip (bool) : default=0 value=0 vertical_flip (bool) : default=0 value=0 power_line_frequency (menu) : min=0 max=3 default=1 value=1 Camera Controls auto_exposure (menu) : min=0 max=1 default=0 value=1 flags=update Image Processing Controls test_pattern (menu) : min=0 max=4 default=0 value=0
settings for the image capture
media-ctl -d /dev/media1 --set-v4l2 '"ov5640 2-003c":0[fmt:UYVY2X8/1280x720]' ffmpeg -f rawvideo -pixel_format yuv420p -s 1280x720 -f video4linux2 -i /dev/video1 -vframes 1 ~/Pictures/$(date +"%Y%m%dT%H%M%S").jpg
and larger image (full sensor resolution, I think) with different pixel format
fname=$(date +"%Y%m%dT%H%M%S") media-ctl -d /dev/media1 --set-v4l2 '"ov5640 2-003c":0[fmt:SBGGR8/2592x1944]' ffmpeg -hide_banner -f rawvideo -pixel_format bayer_bggr8 -s 2592x1944 -f video4linux2 -i /dev/video1 -vframes 1 ~/Pictures/$fname-bggr8-big.jpg
have noticed full sensor pictures need more light.
solution:
March 9 Update
updated to ubports build 246 and found the highest resolution no longer works; and the id of the sensor changed.
you can see this with the command
media-ctl -d /dev/media1 -p -v
Opening media device /dev/media1 Enumerating entities looking up device: 81:1 looking up device: 81:2 Found 2 entities Enumerating pads and links Media controller API version 5.5.0 Media device information ------------------------ driver sun6i-csi model Allwinner Video Capture Device serial bus info hw revision 0x0 driver version 5.5.0 Device topology - entity 1: sun6i-csi (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video1 pad0: Sink <- "ov5640 3-004c":0 [ENABLED,IMMUTABLE] - entity 5: ov5640 3-004c (1 pad, 1 link) type V4L2 subdev subtype Sensor flags 0 device node name /dev/v4l-subdev0 pad0: Source [fmt:UYVY2X8/1280x720] -> "sun6i-csi":0 [ENABLED,IMMUTABLE]
so a command to set resolution and image type is now:
media-ctl -d /dev/media1 --set-v4l2 '"ov5640 3-004c":0[fmt:UYVY2X8/1920x1080]'
The version changed also. Searching online I see a change in the driver code that was made to allow only the highest resolution at 15 frames per second.
I am just using command line media-ctl, v4l2-ctl and ffmpeg commands; which I assume do not set the frame rate?
If anyone knows how to set frame rate via cli, comment!
found it, add @1/5 to end of setting;
oddly initially did not seem to work, needed to send command with time first with lower resolution, THEN the higher resolution one.
media-ctl -d /dev/media1 --set-v4l2 '"ov5640 3-004c":0[fmt:SBGGR8/1280x960@1/15]' media-ctl -d /dev/media1 --set-v4l2 '"ov5640 3-004c":0[fmt:SBGGR8/2500x1600@1/15]'
Thanks for this. Very handy.
“oddly initially did not seem to work, needed to send command with time first with lower resolution, THEN the higher resolution one.” was surprising, but also causing me issues.