[linux-dvb] RFC 0.3: MPEG encoding and decoding V4L2/DVB API additions

Hans Verkuil hverkuil at xs4all.nl
Thu Feb 22 21:52:39 CET 2007


On Thursday 22 February 2007 18:58, Oliver Endriss wrote:
> Hi,
>
> see below for a some comments.
>
> Hans Verkuil wrote:
> > RFC MPEG encoding and decoding V4L2/DVB API additions
> > Version 0.3
> > ...
> > MPEG Decoding commands
> > ----------------------
> >
> > In this section I will examine how to implement the decoding
> > functionality of the conexant cx23415 in terms of the DVB API, and
> > what, if any, additions to that API are needed to support it fully.
> >
> > 1) Start/Stop/Pause/Resume decoding
> >
> > After discussing this with Ralph it became clear that it was best
> > to add two new ioctls (as designed in the first version of this
> > RFC) since the existing VIDEO_PLAY/STOP/FREEZE/CONTINUE did not
> > provide the required functionality. The existing ioctls can still
> > be used, but only do the simple action. For more refined control
> > (and better support for future extensions) new VIDEO_COMMAND and
> > VIDEO_TRY_COMMAND ioctls are added. This ensures that existing apps
> > won't break, but that the cx23415 is still fully supported. Also
> > future extensions are much easier.
> >
> > #define VIDEO_CMD_PLAY        (0)
> > #define VIDEO_CMD_STOP        (1)
> > #define VIDEO_CMD_FREEZE      (2)
> > #define VIDEO_CMD_CONTINUE    (3)
> >
> > /* Flags for VIDEO_CMD_CONTINUE */
> > #define VIDEO_CMD_PAUSE_TO_BLACK     (1 << 0)
> >
> > /* Flags for VIDEO_CMD_STOP */
> > #define VIDEO_CMD_STOP_TO_BLACK      (1 << 0)
> >
> > /* Flags for VIDEO_CMD_PLAY */
> > #define VIDEO_CMD_PLAY_SPEED_MUTE_AUDIO   (1 << 0)
>
> Hm - is this really necessary?
> The application could simply use AUDIO_SET_MUTE instead.

I considered doing that as well, but decided against that. The reason is 
that AUDIO_SET_MUTE is a global setting: it mutes the audio, whether 
during normal speed playback or fast forward playback. This particular 
mute flag is directly related to the fast forward playback and decides 
whether you allow sound when playing fast forward or not. The hardware 
may not even give you a choice on this.

For the cx23415 there actually is no AUDIO_SET_MUTE functionality. Audio 
is always on for normal speed playback, it is always off for other 
speeds, except for 1.5 speed up or slow down. For those speeds you can 
select whether you want sound or not. Hence the reason for putting it 
with the speed command.

> > ...
> > 5) Audio mode selection
> >
> > The cx23415 allows automatic selection of the audio mode (stereo,
> > left, right, mono or swapped channels) for both a normal stereo
> > capture and a bilingual capture.
> >
> > The AUDIO_CHANNEL_SELECT ioctl comes close. If the
> > audio_channel_select_t enum was extended with AUDIO_MONO and
> > AUDIO_STEREO_SWAPPED and a AUDIO_BILINGUAL_CHANNEL_SELECT ioctl was
> > added, then this would fully implement this feature.
>
> How is AUDIO_BILINGUAL_CHANNEL_SELECT supposed to work?
> The av7110 driver uses AUDIO_MONO_LEFT/AUDIO_MONO_RIGHT to select the
> channel.

The cx23415 support autodetect: when the mpeg stream audio mode switches 
to bilingual it will use the bilingual audio mode. For normal stereo 
mpeg it will use the normal audio mode setting. The application can 
just set it once and it will all work automagically. Hardware that 
doesn't support this feature would typically not support this ioctl.

It's really an important feature for the cx23415 as there is no other 
method of choosing the audio mode for bilingual streams. But if you 
prefer other means of implementing this I'm open for suggestions. I 
considered reusing AUDIO_CHANNEL_SELECT and using bitmasks to pass the 
bilingual mode setting, but I always found that rather ugly.

Regards,

	Hans



More information about the linux-dvb mailing list