diff --git a/libavcodec/cbs_av1.c b/libavcodec/cbs_av1.c index f02cca2dad..f8f7e5f050 100644 --- a/libavcodec/cbs_av1.c +++ b/libavcodec/cbs_av1.c @@ -574,6 +574,17 @@ static int cbs_av1_get_relative_dist(const AV1RawSequenceHeader *seq, return diff; } +static size_t cbs_av1_get_payload_bytes_left(GetBitContext *gbc) +{ + GetBitContext tmp = *gbc; + size_t size = 0; + for (int i = 0; get_bits_left(&tmp) >= 8; i++) { + if (get_bits(&tmp, 8)) + size = i; + } + return size; +} + #define HEADER(name) do { \ ff_cbs_trace_header(ctx, name); \ diff --git a/libavcodec/cbs_av1_syntax_template.c b/libavcodec/cbs_av1_syntax_template.c index 76eb90b279..56009145e8 100644 --- a/libavcodec/cbs_av1_syntax_template.c +++ b/libavcodec/cbs_av1_syntax_template.c @@ -1674,15 +1674,7 @@ static int FUNC(metadata_itut_t35)(CodedBitstreamContext *ctx, RWContext *rw, #ifdef READ // The payload runs up to the start of the trailing bits, but there might // be arbitrarily many trailing zeroes so we need to read through twice. - { - GetBitContext tmp = *rw; - current->payload_size = 0; - for (i = 0; get_bits_left(rw) >= 8; i++) { - if (get_bits(rw, 8)) - current->payload_size = i; - } - *rw = tmp; - } + current->payload_size = cbs_av1_get_payload_bytes_left(rw); current->payload_ref = av_buffer_alloc(current->payload_size); if (!current->payload_ref)