avcodec: allow multiple hwaccels for the same codec/pixfmt

Currently, AVHWAccels are looked up using a (codec_id, pixfmt) tuple.
This means it's impossible to have 2 decoders for the same codec and
using the same opaque hardware pixel format.

This breaks merging Libav's CUVID hwaccel. FFmpeg has its own CUVID
support, but it's a full stream decoder, using NVIDIA's codec parser.
The Libav one is a true hwaccel, which is based on the builtin software
decoders.

Fix this by introducing another field to disambiguate AVHWAccels, and
use it for our CUVID decoders. FF_CODEC_CAP_HWACCEL_REQUIRE_CLASS makes
this mechanism backwards compatible and optional.
This commit is contained in:
wm4
2017-10-03 15:04:45 +02:00
committed by Timo Rothenpieler
parent 5593049466
commit ae5046e492
4 changed files with 22 additions and 4 deletions

View File

@@ -3532,6 +3532,13 @@ typedef struct AVHWAccel {
* Internal hwaccel capabilities.
*/
int caps_internal;
/**
* Some hwaccels are ambiguous if only the id and pix_fmt fields are used.
* If non-NULL, the associated AVCodec must have
* FF_CODEC_CAP_HWACCEL_REQUIRE_CLASS set.
*/
const AVClass *decoder_class;
} AVHWAccel;
/**