From 6b77a10e43e1a8ed8ead20f344485d400440055c Mon Sep 17 00:00:00 2001 From: Philip Langdale Date: Wed, 15 Nov 2017 20:59:29 -0800 Subject: avcodec: Implement mpeg4 nvdec hwaccel This was predictably nightmarish, given how ridiculous mpeg4 is. I had to stare at the cuvid parser output for a long time to work out what each field was supposed to be, and even then, I still don't fully understand some of them. Particularly: vop_coded: If I'm reading the decoder correctly, this flag will always be 1 as the decoder will not pass the hwaccel any frame where it is not 1. divx_flags: There's obviously no documentation on what the possible flags are. I simply observed that this is '0' for a normal bitstream and '5' for packed b-frames. gmc_enabled: I had a number of guesses as to what this mapped to. I picked the condition I did based on when the cuvid parser was setting flag. Also note that as with the vdpau hwaccel, the decoder needs to consume the entire frame and not the slice. --- libavcodec/allcodecs.c | 1 + 1 file changed, 1 insertion(+) (limited to 'libavcodec/allcodecs.c') diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index e9df704..85c38c8 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -106,6 +106,7 @@ static void register_all(void) REGISTER_HWACCEL(MPEG4_CUVID, mpeg4_cuvid); REGISTER_HWACCEL(MPEG4_MEDIACODEC, mpeg4_mediacodec); REGISTER_HWACCEL(MPEG4_MMAL, mpeg4_mmal); + REGISTER_HWACCEL(MPEG4_NVDEC, mpeg4_nvdec); REGISTER_HWACCEL(MPEG4_VAAPI, mpeg4_vaapi); REGISTER_HWACCEL(MPEG4_VDPAU, mpeg4_vdpau); REGISTER_HWACCEL(MPEG4_VIDEOTOOLBOX, mpeg4_videotoolbox); -- cgit v1.1