RE: Codec controls question

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



 -----Original Message-----
> From: Hans Verkuil [mailto:hverkuil@xxxxxxxxx]
> Sent: 18 May 2011 17:23
> To: Kamil Debski
> Cc: 'Laurent Pinchart'; linux-media@xxxxxxxxxxxxxxx; hansverk@xxxxxxxxx;
> Marek Szyprowski
> Subject: RE: Codec controls question
> 
> >> From: Laurent Pinchart [mailto:laurent.pinchart@xxxxxxxxxxxxxxxx]
> >> Sent: 18 May 2011 16:10
> >> Subject: Re: Codec controls question
> >>
> >> On Tuesday 17 May 2011 18:23:19 Kamil Debski wrote:
> >> > Hi,
> >
> > Hi,
> >
> >> >
> >> > Some time ago we were discussing the set of controls that should be
> >> > implemented for codec support.
> >> >
> >> > I remember that the result of this discussion was that the controls
> >> should
> >> > be as "integrated" as possible. This included the V4L2_CID_MPEG_LEVEL
> >> and
> >> > all controls related to the quantization parameter.
> >> > The problem with such approach is that the levels are different for
> >> MPEG4,
> >> > H264 and H263. Same for quantization parameter - it ranges from 1 to
> >> 31
> >> > for MPEG4/H263 and from 0 to 51 for H264.
> >> >
> >> > Having single controls for the more than one codec seemed as a good
> >> > solution. Unfortunately I don't see a good option to implement it,
> >> > especially with the control framework. My idea was to have the min/max
> >> > values for QP set in the S_FMT call on the CAPTURE. For MPEG_LEVEL it
> >> > would be checked in the S_CTRL callback and if it did not fit the
> >> chosen
> >> > format it failed.
> >> >
> >> > So I see three solutions to this problem and I wanted to ask about
> >> your
> >> > opinion.
> >> >
> >> > 1) Have a separate controls whenever the range or valid value range
> >> > differs.
> >> >
> >> > This is the simplest and in my opinion the best solution I can think
> >> of.
> >> > This way we'll have different set of controls if the valid values are
> >> > different (e.g. V4L2_CID_MPEG_MPEG4_LEVEL, V4L2_CID_MPEG_H264_LEVEL).
> >> > User can set the controls at any time. The only con of this approach
> >> is
> >> > having more controls.
> >> >
> >> > 2) Permit the user to set the control only after running S_FMT on the
> >> > CAPTURE. This approach would enable us to keep less controls, but
> >> would
> >> > require to set the min/max values for controls in the S_FMT. This
> >> could be
> >> > done by adding controls in S_FMT or by manipulating their range and
> >> > disabling unused controls. In case of MPEG_LEVEL it would require
> >> s_ctrl
> >> > callback to check whether the requested level is valid for the chosen
> >> > codec.
> >> >
> >> > This would be somehow against the spec, but if we allow the "codec
> >> > interface" to have some differences this would be ok.
> >> >
> >> > 3) Let the user set the controls whenever and check them during the
> >> > STREAMON call.
> >> >
> >> > The controls could be set anytime, and the control range supplied to
> >> the
> >> > control framework would cover values possible for all supported
> >> codecs.
> >> >
> >> > This approach is more difficult than first approach. It is worse in
> >> case
> >> of
> >> > user space than the second approach - the user is unaware of any
> >> mistakes
> >> > until the STREAMON call. The argument for this approach is the
> >> possibility
> >> > to have a few controls less.
> >> >
> >> > So I would like to hear a comment about the above propositions.
> >> Personally
> >> > I would opt for the first solution.
> >>
> >> I think the question boils down to whether we want to support controls
> >> that
> >> have different valid ranges depending on formats, or even other
> >> controls. I
> >> think the issue isn't specific to codoc controls.
> >>
> >
> > So what is your opinion on this? If there are more controls where the
> > valid
> > range could depend on other controls or the chosen format then it might be
> > worth
> > implementing such functionality. If there would be only a few such
> > controls then
> > it might be better to just have separate controls (with the codec controls
> > - only
> > *_MPEG_LEVEL and quantization parameter related controls would have
> > different
> > valid range depending on the format).
> 
> I have experimented with control events to change ranges and while it can
> be done technically it is in practice a bit of a mess. I think personally
> it is just easier to have separate controls.
> 
> We are going to have similar problems if different video inputs are
> controlled by different i2c devices with different (but partially
> overlapping) controls. So switching an input also changes the controls. I
> have experimented with this while working on control events and it became
> very messy indeed. I won't do this for the first version of control
> events.
> 
> One subtle but real problem with changing control ranges on the fly is
> that it makes it next to impossible to save all control values to a file
> and restore them later. That is a desirable feature that AFAIK is actually
> in use already.
> 

Thanks for your comment. I will go for implementing separate controls as I also
find having dynamic ranges a bit messy.

Best regards,
-- 
Kamil Debski
Linux Platform Group
Samsung Poland R&D Center



--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux