From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <ffmpeg-devel-bounces@ffmpeg.org>
Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100])
	by master.gitmailbox.com (Postfix) with ESMTPS id C16FE4569F
	for <ffmpegdev@gitmailbox.com>; Thu, 20 Mar 2025 17:02:19 +0000 (UTC)
Received: from [127.0.1.1] (localhost [127.0.0.1])
	by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 62EAD687B9E;
	Thu, 20 Mar 2025 19:02:15 +0200 (EET)
Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com
 [209.85.216.52])
 by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8855F687A4A
 for <ffmpeg-devel@ffmpeg.org>; Thu, 20 Mar 2025 19:02:08 +0200 (EET)
Received: by mail-pj1-f52.google.com with SMTP id
 98e67ed59e1d1-2ff6e91cff5so1911249a91.2
 for <ffmpeg-devel@ffmpeg.org>; Thu, 20 Mar 2025 10:02:08 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1742490126; x=1743094926; darn=ffmpeg.org;
 h=content-transfer-encoding:mime-version:message-id:date:subject:to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=PmvZ+JNZ+7TDiR8P3VvA6xzgauerVJ36sZMjMXoYy8E=;
 b=MJ6Yur2u92wZnqU2xQ2ZZo9+gwhR4t2FX56oZm3eFtSoy37PflhXViDKn2RUADG6kO
 BDmLy8eSP032EfsP+4Uw7/hDufwxoG76mrZtDrrPUqODXJVt8175KG3UjWT6UMoG+1Sm
 o5e7S6rzPXVsr2m2phZ6AjdBNP3jGxgqqRvb1lXXjDI4Xd531voP7KFjYrdwZYmEQFiv
 oDYpyWTa6a3c3Jw12Ebs0z9kZE8838ASDD+CJYxkZLirUV0UTHAMzep+Z8jVtM5XEbaU
 qwVTrwHqy8N0w+MjX4v2j//vDRm4cPf+8JqfwchWl7nxi2TA+qaViaGCzibsIAFKRTND
 tzXg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1742490126; x=1743094926;
 h=content-transfer-encoding:mime-version:message-id:date:subject:to
 :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=PmvZ+JNZ+7TDiR8P3VvA6xzgauerVJ36sZMjMXoYy8E=;
 b=CpQLOBLMBou82PfygQz4gf5TwTlrK56fUdnL7tZKxN2x3xOtwEXkAPQtHPBj0x0Cny
 BObBiBOtqLeKPx1NGnlMI0iEaNFjmaXBO0HAXDoLFLXGWvwovIWpb5zPSfjOSkVIpUpi
 v/6bHkDgDhSwFQi6PGJxCWOvn8M5EoldRSWFopb0DPGUzAVvplCF7V7eXib6h+uKTPLX
 hV1S0kWZFwzkROncELVcpBy7RCQ4oAsf1uljgI3DZ2P7uYAJ2/UBvOOYv6oDXJ96+/9b
 DNsZ92+4+7Bbjwzc+1TniEefIkPXewfdl93r1tWtZo7BC18yfTC3F0ekiutTvFAFnogO
 Q5+A==
X-Gm-Message-State: AOJu0YzlNKrBfGkunl1iaG3oX7MhC8BPnyuw2/vC1upSMlICkmHyneHk
 n3MRjnRkiEk3DZ4bz5oJyuFHIFsV0xM4u90Ks8pSpdciT8grcp8iPRESzA==
X-Gm-Gg: ASbGncsDbsMHc0qm+eTX9qIpPHdPP1w3japFAhfa5ATiEL8OYqbtVOZqYCnUwzDyP4z
 KfFnKo5CMzLBF6hJ5nm7xUud6OCbpz58eEqzmVXq9/iqmpc4vYeO2QcCdLwZv9kqCGhZguvHeTx
 4C3omzwMiUyCn8wAZ/5WjqYhM90C4ui3oX7aajHDQvo6pj58edFtYQvMTtdyrHAz4b6RZOeoIF4
 hrZKXRv6TgqMP4ambQxFB5hOWtJrsGnyqm5qDeQppNSyhzvrU11bHXGdfqykeH9dp7gDgzWVv2O
 Xd/f4z10EG3IzV8mnkB2oVfSgTlWYW5Dg29pBE6aeJzRvNb+ksg5jfb6VnUJLXA=
X-Google-Smtp-Source: AGHT+IEO8nSYWr0293WJFK6J2iueiOOT4y7n8n8vK8uyyfnhObc06xqUmsJryffbP7NPdaRzabwFhA==
X-Received: by 2002:a17:90a:d60b:b0:2ee:d7d3:3019 with SMTP id
 98e67ed59e1d1-301d50b26e9mr7074149a91.12.1742490125911; 
 Thu, 20 Mar 2025 10:02:05 -0700 (PDT)
