}
}
- if (s->restart_interval && !--s->restart_count) {
+ if (s->restart_interval && show_bits(&s->gb, 8) == 0xFF){ /* skip RSTn */
+ --s->restart_count;
align_get_bits(&s->gb);
- skip_bits(&s->gb, 16); /* skip RSTn */
+ while(show_bits(&s->gb, 8) == 0xFF)
+ skip_bits(&s->gb, 8);
+ skip_bits(&s->gb, 8);
for (i=0; i<nb_components; i++) /* reset dc */
s->last_dc[i] = 1024;
}
av_log(avctx, AV_LOG_WARNING, "Can not process SOS before SOF, skipping\n");
break;
}
- ff_mjpeg_decode_sos(s, NULL, NULL);
+ if (ff_mjpeg_decode_sos(s, NULL, NULL) < 0 &&
+ avctx->error_recognition >= FF_ER_EXPLODE)
+ return AVERROR_INVALIDDATA;
/* buggy avid puts EOI every 10-20th frame */
/* if restart period is over process EOI */
if ((s->buggy_avid && !s->interlaced) || s->restart_interval)
}
AVCodec ff_mjpeg_decoder = {
- "mjpeg",
- AVMEDIA_TYPE_VIDEO,
- CODEC_ID_MJPEG,
- sizeof(MJpegDecodeContext),
- ff_mjpeg_decode_init,
- NULL,
- ff_mjpeg_decode_end,
- ff_mjpeg_decode_frame,
- CODEC_CAP_DR1,
- NULL,
+ .name = "mjpeg",
+ .type = AVMEDIA_TYPE_VIDEO,
+ .id = CODEC_ID_MJPEG,
+ .priv_data_size = sizeof(MJpegDecodeContext),
+ .init = ff_mjpeg_decode_init,
+ .close = ff_mjpeg_decode_end,
+ .decode = ff_mjpeg_decode_frame,
+ .capabilities = CODEC_CAP_DR1,
.max_lowres = 3,
.long_name = NULL_IF_CONFIG_SMALL("MJPEG (Motion JPEG)"),
};
AVCodec ff_thp_decoder = {
- "thp",
- AVMEDIA_TYPE_VIDEO,
- CODEC_ID_THP,
- sizeof(MJpegDecodeContext),
- ff_mjpeg_decode_init,
- NULL,
- ff_mjpeg_decode_end,
- ff_mjpeg_decode_frame,
- CODEC_CAP_DR1,
- NULL,
+ .name = "thp",
+ .type = AVMEDIA_TYPE_VIDEO,
+ .id = CODEC_ID_THP,
+ .priv_data_size = sizeof(MJpegDecodeContext),
+ .init = ff_mjpeg_decode_init,
+ .close = ff_mjpeg_decode_end,
+ .decode = ff_mjpeg_decode_frame,
+ .capabilities = CODEC_CAP_DR1,
.max_lowres = 3,
.long_name = NULL_IF_CONFIG_SMALL("Nintendo Gamecube THP video"),
};