From patchwork Mon Feb 26 13:47:30 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: 46540 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c51b:b0:19e:cdac:8cce with SMTP id gm27csp1374456pzb; Mon, 26 Feb 2024 05:48:33 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVB8PKpuP20Kq5q+Ll51quskO/9WVW59Lr1wxmSczrAKWlU5aQa94RIoF5/xUx0xHE+PQpAsPuRKlJFFNcNV/Rw7HTicLvZ5sH4/A== X-Google-Smtp-Source: AGHT+IHHv0GjmEHhe5Fsfd1/xEM7eQS3NNha/dSwctGM8Jiq3TfjxyrCprmYy+FcOSU9zfGs9PQ+ X-Received: by 2002:a17:907:208f:b0:a3f:421:26a5 with SMTP id pv15-20020a170907208f00b00a3f042126a5mr6487329ejb.12.1708955313459; Mon, 26 Feb 2024 05:48:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708955313; cv=none; d=google.com; s=arc-20160816; b=ihValXVj8BM4O3S8WnpH5V3mvUkac9ybTV1d0/iTESMxFVyLlU4rzykN5JD4JX7/wu +xcwXHP370wWVwRJH0pCIec6Cuqxf5TzXOfO/eq20eZsq2RzhZol9np4mdLzC/LZhYWS nFFV38KCxmyl79XXZLdFDC976k/eIANGC/FBpqRW67SewR5N50fcwI/QOsAnrPn3cauy aPu7VyaSlp0UZgcS7HSCZq5m2NNcGOpCQldSYApiEvtLeLe1C+PQpN10mKzEOWUpRr2i zQjzf7W9gD9QpdWCz9lEftLrjevjY8/n71csvrpoIPn84VcDJ2PaoxCoiH0/qqqM4xOw HENQ== 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=z19x8ZKd0SePpfP0EjTj0k9CfWrldZDZB18Ei2A5+sM=; fh=VehHF75ibtIiOcMFupA+RvAd8F/HWiWMZFlcjyRnn54=; b=kO+Y/Wxz836y6vmA242dvedQ6SicArVCVZh+z7BFRW6NWHfNHNHG8GANRfU/zomtM6 abVwPxQdfxIli0DDKDY0zXlrC50i+UIYvJCSQ0h2rW9tbSPY1qn+YNypZVwIQwN1dJNF BMnxnKpst18Z+rx1Hxzvn721gSdAk2c3P0Ny7dCTJUt8SoWaAyyVRmYED7EWqPwsTd3l z7oCbupt6DwyRCqkqljz9+z5J1pq9dFAd6YgCl5qu9pLy0R9hxeQ55rPxBSxfhpltBWJ 2sWml+d+y70ADvvQSgoUs3sgykKD4cg0qteYJeO+eKHBQS5S3PEUmoN6ZbpFNYrQvFR2 ZM1g==; 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="GwB2nnb/"; 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 c12-20020a170906528c00b00a3f45198767si2015702ejm.229.2024.02.26.05.48.32; Mon, 26 Feb 2024 05:48:33 -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="GwB2nnb/"; 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 3438B68BC6C; Mon, 26 Feb 2024 15:48:29 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f171.google.com (mail-lj1-f171.google.com [209.85.208.171]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CB4D068C4EA for ; Mon, 26 Feb 2024 15:48:22 +0200 (EET) Received: by mail-lj1-f171.google.com with SMTP id 38308e7fff4ca-2d2628e81b8so22960071fa.0 for ; Mon, 26 Feb 2024 05:48:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1708955301; x=1709560101; 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=uzsjDAZjkG1TnhQxIroFaP/SMj9fVQMQ0IRyc/TWgWY=; b=GwB2nnb/Az1qfjWXk3uaszIKIrjknJ/02n1FokARNaT4+DCss77Six9bU9g0glx6Bn p+oKK6kPComQK4o3ilZLyJdcwN89cNROnu6NN7IHG5lADXzHcddZSUqBHDGSyDzFw2Wp 1QXr7/uLm0e7nqnohh3a/5UU3juYjmXqLY+/L1fNgho5zkCXPuQMIPx6k06atDEXHPWP W+Ef28ARupHSMFnPo/A2VJlVpAJkOAzzIkzTm4ZYoQ6p1QlY4vV9o1vMiQdCvuUAzLYS VOVf8vMaWcKngL1Br6+Wp1Pe2vQf8twXHE3MLEirUTA5AXuXz4K3O6lRHjxwfWA1IWas mA/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708955301; x=1709560101; 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=uzsjDAZjkG1TnhQxIroFaP/SMj9fVQMQ0IRyc/TWgWY=; b=jCdUV2DB/DaS6XnKCymAs98wZJ/IasENkKGaCezcV9vt1WHL14zzpmXQCL7gTJOqIX NCN1lUUjPr7e68D7WEheq0ueLHuMWDAqo9vgvkLNHdxIRtDkb2B1kjqCS0iwQiE29mF3 nj8C9poue/Do6SMBuHXcNrv/KerVrkqob6+aDTWgnrn8jR1n/IRivsNdcHvxkAtPNHpY Tg8QlD2Gbal+/dz32rGIhs7Qk3X3ErApOFBAqBw0YiqUl0C8NlX8xS9CVNQAMjDkDzAz uZfGVKC1m9DgV1Zf69k7Y7AacIGW1aioB3gJm4qbLsWNO2wnM9p3HKWcBFHF3UDlFaIt 1ccA== X-Gm-Message-State: AOJu0YxOIeX964vYNoFxuqjzZIdBMIa/KColXxFIUfIj9OFeIv/HSRQ7 AVopDN+bpfYRkQvyCza+lg7u+vNi1yWqO86/fsAS1JqDwOdpeJXV88niwXKf X-Received: by 2002:a2e:a307:0:b0:2d2:795f:4a8 with SMTP id l7-20020a2ea307000000b002d2795f04a8mr2078156lje.18.1708955301210; Mon, 26 Feb 2024 05:48:21 -0800 (PST) Received: from localhost.localdomain (89-74-109-154.dynamic.chello.pl. [89.74.109.154]) by smtp.gmail.com with ESMTPSA id a14-20020a05651c010e00b002d2682050d4sm873276ljb.88.2024.02.26.05.48.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Feb 2024 05:48:20 -0800 (PST) From: =?utf-8?q?Kacper_Michaj=C5=82ow?= To: ffmpeg-devel@ffmpeg.org Date: Mon, 26 Feb 2024 14:47:30 +0100 Message-ID: <20240226134800.387-1-kasper93@gmail.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3] 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: yST3m8QxY9wo 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 | 55 ++++++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 16 deletions(-) diff --git a/libavcodec/h2645_sei.c b/libavcodec/h2645_sei.c index cb6be0594b..b5f46e776a 100644 --- a/libavcodec/h2645_sei.c +++ b/libavcodec/h2645_sei.c @@ -715,38 +715,61 @@ 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 && + sei->mastering_display.min_luminance < + sei->mastering_display.max_luminance; + + 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) {