[FFmpeg-devel] [PATCH v2] doc/v4l2_m2m: Add documentation

Andriy Gelman andriy.gelman at gmail.com
Fri Jan 17 16:16:17 EET 2020


On Fri, 17. Jan 11:29, Gyan wrote:
> 
> 
> On 17-01-2020 01:47 am, Andriy Gelman wrote:
> > On Thu, 16. Jan 10:51, Gyan wrote:
> > > 
> > > On 16-01-2020 09:44 am, Andriy Gelman wrote:
> > > > From: Andriy Gelman <andriy.gelman at gmail.com>
> > > > 
> > > > Signed-off-by: Andriy Gelman <andriy.gelman at gmail.com>
> > > > ---
> > > >    doc/decoders.texi | 27 +++++++++++++++++++++++++++
> > > >    doc/encoders.texi | 42 ++++++++++++++++++++++++++++++++++++++++++
> > > >    2 files changed, 69 insertions(+)
> > > > 
> > > > diff --git a/doc/decoders.texi b/doc/decoders.texi
> > > > index f18226b3504..7827a055408 100644
> > > > --- a/doc/decoders.texi
> > > > +++ b/doc/decoders.texi
> > > > @@ -86,6 +86,33 @@ AVS2-P2/IEEE1857.4 video decoder wrapper.
> > > >    This decoder allows libavcodec to decode AVS2 streams with davs2 library.
> > > > + at section v4l2m2m
> > > > +
> > > > +libavcodec supports a set of v4l2m2m wrappers for interfacing with
> > > > +hardware decoders. Depending on the hardware's capabilties the following decoders may be selected:
> > > > +h264, hevc, mpeg1, mpeg2, mpeg4, h263, vc1, vp8, and vp9.
> > > capabilties --> capabilities
> > > 
> > > 
> > > > +
> > > > +To use a specifix decoder append a  _v4l2m2m suffix. For example to select h264
> > > specifix --> specific
> > > 
> > Fixed both spelling mistakes.
> > 
> > > > +decoder use:
> > > > + at example
> > > > +ffmpeg -codec:v h264_v4l2m2m -i INPUT OUTPUT
> > > > + at end example
> > > > +
> > > > +The following options are supported:
> > > > + at table @option
> > > > + at item num_output_buffers
> > > > +Number of memory mapped buffers to store the input packets.
> > > > +This value is only a suggestion to the hardware device. The device will attempt to
> > > > +allocate the number of buffers, but the actual value may be smaller/larger and
> > > > +ultimately depends on the device. The default for the option is 16, minimum is
> > > > +6, and any large value (representable by an int) is accepted for the max.
> > > > +
> > > > + at item num_capture_buffers
> > > > +Number of memory mapped buffers to store the decompressed frames. The allocation
> > > > +description is the same as above. Default is 20, minimum is 20, and any large
> > > > +value (representable by an int) is accepted for the max.
> > > Restate the description, don't reference another option entry, since in
> > > theory, more may be inserted or shuffled around.
> > ok done.

> > 
> > > For both options, what's the significance and tradeoff? Latency?
> > > 
> > These options don't affect latency. Having a large buffer could be useful if
> > there is a lot of jitter in dequeuing the decoded frames from the hardware
> > device. If the internal buffer is full you will end up dropping frames.
> 
> The docs should mention this. The reader should know when they may want to
> set these options manually and why.

ok, I'll add it to the next version.

> 
> > > > + at end table
> > > > +
> > > >    @c man end VIDEO DECODERS
> > > >    @chapter Audio Decoders
> > > > diff --git a/doc/encoders.texi b/doc/encoders.texi
> > > > index 61e674cf968..a600e76b1b9 100644
> > > > --- a/doc/encoders.texi
> > > > +++ b/doc/encoders.texi
> > > > @@ -3117,6 +3117,48 @@ required to produce a stream usable with all decoders.
> > > >    @end table
> > > > + at section v4l2m2m
> > > > +
> > > > +libavcodec supports a set of v4l2m2m wrappers for interfacing with hardware encoders.
> > > > +Depending on the hardware's capabilities the following encoders may be selected:
> > > > +mpeg4, h263, h264, hevc, and vp8.
> > > > +
> > > > +To use a specific encoder append _v4l2m2m suffix. For example to select h264 use:
> > > > + at example
> > > > +ffmpeg -i INPUT [-pix_fmt pixfmt] -codec:v h264_v4l2m2m OUTPUT
> > > > + at end example
> > > > +In some cases, it may be necessary to insert a pixel format conversion with
> > > > + at code{-pix_fmt}. This is required if the pixel format of the input does not
> > > > +match the format of the encoder. If there is a mismatch, libavcodec will
> > > > +exit and specify the required pixfmt to use.
> > > > +
> > > > +The following options are supported:
> > > > + at table @option
> > > > + at item num_output_buffers
> > > > +Number of memory mapped buffers to store the input frames.
> > > > +This value is only a suggestion to the hardware device. The device will attempt to
> > > > +allocate the number of buffers, but the actual value may be smaller/larger and
> > > > +ultimately depends on the device. The default for the option is 16, minimum is
> > > > +6, and any large value (representable by an int) is accepted for the max.
> > > > +
> > > > + at item num_capture_buffers
> > > > +Number of memory mapped buffers to store the compressed packets. The allocation
> > > > +description is the same as above. Default is 4, minimum is 4, and any large
> > > > +value (representable by an int) is accepted for the max.
> > > Restate the description, don't reference another option entry.
> > > 
> > >   Significance and tradeoff?
> > > 
> > > > + at end table
> > > > +
> > > > +Standard libavcodec options that can be set are:
> > > > + at itemize
> > > > + at item
> > > > + at option{g} / @option{gop_size}
> > > > + at item
> > > > + at option{qpel}
> > > > + at item
> > > > + at option{qmin}
> > > > + at item
> > > > + at option{qmax}

> > > Where in the code is the lavc qmin/qmax applied?
> > These options are set in v4l2_prepare_encoder().
> I don't see where the user-set values are picked up. I see a debug-level log
> where they are printed. Then based on codec id, qmin and qmax are set to
> hardcoded values. After that, if those values don't match the user values, a
> warning is printed. But I don't see the user-set values being conveyed to
> the encoder. For ref, I'm seeing the function as of ab9627223e630390a

ah, good point. It makes sense to fix this before the documentation.

Thanks,
-- 
Andriy


More information about the ffmpeg-devel mailing list