From: James Almer <jamrial@gmail.com> To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH 1/2] avcodec/cbs_av1: also store a pointer to the start of the tile group data Date: Thu, 20 Mar 2025 14:01:47 -0300 Message-ID: <20250320170148.522-1-jamrial@gmail.com> (raw) 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, ¤t->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".
next reply other threads:[~2025-03-20 17:02 UTC|newest] Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top 2025-03-20 17:01 James Almer [this message] 2025-03-20 17:01 ` [FFmpeg-devel] [PATCH 2/2] avformat/movenccenc: add support for CENC AV1 encryption James Almer 2025-03-21 2:55 ` Andreas Rheinhardt 2025-03-21 3:30 ` James Almer 2025-03-21 3:52 ` Andreas Rheinhardt 2025-03-21 12:50 ` James Almer 2025-03-21 19:42 ` [FFmpeg-devel] [PATCH 2/3] avcodec/cbs: allow fine tunning selection of features James Almer 2025-03-21 19:42 ` [FFmpeg-devel] [PATCH v2 3/3] avformat/movenccenc: add support for CENC AV1 encryption James Almer 2025-03-22 14:25 ` [FFmpeg-devel] [PATCH 2/3] avcodec/cbs: allow fine tunning selection of features Andreas Rheinhardt 2025-03-22 22:56 ` James Almer 2025-03-23 13:42 ` [FFmpeg-devel] [PATCH v2 1/2] " James Almer 2025-03-23 13:42 ` [FFmpeg-devel] [PATCH v3 2/2] avformat/movenccenc: add support for CENC AV1 encryption James Almer
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20250320170148.522-1-jamrial@gmail.com \ --to=jamrial@gmail.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git