Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
To: ffmpeg-devel@ffmpeg.org
Subject: Re: [FFmpeg-devel] [PATCH v2 13/13] cbs_mpeg2.c: improve readability of start code search (part 3)
Date: Sat, 5 Feb 2022 04:54:56 +0100
Message-ID: <AM7PR03MB6660FAB36222C99D7545CB168F2A9@AM7PR03MB6660.eurprd03.prod.outlook.com> (raw)
In-Reply-To: <20220203184450.5491-14-scott.the.elm@gmail.com>

Scott Theisen:
> Separate from part 2 for a clearer diff.
> 
> Now the true loop condition has been revealed: start < buf_end
> 
> Clarify loop by moving the detection of sequence_end_codes out of the loop.
> See also commit fd93d5efe64206d5f1bce8c702602353444c0c1a regarding sequence_end_codes
> ---
>  libavcodec/cbs_mpeg2.c | 31 ++++++++++++++++++-------------
>  1 file changed, 18 insertions(+), 13 deletions(-)
> 
> diff --git a/libavcodec/cbs_mpeg2.c b/libavcodec/cbs_mpeg2.c
> index bf95fb7546..53aa0ed3f6 100644
> --- a/libavcodec/cbs_mpeg2.c
> +++ b/libavcodec/cbs_mpeg2.c
> @@ -149,7 +149,7 @@ static int cbs_mpeg2_split_fragment(CodedBitstreamContext *ctx,
>      CodedBitstreamUnitType unit_type;
>      uint32_t start_code = -1;
>      size_t unit_size;
> -    int err, final = 0;
> +    int err;
>      int i = -1; // offset for pre-increment
>  
>      start = avpriv_find_start_code(start, buf_end, &start_code, 1);
> @@ -161,16 +161,7 @@ static int cbs_mpeg2_split_fragment(CodedBitstreamContext *ctx,
>      do {
>          unit_type = start_code & 0xff;
>  
> -        if (start == buf_end) {
> -            // The last four bytes form a start code which constitutes
> -            // a unit of its own.  In this situation avpriv_find_start_code
> -            // won't modify start_code at all so modify start_code so that
> -            // the next unit will be treated as the last unit.
> -            start_code = 0;
> -        }
> -        else {
> -            end = avpriv_find_start_code(start, buf_end, &start_code, 1);
> -        }
> +        end = avpriv_find_start_code(start, buf_end, &start_code, 1);
>          start--;
>          // decrement so start points to the byte containing the start_code_identifier
>          // (may be the last byte of fragment->data); end points to the byte
> @@ -182,8 +173,8 @@ static int cbs_mpeg2_split_fragment(CodedBitstreamContext *ctx,
>              unit_size = (end - 4) - start;
>          } else {
>             // We didn't find a start code, so this is the final unit.
> +           // There is no start code to remove from end, hence not (end - 4).
>             unit_size = end - start;
> -           final     = 1;
>          }
>  
>          err = ff_cbs_insert_unit_data(frag, ++i, unit_type,
> @@ -193,7 +184,21 @@ static int cbs_mpeg2_split_fragment(CodedBitstreamContext *ctx,
>              return err;
>  
>          start = end;
> -    } while (!final);
> +    } while (start < buf_end);
> +
> +    if (avpriv_start_code_is_valid(start_code)) {
> +        // The last four bytes form a start code which constitutes
> +        // a unit of its own, with size 1.
> +
> +        start--; // since start == buf_end because of the loop condition,
> +        // decrement so start points to the byte containing the start_code_identifier
> +        err = ff_cbs_insert_unit_data(frag, ++i, start_code & 0xFF,
> +                                      (uint8_t*)start /* cast away the const to match parameter type */,
> +                                      1, frag->data_ref);
> +        if (err < 0) {
> +            return err;
> +        }
> +    }
>  
>      return 0;
>  }

I disagree that this is the true loop condition that just needs to be
revealed; in fact, this is basically the loop condition from before
fd93d5efe64206d5f1bce8c702602353444c0c1a, just with an added block to
deal with size one units at the end. I considered this and chose the
current one because it leads to less code duplication for this special case.
Anyway, now that I have taken another look at this and I finally found
the true loop condition: Is there a unit that we have not added to the
fragment yet? This is easily implementable if one always resets the
start code, so that there being an outstanding unit is equivalent to the
start code being valid.

- Andreas
_______________________________________________
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".

  reply	other threads:[~2022-02-05  3:55 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-01 21:20 [FFmpeg-devel] [PATCH 0/8] rewrite avpriv_find_start_code() for clarity Scott Theisen
2022-02-01 21:20 ` [FFmpeg-devel] [PATCH 1/8] avpriv_find_start_code(): readability enhancement part 1 Scott Theisen
2022-02-01 21:20 ` [FFmpeg-devel] [PATCH 2/8] avpriv_find_start_code(): rewrite while loop and add comments for clarity Scott Theisen
2022-02-01 21:20 ` [FFmpeg-devel] [PATCH 3/8] avpriv_find_start_code(): make the state parameter output only Scott Theisen
2022-02-02  0:15   ` Andreas Rheinhardt
2022-02-02  3:25     ` Scott Theisen
2022-02-02  3:29       ` Andreas Rheinhardt
2022-02-01 21:20 ` [FFmpeg-devel] [PATCH 4/8] avpriv_find_start_code(): add doxygen comment and rename a parameter Scott Theisen
2022-02-01 21:20 ` [FFmpeg-devel] [PATCH 5/8] avpriv_find_start_code(): replace unnecessary for loop Scott Theisen
2022-02-01 21:20 ` [FFmpeg-devel] [PATCH 6/8] avcodec/internal.h: create avpriv_start_code_is_valid() Scott Theisen
2022-02-01 21:20 ` [FFmpeg-devel] [PATCH 7/8] cbs_mpeg2.c: use a while loop with a loop condition instead of an infinite loop Scott Theisen
2022-02-01 21:20 ` [FFmpeg-devel] [PATCH 8/8] avpriv_find_start_code(): reduce the number of iterations Scott Theisen
2022-02-03 18:44 ` [FFmpeg-devel] [PATCH v2 0/13] rewrite avpriv_find_start_code() for clarity Scott Theisen
2022-02-03 18:44   ` [FFmpeg-devel] [PATCH v2 01/13] avcodec/internal.h: create avpriv_start_code_is_valid() Scott Theisen
2022-02-05  5:42     ` Andreas Rheinhardt
2022-02-05  5:57       ` Scott Theisen
2022-02-03 18:44   ` [FFmpeg-devel] [PATCH v2 02/13] avpriv_find_start_code(): readability enhancement part 1 Scott Theisen
2022-02-05  6:26     ` Andreas Rheinhardt
2022-02-03 18:44   ` [FFmpeg-devel] [PATCH v2 03/13] avpriv_find_start_code(): rewrite while loop and add comments for clarity Scott Theisen
2022-02-03 18:44   ` [FFmpeg-devel] [PATCH v2 04/13] avpriv_find_start_code(): rewrite for loop " Scott Theisen
2022-02-03 18:44   ` [FFmpeg-devel] [PATCH v2 05/13] avpriv_find_start_code(): add doxygen comment and rename a parameter Scott Theisen
2022-02-03 18:44   ` [FFmpeg-devel] [PATCH v2 06/13] avpriv_find_start_code(): correct type of start_code parameter Scott Theisen
2022-02-03 18:44   ` [FFmpeg-devel] [PATCH v2 07/13] avpriv_find_start_code(): constify pointer parameters Scott Theisen
2022-02-05  5:49     ` Andreas Rheinhardt
2022-02-05  6:08       ` Scott Theisen
2022-02-03 18:44   ` [FFmpeg-devel] [PATCH v2 08/13] avpriv_find_start_code(): add parameter for ignoring history Scott Theisen
2022-02-05  6:10     ` Andreas Rheinhardt
2022-02-05  9:00       ` Scott Theisen
2022-02-03 18:44   ` [FFmpeg-devel] [PATCH v2 09/13] avpriv_find_start_code(): fix indent from previous commit Scott Theisen
2022-02-03 18:44   ` [FFmpeg-devel] [PATCH v2 10/13] cbs_mpeg2.c: use a while loop with a loop condition instead of an infinite loop Scott Theisen
2022-02-05  1:48     ` Andreas Rheinhardt
2022-02-05  3:47       ` Scott Theisen
2022-02-05  4:06         ` Andreas Rheinhardt
2022-02-05  4:09           ` Scott Theisen
2022-02-03 18:44   ` [FFmpeg-devel] [PATCH v2 11/13] cbs_mpeg2.c: improve readability of start code search (part 1) Scott Theisen
2022-02-05  2:16     ` Andreas Rheinhardt
2022-02-05  3:53       ` Scott Theisen
2022-02-03 18:44   ` [FFmpeg-devel] [PATCH v2 12/13] cbs_mpeg2.c: improve readability of start code search (part 2) Scott Theisen
2022-02-05  2:24     ` Andreas Rheinhardt
2022-02-05  3:59       ` Scott Theisen
2022-02-03 18:44   ` [FFmpeg-devel] [PATCH v2 13/13] cbs_mpeg2.c: improve readability of start code search (part 3) Scott Theisen
2022-02-05  3:54     ` Andreas Rheinhardt [this message]
2022-02-05  4:26       ` Scott Theisen
2022-02-09  3:28 ` [FFmpeg-devel] [PATCH v3 0/8] rewrite avpriv_find_start_code() for clarity Scott Theisen
2022-02-09  3:28   ` [FFmpeg-devel] [PATCH v3 1/8] avcodec/startcode.h: create start_code_is_valid() Scott Theisen
2022-02-09  3:28   ` [FFmpeg-devel] [PATCH v3 2/8] avpriv_find_start_code(): readability enhancement part 1 Scott Theisen
2022-02-09  3:28   ` [FFmpeg-devel] [PATCH v3 3/8] avpriv_find_start_code(): rewrite while loop Scott Theisen
2022-02-09  3:28   ` [FFmpeg-devel] [PATCH v3 4/8] avpriv_find_start_code(): rewrite for loop for clarity Scott Theisen
2022-02-09  3:28   ` [FFmpeg-devel] [PATCH v3 5/8] avpriv_find_start_code(): add doxygen comment and rename a parameter Scott Theisen
2022-02-09  3:28   ` [FFmpeg-devel] [PATCH v3 6/8] avpriv_find_start_code(): correct type of start_code parameter Scott Theisen
2022-02-09  3:28   ` [FFmpeg-devel] [PATCH v3 7/8] avpriv_find_start_code(): constify pointer parameters Scott Theisen
2022-02-09  3:28   ` [FFmpeg-devel] [PATCH v3 8/8] avpriv_find_start_code(): make start_code output only Scott Theisen
2022-03-07 18:44   ` [FFmpeg-devel] [PATCH v3 0/8] rewrite avpriv_find_start_code() for clarity Scott Theisen
2022-09-16 18:19 ` [FFmpeg-devel] [PATCH v4 " Scott Theisen
2022-09-16 18:19   ` [FFmpeg-devel] [PATCH v4 1/8] avcodec/startcode.h: create start_code_is_valid() Scott Theisen
2022-09-16 18:19   ` [FFmpeg-devel] [PATCH v4 2/8] avpriv_find_start_code(): readability enhancement part 1 Scott Theisen
2022-09-16 18:19   ` [FFmpeg-devel] [PATCH v4 3/8] avpriv_find_start_code(): rewrite while loop Scott Theisen
2022-09-16 18:19   ` [FFmpeg-devel] [PATCH v4 4/8] avpriv_find_start_code(): rewrite for loop for clarity Scott Theisen
2022-09-16 18:19   ` [FFmpeg-devel] [PATCH v4 5/8] avpriv_find_start_code(): add doxygen comment and rename a parameter Scott Theisen
2022-09-16 18:20   ` [FFmpeg-devel] [PATCH v4 6/8] avpriv_find_start_code(): correct type of start_code parameter Scott Theisen
2022-09-16 18:20   ` [FFmpeg-devel] [PATCH v4 7/8] avpriv_find_start_code(): constify pointer parameters Scott Theisen
2022-09-16 18:20   ` [FFmpeg-devel] [PATCH v4 8/8] avpriv_find_start_code(): make start_code output only Scott Theisen
2022-09-16 18:26   ` [FFmpeg-devel] [PATCH v4 0/8] rewrite avpriv_find_start_code() for clarity Scott Theisen

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=AM7PR03MB6660FAB36222C99D7545CB168F2A9@AM7PR03MB6660.eurprd03.prod.outlook.com \
    --to=andreas.rheinhardt@outlook.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