Open First
Shifting Media app development into high gear
Using virtual drivers to speed up development
Helen Koike helen.koike@collabora.com
Creative Commons Attribution-ShareAlike 4.0
Shifting Media app development into high gear Using virtual drivers - - PowerPoint PPT Presentation
Shifting Media app development into high gear Using virtual drivers to speed up development Helen Koike helen.koike@collabora.com Open First Creative Commons Attribution-ShareAlike 4.0 Summary Classic V4L2 API Vivid Driver Media
Open First
Helen Koike helen.koike@collabora.com
Creative Commons Attribution-ShareAlike 4.0
ELC 2018 2
ELC 2018 3
ELC 2018 4
ELC 2018 5
Sensor Sepia Greyscale Composer Scaler
ELC 2018 6
APP
space Kernel space Physical device Driver
ELC 2018 7
space Kernel space Physical device
Driver
Video stream Read/Write/MMAP APP
ELC 2018 8
space Kernel space Physical device Video stream General confgs * Img fmt * Bufers * Video std * Frame rate . . Standard Controls * Contrast * Brightness * Gamma . . . Custom Controls * DRV DEF 1 * DRV DEF 2 * DRV DEF 3 . . . Read/Write/MMAP IOCTLs
Driver
APP
ELC 2018 9
space Kernel space Physical device Driver APP
ELC 2018 10
space Kernel space Physical device Driver APP
ELC 2018 11
space Kernel space Physical device The Virtual Video T est Driver (VIVID) APP
ELC 2018 12
space Kernel space Physical device The Virtual Video T est Driver (VIVID) APP
ELC 2018 13
ELC 2018 14
ELC 2018 15
ELC 2018 16
Sensor Sepia Greyscale Composer Scaler contrast contrast
ELC 2018 17
space Kernel space Physical device Video stream General confgs * Img fmt * Bufers * Video std * Frame rate . . Standard Controls * Contrast * Brightness * Gamma . . . Custom Controls * DRV DEF 1 * DRV DEF 2 * DRV DEF 3 . . . Read/Write/MMAP IOCTLs
Driver
APP
ELC 2018 18
Sensor Sepia Greyscale Composer Scaler
ELC 2018 19
Sensor Sepia Greyscale Composer Scaler
ELC 2018 20
Sensor Sepia Greyscale Composer Scaler /dev/video0 /dev/v4l-subdev0 /dev/v4l-subdev1 /dev/v4l-subdev2
ELC 2018 21
/dev/video0 R/W/MMAP IOCTLs APP /dev/v4l- subdev0
IOCTLs APP
/dev/v4l- subdev1
IOCTLs APP
/dev/v4l- subdev2
IOCTLs APP
Sepia contrast Greyscale contrast Scaler
ELC 2018 22
/dev/v4l-subdev0 /dev/v4l-subdev14 /dev/video0 /dev/video42 /dev/v4l-subdev98 /dev/video2 /dev/v4l-subdev6 /dev/v4l-subdev21 /dev/v4l-subdev11 /dev/v4l-subdev31 APP ? ? ? ? ? ? ? ? ? ? ? ?
ELC 2018 23
Sensor Sepia Greyscale Composer Scaler /dev/video0 /dev/v4l-subdev0 /dev/v4l-subdev1 /dev/v4l-subdev2
ELC 2018 24
Sensor Sepia Greyscale Composer Scaler
/dev/video0 /dev/v4l-subdev0 /dev/v4l-subdev1 /dev/v4l-subdev2
ELC 2018 25
/dev/video0 R/W/MMAP IOCTLs APP /dev/v4l- subdev0
IOCTLs APP
/dev/v4l- subdev1
IOCTLs APP
/dev/v4l- subdev2
IOCTLs APP
Sepia contrast Greyscale contrast Scaler
/dev/media0
IOCTLs APP
ELC 2018 26
Sensor Sepia Greyscale Composer Scaler
/dev/video0 /dev/v4l-subdev0 /dev/v4l-subdev1 /dev/v4l-subdev2 /dev/media0
IOCTLs APP
ELC 2018 27
Sensor Sepia Greyscale Composer Scaler
/dev/video0 /dev/v4l-subdev0 /dev/v4l-subdev1 /dev/v4l-subdev2 /dev/media0
IOCTLs APP
ELC 2018 28
space Kernel space Physical device Driver APP
ELC 2018 29
space Kernel space Physical device Driver APP
ELC 2018 30
space Kernel space Physical device The Virtual Media Controller Driver (VIMC) APP
ELC 2018 31
space Kernel space Physical device The Virtual Media Controller Driver (VIMC) APP ?
ELC 2018 32
ELC 2018
User space Kernel space APP Developer create create
33
ELC 2018 34
Subdev1.ko Subdev2.ko SubdevN.ko Implementation of subdevice drivers are modularized and doesn’t need to alter Vimc’s core code.
ELC 2018 35
vimc-sensor.ko vimc-scaler.ko vimc-debayer.ko vimc-capture.ko ... custom-sd1.ko custom-sd2-ko custom-sd3.ko ... Standard Manufacturer
Emulate diferent topologies to test the app in several scenarios
ELC 2018 36
ELC 2018 37
– vimc-capture.ko – vimc-sensor.ko – vimc-debayer.ko – vimc-scaler.ko
ELC 2018 38
ELC 2018 39
ELC 2018 40
media-ctl -d /dev/media0 --print-dot > /tmp/out.dot && xdot /tmp/out.dot media-ctl -d /dev/media0 -V "'Sensor A':0[fmt:RGB888_1X24/600x600]" media-ctl -v -d /dev/media0 --links "'Debayer A':1->'Scaler':0 [0]"
yavta --format RGB24 --size 600x600 /dev/video0
ELC 2018 41
ELC 2018 42
ELC 2018 43
‘Debayer A’ vimc-debayer.ko
1
‘Sensor A’ vimc-sensor.ko ‘Raw Capture 0’ vimc-capture.ko
– Name – Submodule
– Source – Sink
ELC 2018 44
mkdir “MEDIA_NAME”
ELC 2018 45
‘Debayer A’ vimc-debayer.ko
1
‘Sensor A’ vimc-sensor.ko ‘Raw Capture 0’ vimc-capture.ko
mkdir “SUBMOD:NAME”
ELC 2018 46
‘Debayer A’ vimc-debayer.ko
1
‘Sensor A’ vimc-sensor.ko ‘Raw Capture 0’ vimc-capture.ko
mkdir “NAME1:PAD->NAME2:PAD”
ELC 2018 47
ELC 2018 48
Helen Koike helen.koike@collabora.com
This work is licensed under https://creativecommons.org/licenses/by-sa/4.0/