[FFmpeg-devel] [PATCH 1/2] avcodec/parser: simplify ff_mpeg4video_split()

wm4 nfxjfg at googlemail.com
Fri Feb 13 10:22:22 CET 2015


On Fri, 13 Feb 2015 13:50:23 +0800
Zhaoxiu Zeng <zhaoxiu.zeng at gmail.com> wrote:

> From 3cac16572aee4425377e4bc9e496ab5844200a51 Mon Sep 17 00:00:00 2001
> From: Zeng Zhaoxiu <zhaoxiu.zeng at gmail.com>
> Date: Fri, 13 Feb 2015 13:27:26 +0800
> Subject: [PATCH 1/2] avcodec/parser: simplify ff_mpeg4video_split()
> 
> Signed-off-by: Zeng Zhaoxiu <zhaoxiu.zeng at gmail.com>
> ---
>  libavcodec/parser.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/libavcodec/parser.c b/libavcodec/parser.c
> index aa25481..83019e7 100644
> --- a/libavcodec/parser.c
> +++ b/libavcodec/parser.c
> @@ -28,6 +28,7 @@
>  #include "libavutil/mem.h"
> 
>  #include "parser.h"
> +#include "internal.h"
> 
>  static AVCodecParser *av_first_parser = NULL;
> 
> @@ -308,13 +309,14 @@ void ff_parse_close(AVCodecParserContext *s)
> 
>  int ff_mpeg4video_split(AVCodecContext *avctx, const uint8_t *buf,
> int buf_size)
>  {
> -    int i;
>      uint32_t state = -1;
> +    const uint8_t *ptr = buf, *end = buf + buf_size;
> 
> -    for (i = 0; i < buf_size; i++) {
> -        state = state << 8 | buf[i];
> +    while (ptr < end) {
> +        ptr = avpriv_find_start_code(ptr, end, &state);
>          if (state == 0x1B3 || state == 0x1B6)
> -            return i - 3;
> +            return ptr - 4 - buf;
>      }
> +
>      return 0;
>  }

I don't know, it looks more complicated to me now. Following track of
an integer index is much easier than playing with pointer arithmetics.
Also, why this (apparently) can return a negative integer index just
fine, your pointer calculations can go out of the range [buf,
buf+buf_size], possibly leading to undefined behavior. The code
introduces a function call, without actually reducing the number of
lines.

Well, I know nothing about this code, so you don't need to listen to
me. These are just my impressions.


More information about the ffmpeg-devel mailing list