[FFmpeg-devel] [PATCH 1/2] MxPEG decoder

Michael Niedermayer michaelni
Sun Oct 31 22:44:48 CET 2010


On Sun, Oct 31, 2010 at 09:20:34PM +0300, Anatoly Nenashev wrote:
[...]
> @@ -195,6 +198,37 @@ int ff_mjpeg_decode_dht(MJpegDecodeContext *s)
>      return 0;
>  }
>  
> +static int mjpeg_allocate_picture(MJpegDecodeContext *s)
> +{
> +    if(s->picture.data[0])
> +        s->avctx->release_buffer(s->avctx, &s->picture);
> +
> +    s->picture.reference= 0;
> +    if(s->avctx->get_buffer(s->avctx, &s->picture) < 0){
> +        av_log(s->avctx, AV_LOG_ERROR, "mjpeg get_buffer() failed\n");
> +        return -1;
> +    }
> +
> +    return 0;
> +}
> +
> +static int mxpeg_allocate_picture(MJpegDecodeContext *s)
> +{
> +    if (s->mxctx.reference_picture.data[0])
> +        s->avctx->release_buffer(s->avctx, &s->mxctx.reference_picture);
> +    s->mxctx.reference_picture = s->picture;

> +    s->picture.data[0] = s->picture.data[1] =
> +        s->picture.data[2] = s->picture.data[3] = 0;

the indention is odd


> +
> +    s->picture.reference= 1;

> +    if(s->avctx->get_buffer(s->avctx, &s->picture) < 0){
> +        av_log(s->avctx, AV_LOG_ERROR, "mxpeg get_buffer() failed\n");
> +        return -1;
> +    }

duplicate code


[...]
> @@ -788,14 +823,29 @@ static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah, i
>          }
>      }
>  
> +    if (use_mxm_bitmask) {
> +        if (s->mb_width*s->mb_height > (s->mxctx.mxm_bitmask_size << 3)) {
> +            av_log(s->avctx, AV_LOG_ERROR, "MXM bitmask is not complete\n");
> +            return -1;
> +        }
> +
> +        init_get_bits(&mxm_bitmask_gb, s->mxctx.mxm_bitmask,
> +                      s->mxctx.mxm_bitmask_size << 3);
> +
> +        s->picture.pict_type= FF_P_TYPE;
> +        s->picture.key_frame= 0;
> +    }
>      for(mb_y = 0; mb_y < s->mb_height; mb_y++) {
>          for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
> +            const int copy_mb = use_mxm_bitmask && !get_bits1(&mxm_bitmask_gb);
> +            if (!reference_picture_avail && copy_mb) continue;

cant use_mxm_bitmask be 0 when !reference_picture_avail
(would avoid 1 check per mb)


[...]
> @@ -1505,6 +1631,15 @@ not_the_end:
>  the_end:
>      av_log(avctx, AV_LOG_DEBUG, "mjpeg decode frame unused %td bytes\n", buf_end - buf_ptr);
>  //    return buf_end - buf_ptr;
> +
> +    if (s->avctx->codec_id == CODEC_ID_MXPEG &&
> +        !s->mxctx.has_complete_frame) {
> +        if (s->picture.key_frame)
> +            s->mxctx.has_complete_frame = 1;

> +        else if (!(s->avctx->flags & CODEC_FLAG_LOW_DELAY))
> +            *data_size = 0;

mxpeg is always low delay, unless i misunderstand something


[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

There will always be a question for which you do not know the correct awnser.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20101031/ff4f85d2/attachment.pgp>



More information about the ffmpeg-devel mailing list