From patchwork Sat Apr 13 15:21:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Kacper Michajlow X-Patchwork-Id: 48046 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:670b:b0:1a9:af23:56c1 with SMTP id wh11csp894060pzb; Sat, 13 Apr 2024 08:21:59 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUxM8qWRHIEFwo/fk6shzqw2vpZxYRwxAXis13bGQQPTI7X8LWVwjEk86kL/o9XqNTPtNslq6Q+Nc2XOqrKEluNvIanfDbPGMCRuA== X-Google-Smtp-Source: AGHT+IEZK2kv2OniVJv16lXE9B3/JxMK1JEJkNGZ3SDoi3TzCjfLpuvy/lekC+pt0ZkrCx9lpHrW X-Received: by 2002:a50:d79c:0:b0:56f:e76b:c362 with SMTP id w28-20020a50d79c000000b0056fe76bc362mr4019518edi.0.1713021718722; Sat, 13 Apr 2024 08:21:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1713021718; cv=none; d=google.com; s=arc-20160816; b=DVkTaMInDIPVh/IFYvfhfuT8aBRsYviWGhCDKNXxrm+MEqXy1z5ORNmXcj+jL1D9J7 fSRcc3uIBoiHuvpig70y48PChyYLLhNE0F4ytT+gQ+5hBN8u36MzAguuvfUdmNLQ9W1e y8jif+up8BOBIhwXxoiEsTS7SEUQfaAAZbo2BUCkkvJxFtz47X3bcboK5/RCU1PKfbqH gA0T3PyKeMm8LjMZMKnI0JSv0xrdJXRCGpIZfrzjcgCGlK8587pUujoka3rfNlIP2ehD D9HoTIHOUPdHJ6uRbIiyzNSxvMJtn1WBqEvLY5T7YomyWLTqlmydsodMlyqvVFgltKAJ KgAA== 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=69Bg6b7gp8zUiu4xZ7wYd5842qPDpaJJbRLdnRpW8a8=; fh=VehHF75ibtIiOcMFupA+RvAd8F/HWiWMZFlcjyRnn54=; b=svgnzkmmrz5/VvLcB9P3ecDThG345xMoo4qIMFsce3KX7KktXX8Gz5DK4+F1rSAdOV aYPHosxgd+sOBi1ekGxyIKWQ4dUrXOIGJ4CaNcr1qObYEI+hUfFAG1EX/jorykNB9RBq W29Gv4dFeeluJqEkQOgC23ByG2y6QvkPFE/xdSrJo5UsDJvA1brLP75uQ9TxpdI47M7b UuPtsy9q8IK73ySVP50/OZZqujc1KMTjbQ8a0N88faYyKf/+JawAZf+waeDRTbl++Jdx Y/M7bKe52naVC/U7cO4jygcWZAL5iFlnyw13SEwExMZMRefMI6cIRJtZb71zzewC7mK2 Ua1A==; 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=baUC7iCv; 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 p4-20020a05640243c400b00568b3bf415esi2749739edc.424.2024.04.13.08.21.58; Sat, 13 Apr 2024 08:21:58 -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=@gmail.com header.s=20230601 header.b=baUC7iCv; 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 5A4A268D34F; Sat, 13 Apr 2024 18:21:55 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f51.google.com (mail-lf1-f51.google.com [209.85.167.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CCE2B68D2E8 for ; Sat, 13 Apr 2024 18:21:48 +0300 (EEST) Received: by mail-lf1-f51.google.com with SMTP id 2adb3069b0e04-516d0161e13so2184335e87.3 for ; Sat, 13 Apr 2024 08:21:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713021708; x=1713626508; 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=gbkuAwc1ueNwWPhO/xDi2AADF3r5tlVI9cNNAzLp1ZE=; b=baUC7iCvJMd0JiI4YqjHOf103GR20AhUL7ExHRibWZ9ZM8EwSguYLKny522b4VHTJP NoO6L+OgPb7arfRhisPAJ6CXnnkIx9ua/eggQGwGlT/U8cEu5K6zBFlfWlO/Tw3SVg+O ttme2FCpUb5vmKXsyNulzFOkNYj6fZsMHW0OuYmsaMlxKriFkWpxjw1jnKb5uv0P4Hry zu8tgzBiROMbSq3fv5qJ9B1wZRCilhzxRxlr8VnyC2WMxn8AVZiaFsyUkwImQNPdWXUu y544x5P7ptkBfY4h5xcDZhr7M9QhGsJUH1Psm5q93vwqS6imC9gOOK0NSxE0oMZDJoMY EF4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713021708; x=1713626508; 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=gbkuAwc1ueNwWPhO/xDi2AADF3r5tlVI9cNNAzLp1ZE=; b=mSqRMwahWEkeFuArMObyi+G1XABQzJkv1muc5kJExqBllE7ZPw8wK5x/a1dUnY43LX eMy6T85JtI6swaVYzi13yiJrq49jJefS1bild0EusZHQJ9urVHGdFOn/4LPx9aXUxogH tKnWmz08F/kGn26fSxFLLDk5WQ/HaphE+rCFzT71Z8S28BdIuZGIkjENeYYcKGsmCA6A LABuO8vdVZPalltArmlHyHkGlLb5T6zxj3rx1n15uPawmhDGi0P9gQVdTQw0Rs0NOImD 8TF3K+XhwBkmQNUeO1yc7/4fKrg4qxtvIi8LR+O1dSAw8DPWV/m3RyR/M0TpmBtDx3T3 MiNw== X-Gm-Message-State: AOJu0YxuXZiygxJZ1x+PpjXrMCM3Ge6whrZk7F1pRWakEI8oaAGCDElA NGrrOrwn2/b2sakDOAzwyCjpUGjQ8SO18kX4N1ktUj6YeYYMOp4+SVUn2w== X-Received: by 2002:a05:6512:712:b0:516:d249:72ad with SMTP id b18-20020a056512071200b00516d24972admr3844639lfs.35.1713021707515; Sat, 13 Apr 2024 08:21:47 -0700 (PDT) Received: from localhost.localdomain (89-74-12-251.dynamic.chello.pl. [89.74.12.251]) by smtp.gmail.com with ESMTPSA id eq2-20020a056512488200b00516c40b05b0sm777271lfb.215.2024.04.13.08.21.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Apr 2024 08:21:47 -0700 (PDT) From: =?utf-8?q?Kacper_Michaj=C5=82ow?= To: ffmpeg-devel@ffmpeg.org Date: Sat, 13 Apr 2024 17:21:08 +0200 Message-ID: <20240413152114.554-1-kasper93@gmail.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v5] 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: mgUCVJ0wWDAK 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 933975f076..96a22e7cf6 100644 --- a/libavcodec/h2645_sei.c +++ b/libavcodec/h2645_sei.c @@ -587,38 +587,61 @@ static int h2645_sei_to_side_data(AVCodecContext *avctx, H2645SEI *sei, return ret; if (metadata) { + 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)); + } } }