From patchwork Sat May 25 11:36:12 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 49252 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:542:0:b0:460:55fa:d5ed with SMTP id 63csp2261944vqf; Sat, 25 May 2024 04:36:28 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVYZNLKLxkx47WLBgjLLM0OEHeA+9p7eMvWpTiJy5jDadxX7D/8l7i5z8PyYtaRREZJZEcGpK3587sYdnQc8JrnfKtuA9UTTGpt4A== X-Google-Smtp-Source: AGHT+IHP3MHitEZ0O3t+1adlrlvDugrHz7NzUAKOGfFJZduj9UqscBaVj1X40QIpLEiF604AiAGt X-Received: by 2002:a19:5f03:0:b0:51a:f2eb:b4c9 with SMTP id 2adb3069b0e04-529644ec00fmr3036124e87.1.1716636988299; Sat, 25 May 2024 04:36:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1716636988; cv=none; d=google.com; s=arc-20160816; b=X0TEMAsV2Vz0aLWCqvgef+XcmA87K/MorW5qI934jcnppDWk3Ydz/HH4bfeNcCX0fB 5acJZGvJUjn2UEpz72MIMSxiePLPI11pvlfrfsNxk5luWY9OiT3I7pMxn9G+UsSL6m95 lx+samxx0f9ZSSn7LeQ3kiAewUzLhihmIJE6sZGpc+TKmlW/wB2woMFEG6ldOB6cMt6q 8WypOneC7btyM7LYTVhlU6FyV50YSx/4wNSmYMXHOqtxFzJ8zAJ2QNo3k4vBQ9GdNC3s FQcN70WMvLf/PgSEYNrjelrF4+KMJMbVuZKntU5pejuMoq0Buu5TaSyrcTXw4b4TEF1c 5H0Q== 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=edmIl9lkRKDzwpwltTEdCmSluFpnKZsrAaEEYvebpsg=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=DgeopiirEs1zh8ITnIj7ssKfGF+m1gWHEJ3VrHxOPvo44mb2yFs53aVUbhmVZZdaqr aDGsRaNeENCvzbf7b7JP3XR2q2CDOutLSpMni4C0LI8QwywZI8KFPqyYydZhODLqwc+f 9QVYfOtKm1ompOW9hl49J+57RGujClkcAGaYAeH6OLr9eAcKTXRBaOV2+n/LKhNq1hHY RBgYHkgsI4LrpqX8J0JqvaIvsXmatqJLdHxcsNXo2IZ+enOfEz4SCnAJO/6VXgb08deD vUQMNiutuFCQrHNcmXe+GWANc/aUpH1gu6GolitkQ3yF0vGh4OM9Fxa9pt0zQo9ekdLT DNfQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=ZOvuR1Vw; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 4fb4d7f45d1cf-578524d3945si1749163a12.658.2024.05.25.04.36.27; Sat, 25 May 2024 04:36:28 -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=@haasn.xyz header.s=mail header.b=ZOvuR1Vw; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A34E868D547; Sat, 25 May 2024 14:36:24 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F052A68D4FB for ; Sat, 25 May 2024 14:36:16 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1716636976; bh=rRcW545h/xEo431/jKObJhKk0poDHVJ29JSOzwem0Fg=; h=From:To:Cc:Subject:Date:From; b=ZOvuR1Vw8dMgJEreilkYiObgr1Iyevw8A3QeT2S0jXfDOCXgsyEYF/TTIVwHaNrNQ 2N20EVP3sXJ4ROM9zz9vI7ZsZrt63OMlbjUeJlYtFyEu9yuf33Ev4J3pIP2yvE9vpv tSFPllPijuBI3zZPxB1rkrVr3ESOH5nnR5NX0dso= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 44DEC417DE; Sat, 25 May 2024 13:36:16 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sat, 25 May 2024 13:36:12 +0200 Message-ID: <20240525113612.17093-1-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.45.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/h2645_sei: loosen up min luminance requirements 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: O0nDIc8IS2uj From: Niklas Haas The H.265 specification is quite clear on this case: > When min_display_mastering_luminance is not in the range of 1 to > 50000, the nominal maximum display luminance of the mastering display > is unknown or unspecified or specified by other means not specified in > this Specification. And so the current code is correct in marking luminance data as invalid if min luminance is set to 0. However, this breaks playback of at least several real-world Blu-ray releases, for example La La Land, Planet of the Apes, and quite possibly a lot more. These come with ostensibly valid max_luminance tags (1000 nits), but min_luminance set to 0. Loosen up this requirement by guarding it behind FF_COMPLIANCE_STRICT. We still reject blatantly invalid metadata (wrong value range on luminance, max set to 0, max below min, min above 50 nits etc.), so this shouldn't cause any unintended regressions. Fixes: https://github.com/mpv-player/mpv/issues/14177 --- libavcodec/h2645_sei.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libavcodec/h2645_sei.c b/libavcodec/h2645_sei.c index 1deb76c765..7c83747cd0 100644 --- a/libavcodec/h2645_sei.c +++ b/libavcodec/h2645_sei.c @@ -619,11 +619,15 @@ static int h2645_sei_to_side_data(AVCodecContext *avctx, H2645SEI *sei, metadata->min_luminance.num = sei->mastering_display.min_luminance; metadata->min_luminance.den = luma_den; - metadata->has_luminance &= sei->mastering_display.min_luminance >= 1 && - sei->mastering_display.min_luminance <= 50000 && + metadata->has_luminance &= sei->mastering_display.min_luminance <= 50000 && sei->mastering_display.min_luminance < sei->mastering_display.max_luminance; + /* Real (blu-ray) releases in the wild come with minimum luminance + * values of 0.000 cd/m2, so permit this edge case */ + if (avctx->strict_std_compliance >= FF_COMPLIANCE_STRICT) + metadata->has_luminance &= sei->mastering_display.min_luminance >= 1; + if (metadata->has_luminance || metadata->has_primaries) av_log(avctx, AV_LOG_DEBUG, "Mastering Display Metadata:\n"); if (metadata->has_primaries) {