* MJPEG decoder.
*/
-// #define DEBUG
#include <assert.h>
#include "libavutil/imgutils.h"
{
MJpegDecodeContext *s = avctx->priv_data;
- if (!s->picture_ptr)
- s->picture_ptr = &s->picture;
+ if (!s->picture_ptr) {
+ s->picture = av_frame_alloc();
+ if (!s->picture)
+ return AVERROR(ENOMEM);
+ s->picture_ptr = s->picture;
+ }
s->avctx = avctx;
ff_hpeldsp_init(&s->hdsp, avctx->flags);
int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
{
- int len, nb_components, i, width, height, pix_fmt_id;
+ int len, nb_components, i, width, height, pix_fmt_id, ret;
/* XXX: verify len field validity */
len = get_bits(&s->gb, 16);
if (nb_components <= 0 ||
nb_components > MAX_COMPONENTS)
return -1;
+ if (s->interlaced && (s->bottom_field == !s->interlace_polarity)) {
+ if (nb_components != s->nb_components) {
+ av_log(s->avctx, AV_LOG_ERROR,
+ "nb_components changing in interlaced picture\n");
+ return AVERROR_INVALIDDATA;
+ }
+ }
if (s->ls && !(s->bits <= 8 || nb_components == 1)) {
avpriv_report_missing_feature(s->avctx,
"JPEG-LS that is not <= 8 "
height *= 2;
}
- avcodec_set_dimensions(s->avctx, width, height);
+ ret = ff_set_dimensions(s->avctx, width, height);
+ if (ret < 0)
+ return ret;
s->first_picture = 0;
}
MJpegDecodeContext *s = avctx->priv_data;
int i, j;
- if (s->picture_ptr)
+ if (s->picture) {
+ av_frame_free(&s->picture);
+ s->picture_ptr = NULL;
+ } else if (s->picture_ptr)
av_frame_unref(s->picture_ptr);
av_free(s->buffer);
AVCodec ff_mjpeg_decoder = {
.name = "mjpeg",
+ .long_name = NULL_IF_CONFIG_SMALL("MJPEG (Motion JPEG)"),
.type = AVMEDIA_TYPE_VIDEO,
.id = AV_CODEC_ID_MJPEG,
.priv_data_size = sizeof(MJpegDecodeContext),
.close = ff_mjpeg_decode_end,
.decode = ff_mjpeg_decode_frame,
.capabilities = CODEC_CAP_DR1,
- .long_name = NULL_IF_CONFIG_SMALL("MJPEG (Motion JPEG)"),
.priv_class = &mjpegdec_class,
};
AVCodec ff_thp_decoder = {
.name = "thp",
+ .long_name = NULL_IF_CONFIG_SMALL("Nintendo Gamecube THP video"),
.type = AVMEDIA_TYPE_VIDEO,
.id = AV_CODEC_ID_THP,
.priv_data_size = sizeof(MJpegDecodeContext),
.close = ff_mjpeg_decode_end,
.decode = ff_mjpeg_decode_frame,
.capabilities = CODEC_CAP_DR1,
- .long_name = NULL_IF_CONFIG_SMALL("Nintendo Gamecube THP video"),
};