From patchwork Sun Feb 25 01:59:46 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: 46511 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c51b:b0:19e:cdac:8cce with SMTP id gm27csp692495pzb; Sat, 24 Feb 2024 18:00:40 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCUYOI1siOfc+F4JVFHsaksedq5Q6ON/2UoKWutw1jCWqz929zwgn8VrnG+YHNaf7uN3rvQzsmnMbsVKcxJbrmvo7MtcALNpfQpwSg== X-Google-Smtp-Source: AGHT+IF/rdFfE/P0yyn9bbeKzSYJ3wTyrNo/tLE6/q9b1I9HeZ3umWGEug07Kw9GVxz1s7/CRflf X-Received: by 2002:a17:906:f2cf:b0:a3e:4576:b25a with SMTP id gz15-20020a170906f2cf00b00a3e4576b25amr2080554ejb.18.1708826440576; Sat, 24 Feb 2024 18:00:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708826440; cv=none; d=google.com; s=arc-20160816; b=USMEThT1qGoVsdcljY+1CbnSlAuykCTKgx1/EcppnyUvkZA9OltexrIPPnc+Kjh0x7 H8EDkvizkXj1IM17y7doYyOURcjfjvrs2+AIf65Q4CwR4bw9zAjiIQWcuqkyo+0RHUIJ 853ZRpijZhTMoMtQhwJw5MD4JUG4Z2qpS7skCd19QKBfIvx2qCq7adhOY6VAgnCD7A0o dCtqoNqZO82GvLMFwp2PjG/DOyki0VR5r4xk7oHFo5NVOyaFaUZImT2B1hYkDweq/ohQ iEF7w65NAfS+rXGdS8QGYJiTAcyDURP0JnxQ4yxnjeOvfWfcjhDRtEqxmqXSrvmlWwnz re/w== 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=DvMLrT/obmVGXK5M2vF5TDADNH2bANm0rS34NDk7uaU=; fh=VehHF75ibtIiOcMFupA+RvAd8F/HWiWMZFlcjyRnn54=; b=YmqH7lpYAQTnk63R7h5pWUNwudpOs5qwmgEJcJHMkUfEgmjm+RoKJG4jV8XzpApglf JTbn1NvTUM969kyxAeDYqbOFRWZmL3c7QW100qBPMuW0Sw06uqQS2YwD+CLj/+kXwzeU Aik9QDCVjViNzs6vD7OrQoMwFNfIJUQM1tAVU//9760zzSXGYE+qNQYIg9GE4sB7qrYW KsEANKpBjcQje4e7V8T2FvukFou0xIohijUJnRKVfOEnecQhogxui9AjhvohyAdnPFze oLqWd/390IBrCIKOi24Zw+7kR1OJFHL32qfk6GbdV3oTWNwr6GqpMeNnomcqDQK6ibUU cDsQ==; 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=PWSxULS5; 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 du20-20020a17090772d400b00a3e544f1944si897921ejc.1021.2024.02.24.18.00.40; Sat, 24 Feb 2024 18:00:40 -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=PWSxULS5; 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 5F3B168C3D2; Sun, 25 Feb 2024 04:00:38 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f170.google.com (mail-lj1-f170.google.com [209.85.208.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7595D68C462 for ; Sun, 25 Feb 2024 04:00:31 +0200 (EET) Received: by mail-lj1-f170.google.com with SMTP id 38308e7fff4ca-2d240d8baf6so25686071fa.3 for ; Sat, 24 Feb 2024 18:00:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1708826430; x=1709431230; 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=Z9sgD+wBb+shERTlu96+7CGl/hQH44sD/fb2XreJO1Y=; b=PWSxULS5e4cyGpDHg+TOzzJpUHOyOcXj2jo42JZ19OrycRHQWMSWKVR7DYqUNLxBmW H/Qr1fdDIehcadm7Sjd41456IoRBF++K70CyupTjpDRCuAa4x4timv1kq55ztOQO9gKm Dpn1mmF/4jEvDftexkDJ7U4hbeTIH/tDv9WWswKB1VC2R71z3LiWMBhNpmzo2YpDfzt7 d6Jy+zJyA2nA5jKC9s0cq/VPHAvWuEVpYBlor5aKNkis1Nv49uzb6we0kxSpW0pn60KN knB8lVzy7kRI49C5YCJymYsdjn4NHHVwA8G2bMy3C6NEOkBU/jj6D4K6fWf5SiaxWUCM Lq8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708826430; x=1709431230; 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=Z9sgD+wBb+shERTlu96+7CGl/hQH44sD/fb2XreJO1Y=; b=Pvhb0FaJeL62ASkzrvZtj96htQJw9xSnnVQRfm8T1K0iuPGDjpoUSqfjbnku3yL4TU XzSx9nGUaT+v2NQzOV+3Xghec2N4qJHLbAK6XrdmKUPRXb9gha9ietojgfpin1R9xSDN x53DoiEdWpvrpuguORt5KZx7MXQ/GC+n3XJ1ddJg2jTHyU9rH0e5fjLHtUcDZJAO7IdQ KQsI8yCKq79db98BgRy7z2JlvZGLcatqmoG+4XX7X3Z4B5AQDJenZtqMkCsygCbJcuq9 aywF7VAZS2hRYnNogT+3ng0xhXDIFRGKJT8AHrhLNCIHiPjBD41n4WR0cQ/7xdZ9AaaD 5OKQ== X-Gm-Message-State: AOJu0YyBksHpCE+iDuoIIhR9hy+3QtP95YJKND+/14dGzlhgpHOFh9DM rdpbuu0L4hMwUSgflAV8I81adIuw51LjEi3Y6GgH1whPrHSZP6KXsWteR5xr X-Received: by 2002:a2e:809a:0:b0:2d2:7cca:db83 with SMTP id i26-20020a2e809a000000b002d27ccadb83mr1583858ljg.28.1708826430033; Sat, 24 Feb 2024 18:00:30 -0800 (PST) Received: from localhost.localdomain (89-74-109-154.dynamic.chello.pl. [89.74.109.154]) by smtp.gmail.com with ESMTPSA id y5-20020a2e7d05000000b002d2474fdecesm395138ljc.35.2024.02.24.18.00.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 24 Feb 2024 18:00:29 -0800 (PST) From: =?utf-8?q?Kacper_Michaj=C5=82ow?= To: ffmpeg-devel@ffmpeg.org Date: Sun, 25 Feb 2024 02:59:46 +0100 Message-ID: <20240225020010.1183-1-kasper93@gmail.com> X-Mailer: git-send-email 2.42.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] 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: cTcuE4dsq9I4 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..f3ac8004a9 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[0] >= 5 && + sei->mastering_display.white_point[0] <= 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) {