Commit Graph
100 Commits
Author SHA1 Message Date
Mark Thompson ad7aa1e8e7 libsvtav1: Use _ rather than - in options 2020-07-31 22:30:41 +01:00
Mark Thompson 30a4bdbc1f libsvtav1: Rename without a _
The external library is called libsvtav1, so use this name everywhere.
2020-07-31 22:30:35 +01:00
Mark Thompson 16c2ed4362 Revert "lavc/vaapi_encode: add EQUAL_MULTI_ROWS support for slice structure"
This reverts commit 489c5db079.

Treating EQUAL_MULTI_ROWS in the same way as the arbitrary-size cases is
just wrong.  Consider 9 rows, 4 slices - we pick 4 slices with sizes
{ 3, 2, 2, 2 }, which EQUAL_MULTI_ROWS does not allow.  It isn't possible
to split the frame into 4 slices at all with the EQUAL_MULTI_ROWS
structure - the closest options are 3 slices with sizes { 3, 3, 3 } or 5
slices with sizes { 2, 2, 2, 2, 1 }.
2020-07-27 22:27:14 +01:00
Mark ThompsonandLinjie Fu 9badc60292 vaapi_encode_h265: Enable 4:2:2 support 2020-07-24 13:44:09 +08:00
Mark Thompson c53f9f4364 cbs_h265: Ensure that a predicted RPS doesn't contain too many pictures
If the RPS we are predicting from has maximum size then at least one of
the pictures in it must be discarded before adding the current one.

Also revert 588114cea4, which added
now-redundant checks for the special case of a too-large RPS with all
pictures being in the same direction from the current one.
2020-05-20 22:07:01 +01:00
Mark Thompson 706ed34ce7 ffmpeg: Don't require a known device to pass a frames context to an encoder
The previous code here did not handle passing a frames context when
ffmpeg itself did not know about the device it came from (for example,
because it was created by device derivation inside a filter graph), which
would break encoders requiring that input.  Fix that by checking for HW
frames and device context methods independently, and prefer to use a
frames context method if possible.  At the same time, revert the encoding
additions to the device matching function because the additional
complexity was not relevant to decoding.

Also fixes #8637, which is the same case but with the device creation
hidden in the ad-hoc libmfx setup code.
2020-05-03 16:04:27 +01:00
Mark ThompsonandTimo Rothenpieler 1dff97b7bc avcodec/nvenc: add hardware config metadata
Signed-off-by: Timo Rothenpieler <timo@rothenpieler.org>
2020-04-27 23:06:06 +02:00
Mark Thompson 79c173cc19 ffmpeg: Remove the hw_device_ctx global
The ad-hoc libmfx setup code is the only place its still used, so move it
into that file.
2020-04-26 18:38:25 +01:00
Mark Thompson 8abd3b2028 ffmpeg: Use hardware config metadata with encoders
This can support encoders which want frames and/or device contexts.  For
the device case, it currently picks the first initialised device of the
desired type to give to the encoder - a new option would be needed if it
were necessary to choose between multiple devices of the same type.
2020-04-26 18:38:25 +01:00
Mark Thompson e254212405 ffmpeg: Make filter hardware device selection clearer
Also move it into a dedicated function in the hardware file.
2020-04-26 18:38:25 +01:00
Mark Thompson 344e6c3ff1 lavc/vaapi_encode: Add hardware config metadata
These encoders all accept VAAPI surfaces in a hardware frames context.
2020-04-26 18:38:25 +01:00
Mark Thompson 5a1ff44907 lavc/qsvenc: Add hardware config metadata
All of these encoders can accept libmfx surfaces directly in a hardware
frames context, or they can accept software frames if a suitable device
is supplied to use.
2020-04-26 18:38:25 +01:00
Mark Thompson 858eba0ca4 lavc: Extend hardware config metadata to encoders 2020-04-26 18:38:25 +01:00
Mark Thompson 2594f6a362 lavc: Rename hwaccel.h to hwconfig.h
This already applied to decoders as well as hwaccels, and adding encoder
support was going to make the name even more inaccurate.
2020-04-26 18:38:25 +01:00
Mark Thompson bc9b6358fb hwcontext_vaapi: Only accept a render node when deriving from DRM device
If we are given a non-render node, try to find the matching render node and
fail if that isn't possible.

