From patchwork Wed Feb 17 10:13:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 25686 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 58285449181 for ; Wed, 17 Feb 2021 12:14:32 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 484AA68A591; Wed, 17 Feb 2021 12:14:32 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DC91368A32E for ; Wed, 17 Feb 2021 12:14:24 +0200 (EET) Received: by mail-wr1-f54.google.com with SMTP id l12so16792929wry.2 for ; Wed, 17 Feb 2021 02:14:24 -0800 (PST) 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:reply-to :mime-version:content-transfer-encoding; bh=4+CD2lKa33sfV+/UQjiMRqdw6rvWSEAc6+70AIHgnbY=; b=W0xMVpLiMj1C2FWD+ejs/8qkmIazq9+BYg/xyShQV5/hzTGD9LaynrMF8bNJ6m1AST c289xpoKUXr9g6wCX7zrHFc+B5Cv4mu3Q7DzYFPMGMpVaqEl5eKXA9b1Bc6CM0CYXiOa dVzgOc8TaS2PhBT87Soe5FW6FieTDtCJkPsB/JDPTCrsEu3kQAsSzIyVcz/VTWVI28aw 0y1LgX6TB70yL2VY3n/UA2c9X+OMARoNMPZlDN6857+6gCXGRDPIlxKP25cezwocYLqn Z92l9+9OV2ZEjhdpmTVL7cpJdP3czv67ksEG4W/JiVnW9SOx8bY/H7EIy7dgSGx12xod XgBg== 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:reply-to:mime-version:content-transfer-encoding; bh=4+CD2lKa33sfV+/UQjiMRqdw6rvWSEAc6+70AIHgnbY=; b=oKO2VthTi5kaeJtMrGIlXeNmCPlHi7xZ3P2aw5WTRZIfaDLyxqmJy5A9mBMlqSU8YV 13+liyXVWsXPqb5VfCFb5s5CoWT/y1/TmYlHFhKanxUOf0b2GjndQHflSLE+Knzuiop7 ef95phUUuAWLvGVch9MhcYDGmU2xuIS60ghm1ZDGk3mDLIO2wvix4MgIc8MNGOpiECuZ GfkwQWWZtAIucxOLaeftE1YVc1Qy81Y5B9ikvfOkcwUrkOzAYg86ncO8yC0wveWjggU/ dFUGxEAgUa5RtEA9vRNilzCbxu6IODEW4lwsyy7aJ3zx8DxiclqJj6CuRmlV8yyvG2MM Zbqg== X-Gm-Message-State: AOAM532ApPTbgzkH/Wm1Wn8M2rKY4F6VjjrUmtVcolkWpcUQsEM4gDBz DGqNiRTur9md0zLWA6w41JTlm38Ike8= X-Google-Smtp-Source: ABdhPJzsj1tgk9zXWAFqScRETDX2VIs4SdDUSr/iGaKf0SRhff8j1Qyd5EbPQBWJcM36ktr1CISlzQ== X-Received: by 2002:adf:ce04:: with SMTP id p4mr28390578wrn.101.1613556864148; Wed, 17 Feb 2021 02:14:24 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id v12sm3502828wrv.69.2021.02.17.02.14.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Feb 2021 02:14:23 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 17 Feb 2021 11:13:40 +0100 Message-Id: <20210217101356.1723370-3-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210217101356.1723370-1-andreas.rheinhardt@gmail.com> References: <20210217101356.1723370-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 03/19] avformat/matroskadec: Check min_luminance more thoroughly 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" In the absence of an explicitly coded minimal luminance, the current code inferred it to be -1, an invalid value. Yet it did not check the value lateron at all, so that if a valid maximum luminance is encountered, but no minimal luminance, an invalid minimal luminance of -1 is exported. If an minimal luminance element with a negative value is present, it is exported, too. This can be simply fixed by adding a check for the value of the element. Yet given that a minimal luminance of zero Cd/m² is legal and can be coded with a length of zero, we must not use a fake default value to find out whether the element is present or not. Therefore this patch uses an explicit counter for it. While just at it, also check for max_luminance > min_luminance. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskadec.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index ceb054e8ab..e6f4faa337 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -168,7 +168,7 @@ typedef struct MatroskaMasteringMeta { double white_x; double white_y; double max_luminance; - double min_luminance; + CountedElement min_luminance; } MatroskaMasteringMeta; typedef struct MatroskaTrackVideoColor { @@ -452,7 +452,7 @@ static EbmlSyntax matroska_mastering_meta[] = { { MATROSKA_ID_VIDEOCOLOR_BY, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, b_y) }, { MATROSKA_ID_VIDEOCOLOR_WHITEX, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, white_x) }, { MATROSKA_ID_VIDEOCOLOR_WHITEY, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, white_y) }, - { MATROSKA_ID_VIDEOCOLOR_LUMINANCEMIN, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, min_luminance), { .f=-1 } }, + { MATROSKA_ID_VIDEOCOLOR_LUMINANCEMIN, EBML_FLOAT, 1, 0, offsetof(MatroskaMasteringMeta, min_luminance) }, { MATROSKA_ID_VIDEOCOLOR_LUMINANCEMAX, EBML_FLOAT, 0, 0, offsetof(MatroskaMasteringMeta, max_luminance) }, CHILD_OF(matroska_track_video_color) }; @@ -2110,7 +2110,10 @@ static int mkv_parse_video_color(AVStream *st, const MatroskaTrack *track) { mastering_meta->g_x > 0 && mastering_meta->g_y > 0 && mastering_meta->b_x > 0 && mastering_meta->b_y > 0 && mastering_meta->white_x > 0 && mastering_meta->white_y > 0; - has_mastering_luminance = mastering_meta->max_luminance > 0; + has_mastering_luminance = mastering_meta->max_luminance > + mastering_meta->min_luminance.el.f && + mastering_meta->min_luminance.el.f >= 0 && + mastering_meta->min_luminance.count; if (color->matrix_coefficients != AVCOL_SPC_RESERVED) st->codecpar->color_space = color->matrix_coefficients; @@ -2169,7 +2172,7 @@ static int mkv_parse_video_color(AVStream *st, const MatroskaTrack *track) { } if (has_mastering_luminance) { metadata->max_luminance = av_d2q(mastering_meta->max_luminance, INT_MAX); - metadata->min_luminance = av_d2q(mastering_meta->min_luminance, INT_MAX); + metadata->min_luminance = av_d2q(mastering_meta->min_luminance.el.f, INT_MAX); metadata->has_luminance = 1; } }