Hi Takashi,
As I commented to you earlier today, we had some discussions related to ALSA and media (see topics 4 an 10 below).
It would be great if we could find some time during the rest of this week for an informal discussion for the interested parties.
What do you think?
Regards, Mauro
Forwarded message:
Date: Wed, 23 Oct 2013 21:17:17 +0000 From: Hans Verkuil hverkuil@xs4all.nl To: media-workshop@linuxtv.org Cc: Paul Walmsley paul@pwsan.com Subject: [media-workshop] Draft summary of v4l/dvb mini-summit
Hi all,
These are the draft notes from today's media mini-summit. These notes combine the etherpad notes with my own notes. I'm sure I've forgotten somethings, so just reply to add your improvements.
I've made those presentations that I have available here:
http://hverkuil.home.xs4all.nl/presentations/summit-2013/
Regards,
Hans
Notes on the Media summit 2013-10-23
List of Participants:
Ricardo Ribalda - Qtechnology Hans Verkuil - Cisco Sakari Ailus - Intel Mauro Carvalho Chehab - Samsung Kieran Kunhya - Open Broadcast Systems Sylwester Nawrocki - Samsung Guennadi Liakhovetski Benjamin Gaignard - ST Microelectronics Hugues Fruchet - ST Microelectronics Andrzej Hajda - Samsung Peter Senna Tschudin - Coccinelle? Hans de Goede - Red Hat Michael Krufky - Samsung Paul Walmsley - Nvidia Laurent Pinchart - Ideas on board
1. Mauro Chehab: is the submaintainer arrangement working?
General consensus is that it is working. Hans pointed that the commits ML is not working. Also patches for the rcX kernel aren't always picked up quickly enough. Mauro says this is due to his move to Samsung which took a lot of his time. This should improve.
2. Ricardo Ribalda Delgado: Multiple selections
For a more flexible cropping selection a new extended rectangle struct has to be added with possibly negative top and left offsets. This would allow to explore capabilities of industry grade sensors, that can be configured to crop multiple rectangles from the input area.
Sylwester: an alternative approach would be to use indexed windows. The issue of atomicity should also be addressed.
Ricardo is proposing to add the capability of adding more than one selection areas
- No objections so far. - Helper functions to detect if rectangles overlap or are contained on other rectangles - Documentation changes for V4L2 subdev selection API. Special care needs to be taken for too few or too many rectangles. In both cases the rectangles field should be set to the actual number of allowed rectangles. In the too few case an error should be returned, in the too many case the extra rects should just be ignored.
Mauro thinks that it will be useful to see if the width/height fields in v4l2_rect can be changes to u32 instead of s32: will require code review of drivers.
3. Hans Verkuil: colorspaces
- Colorspace: limited/full range
Draft presentation for all these topics: http://hverkuil.home.xs4all.nl/presentations/summit2013.odp
Proposal accepted, although the "_SRGB_LIM" name might need to be improved, although no alternatives were given.
ALso mention in the docs that S_FMT can overwrite the colorspace for output devices if the selected one isn't supported.
4. Kieran Kunhya: SDI
The biggest problem is separate audio and video file descriptors. Audio data is transfered in the video blanking areas, where should they be separated - in the kernel, using multiple planes, or in the user-space? One possibility is to consider this data as similar to an "uncompressed MPEG" datastream. It might be possible to use hardware-specific time-stamps to synchronise the data.
Separate ALSA and V4L2 nodes are inherently problematic since they do not keep the audio and video together. Another possibility is to offer two APIs: for professional applications, where data is perfectly synchronised, and separate audio and video for "human consumption."
A format for professional applications were VBI/HBI/Video is all captured in one big frame is OK (provided an open source lib is created to parse it).
The proposal for using a multiplanar API where the audio is in a separate plane ran into opposition: the alsa devs should be asked whether it is possible to return the audio data in such a way that it can be exactly associated with the corresponding video buffer. This also requires that the audio can be variable length since for NTSC the size of the audio data will alternate between frames. If this is possible, then the alsa API can be used and things can still remain in sync.
5. Paul Walmsley on behalf of Bryan Wu: LED / flash API integration
Currently functionality is accessible from two APIs: LED and flash. A proposal is presented to put V4L2 flash subdev on top of LED core. It would be better not to go via the LED trigger layer.
- One to one mapping between LED chips and V4L2 sub-devices. This probably means the LED flash driver needs to register the sub-device. - Two interfaces: should the sysfs interface be disabled if an application chose the flash mode on V4L2 API? The flash driver has no knowledge of streaming state or capturing frames. - Same requirements as for the LED API as the V4L2 flash API needs (LED flashes only). - Currently there's no V4L2 API to put a sensor into a flash mode to automatically trigger a flash pin. This would have to be handled. It is also possible, that a V4L2 application uses a sensor, but only puts it into a "flash mode" (single-shot mode) for several frames. The LED might therefore have to be made busy always when the sensor is used. Situations, where an LED is busy should already happen, e.g. if one application wants to use it for a torch and another one for notifications.
6. Mauro Chehab: DVB / V4L2 / MC integration
Problem: multiple subsystems might be using the MC API with or without connections between them. How to set such a topology up? Possibilities:
- global media controller device, not all entities have to be connectable - first user creates an MC device, any further users detect, that their MC device is already present and also begin using it - a separate driver creates an MC device instance, e.g. a driver for links between subsystems
7. Hans Verkuil: try_fmt compliance
Problem: VIDIOC_TRY_FMT shouldn't return -EINVAL when an unsupported pixelformat is provided, but in practice video capture board tend to do that, while webcam drivers tend to map it silently to a valid pixelformat. Some applications rely on the -EINVAL error code.
Resolution: fix applications, schedule driver change to comply with the spec and not return -EINVAL for an unsupported pixel format. New drivers should never return -EINVAL and should comply to the spec instead.
8. Hans Verkuil: V4L2 support libraries
- libv4l2util library does not offer a public API and has a funny name. To be renamed as libv4l2misc. - create a new libv4l2misc (a libv4l2util already exists) where all the various useful bits of functionality can be placed. Posted publicly to properly discuss the API. - Doxygen to be used to document the library API.
9. Hans Verkuil: Interaction between selection API, ENUM_FRAMESIZES and S_FMT
- E.g. UVC webcams have an interface to specify the image size. The camera achieves that using cropping and scaling, but the driver does not have information on which one. - sn9c102 to be moved to staging and removed in a few kernel cycles' time. - Hans to write a new proposal on the topic. Instead of adding new ioctls (G/S_FRAMESIZE) add a new selection target and try to avoid the use of flags (as introduced in the current proposal).
10. Laurent Pinchart: ALSA and Media controller
- ALSA folks thought of using Media controller for pipeline control but miss features - ALSA entities would need to be added and removed at runtime: DSP firmware decides what kind of entities exist
- E.g. equalisers could be created as needed
- ALSA already has APIs for that
- Detailed information which is sub-system specific
- ALSA: what kind of features the entity has
- Proposal: binary blob specific to entity that contains key: value pairs --- this could be used in V4L2 as well
11. Laurent Pinchart: sharing I2C sub-device drivers between V4L2 and KMS
- Dynamic assignment of devices between display and capture pipelines - The DT won't contain information on which driver should be used - Two separate drivers are an issue - Something similar to the V4L2 sub-device required on KMS. Without this feature sharing sub-devices will be hard if not impossible. - We need something similar for DVB/V4L tuners, but it's much easier to push that through since we have control of the media subsystem.
12. Sakari Ailus: Multi format streams / metadata
- metadata has to be separated from the image, but kept in sync with frames - some hardware is able to separate metadata automatically - Frame format descriptors to be extended - Set operation should be removed and replaced with a different solution on existing drivers
- Format index to be added to struct v4l2_mbus_framefmt - No conclusion reached on how other streams are captured in the user space, requires further discussion and time - Multiple video nodes or multiplexing by the type field? - The upper 16 bits in the type field could be used to index the buffer queue - No need to split the field; macros can be used to access different parts of it - Stealing bytes from struct v4l2_format may have issues: the struct is not packed, and at least the alignment would need to be verified on supported archs - Multiple buffer types are not supported by videobuf2 currently with the exception of memory-to-memory devices and capture/overlay - Changes could be required in videobuf2 - Events could be used to pass the metadata to the user space - Extended events required - Does not help with sensors that produce multiple images of the same frame - Causes two copies of the data: one to the event buffer, the other to the user space when the event is dequeued - Unwanted especially on embedded systems where copying costs: there's a measurable effect from e.g. copying 4 kiB 60 times per second from two sensors - DQBUF takes the buffer type as an argument, and the user would need to try different queues once select(2) returns
- Multi-format buffers are not an answer for metadata since metadata must be in the user space as fast as possible - Multi-format buffers could be implemented by extending v4l2_format - The name of the IOCTLs taking that as an argument will stay the same, as well as the IOCTL number - The old definition is still kept around for binary compatibility
- The UVC 1.5 might be a use case for multi format streams, too - The SDI has multiple streams, too, but could work on multi-format buffers - The user shouldn't have to choose whether to use multi-format buffers or multiple video nodes - Painful for drivers to handle, duplicate code in drivers - Drivers must only implement one
- Sakari to update the RFC to include all three topics
13: Hugues Fruchet: Video codecs
- Drivers that require proprietary user space components will stay out of mainline - Multi-format buffers could be useful here - The hardware/firmware needs a lot of data extracted from the bitstream next to the bitstream itself. This is a custom format, so it is OK to add a new pixelformat for each of those formats. The parsing should be done in userspace in libv4l2. - If very little parsing is required (MPEG), then that can be done in the kernel instead. - Recommendation is to start simple with e.g. just an MPEG implementation.
At Wed, 23 Oct 2013 23:31:46 +0100, Mauro Carvalho Chehab wrote:
- Kieran Kunhya: SDI
The biggest problem is separate audio and video file descriptors. Audio data is transfered in the video blanking areas, where should they be separated - in the kernel, using multiple planes, or in the user-space? One possibility is to consider this data as similar to an "uncompressed MPEG" datastream. It might be possible to use hardware-specific time-stamps to synchronise the data.
Separate ALSA and V4L2 nodes are inherently problematic since they do not keep the audio and video together. Another possibility is to offer two APIs: for professional applications, where data is perfectly synchronised, and separate audio and video for "human consumption."
A format for professional applications were VBI/HBI/Video is all captured in one big frame is OK (provided an open source lib is created to parse it).
The proposal for using a multiplanar API where the audio is in a separate plane ran into opposition: the alsa devs should be asked whether it is possible to return the audio data in such a way that it can be exactly associated with the corresponding video buffer. This also requires that the audio can be variable length since for NTSC the size of the audio data will alternate between frames. If this is possible, then the alsa API can be used and things can still remain in sync.
After talks with Mauro and Hans, I took a look back at ALSA code, and actually the recent API addition for "wallclock timestamp" may be of help for such a purpose.
In ALSA kernel driver side, each PCM can add SNDRV_PCM_INFO_HAS_WALL_CLOCK flag to runtime->hw.info. Then wall_clock() snd_pcm_ops will be invoked at each time the position is inquired so that the driver can give its hardware timestamp. The format is the standard timspec, thus the driver must convert to sec/nsec. Other than that, there is no restriction.
In the user-space side, the apps can check the capability via snd_pcm_hw_params_supports_audio_wallclock_ts(), and the timestamp can be obtained via snd_pcm_status_get_audio_htstamp(). (hi-res tstamp).
The addition of timestamp support for compress-offload API is still in discussion. The topic was just raised newly on audio mini summit
HTH,
Takashi