libva will not accept a non-render device which is not DRM master, because
it requires legacy DRM authentication to succeed in that case:
<https://github.com/intel/libva/blob/master/va/drm/va_drm.c#L68-L75>.  This
is annoying for kmsgrab because in most recording situations DRM master is
already held by something else (such as a windowing system), leading to
device derivation not working and forcing the user to create the target
VAAPI device separately.
2020-02-24 00:09:51 +00:00
Mark Thompson 48b102c5a6 doc/ffmpeg: Document device selection for Vulkan 2020-02-09 20:36:45 +00:00
Mark Thompson 593106ff47 lavfi/vf_*_vaapi: Fix error case
Fixes CID 1452400, 1452416, 1452550, 1452590, 1452760.
2020-02-09 20:36:45 +00:00
Mark Thompson f130b22119 lavfi/vf_deshake_opencl: Avoid propagating uninitialised data
Fixes CID 1452753.
2020-02-09 20:36:45 +00:00
Mark Thompson e1b5620b62 lavc/vp9_raw_reorder_bsf: Fix operator ordering
Fixes CID 1413024.
2020-02-09 20:36:44 +00:00
Mark Thompson 177a90b1a3 lavc/vaapi_encode: Fix leak in error case
Fixes CID 1442564.
2020-02-09 20:36:44 +00:00
Mark Thompson 5392982241 lavc/h265_metadata_bsf: Fix parameter ordering
Fixes CID 1452433.
2020-02-09 20:36:44 +00:00
Mark Thompson bf0ab6e9c4 lavc/cbs_h2645: Add missing newlines in log messages 2020-02-09 20:36:44 +00:00
Mark Thompson f907eea863 vf_tonemap_vaapi: Fix memory leak in error case
Fixes CID 1457236.
2020-01-07 00:04:50 +00:00
Mark Thompson b123d0780e h264_metadata: Support overscan_appropriate_flag
Fixes #8041.
2019-07-29 19:57:09 +01:00
Mark Thompson f9b8503639 cbs_h264: Fix missing inferred colour description fields
With video_signal_type_present_flag set but colour_description_present_flag
unset the colour fields would not have had their correct values inferred.
2019-07-29 19:57:06 +01:00
Mark Thompson 20fed2f0ab lavfi: addroi filter
This can be used to add region of interest side data to video frames.
2019-07-28 22:34:33 +01:00
Mark Thompson 3387147860 vaapi_encode: Add ROI support 2019-07-28 22:34:26 +01:00
Mark Thompson f6c572bd89 libx265: Update ROI behaviour to match documentation
Equivalent to the previous patch for libx264.
2019-07-07 19:19:26 +01:00
Mark Thompson d76e2aaf08 libx264: Update ROI behaviour to match documentation
Fix the quantisation offset - use the whole range, and don't change the
offset size based on bit depth.

