From patchwork Tue May 21 18:39:09 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Stejerean X-Patchwork-Id: 49111 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:9214:b0:1af:fc2d:ff5a with SMTP id tl20csp172791pzb; Tue, 21 May 2024 11:39:22 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXQehaTdLxdKCHsLnT2Ew7dZcviWmDvx8mFeZ/2Mhbx99a+b55y5VCH0HPVVqHBpKb0E2OVssU+rCekMPqBArgSQum2+lfd/8gwQA== X-Google-Smtp-Source: AGHT+IEprk2oHC+SfAvYUDMA++jKPIDKsYPSHQ5dSH8UbCGWBE0aR3WBm/lfaJeSRaGacWjPXKIG X-Received: by 2002:ac2:494d:0:b0:51b:4df3:540e with SMTP id 2adb3069b0e04-52210277cfamr27634191e87.65.1716316762355; Tue, 21 May 2024 11:39:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1716316762; cv=none; d=google.com; s=arc-20160816; b=IM6eX9NdUnCgOzZ+OgA7AbXF6oqZhu8IX8HYPfcWF5Oii8DV7pmpMMvkqz7x70dVn7 Powl5BqxelS2HjErA+3lMWfpdOFBKiSGaj5f+G3A+5pBuI9a3H+zMjXYTafFgQSEGUcW +Ws8h3CQp0RbgmW12fcwlkfaIDzxLu15PLSz+Mpt3WuM5c6zhvl1pJovtAndERx4enX6 rZ6XkJEp/dHKjV++h3obQgicb84KjSDe0NU4H9GPk/rXt88c3+LZs/xwxgcZh68X9nIk PYv7N4uuywM7WZ9WfeSVjhB8LpPo+P4zkTbzfASrkTCydf0XAl3QGmalSsaBPPXmIGtb FLeQ== 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:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:feedback-id:message-id:thread-topic :thread-index:references:mime-version:date:to:delivered-to; bh=zeM25RVhhgjTBq+HdSfnRj2g+MHEXsXscRnEN57z8Vg=; fh=CBS/D0cB4KwqFBY8d8UQ4TY1w6HZ9TulitLE+VqI2+k=; b=eyoGamY7KLd5fKqEpwg21flA0u+ia2zI8y1z5XAKyoEq7Q7+L462fxqgzbmooiyT5T 3iF33HZhg8ts62BpM3t5jEh2r5/GZP8il7ed8H8BmUILhJ6TAdt/ylwHp/Tjfed8TFcJ DXBDBnh2TTXhCGCESBMu8SnSt6JwLHENmQF9F/ypBQDe5997FHO2Cbt/YKJbZNspPR8h /jLv3jCa7fCnpmN2r9vAosx0PUoPf3gmqfIzSvQWPMp2J9c0+YYw28RzSAXaNuIp5OlA bFtKLVCNFUwe2sMuX0JMquo9DPbSMnpSkAdYYN+KAJzLHGQi4hk9IbfYsrg5mGhmaFsr BX1w==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; 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-5733c2e0e60si14298576a12.252.2024.05.21.11.39.21; Tue, 21 May 2024 11:39:22 -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; 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 170BC68D274; Tue, 21 May 2024 21:39:19 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from a27-222.smtp-out.us-west-2.amazonses.com (a27-222.smtp-out.us-west-2.amazonses.com [54.240.27.222]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0A70368BD8F for ; Tue, 21 May 2024 21:39:11 +0300 (EEST) To: =?utf-8?q?ffmpeg-devel=40ffmpeg=2Eorg?= Date: Tue, 21 May 2024 18:39:09 +0000 Mime-Version: 1.0 References: <20240521183905.76407-1-cosmin@cosmin.at> X-Mailer: Amazon WorkMail Thread-Index: AQHaq64qKxsJroocSB2BvkkcrvG2yQ== Thread-Topic: [PATCH v2] avcodec/dovi - correctly read el_bit_depth_minus8 and ext_mapping_idc X-Original-Mailer: git-send-email 2.42.1 X-Wm-Sent-Timestamp: 1716316748 Message-ID: <0101018f9c733dc5-40f2990f-582b-44f9-93d6-eb22da8e293c-000000@us-west-2.amazonses.com> Feedback-ID: ::1.us-west-2.An468LAV0jCjQDrDLvlZjeAthld7qrhZr+vow8irkvU=:AmazonSES X-SES-Outgoing: 2024.05.21-54.240.27.222 Subject: [FFmpeg-devel] [PATCH v2] avcodec/dovi - correctly read el_bit_depth_minus8 and ext_mapping_idc 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: , X-Patchwork-Original-From: Cosmin Stejerean via ffmpeg-devel From: Cosmin Stejerean Reply-To: FFmpeg development discussions and patches Cc: =?utf-8?q?Cosmin_Stejerean?= Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: RwUHZlm3IgAy From: Cosmin Stejerean These two fields are coded together into a single 16 bit integer with upper 8 bits for ext_mapping_idc and lower 8 bits for el_bit_depth_minus8. Furthermore ext_mapping_idc has two components, upper 3 bits and lower 5 bits. --- libavcodec/dovi_rpudec.c | 7 ++++++- libavcodec/dovi_rpuenc.c | 4 +++- libavutil/dovi_meta.h | 2 ++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/libavcodec/dovi_rpudec.c b/libavcodec/dovi_rpudec.c index 7c7eda9d09..af41ab5827 100644 --- a/libavcodec/dovi_rpudec.c +++ b/libavcodec/dovi_rpudec.c @@ -411,13 +411,18 @@ int ff_dovi_rpu_parse(DOVIContext *s, const uint8_t *rpu, size_t rpu_size, if ((hdr->rpu_format & 0x700) == 0) { int bl_bit_depth_minus8 = get_ue_golomb_31(gb); - int el_bit_depth_minus8 = get_ue_golomb_31(gb); + int el_bit_depth_minus8_and_ext_mapping_idc = get_ue_golomb_long(gb); + int el_bit_depth_minus8 = el_bit_depth_minus8_and_ext_mapping_idc & 0xFF; // lowest 8 bits + int ext_mapping_idc = (el_bit_depth_minus8_and_ext_mapping_idc & 0xFF00) >> 8; // upper 8 bits + int vdr_bit_depth_minus8 = get_ue_golomb_31(gb); VALIDATE(bl_bit_depth_minus8, 0, 8); VALIDATE(el_bit_depth_minus8, 0, 8); VALIDATE(vdr_bit_depth_minus8, 0, 8); hdr->bl_bit_depth = bl_bit_depth_minus8 + 8; hdr->el_bit_depth = el_bit_depth_minus8 + 8; + hdr->ext_mapping_idc_0_4 = ext_mapping_idc & 0x1F; // lowest 5 bits of ext_mapping_idc + hdr->ext_mapping_idc_5_7 = (ext_mapping_idc & 0xE0) >> 5; // upper 3 bits of ext_mapping_idc hdr->vdr_bit_depth = vdr_bit_depth_minus8 + 8; hdr->spatial_resampling_filter_flag = get_bits1(gb); skip_bits(gb, 3); /* reserved_zero_3bits */ diff --git a/libavcodec/dovi_rpuenc.c b/libavcodec/dovi_rpuenc.c index 3c3e0f84c0..91c0a85050 100644 --- a/libavcodec/dovi_rpuenc.c +++ b/libavcodec/dovi_rpuenc.c @@ -444,6 +444,7 @@ int ff_dovi_rpu_generate(DOVIContext *s, const AVDOVIMetadata *metadata, int vdr_dm_metadata_changed, vdr_rpu_id, use_prev_vdr_rpu, profile, buffer_size, rpu_size, pad, zero_run; int num_ext_blocks_v1, num_ext_blocks_v2; + uint8_t ext_mapping_idc; uint32_t crc; uint8_t *dst; if (!metadata) { @@ -551,7 +552,8 @@ int ff_dovi_rpu_generate(DOVIContext *s, const AVDOVIMetadata *metadata, put_bits(pb, 1, hdr->bl_video_full_range_flag); if ((hdr->rpu_format & 0x700) == 0) { set_ue_golomb(pb, hdr->bl_bit_depth - 8); - set_ue_golomb(pb, hdr->el_bit_depth - 8); + ext_mapping_idc = (hdr->ext_mapping_idc_5_7 << 5) | hdr->ext_mapping_idc_0_4; + set_ue_golomb(pb, (ext_mapping_idc << 8) | hdr->el_bit_depth - 8); set_ue_golomb(pb, hdr->vdr_bit_depth - 8); put_bits(pb, 1, hdr->spatial_resampling_filter_flag); put_bits(pb, 3, 0); /* reserved_zero_3bits */ diff --git a/libavutil/dovi_meta.h b/libavutil/dovi_meta.h index e10332f8d7..d01bfe19fe 100644 --- a/libavutil/dovi_meta.h +++ b/libavutil/dovi_meta.h @@ -87,6 +87,8 @@ typedef struct AVDOVIRpuDataHeader { uint8_t bl_video_full_range_flag; uint8_t bl_bit_depth; /* [8, 16] */ uint8_t el_bit_depth; /* [8, 16] */ + uint8_t ext_mapping_idc_0_4; /* extended base layer inverse mapping indicator */ + uint8_t ext_mapping_idc_5_7; /* reserved */ uint8_t vdr_bit_depth; /* [8, 16] */ uint8_t spatial_resampling_filter_flag; uint8_t el_spatial_resampling_filter_flag;