You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	cuvid: Add hwaccels and decoders for remaining supported formats
cuvid/nvdecode also supports mpeg1, mpeg2, h.263/mpeg4-asp and mjpeg. It should, in theory, also support wmv3 via the vc1 support, given that vdpau supports this. However, it failed to play wmv3 samples which vdpau played correctly, so I'm not sure what to make of it. Signed-off-by: Philip Langdale <philipl@overt.org> Signed-off-by: Timo Rothenpieler <timo@rothenpieler.org>
This commit is contained in:
		
				
					committed by
					
						 Timo Rothenpieler
						Timo Rothenpieler
					
				
			
			
				
	
			
			
			
						parent
						
							eed7e08646
						
					
				
				
					commit
					1891dfe013
				
			
							
								
								
									
										18
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								configure
									
									
									
									
										vendored
									
									
								
							| @@ -2549,6 +2549,7 @@ videotoolbox_hwaccel_deps="videotoolbox pthreads" | ||||
| videotoolbox_hwaccel_extralibs="-framework QuartzCore" | ||||
| xvmc_deps="X11_extensions_XvMClib_h" | ||||
|  | ||||
| h263_cuvid_hwaccel_deps="cuda cuvid CUVIDMPEG4PICPARAMS" | ||||
| h263_vaapi_hwaccel_deps="vaapi" | ||||
| h263_vaapi_hwaccel_select="h263_decoder" | ||||
| h263_videotoolbox_hwaccel_deps="videotoolbox" | ||||
| @@ -2591,10 +2592,12 @@ hevc_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferHEVC" | ||||
| hevc_vaapi_hwaccel_select="hevc_decoder" | ||||
| hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC" | ||||
| hevc_vdpau_hwaccel_select="hevc_decoder" | ||||
| mjpeg_cuvid_hwaccel_deps="cuda cuvid CUVIDJPEGPICPARAMS" | ||||
| mpeg_vdpau_decoder_deps="vdpau" | ||||
| mpeg_vdpau_decoder_select="mpeg2video_decoder" | ||||
| mpeg_xvmc_hwaccel_deps="xvmc" | ||||
| mpeg_xvmc_hwaccel_select="mpeg2video_decoder" | ||||
| mpeg1_cuvid_hwaccel_deps="cuda cuvid CUVIDMPEG2PICPARAMS" | ||||
| mpeg1_vdpau_decoder_deps="vdpau" | ||||
| mpeg1_vdpau_decoder_select="mpeg1video_decoder" | ||||
| mpeg1_vdpau_hwaccel_deps="vdpau" | ||||
| @@ -2604,6 +2607,7 @@ mpeg1_videotoolbox_hwaccel_select="mpeg1video_decoder" | ||||
| mpeg1_xvmc_hwaccel_deps="xvmc" | ||||
| mpeg1_xvmc_hwaccel_select="mpeg1video_decoder" | ||||
| mpeg2_crystalhd_decoder_select="crystalhd" | ||||
| mpeg2_cuvid_hwaccel_deps="cuda cuvid CUVIDMPEG2PICPARAMS" | ||||
| mpeg2_d3d11va_hwaccel_deps="d3d11va" | ||||
| mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder" | ||||
| mpeg2_dxva2_hwaccel_deps="dxva2" | ||||
| @@ -2622,6 +2626,7 @@ mpeg2_videotoolbox_hwaccel_select="mpeg2video_decoder" | ||||
| mpeg2_xvmc_hwaccel_deps="xvmc" | ||||
| mpeg2_xvmc_hwaccel_select="mpeg2video_decoder" | ||||
| mpeg4_crystalhd_decoder_select="crystalhd" | ||||
| mpeg4_cuvid_hwaccel_deps="cuda cuvid CUVIDMPEG4PICPARAMS" | ||||
| mpeg4_mmal_decoder_deps="mmal" | ||||
| mpeg4_mmal_decoder_select="mmal" | ||||
| mpeg4_mmal_hwaccel_deps="mmal" | ||||
| @@ -2679,6 +2684,8 @@ scale_npp_filter_deps="cuda libnpp" | ||||
|  | ||||
| nvenc_deps_any="dlopen LoadLibrary" | ||||
| nvenc_encoder_deps="nvenc" | ||||
| h263_cuvid_decoder_deps="cuda cuvid CUVIDMPEG4PICPARAMS" | ||||
| h263_cuvid_decoder_select="h263_cuvid_hwaccel" | ||||
| h264_cuvid_decoder_deps="cuda cuvid CUVIDH264PICPARAMS" | ||||
| h264_cuvid_decoder_select="h264_mp4toannexb_bsf h264_cuvid_hwaccel" | ||||
| h264_nvenc_encoder_deps="nvenc" | ||||
| @@ -2698,10 +2705,18 @@ hevc_qsv_encoder_deps="libmfx" | ||||
| hevc_qsv_encoder_select="qsvenc" | ||||
| hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC" | ||||
| hevc_vaapi_encoder_select="vaapi_encode golomb" | ||||
| mjpeg_cuvid_decoder_deps="cuda cuvid CUVIDJPEGPICPARAMS" | ||||
| mjpeg_cuvid_decoder_select="mjpeg_cuvid_hwaccel" | ||||
| mpeg1_cuvid_decoder_deps="cuda cuvid CUVIDMPEG2PICPARAMS" | ||||
| mpeg1_cuvid_decoder_select="mpeg1_cuvid_hwaccel" | ||||
| mpeg2_cuvid_decoder_deps="cuda cuvid CUVIDMPEG2PICPARAMS" | ||||
| mpeg2_cuvid_decoder_select="mpeg2_cuvid_hwaccel" | ||||
| mpeg2_qsv_decoder_deps="libmfx" | ||||
| mpeg2_qsv_decoder_select="qsvdec mpeg2_qsv_hwaccel" | ||||
| mpeg2_qsv_encoder_deps="libmfx" | ||||
| mpeg2_qsv_encoder_select="qsvenc" | ||||
| mpeg4_cuvid_decoder_deps="cuda cuvid CUVIDMPEG4PICPARAMS" | ||||
| mpeg4_cuvid_decoder_select="mpeg4_cuvid_hwaccel" | ||||
| nvenc_h264_encoder_deps="nvenc" | ||||
| nvenc_hevc_encoder_deps="nvenc" | ||||
|  | ||||
| @@ -5562,6 +5577,9 @@ check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC" | ||||
|  | ||||
| check_type "cuviddec.h" "CUVIDH264PICPARAMS" | ||||
| check_type "cuviddec.h" "CUVIDHEVCPICPARAMS" | ||||
| check_type "cuviddec.h" "CUVIDJPEGPICPARAMS" | ||||
| check_type "cuviddec.h" "CUVIDMPEG2PICPARAMS" | ||||
| check_type "cuviddec.h" "CUVIDMPEG4PICPARAMS" | ||||
| check_type "cuviddec.h" "CUVIDVC1PICPARAMS" | ||||
| check_type "cuviddec.h" "CUVIDVP9PICPARAMS" | ||||
|  | ||||
|   | ||||
| @@ -67,6 +67,7 @@ void avcodec_register_all(void) | ||||
|     initialized = 1; | ||||
|  | ||||
|     /* hardware accelerators */ | ||||
|     REGISTER_HWACCEL(H263_CUVID,        h263_cuvid); | ||||
|     REGISTER_HWACCEL(H263_VAAPI,        h263_vaapi); | ||||
|     REGISTER_HWACCEL(H263_VIDEOTOOLBOX, h263_videotoolbox); | ||||
|     REGISTER_HWACCEL(H264_CUVID,        h264_cuvid); | ||||
| @@ -86,9 +87,12 @@ void avcodec_register_all(void) | ||||
|     REGISTER_HWACCEL(HEVC_QSV,          hevc_qsv); | ||||
|     REGISTER_HWACCEL(HEVC_VAAPI,        hevc_vaapi); | ||||
|     REGISTER_HWACCEL(HEVC_VDPAU,        hevc_vdpau); | ||||
|     REGISTER_HWACCEL(MJPEG_CUVID,       mjpeg_cuvid); | ||||
|     REGISTER_HWACCEL(MPEG1_CUVID,       mpeg1_cuvid); | ||||
|     REGISTER_HWACCEL(MPEG1_XVMC,        mpeg1_xvmc); | ||||
|     REGISTER_HWACCEL(MPEG1_VDPAU,       mpeg1_vdpau); | ||||
|     REGISTER_HWACCEL(MPEG1_VIDEOTOOLBOX, mpeg1_videotoolbox); | ||||
|     REGISTER_HWACCEL(MPEG2_CUVID,       mpeg2_cuvid); | ||||
|     REGISTER_HWACCEL(MPEG2_XVMC,        mpeg2_xvmc); | ||||
|     REGISTER_HWACCEL(MPEG2_D3D11VA,     mpeg2_d3d11va); | ||||
|     REGISTER_HWACCEL(MPEG2_DXVA2,       mpeg2_dxva2); | ||||
| @@ -97,6 +101,7 @@ void avcodec_register_all(void) | ||||
|     REGISTER_HWACCEL(MPEG2_VAAPI,       mpeg2_vaapi); | ||||
|     REGISTER_HWACCEL(MPEG2_VDPAU,       mpeg2_vdpau); | ||||
|     REGISTER_HWACCEL(MPEG2_VIDEOTOOLBOX, mpeg2_videotoolbox); | ||||
|     REGISTER_HWACCEL(MPEG4_CUVID,       mpeg4_cuvid); | ||||
|     REGISTER_HWACCEL(MPEG4_MMAL,        mpeg4_mmal); | ||||
|     REGISTER_HWACCEL(MPEG4_VAAPI,       mpeg4_vaapi); | ||||
|     REGISTER_HWACCEL(MPEG4_VDPAU,       mpeg4_vdpau); | ||||
| @@ -626,6 +631,7 @@ void avcodec_register_all(void) | ||||
|     /* external libraries, that shouldn't be used by default if one of the | ||||
|      * above is available */ | ||||
|     REGISTER_ENCDEC (LIBOPENH264,       libopenh264); | ||||
|     REGISTER_DECODER(H263_CUVID,        h263_cuvid); | ||||
|     REGISTER_DECODER(H264_CUVID,        h264_cuvid); | ||||
|     REGISTER_ENCODER(H264_NVENC,        h264_nvenc); | ||||
|     REGISTER_ENCODER(H264_OMX,          h264_omx); | ||||
| @@ -642,8 +648,12 @@ void avcodec_register_all(void) | ||||
|     REGISTER_ENCODER(HEVC_QSV,          hevc_qsv); | ||||
|     REGISTER_ENCODER(HEVC_VAAPI,        hevc_vaapi); | ||||
|     REGISTER_ENCODER(LIBKVAZAAR,        libkvazaar); | ||||
|     REGISTER_DECODER(MJPEG_CUVID,       mjpeg_cuvid); | ||||
|     REGISTER_ENCODER(MJPEG_VAAPI,       mjpeg_vaapi); | ||||
|     REGISTER_DECODER(MPEG1_CUVID,       mpeg1_cuvid); | ||||
|     REGISTER_DECODER(MPEG2_CUVID,       mpeg2_cuvid); | ||||
|     REGISTER_ENCODER(MPEG2_QSV,         mpeg2_qsv); | ||||
|     REGISTER_DECODER(MPEG4_CUVID,       mpeg4_cuvid); | ||||
|     REGISTER_DECODER(VC1_CUVID,         vc1_cuvid); | ||||
|     REGISTER_DECODER(VP8_CUVID,         vp8_cuvid); | ||||
|     REGISTER_DECODER(VP9_CUVID,         vp9_cuvid); | ||||
|   | ||||
| @@ -557,6 +557,11 @@ static av_cold int cuvid_decode_init(AVCodecContext *avctx) | ||||
|     cuparseinfo.pExtVideoInfo = &cuparse_ext; | ||||
|  | ||||
|     switch (avctx->codec->id) { | ||||
| #if CONFIG_H263_CUVID_DECODER | ||||
|     case AV_CODEC_ID_H263: | ||||
|         cuparseinfo.CodecType = cudaVideoCodec_MPEG4; | ||||
|         break; | ||||
| #endif | ||||
| #if CONFIG_H264_CUVID_DECODER | ||||
|     case AV_CODEC_ID_H264: | ||||
|         cuparseinfo.CodecType = cudaVideoCodec_H264; | ||||
| @@ -567,6 +572,26 @@ static av_cold int cuvid_decode_init(AVCodecContext *avctx) | ||||
|         cuparseinfo.CodecType = cudaVideoCodec_HEVC; | ||||
|         break; | ||||
| #endif | ||||
| #if CONFIG_MJPEG_CUVID_DECODER | ||||
|     case AV_CODEC_ID_MJPEG: | ||||
|         cuparseinfo.CodecType = cudaVideoCodec_JPEG; | ||||
|         break; | ||||
| #endif | ||||
| #if CONFIG_MPEG1_CUVID_DECODER | ||||
|     case AV_CODEC_ID_MPEG1VIDEO: | ||||
|         cuparseinfo.CodecType = cudaVideoCodec_MPEG1; | ||||
|         break; | ||||
| #endif | ||||
| #if CONFIG_MPEG2_CUVID_DECODER | ||||
|     case AV_CODEC_ID_MPEG2VIDEO: | ||||
|         cuparseinfo.CodecType = cudaVideoCodec_MPEG2; | ||||
|         break; | ||||
| #endif | ||||
| #if CONFIG_MPEG4_CUVID_DECODER | ||||
|     case AV_CODEC_ID_MPEG4: | ||||
|         cuparseinfo.CodecType = cudaVideoCodec_MPEG4; | ||||
|         break; | ||||
| #endif | ||||
| #if CONFIG_VP8_CUVID_DECODER | ||||
|     case AV_CODEC_ID_VP8: | ||||
|         cuparseinfo.CodecType = cudaVideoCodec_VP8; | ||||
| @@ -681,10 +706,30 @@ error: | ||||
| DEFINE_CUVID_CODEC(hevc, HEVC) | ||||
| #endif | ||||
|  | ||||
| #if CONFIG_H263_CUVID_DECODER | ||||
| DEFINE_CUVID_CODEC(h263, H263) | ||||
| #endif | ||||
|  | ||||
| #if CONFIG_H264_CUVID_DECODER | ||||
| DEFINE_CUVID_CODEC(h264, H264) | ||||
| #endif | ||||
|  | ||||
| #if CONFIG_MJPEG_CUVID_DECODER | ||||
| DEFINE_CUVID_CODEC(mjpeg, MJPEG) | ||||
| #endif | ||||
|  | ||||
| #if CONFIG_MPEG1_CUVID_DECODER | ||||
| DEFINE_CUVID_CODEC(mpeg1, MPEG1VIDEO) | ||||
| #endif | ||||
|  | ||||
| #if CONFIG_MPEG2_CUVID_DECODER | ||||
| DEFINE_CUVID_CODEC(mpeg2, MPEG2VIDEO) | ||||
| #endif | ||||
|  | ||||
| #if CONFIG_MPEG4_CUVID_DECODER | ||||
| DEFINE_CUVID_CODEC(mpeg4, MPEG4) | ||||
| #endif | ||||
|  | ||||
| #if CONFIG_VP8_CUVID_DECODER | ||||
| DEFINE_CUVID_CODEC(vp8, VP8) | ||||
| #endif | ||||
|   | ||||
| @@ -28,8 +28,8 @@ | ||||
| #include "libavutil/version.h" | ||||
|  | ||||
| #define LIBAVCODEC_VERSION_MAJOR  57 | ||||
| #define LIBAVCODEC_VERSION_MINOR  54 | ||||
| #define LIBAVCODEC_VERSION_MICRO 102 | ||||
| #define LIBAVCODEC_VERSION_MINOR  55 | ||||
| #define LIBAVCODEC_VERSION_MICRO 100 | ||||
|  | ||||
| #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | ||||
|                                                LIBAVCODEC_VERSION_MINOR, \ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user