Iterate the list in reverse order.  The first region in the list is the one
that applies in the case of overlapping regions.
2019-07-07 19:19:26 +01:00
Mark Thompson 451a51124d lavu/frame: Improve ROI documentation
Clarify and add examples for the behaviour of the quantisation offset,
and define how multiple ranges should be handled.
2019-07-07 19:19:26 +01:00
Mark Thompson cd3578a8e4 lavc/h265_profile_level: Add new profiles
Monochrome 10 and Main 10 Still Picture profiles are added by the 2018
version of the standard.
2019-07-07 13:29:51 +01:00
Mark Thompson e3424575f5 lavc/h265_profile_level: Add unit test
Operates in the same way as the h264-levels test.
2019-07-07 13:29:50 +01:00
Mark Thompson c7142875c3 h265_metadata: Add option to set the level of the stream
To match the same option in h264_metadata.
2019-07-07 13:29:50 +01:00
Mark Thompson f344bb2466 lavc/h265_profile_level: Do not allow high tier at level < 4 2019-07-07 13:29:50 +01:00
Mark Thompson c1a430885d lavc/h265_profile_level: Fix DPB size calculation
The maxDpbPicBuf value which is used in the DPB size calculation depends
on the profile (it's usually 6, but 7 for screen-extended profiles).
2019-07-07 13:29:50 +01:00
Mark Thompson a53f9fde45 lavfi/vaapi: Fix build with libva 2.1 and 2.2
While the VAProcColorProperties structure was added in libva 2.1, the
colour primaries/transfer/space fields were not added until libva 2.3.
2019-06-07 21:15:29 +01:00
Mark Thompson 2880a32c66 vaapi_encode: Refactor encode misc parameter buffer creation
This removes the use of the nonstandard combined structures, which
generated some warnings with clang and will cause alignment problems
with some parameter buffer types.
2019-06-03 21:16:22 +01:00
Mark Thompson 7056002796 vaapi_encode: Remove unused function 2019-06-03 21:16:22 +01:00
Mark Thompson 468f003843 hwcontext_qsv: Try to select a matching VAAPI device by default
Tries to find a device backed by the i915 kernel driver and loads the iHD
VAAPI driver to use with it.  This reduces confusion on machines with
multiple DRM devices and removes the surprising requirement to set the
LIBVA_DRIVER_NAME environment variable to use libmfx at all.
2019-06-02 23:03:27 +01:00
Mark Thompson 0b4696fbe8 hwcontext_vaapi: Try to create devices via DRM before X11
Opening the device via X11 (DRI2/DRI3) rather than opening a DRM render
node directly is only useful if you intend to use the legacy X11 interop
functions.  That's never true for the ffmpeg utility, and a library user
who does want this will likely provide their own display instance rather
than making a new one here.
2019-06-02 23:03:27 +01:00
Mark Thompson 7f3f5a24a1 hwcontext_vaapi: Add option to set driver name
For example: -init_hw_device vaapi:/dev/dri/renderD128,driver=foo

This may be more convenient that using the environment variable, and allows
loading different drivers for different devices in the same process.
2019-06-02 23:03:27 +01:00
Mark Thompson 6b6b8a6371 hwcontext_vaapi: Make default DRM device selection more helpful
Iterate over available render devices and pick the first one which looks
usable.  Adds an option to specify the name of the kernel driver associated
with the desired device, so that it is possible to select a specific type
of device in a multiple-device system without knowing the card numbering.

For example: -init_hw_device vaapi:,kernel_driver=amdgpu will select only
devices using the "amdgpu" driver (as used with recent AMD graphics cards).

Kernel driver selection requires libdrm to work.
2019-06-02 23:03:10 +01:00
Mark Thompson d2141a9b65 hwcontext_vaapi: Add option to specify connection type
Can be set to "drm" or "x11" to force a specific connection type.
2019-06-02 22:58:22 +01:00
Mark Thompson a444863738 ffmpeg_hw: Treat empty device string as no device setting
The implementation will use some default in this case.  The empty string
is not a meaningful device for any existing hardware type, and indeed
OpenCL treats it identically to no device already to work around the lack
of this setting on the command line.
2019-06-02 22:58:22 +01:00
Mark Thompson 1f8b36329f ffmpeg_hw: Mark some strings as const 2019-06-02 22:58:22 +01:00
Mark Thompson 909bcedc58 vaapi_encode: Warn if input has cropping information
Cropping is not supported by VAAPI encode.
2019-06-02 17:30:41 +01:00
Mark Thompson ef2f89bbcc vf_scale_vaapi: Add options to configure output colour properties
The "out_color_matrix" and "out_range" properties match the same options
in vf_scale; the others attempt to follow the same pattern.
2019-06-02 17:30:41 +01:00
Mark Thompson 5051b7f898 lavfi/vaapi: Improve support for colour properties
Attempts to pick the set of supported colour properties best matching the
input.  Output is then set with the same values, except for the colour
matrix which may change when converting between RGB and YUV.
2019-06-02 17:30:41 +01:00
Mark Thompson 5fb9eb9ed2 vf_misc_vaapi: Add missing return value checks
Parameter buffer creation can fail.
2019-06-02 17:30:41 +01:00
Mark Thompson 6ed34a4379 lavfi/vaapi: Factorise out common code for parameter buffer setup
Also enables cropping on all VAAPI filters, inherited from the existing
support in scale_vaapi.
2019-06-02 17:30:41 +01:00
Mark Thompson 963c4f85fe doc/indevs: Add example using cropping to capture part of a plane 2019-06-02 17:30:41 +01:00
Mark Thompson f1b359aaf5 vf_crop: Add support for cropping hardware frames
Set the cropping fields in the AVFrame.
2019-06-02 17:30:41 +01:00
Mark Thompson d0b174d7df configure: Do not enable both OpenCL-VAAPI interop modes simultaneously
Beignet offers a far more flexiable and complete interface, so choose it
by default if available.
2019-03-27 22:29:23 +00:00
Mark Thompson f948082e5f vaapi_encode_mpeg2: Add missing marker bit in time_code
We don't have anything useful to put in this field, but there is still
meant to be a marker bit in the middle of it.
2019-02-25 23:34:14 +00:00
Mark Thompson fda6dcd0b0 vaapi_encode_mjpeg: Use common quality option
Doesn't change anything, but makes the behaviour better match that of the
other codecs (the CONSTANT_QUALITY_ONLY flag already ensures that CQP is
the only RC mode selectable for MJPEG).
2019-02-25 23:34:14 +00:00
Mark Thompson c4c2c4df76 vaapi_encode_vp9: Fix whitespace after previous patch 2019-02-25 23:34:14 +00:00
Mark Thompson 28e619e268 vaapi_encode_vp9: Enable support for more RC modes 2019-02-25 23:34:14 +00:00
Mark Thompson 2efd63a315 vaapi_encode_vp8: Enable support for more RC modes 2019-02-25 23:34:14 +00:00
Mark Thompson 1e0fac7663 vaapi_encode_mpeg2: Enable support for more RC modes
Fixes #7650.
2019-02-25 23:33:59 +00:00
Mark Thompson d237b6b549 vaapi_encode_h265: Enable support for more RC modes
Also fixes QP going out of range when modified by the quant factor/offset
values, and clarifies the QP behaviour for >8-bit modes.
2019-02-25 23:32:23 +00:00
Mark Thompson f5eb08937e vaapi_encode_h264: Enable support for more RC modes
Also fixes QP going out of range when modified by the quant factor/offset
values.
2019-02-25 23:32:23 +00:00
Mark Thompson f4d7bd6cdb vaapi_encode: Support more RC modes
Allow setting the mode explicitly, and try to make a sensible choice
given the available parameters if not.
2019-02-25 23:32:23 +00:00
Mark Thompson 9d5ca71ec2 vaapi_encode: Do not zero access unit structures
Following b8c45bbcbc they contain allocated
unit arrays which will get leaked.  These operations were inconsistently
applied and never actually needed (the old uninit left them in the correct
state), so just drop them entirely.
2019-02-25 23:27:11 +00:00
Mark Thompson 44bcccb7f0 vaapi_encode_h265: Ensure that ref pics are always in the RPS
When making a new P-frame when B-frames are present the previous P-frame
is normally in the DPB because it will be referred to by subsequent
B-frames.  However, this is not true if there are no B-frames, or in edge
cases where a GOP ends with two P-frames.  Fix this by adding the direct
ref pics to the RPS explicitly.

Fixes #7699.

Tested-by: Ullysses A Eoff <ullysses.a.eoff@intel.com>
2019-01-27 17:38:38 +00:00
Mark Thompson 916b3b9079 vaapi_encode_vp9: Support more complex reference structures 2019-01-23 23:04:12 +00:00
Mark Thompson 362992e94b vaapi_encode_h265: Support more complex reference structures
The reference picture sets are now constructed directly from the DPB
information.
2019-01-23 23:04:11 +00:00
Mark Thompson 25c0ede93b vaapi_encode_h264: Support more complex reference structures 2019-01-23 23:04:11 +00:00
Mark Thompson 494bd8df78 vaapi_encode: Let the reconstructed frame pool be sized dynamically
No supported encode driver requires the pool to be fixed-size, so just
remove this constraint.
2019-01-23 23:04:11 +00:00
Mark Thompson 5fdcf85bbf vaapi_encode: Convert to send/receive API
This attaches the logic of picking the mode of for the next picture to
the output, which simplifies some choices by removing the concept of
the picture for which input is not yet available.  At the same time,
we allow more complex reference structures and track more reference
metadata (particularly the contents of the DPB) for use in the
codec-specific code.

It also adds flags to explicitly track the available features of the
different codecs.  The new structure also allows open-GOP support, so
that is now available for codecs which can do it.
2019-01-23 23:04:11 +00:00
Mark Thompson 26ce3a43a3 vaapi_encode: Allocate picture-private data in generic code 2019-01-23 23:04:11 +00:00
Mark Thompson b97a4b6588 cbs_av1: Fix reading of overlong uvlc codes
The specification allows 2^32-1 to be encoded as any number of zeroes
greater than 31, followed by a one.  This previously failed because the
trace code would overflow the array containing the string representation
of the bits if there were more than 63 zeroes.  Fix that by splitting the
trace output into batches, and at the same time move it out of the default
path.

(While this seems likely to be a specification error, libaom does support
it so we probably should as well.)

From a test case by keval shah <skeval65@gmail.com>.

Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
2018-12-22 18:17:03 +00:00
Mark Thompson 34cab70818 qsvdec: Fix running with assert_level > 0
Assertion avctx->codec_id != AV_CODEC_ID_NONE failed at src/libavcodec/parser.c:128

The setting on the internal AVCodecContext used for parsing only is
otherwise irrelevant, so just set it to avoid the assert.
2018-12-09 18:49:06 +00:00
Mark Thompson 21608bc303 hwcontext_opencl: Use correct function to enumerate devices
Also assert that all required functions are present.
2018-12-02 23:39:19 +00:00
Mark Thompson 2f6b1806ce configure: Avoid use of nonstandard features of sed
Standard sed does not support EREs.

Fixes #7310.
2018-12-02 23:31:50 +00:00
Mark Thompson b9aff7a53d hwcontext_opencl: Only release command queue if it exists
If the frames context creation fails then the command queue reference
need not exist when uninit is called.
2018-11-28 00:05:09 +00:00
Mark Thompson e3991a5a45 libaomenc: Drop unused noise-sensitivity option 2018-11-18 22:07:42 +00:00
Mark Thompson 80ce23da65 vaapi_encode_h265: Reduce SAR to valid range
Matching previous commit for H.264.
2018-11-18 21:34:18 +00:00
Mark Thompson a830056b32 vaapi_encode_h264: Reduce SAR to valid range
The SAR of the input could have a numerator or denominator greater than
2^16 which would then be truncated to a 16-bit integer when written to
the VUI parameters, giving a random result.  Instead, reduce the SAR to
the nearest representable fraction.

Fixes #7502.
2018-11-18 21:34:04 +00:00
Mark Thompson b674357020 vaapi_encode: Improve log message for unsupported profiles 2018-11-18 18:22:07 +00:00
Mark Thompson b2ea757f68 doc/encoders: Add libaom-av1 2018-11-18 18:13:04 +00:00
Mark Thompson f951036d32 doc/encoders: Move libxavs2 to correct place in alphabetical order 2018-11-18 17:51:38 +00:00
Mark Thompson 7ba63695b7 mjpegdec: Fill raw huffman tables with default values too
These may be used by hwaccel decoders when the standard tables are not
otherwise available.  At the same time, clean up that code into an array
so it's a little less repetitive.
2018-11-18 17:40:24 +00:00
Mark Thompson 7a20656474 cbs_h265: Add a lot more SEI parsing support
Supports both prefix and suffix SEI, decoding all of the common SEI
types and some more obscure ones.  Most of this is tested by the
existing tests in fate.
2018-11-18 17:33:26 +00:00
Mark Thompson 2ce3a48f30 configure: Add missing xlib dependency for VAAPI X11 code
Fixes #7538.
2018-11-14 22:56:18 +00:00
Mark Thompson 252e79663d cbs_h265: Add PTL parsing for sublayers
With fate test using the SLPPLP_A_VIDYO_2 conformance file, which contains
two sublayers with full PTL information.
2018-11-11 17:22:09 +00:00
Mark Thompson fd1d735c0b fate/libavcodec: Fix config dependency of h264-levels test 2018-11-11 16:44:54 +00:00
Mark Thompson f5894178fb cbs_av1: Support redundant frame headers 2018-11-05 23:00:59 +00:00
Mark Thompson 6bdb7712ae cbs_av1: Fix header writing when already aligned 2018-11-05 23:00:58 +00:00
Mark Thompson e9d2e3fdaa configure: Add missing V4L2 M2M decoder BSF dependencies 2018-11-05 14:22:10 +00:00
Mark Thompson a4fb2b1150 configure: Add missing IVF muxer BSF dependency 2018-11-05 14:22:05 +00:00
Mark Thompson 34429182b9 configure: Fix av1_metadata BSF dependency 2018-11-05 00:34:33 +00:00
Mark Thompson 2dee0679e9 cbs_h265: Add PTL parsing for Main 10 Still Picture profile
This was added in the 2018 version of the standard.
2018-10-31 21:38:33 +00:00
Mark Thompson 30fcc10937 cbs_h264: Include SEI type names in trace output 2018-10-31 21:38:33 +00:00
Mark Thompson edcdf35123 cbs_vp9: Ensure that reserved zero bits are actually zero 2018-10-30 22:22:27 +00:00
Mark Thompson c0692cb2bb vaapi_encode_mpeg2: Fix width/height columns/rows confusion
Fixes #7522.
2018-10-29 19:41:24 +00:00
Mark Thompson 7070955d43 libaomenc: Add support for tiles
Adds an option to specify the number of tile rows and columns, then uses
a uniform tiling if possible and otherwise a fixed tiling with equal-sized
tiles to fill the frame.

Also adds -tile-columns and -tile-rows options to make tilings with
power-of-two numbers of tiles, matching the behaviour of the libvpx/VP9
encoder.
2018-10-28 16:42:41 +00:00
Mark Thompson fef2162b6e vaapi_encode: Add flag to mark encoders supporting only constant-quality
And set it for MJPEG.
2018-10-27 19:35:35 +01:00
Mark Thompson a7eda762dc vaapi_encode_h265: Enable multiple-slice support 2018-10-27 19:35:35 +01:00
Mark Thompson a769e72c75 vaapi_encode_h264: Enable multiple-slice support 2018-10-27 19:35:35 +01:00
Mark Thompson 29816e278f vaapi_encode_mpeg2: Use common slice sizing code 2018-10-27 19:35:35 +01:00