Re: [FFmpeg-devel] [PATCH] avcodec: Implement mpeg1 nvdec hwaccel

2017-11-20 Thread Timo Rothenpieler

simple enough, lgtm



smime.p7s
Description: S/MIME Cryptographic Signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH] avcodec: Implement mpeg1 nvdec hwaccel

2017-11-18 Thread Philip Langdale
Once I remembered that there's a separate decoder type for mpeg1,
even though params struct is shared with mpeg2, everything worked.

Signed-off-by: Philip Langdale 
---
 Changelog |  2 +-
 configure |  2 ++
 libavcodec/Makefile   |  1 +
 libavcodec/allcodecs.c|  1 +
 libavcodec/mpeg12dec.c|  3 +++
 libavcodec/nvdec.c|  1 +
 libavcodec/nvdec_mpeg12.c | 18 +-
 libavcodec/version.h  |  4 ++--
 8 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/Changelog b/Changelog
index cda59166fc..7833c4ad09 100644
--- a/Changelog
+++ b/Changelog
@@ -13,7 +13,7 @@ version :
 - PCE support for extended channel layouts in the AAC encoder
 - native aptX encoder and decoder
 - Raw aptX muxer and demuxer
-- NVIDIA NVDEC-accelerated H.264, HEVC, MPEG-2, VC1 and VP9 hwaccel decoding
+- NVIDIA NVDEC-accelerated H.264, HEVC, MPEG-1/2, VC1 and VP9 hwaccel decoding
 - Intel QSV-accelerated overlay filter
 - mcompand audio filter
 
diff --git a/configure b/configure
index 8b7b7e164b..31e7fcc4c0 100755
--- a/configure
+++ b/configure
@@ -2698,6 +2698,8 @@ mjpeg_cuvid_hwaccel_select="mjpeg_cuvid_decoder"
 mpeg_xvmc_hwaccel_deps="xvmc"
 mpeg_xvmc_hwaccel_select="mpeg2video_decoder"
 mpeg1_cuvid_hwaccel_select="mpeg1_cuvid_decoder"
+mpeg1_nvdec_hwaccel_deps="nvdec"
+mpeg1_nvdec_hwaccel_select="mpeg1video_decoder"
 mpeg1_vdpau_hwaccel_deps="vdpau"
 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
 mpeg1_videotoolbox_hwaccel_deps="videotoolbox"
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 494c76da76..0573454c7b 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -849,6 +849,7 @@ OBJS-$(CONFIG_HEVC_NVDEC_HWACCEL) += nvdec_hevc.o
 OBJS-$(CONFIG_HEVC_QSV_HWACCEL)   += qsvdec_h2645.o
 OBJS-$(CONFIG_HEVC_VAAPI_HWACCEL) += vaapi_hevc.o
 OBJS-$(CONFIG_HEVC_VDPAU_HWACCEL) += vdpau_hevc.o
+OBJS-$(CONFIG_MPEG1_NVDEC_HWACCEL)+= nvdec_mpeg12.o
 OBJS-$(CONFIG_MPEG1_VDPAU_HWACCEL)+= vdpau_mpeg12.o
 OBJS-$(CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL) += videotoolbox.o
 OBJS-$(CONFIG_MPEG1_XVMC_HWACCEL) += mpegvideo_xvmc.o
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index e0adb71951..e9df7049de 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -87,6 +87,7 @@ static void register_all(void)
 REGISTER_HWACCEL(HEVC_VIDEOTOOLBOX, hevc_videotoolbox);
 REGISTER_HWACCEL(MJPEG_CUVID,   mjpeg_cuvid);
 REGISTER_HWACCEL(MPEG1_CUVID,   mpeg1_cuvid);
+REGISTER_HWACCEL(MPEG1_NVDEC,   mpeg1_nvdec);
 REGISTER_HWACCEL(MPEG1_XVMC,mpeg1_xvmc);
 REGISTER_HWACCEL(MPEG1_VDPAU,   mpeg1_vdpau);
 REGISTER_HWACCEL(MPEG1_VIDEOTOOLBOX, mpeg1_videotoolbox);
diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c
index 2b213eebcd..5a51d09bb0 100644
--- a/libavcodec/mpeg12dec.c
+++ b/libavcodec/mpeg12dec.c
@@ -1130,6 +1130,9 @@ static void quant_matrix_rebuild(uint16_t *matrix, const 
uint8_t *old_perm,
 }
 
 static const enum AVPixelFormat mpeg1_hwaccel_pixfmt_list_420[] = {
+#if CONFIG_MPEG1_NVDEC_HWACCEL
+AV_PIX_FMT_CUDA,
+#endif
 #if CONFIG_MPEG1_XVMC_HWACCEL
 AV_PIX_FMT_XVMC,
 #endif
diff --git a/libavcodec/nvdec.c b/libavcodec/nvdec.c
index 3d62840e9f..c29d45f9b3 100644
--- a/libavcodec/nvdec.c
+++ b/libavcodec/nvdec.c
@@ -54,6 +54,7 @@ static int map_avcodec_id(enum AVCodecID id)
 switch (id) {
 case AV_CODEC_ID_H264:   return cudaVideoCodec_H264;
 case AV_CODEC_ID_HEVC:   return cudaVideoCodec_HEVC;
+case AV_CODEC_ID_MPEG1VIDEO: return cudaVideoCodec_MPEG1;
 case AV_CODEC_ID_MPEG2VIDEO: return cudaVideoCodec_MPEG2;
 case AV_CODEC_ID_VC1:return cudaVideoCodec_VC1;
 case AV_CODEC_ID_VP9:return cudaVideoCodec_VP9;
diff --git a/libavcodec/nvdec_mpeg12.c b/libavcodec/nvdec_mpeg12.c
index 127e843d85..9913ff17c8 100644
--- a/libavcodec/nvdec_mpeg12.c
+++ b/libavcodec/nvdec_mpeg12.c
@@ -1,5 +1,5 @@
 /*
- * MPEG-2 HW decode acceleration through NVDEC
+ * MPEG-1/2 HW decode acceleration through NVDEC
  *
  * Copyright (c) 2017 Philip Langdale
  *
@@ -150,3 +150,19 @@ AVHWAccel ff_mpeg2_nvdec_hwaccel = {
 .priv_data_size   = sizeof(NVDECContext),
 };
 #endif
+
+#if CONFIG_MPEG1_NVDEC_HWACCEL
+AVHWAccel ff_mpeg1_nvdec_hwaccel = {
+.name = "mpeg1_nvdec",
+.type = AVMEDIA_TYPE_VIDEO,
+.id   = AV_CODEC_ID_MPEG1VIDEO,
+.pix_fmt  = AV_PIX_FMT_CUDA,
+.start_frame  = nvdec_mpeg12_start_frame,
+.end_frame= nvdec_mpeg12_end_frame,
+.decode_slice = nvdec_mpeg12_decode_slice,
+.frame_params = nvdec_mpeg12_frame_params,
+.init = ff_nvdec_decode_init,
+.uninit   = ff_nvdec_decode_uninit,
+.priv_data_size   = sizeof(NVDECContext),
+};
+#endif
diff --git a/libavcodec/version.h b/libavcodec/version.h
index 5b25a9a8ac..8847737f37