media controller
TRANSCRIPT
![Page 1: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/1.jpg)
2010-06-14 1Media controller - V4L2 Helsinki Summit
Media controllerGoals, architecture and roadmap
V4L2 Helsinki Summit 2010-06-14
Laurent [email protected]
![Page 2: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/2.jpg)
2010-06-14 2Media controller - V4L2 Helsinki Summit
Embedded camera
Userspaceapplication
Sensordriver
/dev/videoX
Embedded SoC camera● soc_camera● v4l2_device● v4l2_subdev
Userspace library● Format conversion● Post-processing
Hardware
Bridgedriver
![Page 3: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/3.jpg)
2010-06-14 3Media controller - V4L2 Helsinki Summit
V4L2 subdevice
● In-kernel functional abstraction layer developed by Hans Verkuil
● Designed for on-board external devices (sensors, tuners, audio codecs, …)
● Reusability, Reusability, Reusability
MT9M001sensor
EM28xxUSB
SAA7114decoder
EM28xxUSB
MT9M001sensor
PXA270SoC
SAA7114decoder
ZoranPCI
![Page 4: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/4.jpg)
2010-06-14 4Media controller - V4L2 Helsinki Summit
V4L2 subdevice operations
struct v4l2_subdev_ops { const struct v4l2_subdev_core_ops *core; const struct v4l2_subdev_tuner_ops *tuner; const struct v4l2_subdev_audio_ops *audio; const struct v4l2_subdev_video_ops *video; const struct v4l2_subdev_ir_ops *ir; const struct v4l2_subdev_sensor_ops *sensor;};
● Hardware independent● Bus type independent
![Page 5: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/5.jpg)
2010-06-14 5Media controller - V4L2 Helsinki Summit
i2c_get_client_data
v4l2_device_register_subdev
i2c_new_device
V4L2 subdevice registration
V4L2 device V4L2 subdevice
Register hardware device device_driver::probe called
device_driver::probe called
Subdevice initialization
Retrieve subdevice pointer
Subdevice setupv4l2_subdev_call(core::s_config)
Register subdevice
v4l2_i2c_new_subdev_board
![Page 6: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/6.jpg)
2010-06-14 6Media controller - V4L2 Helsinki Summit
SoC Camera
Host bridge Sensor
Master clock
Pixel clock
Horizontal sync
Vertical sync
Field
Data[7:0]
Host bridge Sensor
C+
C-
D+
D-
I2C
I2C
Pa
ralle
l in
terf
ace
Ser
ial i
nte
rfac
e (C
SI)
Master clock
![Page 7: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/7.jpg)
2010-06-14 7Media controller - V4L2 Helsinki Summit
V4L2 subdevice usage
V4L2 device V4L2 subdevice
v4l2_subdev_call(video::s_fmt) Configure the sensor scaler
V4L2 call (VIDIOC_S_FMT)
return
Success ?
Configure thebridge scaler
Failure ?
● How do we decide where to perform scaling ?– On the sensor side for higher frame rates ?
– On the host side for better quality ?
![Page 8: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/8.jpg)
2010-06-14 8Media controller - V4L2 Helsinki Summit
Lensdriver
Frontsensordriver
Embedded mess
Userspaceapplication
Backsensordriver
/dev/videoX
Highly complex devices● Multiple inputs● Multiple streams● Configurable pipeline
Hardware
Flashdriver
ISPdriver
Cameradriver
![Page 9: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/9.jpg)
2010-06-14 9Media controller - V4L2 Helsinki Summit
OMAP3430 ISPDrawing is © Texas Instrument
OMAP3430 ISP● Reconfigurable pipeline● Parallel processing● Memory-to-memory
paths● Fine-grain parameters
How do we handle the zillion configuration options through a single video device ?
![Page 10: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/10.jpg)
2010-06-14 10Media controller - V4L2 Helsinki Summit
Frontsensordriver
Media controller – What and why
Userspaceapplication
/dev/mediaX
What ?● Just a device. Similar
to v4l2_device, but more abstract.
Why ?● To let userspace
applications have fine grain control over all the media device parameters.
Hardware
Lensdriver
Backsensordriver
Flashdriver
ISPdriver
Media kerneldriver
![Page 11: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/11.jpg)
2010-06-14 11Media controller - V4L2 Helsinki Summit
Media controller - How
How ?● Expose the media device topology to userspace
as a graph of building blocks called entities connected through pads.
● Activate/deactivate links from userspace.● Give access to entities internal parameters
through read/write/ioctl calls.● Configure image streaming parameters at each
pad.
![Page 12: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/12.jpg)
2010-06-14 12Media controller - V4L2 Helsinki Summit
Media entity
Mediaentity
struct media_entity{ u32 id; const char *name; u32 type; u32 subtype; ...};
● media_entity::type
– MEDIA_ENTITY_TYPE_NODE
– MEDIA_ENTITY_TYPE_SUBDEV
![Page 13: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/13.jpg)
2010-06-14 13Media controller - V4L2 Helsinki Summit
Media entity - Pads
Mediaentity
0
1
2
struct media_entity{ ... u8 num_pads; struct media_entity_pad *pads; ...};
struct media_entity_pad{ u32 type; u32 index;};
● media_entity_pad::type
– MEDIA_PAD_TYPE_INPUT
– MEDIA_PAD_TYPE_OUTPUT
![Page 14: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/14.jpg)
2010-06-14 14Media controller - V4L2 Helsinki Summit
Media entity - Links
Mediaentity
0
1
2
● media_entity_link::flags
– MEDIA_LINK_FLAG_ACTIVE
– MEDIA_LINK_FLAG_IMMUTABLE
struct media_entity{ ... u32 num_links; struct media_entity_link *links; ...};
struct media_entity_link{ struct media_entity_pad *source; struct media_entity_pad *sink; u32 flags;};
Mediaentity
0
![Page 15: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/15.jpg)
2010-06-14 15Media controller - V4L2 Helsinki Summit
Media entity registration
media_entity_create_link
media_device_register_entity
media_entity_init
Media entity
Initialize entity
Create links
Register entity
Mediaentity
0
1
2
Mediaentity
0
1
2Mediaentity
0
![Page 16: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/16.jpg)
2010-06-14 16Media controller - V4L2 Helsinki Summit
Media controller – Userspace API
Openmedia device
int fd;
fd = open(“/dev/media0”, O_RDWR);
![Page 17: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/17.jpg)
2010-06-14 17Media controller - V4L2 Helsinki Summit
Media controller – Userspace API
Openmedia device
Enumerateentities, pads
and links
int fd;
fd = open(“/dev/media0”, O_RDWR);
while (1) { struct media_user_entity entity; struct media_user_links links;
ret = ioctl(fd, MEDIA_IOC_ENUM_ENTITIES, &entity); if (ret < 0) break;
while (1) { ret = ioctl(fd, MEDIA_IOC_ENUM_LINKS, &links); if (ret < 0) break; }}
![Page 18: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/18.jpg)
2010-06-14 18Media controller - V4L2 Helsinki Summit
Logitech Portable Webcam C905
![Page 19: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/19.jpg)
2010-06-14 19Media controller - V4L2 Helsinki Summit
Nokia N900
![Page 20: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/20.jpg)
2010-06-14 20Media controller - V4L2 Helsinki Summit
Media controller – Userspace API
Openmedia device
Enumerateentities, pads
and links
Setup links
struct media_user_link link;
link.source.entity = OMAP3_ISP_ENTITY_CCDC;link.source.index = 2;link.sink.entity = OMAP3_ISP_ENTITY_PREVIEW;link.sink.index = 0;link.flags = 0;
ioctl(fd, MEDIA_IOC_SETUP_LINK, &link);
link.source.entity = OMAP3_ISP_ENTITY_CCDC;link.source.index = 1;link.sink.entity = OMAP3_ISP_ENTITY_CCDC_OUT;link.sink.index = 0;link.flags = MEDIA_LINK_FLAG_ACTIVE;
ioctl(fd, MEDIA_IOC_SETUP_LINK, &link);
![Page 21: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/21.jpg)
2010-06-14 21Media controller - V4L2 Helsinki Summit
OMAP3430 ISP - Controls
ISPCCDC
0
1
2
ISPPreviewEngine
0 1ISP
Resizer0 1
ET8EK8Sensor
0
● White balance ● White balance
● Faulty pixels correction
The S_CTRL API is not up to the job.
● Faulty pixels correction
![Page 22: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/22.jpg)
2010-06-14 22Media controller - V4L2 Helsinki Summit
OMAP3430 ISP - Resizing
ISPCCDC
0
1
2
ISPPreviewEngine
0 1ISP
Resizer0 1
ET8EK8Sensor
0
● Binning ● Horizontal averaging
● Polyphase filter
![Page 23: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/23.jpg)
2010-06-14 23Media controller - V4L2 Helsinki Summit
OMAP3430 ISP – High quality
ISPCCDC
0
1
2
ISPPreviewEngine
0 1ISP
Resizer0 1
ET8EK8Sensor
0
S_FMT(2592,1968)
S_CROP(2592,1968)
S_FMT(2592,1968)
S_CROP(2592, 1968)
S_FMT(2592,1968)
S_FMT(2592, 1968)
S_FMT(1280,720)
S_CROP(2592, 1968)
![Page 24: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/24.jpg)
2010-06-14 24Media controller - V4L2 Helsinki Summit
OMAP3430 ISP – High speed
ISPCCDC
0
1
2
ISPPreviewEngine
0 1ISP
Resizer0 1
ET8EK8Sensor
0
S_FMT(1296, 984)
S_CROP(2592,1968)
S_FMT(1296, 984)
S_CROP(1296, 984)
S_FMT(1296, 984)
S_FMT(1296, 984)
S_FMT(1280,720)
S_CROP(1296, 984)
The S_FMT/S_CROP API is not up to the job.
![Page 25: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/25.jpg)
2010-06-14 25Media controller - V4L2 Helsinki Summit
Lensdriver
Frontsensordriver
V4L2 subdev userspace API
Userspaceapplication
Backsensordriver
/dev/subdevX
Hardware
Flashdriver
ISP CCDCdriver
/dev/subdevY /dev/subdevZ
ISPPreviewdriver
![Page 26: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/26.jpg)
2010-06-14 26Media controller - V4L2 Helsinki Summit
V4L2 subdevice pad operations
struct v4l2_subdev_pad_ops {
...
int (*get_fmt)(struct v4l2_subdev *sd, unsigned int pad,
struct v4l2_format *fmt,
enum v4l2_subdev_format which);
int (*set_fmt)(struct v4l2_subdev *sd, unsigned int pad,
struct v4l2_format *fmt,
enum v4l2_subdev_format which);
....
};
struct v4l2_subdev_ops {
...
const struct v4l2_subdev_pad_ops *pad;
};
![Page 27: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/27.jpg)
2010-06-14 27Media controller - V4L2 Helsinki Summit
V4L2 plain API
Is this V4L3 ?● No, V4L2 is still alive and well● Best effort to provide V4L2-only compatibility for
existing applications (API and ABI)● Advanced features will require Media Controller
OMAP3430 ISP● Default pipeline through /dev/video0 ?● Limited set of resolutions, limited set of controls
![Page 28: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/28.jpg)
2010-06-14 28Media controller - V4L2 Helsinki Summit
Image quality
Host-side software algorithm
VIDIOC_S_CTRL
V4L2 events API
Retrieve statistics
Compute parameters
Set parameters
ISPH3A
ISPAF
00
ISPCCDC
0
1 2
ISPCCDC0
1
2
ISPPreviewEngine
0 1ET8EK8Sensor 0
![Page 29: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/29.jpg)
2010-06-14 29Media controller - V4L2 Helsinki Summit
Backsensordriver
ISPdriver
libv4l
Userspaceapplication
● Image enhancement algorithms
● Hardware-specific acceleration
● Transparent for applications
Hardware
Media kerneldriver
libv4lOMAP3 plugin
![Page 30: Media controller](https://reader031.vdocuments.mx/reader031/viewer/2022012021/6169b6ea11a7b741a34a8d2e/html5/thumbnails/30.jpg)
2010-06-14 30Media controller - V4L2 Helsinki Summit
Source code
● http://gitorious.org/omap3camera● http://git.ideasonboard.org/?p=media-ctl.git