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.gel...@gmail.com>

Signed-off-by: Andriy Gelman <andriy.gel...@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.
+@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:
+@example
+ffmpeg -codec:v h264_v4l2m2m -i INPUT OUTPUT
+@end example
+
+The following options are supported:
+@table @option
+@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.
+
+@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.

+@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
+@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:
+@example
+ffmpeg -i INPUT [-pix_fmt pixfmt] -codec:v h264_v4l2m2m OUTPUT
+@end example
+In some cases, it may be necessary to insert a pixel format conversion with
+@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:
+@table @option
+@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.
+
+@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?

+@end table
+
+Standard libavcodec options that can be set are:
+@itemize
+@item
+@option{g} / @option{gop_size}
+@item
+@option{qpel}
+@item
+@option{qmin}
+@item
+@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

You may note that bitrate is also read.
yep, I've added bitrate.

Thanks,

Thanks,
Gyan
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to