Received: from localhost.localdomain ([2800:2121:b000:82e:68ac:c5c9:2d8d:729b])
 by smtp.gmail.com with ESMTPSA id
 98e67ed59e1d1-301bf61b34dsm4152120a91.30.2025.03.20.10.02.04
 for <ffmpeg-devel@ffmpeg.org>
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 20 Mar 2025 10:02:05 -0700 (PDT)
From: James Almer <jamrial@gmail.com>
To: ffmpeg-devel@ffmpeg.org
Date: Thu, 20 Mar 2025 14:01:47 -0300
Message-ID: <20250320170148.522-1-jamrial@gmail.com>
X-Mailer: git-send-email 2.48.1
MIME-Version: 1.0
Subject: [FFmpeg-devel] [PATCH 1/2] avcodec/cbs_av1: also store a pointer to
 the start of the tile group data
X-BeenThere: ffmpeg-devel@ffmpeg.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: FFmpeg development discussions and patches <ffmpeg-devel.ffmpeg.org>
List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe>
List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel>
List-Post: <mailto:ffmpeg-devel@ffmpeg.org>
List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help>
List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe>
Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: ffmpeg-devel-bounces@ffmpeg.org
Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org>
Archived-At: <https://master.gitmailbox.com/ffmpegdev/20250320170148.522-1-jamrial@gmail.com/>
List-Archive: <https://master.gitmailbox.com/ffmpegdev/>
List-Post: <mailto:ffmpegdev@gitmailbox.com>

This will be useful a following commit, where the offset of the Tile Group
inside a Frame OBU needs to be known.

Signed-off-by: James Almer <jamrial@gmail.com>
---
 libavcodec/cbs_av1.c                 | 91 ++++++++++++++++++----------
 libavcodec/cbs_av1.h                 |  4 ++
 libavcodec/cbs_av1_syntax_template.c |  2 -
 3 files changed, 62 insertions(+), 35 deletions(-)

diff --git a/libavcodec/cbs_av1.c b/libavcodec/cbs_av1.c
index fea079379b..54589a4065 100644
--- a/libavcodec/cbs_av1.c
+++ b/libavcodec/cbs_av1.c
@@ -782,7 +782,8 @@ fail:
 static int cbs_av1_ref_tile_data(CodedBitstreamContext *ctx,
                                  CodedBitstreamUnit *unit,
                                  GetBitContext *gbc,
-                                 AV1RawTileData *td)
+                                 AVBufferRef **data_ref,
+                                 uint8_t **data, size_t *data_size)
 {
     int pos;
 
@@ -795,12 +796,12 @@ static int cbs_av1_ref_tile_data(CodedBitstreamContext *ctx,
     // Must be byte-aligned at this point.
     av_assert0(pos % 8 == 0);
 
-    td->data_ref = av_buffer_ref(unit->data_ref);
-    if (!td->data_ref)
+    *data_ref = av_buffer_ref(unit->data_ref);
+    if (!*data_ref)
         return AVERROR(ENOMEM);
 
-    td->data      = unit->data      + pos / 8;
-    td->data_size = unit->data_size - pos / 8;
+    *data      = unit->data      + pos / 8;
+    *data_size = unit->data_size - pos / 8;
 
     return 0;
 }
@@ -901,28 +902,31 @@ static int cbs_av1_read_unit(CodedBitstreamContext *ctx,
                 return err;
         }
         break;
-    case AV1_OBU_TILE_GROUP:
-        {
-            err = cbs_av1_read_tile_group_obu(ctx, &gbc,
-                                              &obu->obu.tile_group);
+    case AV1_OBU_FRAME:
+            err = cbs_av1_read_frame_obu(ctx, &gbc, &obu->obu.frame,
+                                         unit->data_ref);
             if (err < 0)
                 return err;
-
+    // fall-through
+    case AV1_OBU_TILE_GROUP:
+        {
+            AV1RawTileGroup *tile_group = obu->header.obu_type == AV1_OBU_FRAME ? &obu->obu.frame.tile_group
+                                                                                : &obu->obu.tile_group;
             err = cbs_av1_ref_tile_data(ctx, unit, &gbc,
-                                        &obu->obu.tile_group.tile_data);
+                                        &tile_group->data_ref,
+                                        &tile_group->data,
+                                        &tile_group->data_size);
             if (err < 0)
                 return err;
-        }
-        break;
-    case AV1_OBU_FRAME:
-        {
-            err = cbs_av1_read_frame_obu(ctx, &gbc, &obu->obu.frame,
-                                         unit->data_ref);
+
+            err = cbs_av1_read_tile_group_obu(ctx, &gbc, tile_group);
             if (err < 0)
                 return err;
 
             err = cbs_av1_ref_tile_data(ctx, unit, &gbc,
-                                        &obu->obu.frame.tile_group.tile_data);
+                                        &tile_group->tile_data.data_ref,
+                                        &tile_group->tile_data.data,
+                                        &tile_group->tile_data.data_size);
             if (err < 0)
                 return err;
         }
@@ -935,7 +939,9 @@ static int cbs_av1_read_unit(CodedBitstreamContext *ctx,
                 return err;
 
             err = cbs_av1_ref_tile_data(ctx, unit, &gbc,
-                                        &obu->obu.tile_list.tile_data);
+                                        &obu->obu.tile_list.tile_data.data_ref,
+                                        &obu->obu.tile_list.tile_data.data,
+                                        &obu->obu.tile_list.tile_data.data_size);
             if (err < 0)
                 return err;
         }
