From patchwork Sun Feb 25 02:17:55 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Kacper_Michaj=C5=82ow?= X-Patchwork-Id: 46513 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c51b:b0:19e:cdac:8cce with SMTP id gm27csp697374pzb; Sat, 24 Feb 2024 18:19:19 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCURxYaGCHegr0Kx7iG05eP8kBcbheZCgEMPpcQBFhxEw/zzr+tOZo31tYunonfnxyp+PUU73wnqQabYOBS+1xxCuDPt59ENM4XmbA== X-Google-Smtp-Source: AGHT+IFnJZa16hEW9oKn/Tgx5PSGieU3OiZH83QJOUjZB7lrR6kXiyC06HzyUEhaNJYHacRx5Kxb X-Received: by 2002:a17:906:3caa:b0:a3f:a12:f8e6 with SMTP id b10-20020a1709063caa00b00a3f0a12f8e6mr1724291ejh.6.1708827558984; Sat, 24 Feb 2024 18:19:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708827558; cv=none; d=google.com; s=arc-20160816; b=dogpTlfM7uTHMg7/c+1svyRd+yZBPvXaay1Bv2svsox+T2nE00/WHnyR+cIRvf5Clp yzZblKg3MzCYzRAn9CLYn+C7NMlc9YklArIOpmyTAtRHs9nKsACFT/nPnUUXSXoYa6j4 HozQERssABzXtifmrYc9XtDBLXpfeVDTPj6EPu5w+1TUeg03r+POWwMxgFJdjwGnTvtm NJ8NE6ewsHeRylBUF0L7X/PsShpqgLQWZb0s8KoYqLqsWf0c/9rn6aCmY1lgBq9uDgvi 43mDaSavXB+Lu2wmivZ/UTDpVIImdDXkRH3t4UEMpXMeIQ/f/SPm+ZjFcb0h9vnF1Xql d0lg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=FPArEDzLScBGLPPQtTe73tt5w4qHgRQJW8/+imuz5oA=; fh=VehHF75ibtIiOcMFupA+RvAd8F/HWiWMZFlcjyRnn54=; b=nyNoKr/kMOPbx+sOw0IJkQwJpqDX8q51Ga8TbrexJbsV4qtN7q2unoxvJcXUW2aN+C OWt99b45E5HoQC4FKYXl8b+o7fgTC6bzViLJbSx9iULP2mmPCOAGG71RFmDJtfkzV0Ax J68Sbu6yKx1kBJb1P0ktUSTUCDgy5SMowcaebG4wT8vHyMrH4V+WiDgLSEMzwZwmOu39 X207debdXD/84IQYESu599iTznq6mzF8Jaqekii29ZRKPRErd+ts2XIaa35sPGY7X2sW pG+DcLlB5do9wxkmqKuglmF/F+xab3w847oeE19GbQ2hE3ImgWcEzeXw+8ha6OoU4ZcA S9wQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b="LB+/NszY"; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id lu10-20020a170906faca00b00a3f50cfa110si919318ejb.720.2024.02.24.18.19.18; Sat, 24 Feb 2024 18:19:18 -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=@gmail.com header.s=20230601 header.b="LB+/NszY"; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8DAA468C67B; Sun, 25 Feb 2024 04:19:15 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f174.google.com (mail-lj1-f174.google.com [209.85.208.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0FE9B68C27C for ; Sun, 25 Feb 2024 04:19:09 +0200 (EET) Received: by mail-lj1-f174.google.com with SMTP id 38308e7fff4ca-2d228a132acso22934921fa.0 for ; Sat, 24 Feb 2024 18:19:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1708827548; x=1709432348; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=m0BnnDxA6AFs7jP/zJUIjz1ZOrxKNuU5CgQPjLrueRo=; b=LB+/NszYhKfv25ACFODRxBmNR1fFsAnVYekRVlqnCw+9Mjq3dZv7pMhr8zoLwCxTiW 2VvjoUsuLyiIwHUE6OhQabPWIl3evY9iyx23TT/eBmL4wIvqYegsEKw6qdOu7GpI5VoL /g9oAINYPV/SwttoGD0yt6SBgg6ncHifFHQjhGsfcT40gEFQHgMQoV7FPeEAkq477rH2 QtiB6sjwznZTXHxwAVnUQ5f6IL3ZnkeySiKNOILAM+WVldclHo1aMa4ry4N8wIk66Xd0 Pr13BtOwDnRRo0rDJWMH6CH8RfJJiTmsShljnD3qn1zknW7wISOJHPZfv/zVT1XYqslj Nq9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708827548; x=1709432348; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=m0BnnDxA6AFs7jP/zJUIjz1ZOrxKNuU5CgQPjLrueRo=; b=uAWRE5k7TtY3OOVQnjii1t+gUYgD1i6MbdgyF9AWrJn0XbmapCxYuJY5bUL5e9pOIa XHVWSTo3CUIuzZ+GWO5zQ3/r3LcraiaxksVEtCWpDwdEwQp2FAMsDlI1IcwKkPvfR3mk fd4dKRpwmE/gpWvW2SiisMMhhlqeuCkJa/8k/phwGM9UVmCu7yKFuceb4Gf2D/aF9ge0 1ZR37xFa5+qSnaQbG8Uy9nqu6vwHOfYmGSnD5nTvLiLpytu3qyE2V3eVIO9/flwAeAav GuAqLBKEqypTE1lwvCJgAflIaq2GOtZo2IwudYx4H0iMBSrP/2SXN4xYlqDFiYBzqFd2 jkFw== X-Gm-Message-State: AOJu0Yy1tUqV8jkfMiKTxhGBT+ZAPgqb7Gs3uU5knF+S9OYDP19NPD5q NBoq3CKq7ykHv0xUa8igbAsw3dR2A+19ElbnzvZSsiG1IZ+NmH8IgBUlW97B X-Received: by 2002:a05:6512:324a:b0:512:d689:51cb with SMTP id c10-20020a056512324a00b00512d68951cbmr1867266lfr.26.1708827547668; Sat, 24 Feb 2024 18:19:07 -0800 (PST) Received: from localhost.localdomain (89-74-109-154.dynamic.chello.pl. [89.74.109.154]) by smtp.gmail.com with ESMTPSA id g7-20020ac24d87000000b00512d180fd3asm375330lfe.144.2024.02.24.18.19.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 24 Feb 2024 18:19:07 -0800 (PST) From: =?utf-8?q?Kacper_Michaj=C5=82ow?= To: ffmpeg-devel@ffmpeg.org Date: Sun, 25 Feb 2024 03:17:55 +0100 Message-ID: <20240225021819.1258-1-kasper93@gmail.com> X-Mailer: git-send-email 2.42.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] avcodec/h2645_sei: validate Mastering Display Colour Volume SEI values X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: =?utf-8?q?Kacper_Michaj=C5=82ow?= Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: eEyYIYUGnLUG As we can read in ST 2086: Values outside the specified ranges of luminance and chromaticity values are not reserved by SMPTE, and can be used for purposes outside the scope of this standard. This is further acknowledged by ITU-T H.264 and ITU-T H.265. Which says that values out of range are unknown or unspecified or specified by other means not specified in this Specification. Signed-off-by: Kacper Michajłow --- libavcodec/h2645_sei.c | 53 +++++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 16 deletions(-) diff --git a/libavcodec/h2645_sei.c b/libavcodec/h2645_sei.c index cb6be0594b..e3581e8136 100644 --- a/libavcodec/h2645_sei.c +++ b/libavcodec/h2645_sei.c @@ -715,38 +715,59 @@ int ff_h2645_sei_to_frame(AVFrame *frame, H2645SEI *sei, if (!metadata) return AVERROR(ENOMEM); + metadata->has_luminance = 1; + metadata->has_primaries = 1; + for (i = 0; i < 3; i++) { const int j = mapping[i]; metadata->display_primaries[i][0].num = sei->mastering_display.display_primaries[j][0]; metadata->display_primaries[i][0].den = chroma_den; + metadata->has_primaries &= sei->mastering_display.display_primaries[j][0] >= 5 && + sei->mastering_display.display_primaries[j][0] <= 37000; + metadata->display_primaries[i][1].num = sei->mastering_display.display_primaries[j][1]; metadata->display_primaries[i][1].den = chroma_den; + metadata->has_primaries &= sei->mastering_display.display_primaries[j][1] >= 5 && + sei->mastering_display.display_primaries[j][1] <= 42000; } metadata->white_point[0].num = sei->mastering_display.white_point[0]; metadata->white_point[0].den = chroma_den; + metadata->has_primaries &= sei->mastering_display.white_point[0] >= 5 && + sei->mastering_display.white_point[0] <= 37000; + metadata->white_point[1].num = sei->mastering_display.white_point[1]; metadata->white_point[1].den = chroma_den; + metadata->has_primaries &= sei->mastering_display.white_point[1] >= 5 && + sei->mastering_display.white_point[1] <= 42000; metadata->max_luminance.num = sei->mastering_display.max_luminance; metadata->max_luminance.den = luma_den; + metadata->has_luminance &= sei->mastering_display.max_luminance >= 50000 && + sei->mastering_display.max_luminance <= 100000000; + metadata->min_luminance.num = sei->mastering_display.min_luminance; metadata->min_luminance.den = luma_den; - metadata->has_luminance = 1; - metadata->has_primaries = 1; - - av_log(avctx, AV_LOG_DEBUG, "Mastering Display Metadata:\n"); - av_log(avctx, AV_LOG_DEBUG, - "r(%5.4f,%5.4f) g(%5.4f,%5.4f) b(%5.4f %5.4f) wp(%5.4f, %5.4f)\n", - av_q2d(metadata->display_primaries[0][0]), - av_q2d(metadata->display_primaries[0][1]), - av_q2d(metadata->display_primaries[1][0]), - av_q2d(metadata->display_primaries[1][1]), - av_q2d(metadata->display_primaries[2][0]), - av_q2d(metadata->display_primaries[2][1]), - av_q2d(metadata->white_point[0]), av_q2d(metadata->white_point[1])); - av_log(avctx, AV_LOG_DEBUG, - "min_luminance=%f, max_luminance=%f\n", - av_q2d(metadata->min_luminance), av_q2d(metadata->max_luminance)); + metadata->has_luminance &= sei->mastering_display.min_luminance >= 1 && + sei->mastering_display.min_luminance <= 50000; + + if (metadata->has_luminance || metadata->has_primaries) + av_log(avctx, AV_LOG_DEBUG, "Mastering Display Metadata:\n"); + if (metadata->has_primaries) { + av_log(avctx, AV_LOG_DEBUG, + "r(%5.4f,%5.4f) g(%5.4f,%5.4f) b(%5.4f %5.4f) wp(%5.4f, %5.4f)\n", + av_q2d(metadata->display_primaries[0][0]), + av_q2d(metadata->display_primaries[0][1]), + av_q2d(metadata->display_primaries[1][0]), + av_q2d(metadata->display_primaries[1][1]), + av_q2d(metadata->display_primaries[2][0]), + av_q2d(metadata->display_primaries[2][1]), + av_q2d(metadata->white_point[0]), av_q2d(metadata->white_point[1])); + } + if (metadata->has_luminance) { + av_log(avctx, AV_LOG_DEBUG, + "min_luminance=%f, max_luminance=%f\n", + av_q2d(metadata->min_luminance), av_q2d(metadata->max_luminance)); + } } if (sei->content_light.present) {