From patchwork Sat Sep 3 19:14:55 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philip Langdale X-Patchwork-Id: 407 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.140.134 with SMTP id o128csp2042788vsd; Sat, 3 Sep 2016 12:15:17 -0700 (PDT) X-Received: by 10.28.230.3 with SMTP id d3mr8992753wmh.114.1472930115333; Sat, 03 Sep 2016 12:15:15 -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 bt7si6234326wjb.104.2016.09.03.12.15.12; Sat, 03 Sep 2016 12:15:15 -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 25CBC689DEA; Sat, 3 Sep 2016 22:15:03 +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 22BEB68974B for ; Sat, 3 Sep 2016 22:14:56 +0300 (EEST) DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=overt.org; q=dns/txt; s=k1; t=1472930103; h=Message-Id: Date: Subject: Cc: To: From: Sender; bh=+68BaAzK5Qxg3uYz4uSwrc9V8kRI5blxQPR3Bd3+bL8=; b=tLPJEuVRaPeW3/AnGVPyXKY6Wr3z8H4S1cCXggvXb15c8OQ/LVDYGdDRWJld6ddrnvNg9v5g gqXA7Q2DvwOO+m2rh1kKvWkQJRdSk5pjcichOIjKaxwyK/lqqQjQgYJfj+vj+Vzwudb9i1si 0vvabH2Q4jF4ypD252VGu2+YsY4= DomainKey-Signature: a=rsa-sha1; c=nofws; d=overt.org; s=k1; q=dns; h=Sender: From: To: Cc: Subject: Date: Message-Id; b=t4Cfa5htu5bXUfpnNSvxEeCjXmnYzvAW2RmA+ZvUhkujKR0Z2Ml1ZtbW9Srf1ZMZJ9yMJ7 lkxB8rx8jkne9OT1r880VT/kqbfbP5kXZD6Pld74qZeN6JDY5cxmHzMIJrqxjVq2v5HtRTux z3ZMn9umQOCJbM8YifeNoslV4VYrI= 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 57cb2136.7fd3efaa0308-in1; Sat, 03 Sep 2016 19:15:02 -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 EC2DF626B5; Sat, 3 Sep 2016 19:15:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=overt.org; s=mail; t=1472930102; bh=hUVvBKg9Z4V3jmJ6f8KSL7mih5GjDEl1aRbuf/GJftU=; h=From:To:Cc:Subject:Date:From; b=jUe14k20QbaMfwiuiSG7M0DoBKanXDKy/wR/zUlrACyMyb5ZFQdzqHphQDpyxT3la QzuV4eX7VDE+cXibJm8a123dSo+WvfGHvOtIU/NQdK2cRqkJMKht6Sh3KCjOU/cB9Z wyTyPc7txAT5yCX2z2tz3T7EulT9Mz4BuFTstGW7oIqBa/CxYw2UTkvB17uPu2wGMu TGc9tpq0cDpiwmoDgxYz3i5eIwqXkNxM4ungdhBcbWIF2PJHguqGj33BQQNOf9bSwR bITY3INQQCX8tF2TJgKqYnont2S0FmViKPI6R+rtGqXN3DJXGedLIitOVjLjsV3F1S dURspSr5bPhUQ== From: Philip Langdale To: ffmpeg-devel@ffmpeg.org Date: Sat, 3 Sep 2016 12:14:55 -0700 Message-Id: <1472930095-18826-1-git-send-email-philipl@overt.org> Subject: [FFmpeg-devel] [PATCH] 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..85c9615 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #define LIBAVCODEC_VERSION_MAJOR 57 #define LIBAVCODEC_VERSION_MINOR 54 -#define LIBAVCODEC_VERSION_MICRO 102 +#define LIBAVCODEC_VERSION_MICRO 103 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \