From patchwork Sun Nov 19 19:52:27 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philip Langdale X-Patchwork-Id: 6200 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp3111965jah; Sun, 19 Nov 2017 11:53:09 -0800 (PST) X-Google-Smtp-Source: AGs4zMbdWEOpNbXYGk74N9VBwiVG08MLQjzm5tnS/NDpRLEGUm9Wj5lS/n1GqcQosNqkfqUpJ8JV X-Received: by 10.223.170.193 with SMTP id i1mr8580401wrc.218.1511121188990; Sun, 19 Nov 2017 11:53:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511121188; cv=none; d=google.com; s=arc-20160816; b=NDHDV49fbcxP1R3oTX2bg4f4jZUwc8tziLFZO4TnqBX/9LlUKXyNByYqdVxxSC+CAG gpr4iGcVOslnglrPcHTHbw9rW8vsyMAuvwk8+bRarjCW6QnvA2ypnxcl1aADdS5rY9pp Shp6vEPwgPkNKMQMJcFhVT/ogtrmeeeYgcXfxQws38op4qilVDGIZ4P21J8j9ZkEqkRb E7CGC3Ehrwq/PypWlbdPbelytgZKsueCxG8DC62cT5ju96bRgNbv5fUsl6RjKcPcWzCk P3rj+GqhgqW8pyPrkd9E/9qarEzfytg4gUOqKljmQ6Uiq7A9iKm5l1fp46ZtCmAsrGM2 GTig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=9Jw/jY0WZKDk8ak57D1PnbJRaW/e9gfiqBC0gHfDihM=; b=fOUD3aMkdZZaCcjHVkkurbtgh4h7YkSOq7fPLxxfoxoBedVWCbR5wnXINwG+XKHzsz 216F66Ccvqt9dhLu3obEtzA/2uG6Dx9/TCoRskrEkEnFZ+Gl8ESN8YV7qzrSiyuNzvYI YemTup0+hEZR5Pzdod0MPUvqUqE398bzCg37kXFbPtUXzrb5nz0aVGBKLb33aywho3m1 m7t3k4Lh6KhS5wQS3HT+mrU/EyU0Vll5kWQj+bZ/a1y70gWIXCw516+Ev2Q4D3sxsu9y 6rFEH03e149ShdazpUWtx7i/C69hw4RmeLIrV/mmusUZNCN6xNQYnOyj096Awm6p0bNM TCQQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@overt.org header.s=mail header.b=Rf6EmLay; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id u138si6171894wmu.221.2017.11.19.11.53.08; Sun, 19 Nov 2017 11:53:08 -0800 (PST) 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 header.s=mail header.b=Rf6EmLay; 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 637DD688374; Sun, 19 Nov 2017 21:52:33 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-it0-f100.google.com (mail-it0-f100.google.com [209.85.214.100]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 90416688323 for ; Sun, 19 Nov 2017 21:52:25 +0200 (EET) Received: by mail-it0-f100.google.com with SMTP id n134so9553502itg.3 for ; Sun, 19 Nov 2017 11:52:42 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:from:to:cc:subject:date :message-id:in-reply-to:references; bh=rfEy1flAOryUpsdnOeBejV7IOTPJjFhv0tGTn4u9YVo=; b=VsngSimtQ003YWoiXkl/MycGycyMeVy4Byr5PWpxEFc27ECPqg55p3vsBmUnTlI114 CbTcXN7A3nnKOldoWY8HADfvOCuOKDZKzr3ZbclObB5ugMuHjbY0iCHgi092G6vqFd6B x7odQx8jWjJA53ubdpn53wm+8EYyQzZfmnYFTp+8+TqIkaxs02Zg/UAMhHDMWnwL8VBK CfmcleQuNssGnMkO8u4bF5LTmVZiOX8ISJwpoSqxDVOdt2gyiSYwgPcfAgaijvbP3Gt/ Mo91RYGnGXfHsDN1qDRgMMog0iQ+fMZUx96QvjhCSn9xPYO/PpxHTzOqkfraJ+5HEJyC b2jA== X-Gm-Message-State: AJaThX5j9T0Xx9f7pcTdZqmLWq2jmU/wmvNdurThgIpibnDq/7ilIV+P Rf5+teJ2obdS6aScKAQH2fmtTC/dMKwpf5uYoCiZ3yKMKdpLSw== X-Received: by 10.36.8.136 with SMTP id 130mr16023538itc.18.1511121161619; Sun, 19 Nov 2017 11:52:41 -0800 (PST) Received: from mail.overt.org (155.208.178.107.bc.googleusercontent.com. [107.178.208.155]) by smtp-relay.gmail.com with ESMTPS id h66sm1604465itg.0.2017.11.19.11.52.41 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 19 Nov 2017 11:52:41 -0800 (PST) X-Relaying-Domain: gapps.overt.org Received: from authenticated-user (mail.overt.org [107.178.208.155]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.overt.org (Postfix) with ESMTPSA id 28A06627DF; Sun, 19 Nov 2017 19:52:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=overt.org; s=mail; t=1511121161; bh=cyUI6Pnh8nxuabnGLeRhiLEU1QPUu3O9ApvSyMSHZNA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Rf6EmLayyAhZfHlj0VzqjI5zT7DmrS16Qiu14DY9UiNvLGEKVtBkP4Nulhyr6UzWv fClZPlgJ+fbKGnHRP0Znm5y3wXRGRKhTjQwoR7L4WijZGnX4dXeuOcYLJ2YH4+/3J5 bJrQ1qu9ACTAe5WR1pSphRCo6INRu078b7wBQiIYjynwH+9iDzH2sAp8VIvdVQvFuG n9jf6eVgN2eC0BBjtJXKU96MKa1N2IxQMdwjDN9RZ+6SkvOKooH9qEE9qXyXNc1njg 7jHFvV9Jjs5VYS/fPe4asN2Wc1VrW1PcxN5L7tmJ0/gfSGwfy4xSahUAFidOp1PR2t X3MVCSpUwt9IQ== From: Philip Langdale To: ffmpeg-devel@ffmpeg.org Date: Sun, 19 Nov 2017 11:52:27 -0800 Message-Id: <20171119195228.25719-3-philipl@overt.org> In-Reply-To: <20171119195228.25719-1-philipl@overt.org> References: <20171119195228.25719-1-philipl@overt.org> Subject: [FFmpeg-devel] [PATCH 2/3] avcodec: Implement mpeg1 nvdec hwaccel 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" 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 | 2 +- 8 files changed, 27 insertions(+), 3 deletions(-) diff --git a/Changelog b/Changelog index e1f8a648b0..5a9d183aed 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 - acontrast audio filter diff --git a/configure b/configure index 48761934be..35713805fa 100755 --- a/configure +++ b/configure @@ -2700,6 +2700,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 97ff605f0f..d5cf1058cb 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 db9cebeddd..e29d085a79 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 * @@ -105,3 +105,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 = ff_nvdec_simple_end_frame, + .decode_slice = ff_nvdec_simple_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..ff54670ea9 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #define LIBAVCODEC_VERSION_MAJOR 58 #define LIBAVCODEC_VERSION_MINOR 3 -#define LIBAVCODEC_VERSION_MICRO 103 +#define LIBAVCODEC_VERSION_MICRO 104 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \