From patchwork Wed Jun 19 23:45:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 13636 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 414DE448B0E for ; Thu, 20 Jun 2019 02:57:55 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B8A4768ABB2; Thu, 20 Jun 2019 02:56:00 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B98F468AAF1 for ; Thu, 20 Jun 2019 02:55:51 +0300 (EEST) Received: by mail-wr1-f65.google.com with SMTP id p13so1016015wru.10 for ; Wed, 19 Jun 2019 16:55:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=s0MK1OtW6E5FsJco526IcBOqU5TMalUHyHuqSlxjslQ=; b=CshhkUSX5fM6NNchfTLrKV9Vrwq+oFRoc/qYR99WqoqJgG0q5f73ImIeJkHkKEAbLp MfWDdfFt7kl4fiJiZan93xSahKnfT4lqFd46pw4DnudeWe0HzUPOxVrDz9L30d/VUNus hWLRiKNv4YEHdI958uH2HCY6UpTe+70QCiau2LkQlZwcKQ5rVINFksLsFf4TxurJPP+f yEH8oakQju8F92xtWxzpBZfyBE8wV5BnhwUzaM7iGi+bwvo7DvsmvotsfI4MxWYdxfa6 8Bq49FNILg9F8gYkJsbxI9XpHz2yd6Df/0kV+NteXj1rlsM3+ChApmC2YqJ2vOaJkrDU z1+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=s0MK1OtW6E5FsJco526IcBOqU5TMalUHyHuqSlxjslQ=; b=SXlkRxJH8/jjEW75LWLYtOMVva8XMQnW0V5UTsBVBOIH2TIINWbHJDsoL8nwyOx11B JFRXpo75x7eRNr8EnL9iPDgOnmFe/bHfWPOGCLScVDyAQTzhKsRHhndF+q6EtDWNxz4L rExjU4Leqy1fdKfWRYZsuuTrfgGhWexe800qMGLc6qj1dLkJeCTWlh2fm6uB4rDPynMl nM9xzuLih8HQu4UwQDb5uhpnM/0JICHGGmU3R8zvZ3w2O8s3cK/JqMVc0Qw+AqGXibpN E0qCV+dg1AoQ1OgQ534HGQ/US7LR7iNrO90v8uYLjP04b6xYtyJwXLeJttEvbWTQkN5U lbDQ== X-Gm-Message-State: APjAAAUVC25nCHQHDupijHvTHPK+PdKcfp2UvGKrW+Cp6LlEA8et8ln1 meE0ke1JDvdHYJJkmcPMtE+v2ruy X-Google-Smtp-Source: APXvYqw2FiQjA+pFAP0zVZAVjC3aARbGc2xcl8B33+OtzNWQsQFPh4vezDgiJtwfGrrvCufZhCR7SQ== X-Received: by 2002:a5d:694a:: with SMTP id r10mr67528875wrw.345.1560988551117; Wed, 19 Jun 2019 16:55:51 -0700 (PDT) Received: from localhost.localdomain (ipbcc063db.dynamic.kabel-deutschland.de. [188.192.99.219]) by smtp.gmail.com with ESMTPSA id t63sm2758989wmt.6.2019.06.19.16.55.50 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Wed, 19 Jun 2019 16:55:50 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 20 Jun 2019 01:45:19 +0200 Message-Id: <20190619234521.15619-21-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190619234521.15619-1-andreas.rheinhardt@gmail.com> References: <20190617034223.21195-1-andreas.rheinhardt@gmail.com> <20190619234521.15619-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 29/31] vp9_metadata: Update AVCodecParameters 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This commit adds an option to not only update the bitstream parameters when using the vp9_metadata bitstream filter, but also the relevant AVCodecParameters. The new option is on by default. This commit also adds documentation for this value. Signed-off-by: Andreas Rheinhardt --- doc/bitstream_filters.texi | 7 +++++++ libavcodec/vp9_metadata_bsf.c | 24 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/doc/bitstream_filters.texi b/doc/bitstream_filters.texi index c9dff7ae03..80be525e0f 100644 --- a/doc/bitstream_filters.texi +++ b/doc/bitstream_filters.texi @@ -680,6 +680,13 @@ imposed by the color space will take precedence over this value. @item tv @item pc @end table + +@item full_update +If this is set, an effort is made to update the AVCodecParameters in addition +to the bitstream. If unset, muxers might add header information based upon +the old AVCodecParameters that contradicts and potentially precedes +the changes made at the bitstream level. On by default. + @end table @section vp9_superframe diff --git a/libavcodec/vp9_metadata_bsf.c b/libavcodec/vp9_metadata_bsf.c index 52e962b1c0..338d6d2af3 100644 --- a/libavcodec/vp9_metadata_bsf.c +++ b/libavcodec/vp9_metadata_bsf.c @@ -34,6 +34,8 @@ typedef struct VP9MetadataContext { int color_range; int color_warnings; + + int full_update; } VP9MetadataContext; @@ -109,6 +111,25 @@ static int vp9_metadata_init(AVBSFContext *bsf) { VP9MetadataContext *ctx = bsf->priv_data; + if (ctx->full_update) { + AVCodecParameters *par = bsf->par_out; + static const uint8_t conversion_table[8] = { + AVCOL_SPC_UNSPECIFIED, AVCOL_SPC_BT470BG, + AVCOL_SPC_BT709, AVCOL_SPC_SMPTE170M, + AVCOL_SPC_SMPTE240M, AVCOL_SPC_BT2020_NCL, + AVCOL_SPC_RESERVED, AVCOL_SPC_RGB + }; + + if (ctx->color_space >= 0 && (par->profile & 1 || + ctx->color_space != VP9_CS_RGB)) + par->color_space = conversion_table[ctx->color_space]; + + if (par->color_space == AVCOL_SPC_RGB) + par->color_range = AVCOL_RANGE_JPEG; + else if (ctx->color_range >= 0) + par->color_range = ctx->color_range + 1; + } + return ff_cbs_init(&ctx->cbc, AV_CODEC_ID_VP9, bsf); } @@ -149,6 +170,9 @@ static const AVOption vp9_metadata_options[] = { { "pc", "PC (full) range", 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, .flags = FLAGS, .unit = "cr" }, + { "full_update", "Update not only bitstream, but also AVCodecParameters", + OFFSET(full_update), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, FLAGS}, + { NULL } };