@@ -1065,23 +1071,20 @@ static int cbs_av1_write_obu(CodedBitstreamContext *ctx,
                 goto error;
         }
         break;
-    case AV1_OBU_TILE_GROUP:
-        {
-            err = cbs_av1_write_tile_group_obu(ctx, pbc,
-                                               &obu->obu.tile_group);
+    case AV1_OBU_FRAME:
+            err = cbs_av1_write_frame_obu(ctx, pbc, &obu->obu.frame, NULL);
             if (err < 0)
                 goto error;
-
-            td = &obu->obu.tile_group.tile_data;
-        }
-        break;
-    case AV1_OBU_FRAME:
+    // fall-through
+    case AV1_OBU_TILE_GROUP:
         {
-            err = cbs_av1_write_frame_obu(ctx, pbc, &obu->obu.frame, NULL);
+            AV1RawTileGroup *tile_group = obu->header.obu_type == AV1_OBU_FRAME ? &obu->obu.frame.tile_group
+                                                                                : &obu->obu.tile_group;
+            err = cbs_av1_write_tile_group_obu(ctx, pbc, tile_group);
             if (err < 0)
                 goto error;
 
-            td = &obu->obu.frame.tile_group.tile_data;
+            td = &tile_group->tile_data;
         }
         break;
     case AV1_OBU_TILE_LIST:
@@ -1258,11 +1261,33 @@ static const CodedBitstreamUnitTypeDescriptor cbs_av1_unit_types[] = {
     CBS_UNIT_TYPE_POD(AV1_OBU_TEMPORAL_DELIMITER,     AV1RawOBU),
     CBS_UNIT_TYPE_POD(AV1_OBU_FRAME_HEADER,           AV1RawOBU),
     CBS_UNIT_TYPE_POD(AV1_OBU_REDUNDANT_FRAME_HEADER, AV1RawOBU),
-
-    CBS_UNIT_TYPE_INTERNAL_REF(AV1_OBU_TILE_GROUP, AV1RawOBU,
+    {
+        .nb_unit_types     = 1,
+        .unit_type.list[0] = AV1_OBU_TILE_GROUP,
+        .content_type      = CBS_CONTENT_TYPE_INTERNAL_REFS,
+        .content_size      = sizeof(AV1RawOBU),
+        .type.ref          = {
+            .nb_offsets = 2,
+            .offsets    = { offsetof(AV1RawOBU, obu.tile_group.data),
+                            offsetof(AV1RawOBU, obu.tile_group.tile_data.data) }
+        },
+    },
+
+    {
+        .nb_unit_types     = 1,
+        .unit_type.list[0] = AV1_OBU_FRAME,
+        .content_type      = CBS_CONTENT_TYPE_INTERNAL_REFS,
+        .content_size      = sizeof(AV1RawOBU),
+        .type.ref          = {
+            .nb_offsets = 2,
+            .offsets    = { offsetof(AV1RawOBU, obu.frame.tile_group.data),
+                            offsetof(AV1RawOBU, obu.frame.tile_group.tile_data.data) }
+        },
+    },
+    /*CBS_UNIT_TYPE_INTERNAL_REF(AV1_OBU_TILE_GROUP, AV1RawOBU,
                                obu.tile_group.tile_data.data),
     CBS_UNIT_TYPE_INTERNAL_REF(AV1_OBU_FRAME,      AV1RawOBU,
-                               obu.frame.tile_group.tile_data.data),
+                               obu.frame.tile_group.tile_data.data),*/
     CBS_UNIT_TYPE_INTERNAL_REF(AV1_OBU_TILE_LIST,  AV1RawOBU,
                                obu.tile_list.tile_data.data),
     CBS_UNIT_TYPE_INTERNAL_REF(AV1_OBU_PADDING,    AV1RawOBU,
diff --git a/libavcodec/cbs_av1.h b/libavcodec/cbs_av1.h
index 8586f2bf4a..62c7720142 100644
--- a/libavcodec/cbs_av1.h
+++ b/libavcodec/cbs_av1.h
@@ -295,6 +295,10 @@ typedef struct AV1RawTileData {
 } AV1RawTileData;
 
 typedef struct AV1RawTileGroup {
+    uint8_t     *data;
+    AVBufferRef *data_ref;
+    size_t       data_size;
+
     uint8_t  tile_start_and_end_present_flag;
     uint16_t tg_start;
     uint16_t tg_end;
diff --git a/libavcodec/cbs_av1_syntax_template.c b/libavcodec/cbs_av1_syntax_template.c
index a4a912482c..62a83945ec 100644
--- a/libavcodec/cbs_av1_syntax_template.c
+++ b/libavcodec/cbs_av1_syntax_template.c
@@ -1865,8 +1865,6 @@ static int FUNC(frame_obu)(CodedBitstreamContext *ctx, RWContext *rw,
 
     CHECK(FUNC(byte_alignment)(ctx, rw));
 
-    CHECK(FUNC(tile_group_obu)(ctx, rw, &current->tile_group));
-
     return 0;
 }
 
-- 
2.48.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".