From patchwork Sun Sep 4 16:47:28 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philip Langdale X-Patchwork-Id: 416 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.140.134 with SMTP id o128csp2371657vsd; Sun, 4 Sep 2016 09:58:18 -0700 (PDT) X-Received: by 10.28.174.11 with SMTP id x11mr12302806wme.41.1473008298396; Sun, 04 Sep 2016 09:58:18 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id f2si16012631wjs.108.2016.09.04.09.58.16; Sun, 04 Sep 2016 09:58:18 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@overt.org; dkim=neutral (body hash did not verify) header.i=@overt.org; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 33840689E3D; Sun, 4 Sep 2016 19:57:52 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from rs224.mailgun.us (rs224.mailgun.us [209.61.151.224]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A7351689CC3 for ; Sun, 4 Sep 2016 19:57:44 +0300 (EEST) DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=overt.org; q=dns/txt; s=k1; t=1473008271; h=References: In-Reply-To: Message-Id: Date: Subject: Cc: To: From: Sender; bh=sBfhf/DunucfQ/y+QrhXLiuts7/w5uf4pObfCDq0sHA=; b=sSALJqdp04pYROwAP66fZCPfjx6yGvs+QnXccLMKPD94SrX33WHHuaIHzpR/vx5fGrivDbJQ iY35TOPGNUSmuw3a/lCMXiEAcl2Vp8dQaout+tJDWk2RFrDacI4cI7z4Qu/zUrm4ERmUjIHT ggZZ9RZQkMy7X1ZlhnFhCiNFZEw= DomainKey-Signature: a=rsa-sha1; c=nofws; d=overt.org; s=k1; q=dns; h=Sender: From: To: Cc: Subject: Date: Message-Id: In-Reply-To: References; b=d8uKDJZRsbP9OiUFSRfJ3ymNUfJOL5YDTubTEyAftBmu4faAcspqC/mJPTlqaHXVAlF842 u0jyFQ2HS3h2kYuLLA/yCzwh2eTh1GQig1nN2E+ZyzzsFlOwc5vpV+ml49QTZQ+cMZMbGXgo T7AgjuT3ykq5Yorrg5YQQA+DTOW+w= X-Mailgun-Sending-Ip: 209.61.151.224 X-Mailgun-Sid: WyIyM2Q3MCIsICJmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZyIsICI0YTg5NjEiXQ== Received: from mail.overt.org (155.208.178.107.bc.googleusercontent.com [107.178.208.155]) by mxa.mailgun.org with ESMTP id 57cc5028.7f83c81b2ab0-in03; Sun, 04 Sep 2016 16:47:36 -0000 (UTC) Received: from authenticated-user (mail.overt.org [107.178.208.155]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) by mail.overt.org (Postfix) with ESMTPSA id 7F0CD6004C; Sun, 4 Sep 2016 16:47:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=overt.org; s=mail; t=1473007655; bh=8TNksRKT+pj6KZsR9KRnN4YUdTg/lLlhL4R/54jdi3g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KQxufN+FMOCWGGCYCVQBvwo4e35I+qPuTyX+58IZ6VKBozOmJMX01vaW/JUSJyuuh Srrqlawf3lAW9ArJV9EOgerzYVgDSuYVhIUwlNDAaO8OUTT1JIms/oP2TT6iMLVnqq yvG7ydIEXA7D6KoMoXUrWWz5VYQN81q1WUPn26Dd2vctUSDJqQezI29smSuweZi6eX HlL9hRl2dxUSGxlvfVs7ZE7XfDpPGTVMk/Y2+++sVilOMwemN0Rdo6rWSE+FpHFuD5 ieKbasv8k91W5eB6tGb8JbaGx6VaANPXQERm8xFCmWbn53TMm/1d7daW3KELsCwAEV SJcWo4oAmiJoA== From: Philip Langdale To: ffmpeg-devel@ffmpeg.org Date: Sun, 4 Sep 2016 09:47:28 -0700 Message-Id: <1473007649-32429-2-git-send-email-philipl@overt.org> In-Reply-To: <1473007649-32429-1-git-send-email-philipl@overt.org> References: <1473007649-32429-1-git-send-email-philipl@overt.org> Subject: [FFmpeg-devel] [PATCH 1/2] cuvid: Add hwaccels and decoders for remaining supported formats X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Philip Langdale MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" 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 --- configure | 18 ++++++++++++++++++ libavcodec/allcodecs.c | 10 ++++++++++ libavcodec/cuvid.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ libavcodec/version.h | 2 +- 4 files changed, 74 insertions(+), 1 deletion(-) diff --git a/configure b/configure index ce69936..c17e37c 100755 --- a/configure +++ b/configure @@ -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" diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index 4c6b94e..a26a80e 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -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); diff --git a/libavcodec/cuvid.c b/libavcodec/cuvid.c index 1da0e87..7e03e30 100644 --- a/libavcodec/cuvid.c +++ b/libavcodec/cuvid.c @@ -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 diff --git a/libavcodec/version.h b/libavcodec/version.h index e83e3aa..d44ae6c 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -28,7 +28,7 @@ #include "libavutil/version.h" #define LIBAVCODEC_VERSION_MAJOR 57 -#define LIBAVCODEC_VERSION_MINOR 54 +#define LIBAVCODEC_VERSION_MINOR 55 #define LIBAVCODEC_VERSION_MICRO 102 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \