From patchwork Mon Apr 13 22:14:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Bradshaw X-Patchwork-Id: 18933 Delivered-To: andriy.gelman@gmail.com Received: by 2002:ad4:45d0:0:0:0:0:0 with SMTP id v16csp213463qvt; Mon, 13 Apr 2020 15:23:16 -0700 (PDT) X-Google-Smtp-Source: APiQypJfKaMFz0YBGA9fmd3IqgvxQnefIheL88lkDcYsNNV9qO4R/rYG8vA6LrItE8lnPcXM6PbI X-Received: by 2002:a05:600c:1:: with SMTP id g1mr14959180wmc.49.1586816595974; Mon, 13 Apr 2020 15:23:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1586816595; cv=none; d=google.com; s=arc-20160816; b=SmTy/v4YpsOqv1/8ImHAPvKPU+9EX5/H76GFesFz9qnTw8LQk12Alr39cZZx7SNRyI CGWczG1bXBB4N/h4hPRDtKoEV3hV8YbOdBtPBhjTCx836teI6jkQPFQKjHrXS8P+ikak edU/62IW53s7BHIiFaYSkQV+s3+jVAoY9/E6UpYLj3H1DlyaqSKMeYkK43kKrq1TBeri xCPOfBoDheXnCmGucXyR6r3K8MvEQ499XGQcatiVSkD+mbjGSlYmfIlSdZQZJbYZxFqs 21gGX/W+qZQZHaosvGcipCFH+4PigBS80THJaRpBCxoDwNabmYtsmWTayCVmkPZBgemC WJHw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject:to :message-id:date:from:in-reply-to:references:mime-version :dkim-signature:delivered-to; bh=p0nNxqx9/y2DZvA0SjBrzNslHwbsJqLcZXTVyyx6ZC4=; b=xx7y42XulB4CLBZX7FNmI2StakEQy9M6Wlb8PoPbqb6fITbxH7epf6xm0mnfvbStRJ Q2dJgVv3FcGFHEuTdtQM513iI3VSv3iKNm37wYT0Ah/BPErWnqcPpp6zOfO2vPCyxMBb DWkyzoyDLVYeg+IUCha0gChHnZisruXwbmFDO+C3jfFDvBypkdH0YSVuC4LgkGqJnvho HgoRZD+/nzw5F0Rcha9CYSPOGhfOySw/PBqprXAiwyo5blq+/bRUXgaPUHCYkGaiDM3c dD/EP6g5V46kHvWqKW+zhj/Kr13e3/RK3FmrUTbWHSW2cHbt7EjgYdL98t8hyLLOoNup OL5g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@google.com header.s=20161025 header.b=ng0SDplW; 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 s4si8018961wmh.191.2020.04.13.15.23.15; Mon, 13 Apr 2020 15:23: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=@google.com header.s=20161025 header.b=ng0SDplW; 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 768BE68B7F1; Tue, 14 Apr 2020 01:23:14 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4C08068B570 for ; Tue, 14 Apr 2020 01:23:08 +0300 (EEST) Received: by mail-wm1-f68.google.com with SMTP id e26so10888610wmk.5 for ; Mon, 13 Apr 2020 15:23:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=GTYoxZ914nCqZNh5BZFTPBdTN0UUX50aFTOffkG6eSk=; b=ng0SDplWxY+97Mo9J3Tw7HhvNPPPsy0i8s2pPkrzleq/z5Px1gjjYzEpapa4KifWC3 DhgU8Fu/NIUWr8OQziAWR13c2kmsy7eK9T0QXv7RibumEBEEtHD793nnFF+mvGTLCaUQ Vcr6L8WMY+0QyyXYLtW6FX3NqmR7SWFkJ+YjQRF3lChJ/eYfove2VmJz3elwtIQWKozH FF8mpA102O0FRvGSzYOngjznS5o9OmCJCDFIj1t2LDK22ujY+3UNU3KV/BLq3YnJNIPk epmlr5VWdvYgQUkjE4I4mXK3U6GfHP+lt3x8xYSoGRJOJCl1W5Io5vtbsFbPUIHxtXqK QNLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=GTYoxZ914nCqZNh5BZFTPBdTN0UUX50aFTOffkG6eSk=; b=Qzq7iObX8q9mX++IR5bWIrXZgZHuiji+tlhr5adOCYzSqRbonrze+oREeWD8dWhpYh UMaNxLIbcPsBzTnxi5DZppTaHHP5efQLt/bxFDS0y9A1v5kxbb7zsihHgTsAeNX35W9T No8Wzwvm6ti9McO8nlOFO4VSTB4mvZx/Mwlr0DowVg9G/JRcMxHTsMs4sUfFD5W234l8 XVKicVCIGb43ZkuTon+oGC7r4OP964uP/0xamRn0KndK2sEUTMOwqQb93LpUS8L9JaNz IIb3YKcpO+weN1ZcCf1iajAVenDbOIzCAGUqHFJVn1bF3B4SH3x/Mv0vxOB8Zlxte/K8 gQtA== X-Gm-Message-State: AGi0Puag/+SsUQQ6m/OEKwurO16zDjZBTBFWNRY+IwkvmTk07rsta3+r GQ7dChSzzcYGQyUv5etpd4DKInGrH9zuIzIznoaR0iwiJ6o= X-Received: by 2002:a1c:b38b:: with SMTP id c133mr19935729wmf.24.1586816084117; Mon, 13 Apr 2020 15:14:44 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Michael Bradshaw Date: Mon, 13 Apr 2020 16:14:32 -0600 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.20 Subject: [FFmpeg-devel] [PATCH v3] avformat/movenc: write the colr atom by default 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: kn7oByVrXL8k Content-Length: 7435 Attached is an updated patch that passes fate. From 28a67ab952dabb0bba0c1349a9eabffa74269b46 Mon Sep 17 00:00:00 2001 From: Michael Bradshaw Date: Mon, 13 Apr 2020 11:11:38 -0600 Subject: [PATCH] avformat/movenc: write the colr atom by default The write_colr flag has been marked as experimental for over 5 years. It should be safe to enable its behavior by default as follows: - Write the colr atom by default for mp4/mov if any of the following: - The primaries/trc/matrix are all specified, OR - There is an ICC profile, OR - The user specified +write_colr - Keep the write_colr flag for situations where the user wants to write the colr atom even if the color info is unspecified (e.g., http://ffmpeg.org/pipermail/ffmpeg-devel/2020-March/259334.html) This fixes https://trac.ffmpeg.org/ticket/7961 Signed-off-by: Michael Bradshaw --- libavformat/movenc.c | 18 ++++++++++++------ tests/ref/fate/copy-trac236 | 4 ++-- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index bc8d08044e..4a4c9ce481 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -77,7 +77,7 @@ static const AVOption options[] = { { "delay_moov", "Delay writing the initial moov until the first fragment is cut, or until the first fragment flush", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_DELAY_MOOV}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" }, { "global_sidx", "Write a global sidx index at the start of the file", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_GLOBAL_SIDX}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" }, { "skip_sidx", "Skip writing of sidx atom", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_SKIP_SIDX}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" }, - { "write_colr", "Write colr atom (Experimental, may be renamed or changed, do not use from scripts)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_WRITE_COLR}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" }, + { "write_colr", "Write colr atom even if the color info is unspecified (Experimental, may be renamed or changed, do not use from scripts)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_WRITE_COLR}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" }, { "prefer_icc", "If writing colr atom prioritise usage of ICC profile if it exists in stream packet side data", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_PREFER_ICC}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" }, { "write_gama", "Write deprecated gama atom", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_WRITE_GAMA}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" }, { "use_metadata_tags", "Use mdta atom for metadata.", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_USE_MDTA}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" }, @@ -2135,11 +2135,17 @@ static int mov_write_video_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContex else av_log(mov->fc, AV_LOG_WARNING, "Not writing 'gama' atom. Format is not MOV.\n"); } - if (mov->flags & FF_MOV_FLAG_WRITE_COLR) { - if (track->mode == MODE_MOV || track->mode == MODE_MP4) - mov_write_colr_tag(pb, track, mov->flags & FF_MOV_FLAG_PREFER_ICC); - else - av_log(mov->fc, AV_LOG_WARNING, "Not writing 'colr' atom. Format is not MOV or MP4.\n"); + if (track->mode == MODE_MOV || track->mode == MODE_MP4) { + int has_color_info = track->par->color_primaries != AVCOL_PRI_UNSPECIFIED && + track->par->color_trc != AVCOL_TRC_UNSPECIFIED && + track->par->color_space != AVCOL_SPC_UNSPECIFIED; + if (has_color_info || mov->flags & FF_MOV_FLAG_WRITE_COLR || + av_stream_get_side_data(track->st, AV_PKT_DATA_ICC_PROFILE, NULL)) { + int prefer_icc = mov->flags & FF_MOV_FLAG_PREFER_ICC || !has_color_info; + mov_write_colr_tag(pb, track, prefer_icc); + } else if (mov->flags & FF_MOV_FLAG_WRITE_COLR) { + av_log(mov->fc, AV_LOG_WARNING, "Not writing 'colr' atom. Format is not MOV or MP4.\n"); + } } if (track->mode == MODE_MOV || track->mode == MODE_MP4) { mov_write_clli_tag(pb, track); diff --git a/tests/ref/fate/copy-trac236 b/tests/ref/fate/copy-trac236 index 1583ae5704..c34b309b3f 100644 --- a/tests/ref/fate/copy-trac236 +++ b/tests/ref/fate/copy-trac236 @@ -1,5 +1,5 @@ -984a33c6292e3d35e2cfdfbf66d8e82b *tests/data/fate/copy-trac236.mov -630860 tests/data/fate/copy-trac236.mov +34b0ad38518b0eb8464aff04e6d0e143 *tests/data/fate/copy-trac236.mov +630878 tests/data/fate/copy-trac236.mov #tb 0: 100/2997 #media_type 0: video #codec_id 0: rawvideo -- 2.24.0.525.g8f36a354ae-goog