avcodec: allow multiple hwaccels for the same codec/pixfmt
authorwm4 <nfxjfg@googlemail.com>
Tue, 3 Oct 2017 13:04:45 +0000 (15:04 +0200)
committerTimo Rothenpieler <timo@rothenpieler.org>
Fri, 10 Nov 2017 21:48:34 +0000 (22:48 +0100)
commitae5046e492cd87233111e994ca4ae3d74a233b51
tree7858bdb33d3fe30a13821553d51874376c263726
parent5593049466bcd1d3f1ddbfe580be4f36123d7c3d
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.
libavcodec/avcodec.h
libavcodec/cuviddec.c
libavcodec/decode.c
libavcodec/internal.h