[FFmpeg-devel] [PATCH 1/2] mjpegdec: factor handle_rstn() out

Alexander Strasser eclipse7 at gmx.net
Tue Dec 25 11:39:36 CET 2012


Hi Michael,

Michael Niedermayer wrote:
> Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> ---
>  libavcodec/mjpegdec.c |   50 +++++++++++++++++++++++++++----------------------
>  1 file changed, 28 insertions(+), 22 deletions(-)

  LGTM

> diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c
> index 625dce4..cf7dd8c 100644
> --- a/libavcodec/mjpegdec.c
> +++ b/libavcodec/mjpegdec.c
> @@ -727,6 +727,33 @@ static int decode_block_refinement(MJpegDecodeContext *s, DCTELEM *block,
>  #undef REFINE_BIT
>  #undef ZERO_RUN
>  
> +static void handle_rstn(MJpegDecodeContext *s, int nb_components)
> +{
> +    int i;
> +    if (s->restart_interval) {
> +        s->restart_count--;
> +        if(s->restart_count == 0 && s->avctx->codec_id == AV_CODEC_ID_THP){
            ^                                                               ^
  While moving that code anyway you might want to insert spaces at the
places marked above. Would better fit with the surrounding code.

  Alexander

> +            align_get_bits(&s->gb);
> +            for (i = 0; i < nb_components; i++) /* reset dc */
> +                s->last_dc[i] = 1024;
> +        }
> +
> +        i = 8 + ((-get_bits_count(&s->gb)) & 7);
> +        /* skip RSTn */
> +        if (show_bits(&s->gb, i) == (1 << i) - 1) {
> +            int pos = get_bits_count(&s->gb);
> +            align_get_bits(&s->gb);
> +            while (get_bits_left(&s->gb) >= 8 && show_bits(&s->gb, 8) == 0xFF)
> +                skip_bits(&s->gb, 8);
> +            if (get_bits_left(&s->gb) >= 8 && (get_bits(&s->gb, 8) & 0xF8) == 0xD0) {
> +                for (i = 0; i < nb_components; i++) /* reset dc */
> +                    s->last_dc[i] = 1024;
> +            } else
> +                skip_bits_long(&s->gb, pos - get_bits_count(&s->gb));
> +        }
> +    }
> +}
> +
>  static int ljpeg_decode_rgb_scan(MJpegDecodeContext *s, int nb_components, int predictor, int point_transform)
>  {
>      int i, mb_x, mb_y;
> @@ -1077,28 +1104,7 @@ static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah,
>                  }
>              }
>  
> -            if (s->restart_interval) {
> -                s->restart_count--;
> -                if(s->restart_count == 0 && s->avctx->codec_id == AV_CODEC_ID_THP){
> -                    align_get_bits(&s->gb);
> -                    for (i = 0; i < nb_components; i++) /* reset dc */
> -                        s->last_dc[i] = 1024;
> -                }
> -
> -                i = 8 + ((-get_bits_count(&s->gb)) & 7);
> -                /* skip RSTn */
> -                if (show_bits(&s->gb, i) == (1 << i) - 1) {
> -                    int pos = get_bits_count(&s->gb);
> -                    align_get_bits(&s->gb);
> -                    while (get_bits_left(&s->gb) >= 8 && show_bits(&s->gb, 8) == 0xFF)
> -                        skip_bits(&s->gb, 8);
> -                    if (get_bits_left(&s->gb) >= 8 && (get_bits(&s->gb, 8) & 0xF8) == 0xD0) {
> -                        for (i = 0; i < nb_components; i++) /* reset dc */
> -                            s->last_dc[i] = 1024;
> -                    } else
> -                        skip_bits_long(&s->gb, pos - get_bits_count(&s->gb));
> -                }
> -            }
> +            handle_rstn(s, nb_components);
>          }
>      }
>      return 0;
> -- 
> 1.7.9.5


More information about the ffmpeg-devel mailing list