3 * Copyright (c) 2000, 2001 Fabrice Bellard
4 * Copyright (c) 2003 Alex Beregszaszi
5 * Copyright (c) 2003-2004 Michael Niedermayer
7 * Support for external huffman table, various fixes (AVID workaround),
8 * aspecting, new decode_frame mechanism and apple mjpeg-b support
11 * This file is part of FFmpeg.
13 * FFmpeg is free software; you can redistribute it and/or
14 * modify it under the terms of the GNU Lesser General Public
15 * License as published by the Free Software Foundation; either
16 * version 2.1 of the License, or (at your option) any later version.
18 * FFmpeg is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 * Lesser General Public License for more details.
23 * You should have received a copy of the GNU Lesser General Public
24 * License along with FFmpeg; if not, write to the Free Software
25 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
33 #include "libavutil/imgutils.h"
34 #include "libavutil/avassert.h"
35 #include "libavutil/opt.h"
38 #include "copy_block.h"
43 #include "jpegtables.h"
46 #include "jpeglsdec.h"
51 #include "bytestream.h"
54 static int init_default_huffman_tables(MJpegDecodeContext *s)
60 const uint8_t *values;
63 { 0, 0, avpriv_mjpeg_bits_dc_luminance,
64 avpriv_mjpeg_val_dc, 12 },
65 { 0, 1, avpriv_mjpeg_bits_dc_chrominance,
66 avpriv_mjpeg_val_dc, 12 },
67 { 1, 0, avpriv_mjpeg_bits_ac_luminance,
68 avpriv_mjpeg_val_ac_luminance, 162 },
69 { 1, 1, avpriv_mjpeg_bits_ac_chrominance,
70 avpriv_mjpeg_val_ac_chrominance, 162 },
71 { 2, 0, avpriv_mjpeg_bits_ac_luminance,
72 avpriv_mjpeg_val_ac_luminance, 162 },
73 { 2, 1, avpriv_mjpeg_bits_ac_chrominance,
74 avpriv_mjpeg_val_ac_chrominance, 162 },
78 for (i = 0; i < FF_ARRAY_ELEMS(ht); i++) {
79 ret = ff_mjpeg_build_vlc(&s->vlcs[ht[i].class][ht[i].index],
80 ht[i].bits, ht[i].values,
81 ht[i].class == 1, s->avctx);
85 if (ht[i].class < 2) {
86 memcpy(s->raw_huffman_lengths[ht[i].class][ht[i].index],
88 memcpy(s->raw_huffman_values[ht[i].class][ht[i].index],
89 ht[i].values, ht[i].length);
96 static void parse_avid(MJpegDecodeContext *s, uint8_t *buf, int len)
99 if (len > 14 && buf[12] == 1) /* 1 - NTSC */
100 s->interlace_polarity = 1;
101 if (len > 14 && buf[12] == 2) /* 2 - PAL */
102 s->interlace_polarity = 0;
103 if (s->avctx->debug & FF_DEBUG_PICT_INFO)
104 av_log(s->avctx, AV_LOG_INFO, "AVID: len:%d %d\n", len, len > 14 ? buf[12] : -1);
107 static void init_idct(AVCodecContext *avctx)
109 MJpegDecodeContext *s = avctx->priv_data;
111 ff_idctdsp_init(&s->idsp, avctx);
112 ff_init_scantable(s->idsp.idct_permutation, &s->scantable,
116 av_cold int ff_mjpeg_decode_init(AVCodecContext *avctx)
118 MJpegDecodeContext *s = avctx->priv_data;
121 if (!s->picture_ptr) {
122 s->picture = av_frame_alloc();
124 return AVERROR(ENOMEM);
125 s->picture_ptr = s->picture;
128 s->pkt = av_packet_alloc();
130 return AVERROR(ENOMEM);
133 ff_blockdsp_init(&s->bdsp, avctx);
134 ff_hpeldsp_init(&s->hdsp, avctx->flags);
139 s->first_picture = 1;
141 s->orig_height = avctx->coded_height;
142 avctx->chroma_sample_location = AVCHROMA_LOC_CENTER;
143 avctx->colorspace = AVCOL_SPC_BT470BG;
144 s->hwaccel_pix_fmt = s->hwaccel_sw_pix_fmt = AV_PIX_FMT_NONE;
146 if ((ret = init_default_huffman_tables(s)) < 0)
149 if (s->extern_huff) {
150 av_log(avctx, AV_LOG_INFO, "using external huffman table\n");
151 if ((ret = init_get_bits(&s->gb, avctx->extradata, avctx->extradata_size * 8)) < 0)
153 if (ff_mjpeg_decode_dht(s)) {
154 av_log(avctx, AV_LOG_ERROR,
155 "error using external huffman table, switching back to internal\n");
156 init_default_huffman_tables(s);
159 if (avctx->field_order == AV_FIELD_BB) { /* quicktime icefloe 019 */
160 s->interlace_polarity = 1; /* bottom field first */
161 av_log(avctx, AV_LOG_DEBUG, "bottom field first\n");
162 } else if (avctx->field_order == AV_FIELD_UNKNOWN) {
163 if (avctx->codec_tag == AV_RL32("MJPG"))
164 s->interlace_polarity = 1;
167 if (avctx->codec_id == AV_CODEC_ID_SMVJPEG) {
168 if (avctx->extradata_size >= 4)
169 s->smv_frames_per_jpeg = AV_RL32(avctx->extradata);
171 if (s->smv_frames_per_jpeg <= 0) {
172 av_log(avctx, AV_LOG_ERROR, "Invalid number of frames per jpeg.\n");
173 return AVERROR_INVALIDDATA;
176 s->smv_frame = av_frame_alloc();
178 return AVERROR(ENOMEM);
179 } else if (avctx->extradata_size > 8
180 && AV_RL32(avctx->extradata) == 0x2C
181 && AV_RL32(avctx->extradata+4) == 0x18) {
182 parse_avid(s, avctx->extradata, avctx->extradata_size);
185 if (avctx->codec->id == AV_CODEC_ID_AMV)
192 /* quantize tables */
193 int ff_mjpeg_decode_dqt(MJpegDecodeContext *s)
197 len = get_bits(&s->gb, 16) - 2;
199 if (8*len > get_bits_left(&s->gb)) {
200 av_log(s->avctx, AV_LOG_ERROR, "dqt: len %d is too large\n", len);
201 return AVERROR_INVALIDDATA;
205 int pr = get_bits(&s->gb, 4);
207 av_log(s->avctx, AV_LOG_ERROR, "dqt: invalid precision\n");
208 return AVERROR_INVALIDDATA;
210 index = get_bits(&s->gb, 4);
213 av_log(s->avctx, AV_LOG_DEBUG, "index=%d\n", index);
214 /* read quant table */
215 for (i = 0; i < 64; i++) {
216 s->quant_matrixes[index][i] = get_bits(&s->gb, pr ? 16 : 8);
217 if (s->quant_matrixes[index][i] == 0) {
218 av_log(s->avctx, AV_LOG_ERROR, "dqt: 0 quant value\n");
219 return AVERROR_INVALIDDATA;
223 // XXX FIXME fine-tune, and perhaps add dc too
224 s->qscale[index] = FFMAX(s->quant_matrixes[index][1],
225 s->quant_matrixes[index][8]) >> 1;
226 av_log(s->avctx, AV_LOG_DEBUG, "qscale[%d]: %d\n",
227 index, s->qscale[index]);
228 len -= 1 + 64 * (1+pr);
233 /* decode huffman tables and build VLC decoders */
234 int ff_mjpeg_decode_dht(MJpegDecodeContext *s)
236 int len, index, i, class, n, v;
237 uint8_t bits_table[17];
238 uint8_t val_table[256];
241 len = get_bits(&s->gb, 16) - 2;
243 if (8*len > get_bits_left(&s->gb)) {
244 av_log(s->avctx, AV_LOG_ERROR, "dht: len %d is too large\n", len);
245 return AVERROR_INVALIDDATA;
250 return AVERROR_INVALIDDATA;
251 class = get_bits(&s->gb, 4);
253 return AVERROR_INVALIDDATA;
254 index = get_bits(&s->gb, 4);
256 return AVERROR_INVALIDDATA;
258 for (i = 1; i <= 16; i++) {
259 bits_table[i] = get_bits(&s->gb, 8);
263 if (len < n || n > 256)
264 return AVERROR_INVALIDDATA;
266 for (i = 0; i < n; i++) {
267 v = get_bits(&s->gb, 8);
272 /* build VLC and flush previous vlc if present */
273 ff_free_vlc(&s->vlcs[class][index]);
274 av_log(s->avctx, AV_LOG_DEBUG, "class=%d index=%d nb_codes=%d\n",
276 if ((ret = ff_mjpeg_build_vlc(&s->vlcs[class][index], bits_table,
277 val_table, class > 0, s->avctx)) < 0)
281 ff_free_vlc(&s->vlcs[2][index]);
282 if ((ret = ff_mjpeg_build_vlc(&s->vlcs[2][index], bits_table,
283 val_table, 0, s->avctx)) < 0)
287 for (i = 0; i < 16; i++)
288 s->raw_huffman_lengths[class][index][i] = bits_table[i + 1];
289 for (i = 0; i < 256; i++)
290 s->raw_huffman_values[class][index][i] = val_table[i];
295 int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
297 int len, nb_components, i, width, height, bits, ret, size_change;
299 int h_count[MAX_COMPONENTS] = { 0 };
300 int v_count[MAX_COMPONENTS] = { 0 };
303 memset(s->upscale_h, 0, sizeof(s->upscale_h));
304 memset(s->upscale_v, 0, sizeof(s->upscale_v));
306 len = get_bits(&s->gb, 16);
307 bits = get_bits(&s->gb, 8);
309 if (bits > 16 || bits < 1) {
310 av_log(s->avctx, AV_LOG_ERROR, "bits %d is invalid\n", bits);
311 return AVERROR_INVALIDDATA;
314 if (s->avctx->bits_per_raw_sample != bits) {
315 av_log(s->avctx, s->avctx->bits_per_raw_sample > 0 ? AV_LOG_INFO : AV_LOG_DEBUG, "Changing bps from %d to %d\n", s->avctx->bits_per_raw_sample, bits);
316 s->avctx->bits_per_raw_sample = bits;
321 if (bits == 9 && !s->pegasus_rct)
322 s->rct = 1; // FIXME ugly
324 if(s->lossless && s->avctx->lowres){
325 av_log(s->avctx, AV_LOG_ERROR, "lowres is not possible with lossless jpeg\n");
329 height = get_bits(&s->gb, 16);
330 width = get_bits(&s->gb, 16);
332 // HACK for odd_height.mov
333 if (s->interlaced && s->width == width && s->height == height + 1)
336 av_log(s->avctx, AV_LOG_DEBUG, "sof0: picture: %dx%d\n", width, height);
337 if (av_image_check_size(width, height, 0, s->avctx) < 0)
338 return AVERROR_INVALIDDATA;
339 if (s->buf_size && (width + 7) / 8 * ((height + 7) / 8) > s->buf_size * 4LL)
340 return AVERROR_INVALIDDATA;
342 nb_components = get_bits(&s->gb, 8);
343 if (nb_components <= 0 ||
344 nb_components > MAX_COMPONENTS)
346 if (s->interlaced && (s->bottom_field == !s->interlace_polarity)) {
347 if (nb_components != s->nb_components) {
348 av_log(s->avctx, AV_LOG_ERROR,
349 "nb_components changing in interlaced picture\n");
350 return AVERROR_INVALIDDATA;
353 if (s->ls && !(bits <= 8 || nb_components == 1)) {
354 avpriv_report_missing_feature(s->avctx,
355 "JPEG-LS that is not <= 8 "
356 "bits/component or 16-bit gray");
357 return AVERROR_PATCHWELCOME;
359 if (len != 8 + 3 * nb_components) {
360 av_log(s->avctx, AV_LOG_ERROR, "decode_sof0: error, len(%d) mismatch %d components\n", len, nb_components);
361 return AVERROR_INVALIDDATA;
364 s->nb_components = nb_components;
367 for (i = 0; i < nb_components; i++) {
369 s->component_id[i] = get_bits(&s->gb, 8) - 1;
370 h_count[i] = get_bits(&s->gb, 4);
371 v_count[i] = get_bits(&s->gb, 4);
372 /* compute hmax and vmax (only used in interleaved case) */
373 if (h_count[i] > s->h_max)
374 s->h_max = h_count[i];
375 if (v_count[i] > s->v_max)
376 s->v_max = v_count[i];
377 s->quant_index[i] = get_bits(&s->gb, 8);
378 if (s->quant_index[i] >= 4) {
379 av_log(s->avctx, AV_LOG_ERROR, "quant_index is invalid\n");
380 return AVERROR_INVALIDDATA;
382 if (!h_count[i] || !v_count[i]) {
383 av_log(s->avctx, AV_LOG_ERROR,
384 "Invalid sampling factor in component %d %d:%d\n",
385 i, h_count[i], v_count[i]);
386 return AVERROR_INVALIDDATA;
389 av_log(s->avctx, AV_LOG_DEBUG, "component %d %d:%d id: %d quant:%d\n",
390 i, h_count[i], v_count[i],
391 s->component_id[i], s->quant_index[i]);
393 if ( nb_components == 4
394 && s->component_id[0] == 'C' - 1
395 && s->component_id[1] == 'M' - 1
396 && s->component_id[2] == 'Y' - 1
397 && s->component_id[3] == 'K' - 1)
398 s->adobe_transform = 0;
400 if (s->ls && (s->h_max > 1 || s->v_max > 1)) {
401 avpriv_report_missing_feature(s->avctx, "Subsampling in JPEG-LS");
402 return AVERROR_PATCHWELCOME;
406 if (nb_components == 2) {
407 /* Bayer images embedded in DNGs can contain 2 interleaved components and the
408 width stored in their SOF3 markers is the width of each one. We only output
409 a single component, therefore we need to adjust the output image width. We
410 handle the deinterleaving (but not the debayering) in this file. */
413 /* They can also contain 1 component, which is double the width and half the height
414 of the final image (rows are interleaved). We don't handle the decoding in this
415 file, but leave that to the TIFF/DNG decoder. */
418 /* if different size, realloc/alloc picture */
419 if (width != s->width || height != s->height || bits != s->bits ||
420 memcmp(s->h_count, h_count, sizeof(h_count)) ||
421 memcmp(s->v_count, v_count, sizeof(v_count))) {
427 memcpy(s->h_count, h_count, sizeof(h_count));
428 memcpy(s->v_count, v_count, sizeof(v_count));
432 /* test interlaced mode */
433 if (s->first_picture &&
434 (s->multiscope != 2 || s->avctx->time_base.den >= 25 * s->avctx->time_base.num) &&
435 s->orig_height != 0 &&
436 s->height < ((s->orig_height * 3) / 4)) {
438 s->bottom_field = s->interlace_polarity;
439 s->picture_ptr->interlaced_frame = 1;
440 s->picture_ptr->top_field_first = !s->interlace_polarity;
444 ret = ff_set_dimensions(s->avctx, width, height);
448 s->first_picture = 0;
453 if (s->avctx->codec_id == AV_CODEC_ID_SMVJPEG) {
454 s->avctx->height = s->avctx->coded_height / s->smv_frames_per_jpeg;
455 if (s->avctx->height <= 0)
456 return AVERROR_INVALIDDATA;
459 if (s->got_picture && s->interlaced && (s->bottom_field == !s->interlace_polarity)) {
460 if (s->progressive) {
461 avpriv_request_sample(s->avctx, "progressively coded interlaced picture");
462 return AVERROR_INVALIDDATA;
465 if (s->v_max == 1 && s->h_max == 1 && s->lossless==1 && (nb_components==3 || nb_components==4))
467 else if (!s->lossless)
469 /* XXX: not complete test ! */
470 pix_fmt_id = ((unsigned)s->h_count[0] << 28) | (s->v_count[0] << 24) |
471 (s->h_count[1] << 20) | (s->v_count[1] << 16) |
472 (s->h_count[2] << 12) | (s->v_count[2] << 8) |
473 (s->h_count[3] << 4) | s->v_count[3];
474 av_log(s->avctx, AV_LOG_DEBUG, "pix fmt id %x\n", pix_fmt_id);
475 /* NOTE we do not allocate pictures large enough for the possible
476 * padding of h/v_count being 4 */
477 if (!(pix_fmt_id & 0xD0D0D0D0))
478 pix_fmt_id -= (pix_fmt_id & 0xF0F0F0F0) >> 1;
479 if (!(pix_fmt_id & 0x0D0D0D0D))
480 pix_fmt_id -= (pix_fmt_id & 0x0F0F0F0F) >> 1;
482 for (i = 0; i < 8; i++) {
483 int j = 6 + (i&1) - (i&6);
484 int is = (pix_fmt_id >> (4*i)) & 0xF;
485 int js = (pix_fmt_id >> (4*j)) & 0xF;
487 if (is == 1 && js != 2 && (i < 2 || i > 5))
488 js = (pix_fmt_id >> ( 8 + 4*(i&1))) & 0xF;
489 if (is == 1 && js != 2 && (i < 2 || i > 5))
490 js = (pix_fmt_id >> (16 + 4*(i&1))) & 0xF;
492 if (is == 1 && js == 2) {
493 if (i & 1) s->upscale_h[j/2] = 1;
494 else s->upscale_v[j/2] = 1;
499 if (pix_fmt_id != 0x11110000 && pix_fmt_id != 0x11000000)
503 switch (pix_fmt_id) {
504 case 0x11110000: /* for bayer-encoded huffman lossless JPEGs embedded in DNGs */
507 s->avctx->pix_fmt = AV_PIX_FMT_GRAY16LE;
511 s->avctx->pix_fmt = s->bits <= 9 ? AV_PIX_FMT_BGR24 : AV_PIX_FMT_BGR48;
513 if ( s->adobe_transform == 0
514 || s->component_id[0] == 'R' - 1 && s->component_id[1] == 'G' - 1 && s->component_id[2] == 'B' - 1) {
515 s->avctx->pix_fmt = s->bits <= 8 ? AV_PIX_FMT_GBRP : AV_PIX_FMT_GBRP16;
517 if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV444P : AV_PIX_FMT_YUVJ444P;
518 else s->avctx->pix_fmt = AV_PIX_FMT_YUV444P16;
519 s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
522 av_assert0(s->nb_components == 3);
526 s->avctx->pix_fmt = s->bits <= 9 ? AV_PIX_FMT_ABGR : AV_PIX_FMT_RGBA64;
528 if (s->adobe_transform == 0 && s->bits <= 8) {
529 s->avctx->pix_fmt = AV_PIX_FMT_GBRAP;
531 s->avctx->pix_fmt = s->bits <= 8 ? AV_PIX_FMT_YUVA444P : AV_PIX_FMT_YUVA444P16;
532 s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
535 av_assert0(s->nb_components == 4);
539 if (s->adobe_transform == 0 && s->bits <= 8) {
540 s->avctx->pix_fmt = AV_PIX_FMT_GBRAP;
541 s->upscale_v[1] = s->upscale_v[2] = 1;
542 s->upscale_h[1] = s->upscale_h[2] = 1;
543 } else if (s->adobe_transform == 2 && s->bits <= 8) {
544 s->avctx->pix_fmt = AV_PIX_FMT_YUVA444P;
545 s->upscale_v[1] = s->upscale_v[2] = 1;
546 s->upscale_h[1] = s->upscale_h[2] = 1;
547 s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
549 if (s->bits <= 8) s->avctx->pix_fmt = AV_PIX_FMT_YUVA420P;
550 else s->avctx->pix_fmt = AV_PIX_FMT_YUVA420P16;
551 s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
553 av_assert0(s->nb_components == 4);
562 if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV444P : AV_PIX_FMT_YUVJ444P;
565 s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
577 s->avctx->pix_fmt = AV_PIX_FMT_GRAY8;
579 s->avctx->pix_fmt = AV_PIX_FMT_GRAY16;
586 if (s->component_id[0] == 'Q' && s->component_id[1] == 'F' && s->component_id[2] == 'A') {
587 if (s->bits <= 8) s->avctx->pix_fmt = AV_PIX_FMT_GBRP;
590 s->upscale_v[0] = s->upscale_v[1] = 1;
592 if (pix_fmt_id == 0x14111100)
593 s->upscale_v[1] = s->upscale_v[2] = 1;
594 if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV440P : AV_PIX_FMT_YUVJ440P;
597 s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
601 if (s->component_id[0] == 'Q' && s->component_id[1] == 'F' && s->component_id[2] == 'A') {
602 if (s->bits <= 8) s->avctx->pix_fmt = AV_PIX_FMT_GBRP;
605 s->upscale_h[0] = s->upscale_h[1] = 1;
607 if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV422P : AV_PIX_FMT_YUVJ422P;
608 else s->avctx->pix_fmt = AV_PIX_FMT_YUV422P16;
609 s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
615 s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV444P : AV_PIX_FMT_YUVJ444P;
616 s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
617 s->upscale_h[1] = s->upscale_h[2] = 2;
621 if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV422P : AV_PIX_FMT_YUVJ422P;
624 s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
630 if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV420P : AV_PIX_FMT_YUVJ420P;
631 else s->avctx->pix_fmt = AV_PIX_FMT_YUV420P16;
632 s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
633 if (pix_fmt_id == 0x42111100) {
636 s->upscale_h[1] = s->upscale_h[2] = 1;
637 } else if (pix_fmt_id == 0x24111100) {
640 s->upscale_v[1] = s->upscale_v[2] = 1;
641 } else if (pix_fmt_id == 0x23111100) {
644 s->upscale_v[1] = s->upscale_v[2] = 2;
648 if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV411P : AV_PIX_FMT_YUVJ411P;
651 s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
655 avpriv_report_missing_feature(s->avctx, "Pixel format 0x%x bits:%d", pix_fmt_id, s->bits);
656 memset(s->upscale_h, 0, sizeof(s->upscale_h));
657 memset(s->upscale_v, 0, sizeof(s->upscale_v));
658 return AVERROR_PATCHWELCOME;
660 if ((AV_RB32(s->upscale_h) || AV_RB32(s->upscale_v)) && s->avctx->lowres) {
661 avpriv_report_missing_feature(s->avctx, "Lowres for weird subsampling");
662 return AVERROR_PATCHWELCOME;
664 if ((AV_RB32(s->upscale_h) || AV_RB32(s->upscale_v)) && s->progressive && s->avctx->pix_fmt == AV_PIX_FMT_GBRP) {
665 avpriv_report_missing_feature(s->avctx, "progressive for weird subsampling");
666 return AVERROR_PATCHWELCOME;
669 memset(s->upscale_h, 0, sizeof(s->upscale_h));
670 memset(s->upscale_v, 0, sizeof(s->upscale_v));
671 if (s->nb_components == 3) {
672 s->avctx->pix_fmt = AV_PIX_FMT_RGB24;
673 } else if (s->nb_components != 1) {
674 av_log(s->avctx, AV_LOG_ERROR, "Unsupported number of components %d\n", s->nb_components);
675 return AVERROR_PATCHWELCOME;
676 } else if (s->palette_index && s->bits <= 8)
677 s->avctx->pix_fmt = AV_PIX_FMT_PAL8;
678 else if (s->bits <= 8)
679 s->avctx->pix_fmt = AV_PIX_FMT_GRAY8;
681 s->avctx->pix_fmt = AV_PIX_FMT_GRAY16;
684 s->pix_desc = av_pix_fmt_desc_get(s->avctx->pix_fmt);
686 av_log(s->avctx, AV_LOG_ERROR, "Could not get a pixel format descriptor.\n");
690 if (s->avctx->pix_fmt == s->hwaccel_sw_pix_fmt && !size_change) {
691 s->avctx->pix_fmt = s->hwaccel_pix_fmt;
693 enum AVPixelFormat pix_fmts[] = {
694 #if CONFIG_MJPEG_NVDEC_HWACCEL
697 #if CONFIG_MJPEG_VAAPI_HWACCEL
703 s->hwaccel_pix_fmt = ff_get_format(s->avctx, pix_fmts);
704 if (s->hwaccel_pix_fmt < 0)
705 return AVERROR(EINVAL);
707 s->hwaccel_sw_pix_fmt = s->avctx->pix_fmt;
708 s->avctx->pix_fmt = s->hwaccel_pix_fmt;
711 if (s->avctx->skip_frame == AVDISCARD_ALL) {
712 s->picture_ptr->pict_type = AV_PICTURE_TYPE_I;
713 s->picture_ptr->key_frame = 1;
718 av_frame_unref(s->picture_ptr);
719 if (ff_get_buffer(s->avctx, s->picture_ptr, AV_GET_BUFFER_FLAG_REF) < 0)
721 s->picture_ptr->pict_type = AV_PICTURE_TYPE_I;
722 s->picture_ptr->key_frame = 1;
725 for (i = 0; i < 4; i++)
726 s->linesize[i] = s->picture_ptr->linesize[i] << s->interlaced;
728 ff_dlog(s->avctx, "%d %d %d %d %d %d\n",
729 s->width, s->height, s->linesize[0], s->linesize[1],
730 s->interlaced, s->avctx->height);
734 if ((s->rgb && !s->lossless && !s->ls) ||
735 (!s->rgb && s->ls && s->nb_components > 1) ||
736 (s->avctx->pix_fmt == AV_PIX_FMT_PAL8 && !s->ls)
738 av_log(s->avctx, AV_LOG_ERROR, "Unsupported coding and pixel format combination\n");
739 return AVERROR_PATCHWELCOME;
742 /* totally blank picture as progressive JPEG will only add details to it */
743 if (s->progressive) {
744 int bw = (width + s->h_max * 8 - 1) / (s->h_max * 8);
745 int bh = (height + s->v_max * 8 - 1) / (s->v_max * 8);
746 for (i = 0; i < s->nb_components; i++) {
747 int size = bw * bh * s->h_count[i] * s->v_count[i];
748 av_freep(&s->blocks[i]);
749 av_freep(&s->last_nnz[i]);
750 s->blocks[i] = av_mallocz_array(size, sizeof(**s->blocks));
751 s->last_nnz[i] = av_mallocz_array(size, sizeof(**s->last_nnz));
752 if (!s->blocks[i] || !s->last_nnz[i])
753 return AVERROR(ENOMEM);
754 s->block_stride[i] = bw * s->h_count[i];
756 memset(s->coefs_finished, 0, sizeof(s->coefs_finished));
759 if (s->avctx->hwaccel) {
760 s->hwaccel_picture_private =
761 av_mallocz(s->avctx->hwaccel->frame_priv_data_size);
762 if (!s->hwaccel_picture_private)
763 return AVERROR(ENOMEM);
765 ret = s->avctx->hwaccel->start_frame(s->avctx, s->raw_image_buffer,
766 s->raw_image_buffer_size);
774 static inline int mjpeg_decode_dc(MJpegDecodeContext *s, int dc_index)
777 code = get_vlc2(&s->gb, s->vlcs[0][dc_index].table, 9, 2);
778 if (code < 0 || code > 16) {
779 av_log(s->avctx, AV_LOG_WARNING,
780 "mjpeg_decode_dc: bad vlc: %d:%d (%p)\n",
781 0, dc_index, &s->vlcs[0][dc_index]);
786 return get_xbits(&s->gb, code);
791 /* decode block and dequantize */
792 static int decode_block(MJpegDecodeContext *s, int16_t *block, int component,
793 int dc_index, int ac_index, uint16_t *quant_matrix)
795 int code, i, j, level, val;
798 val = mjpeg_decode_dc(s, dc_index);
799 if (val == 0xfffff) {
800 av_log(s->avctx, AV_LOG_ERROR, "error dc\n");
801 return AVERROR_INVALIDDATA;
803 val = val * (unsigned)quant_matrix[0] + s->last_dc[component];
804 val = av_clip_int16(val);
805 s->last_dc[component] = val;
809 {OPEN_READER(re, &s->gb);
811 UPDATE_CACHE(re, &s->gb);
812 GET_VLC(code, re, &s->gb, s->vlcs[1][ac_index].table, 9, 2);
814 i += ((unsigned)code) >> 4;
817 if (code > MIN_CACHE_BITS - 16)
818 UPDATE_CACHE(re, &s->gb);
821 int cache = GET_CACHE(re, &s->gb);
822 int sign = (~cache) >> 31;
823 level = (NEG_USR32(sign ^ cache,code) ^ sign) - sign;
826 LAST_SKIP_BITS(re, &s->gb, code);
829 av_log(s->avctx, AV_LOG_ERROR, "error count: %d\n", i);
830 return AVERROR_INVALIDDATA;
832 j = s->scantable.permutated[i];
833 block[j] = level * quant_matrix[i];
836 CLOSE_READER(re, &s->gb);}
841 static int decode_dc_progressive(MJpegDecodeContext *s, int16_t *block,
842 int component, int dc_index,
843 uint16_t *quant_matrix, int Al)
846 s->bdsp.clear_block(block);
847 val = mjpeg_decode_dc(s, dc_index);
848 if (val == 0xfffff) {
849 av_log(s->avctx, AV_LOG_ERROR, "error dc\n");
850 return AVERROR_INVALIDDATA;
852 val = (val * (quant_matrix[0] << Al)) + s->last_dc[component];
853 s->last_dc[component] = val;
858 /* decode block and dequantize - progressive JPEG version */
859 static int decode_block_progressive(MJpegDecodeContext *s, int16_t *block,
860 uint8_t *last_nnz, int ac_index,
861 uint16_t *quant_matrix,
862 int ss, int se, int Al, int *EOBRUN)
864 int code, i, j, val, run;
873 OPEN_READER(re, &s->gb);
874 for (i = ss; ; i++) {
875 UPDATE_CACHE(re, &s->gb);
876 GET_VLC(code, re, &s->gb, s->vlcs[2][ac_index].table, 9, 2);
878 run = ((unsigned) code) >> 4;
882 if (code > MIN_CACHE_BITS - 16)
883 UPDATE_CACHE(re, &s->gb);
886 int cache = GET_CACHE(re, &s->gb);
887 int sign = (~cache) >> 31;
888 level = (NEG_USR32(sign ^ cache,code) ^ sign) - sign;
891 LAST_SKIP_BITS(re, &s->gb, code);
895 j = s->scantable.permutated[se];
896 block[j] = level * (quant_matrix[se] << Al);
899 av_log(s->avctx, AV_LOG_ERROR, "error count: %d\n", i);
900 return AVERROR_INVALIDDATA;
902 j = s->scantable.permutated[i];
903 block[j] = level * (quant_matrix[i] << Al);
905 if (run == 0xF) {// ZRL - skip 15 coefficients
908 av_log(s->avctx, AV_LOG_ERROR, "ZRL overflow: %d\n", i);
909 return AVERROR_INVALIDDATA;
914 UPDATE_CACHE(re, &s->gb);
915 val += NEG_USR32(GET_CACHE(re, &s->gb), run);
916 LAST_SKIP_BITS(re, &s->gb, run);
923 CLOSE_READER(re, &s->gb);
932 #define REFINE_BIT(j) { \
933 UPDATE_CACHE(re, &s->gb); \
934 sign = block[j] >> 15; \
935 block[j] += SHOW_UBITS(re, &s->gb, 1) * \
936 ((quant_matrix[i] ^ sign) - sign) << Al; \
937 LAST_SKIP_BITS(re, &s->gb, 1); \
945 av_log(s->avctx, AV_LOG_ERROR, "error count: %d\n", i); \
950 j = s->scantable.permutated[i]; \
953 else if (run-- == 0) \
957 /* decode block and dequantize - progressive JPEG refinement pass */
958 static int decode_block_refinement(MJpegDecodeContext *s, int16_t *block,
960 int ac_index, uint16_t *quant_matrix,
961 int ss, int se, int Al, int *EOBRUN)
963 int code, i = ss, j, sign, val, run;
964 int last = FFMIN(se, *last_nnz);
966 OPEN_READER(re, &s->gb);
971 UPDATE_CACHE(re, &s->gb);
972 GET_VLC(code, re, &s->gb, s->vlcs[2][ac_index].table, 9, 2);
975 run = ((unsigned) code) >> 4;
976 UPDATE_CACHE(re, &s->gb);
977 val = SHOW_UBITS(re, &s->gb, 1);
978 LAST_SKIP_BITS(re, &s->gb, 1);
980 j = s->scantable.permutated[i];
982 block[j] = ((quant_matrix[i] << Al) ^ val) - val;
986 CLOSE_READER(re, &s->gb);
990 run = ((unsigned) code) >> 4;
997 UPDATE_CACHE(re, &s->gb);
998 run += SHOW_UBITS(re, &s->gb, val);
999 LAST_SKIP_BITS(re, &s->gb, val);
1011 for (; i <= last; i++) {
1012 j = s->scantable.permutated[i];
1016 CLOSE_READER(re, &s->gb);
1023 static int handle_rstn(MJpegDecodeContext *s, int nb_components)
1028 if (s->restart_interval) {
1030 if(s->restart_count == 0 && s->avctx->codec_id == AV_CODEC_ID_THP){
1031 align_get_bits(&s->gb);
1032 for (i = 0; i < nb_components; i++) /* reset dc */
1033 s->last_dc[i] = (4 << s->bits);
1036 i = 8 + ((-get_bits_count(&s->gb)) & 7);
1038 if (s->restart_count == 0) {
1039 if( show_bits(&s->gb, i) == (1 << i) - 1
1040 || show_bits(&s->gb, i) == 0xFF) {
1041 int pos = get_bits_count(&s->gb);
1042 align_get_bits(&s->gb);
1043 while (get_bits_left(&s->gb) >= 8 && show_bits(&s->gb, 8) == 0xFF)
1044 skip_bits(&s->gb, 8);
1045 if (get_bits_left(&s->gb) >= 8 && (get_bits(&s->gb, 8) & 0xF8) == 0xD0) {
1046 for (i = 0; i < nb_components; i++) /* reset dc */
1047 s->last_dc[i] = (4 << s->bits);
1050 skip_bits_long(&s->gb, pos - get_bits_count(&s->gb));
1057 /* Handles 1 to 4 components */
1058 static int ljpeg_decode_rgb_scan(MJpegDecodeContext *s, int nb_components, int predictor, int point_transform)
1062 uint16_t (*buffer)[4];
1063 int left[4], top[4], topleft[4];
1064 const int linesize = s->linesize[0];
1065 const int mask = ((1 << s->bits) - 1) << point_transform;
1066 int resync_mb_y = 0;
1067 int resync_mb_x = 0;
1070 if (!s->bayer && s->nb_components < 3)
1071 return AVERROR_INVALIDDATA;
1072 if (s->bayer && s->nb_components > 2)
1073 return AVERROR_INVALIDDATA;
1074 if (s->nb_components <= 0 || s->nb_components > 4)
1075 return AVERROR_INVALIDDATA;
1076 if (s->v_max != 1 || s->h_max != 1 || !s->lossless)
1077 return AVERROR_INVALIDDATA;
1080 s->restart_count = s->restart_interval;
1082 if (s->restart_interval == 0)
1083 s->restart_interval = INT_MAX;
1086 width = s->mb_width / nb_components; /* Interleaved, width stored is the total so need to divide */
1088 width = s->mb_width;
1090 av_fast_malloc(&s->ljpeg_buffer, &s->ljpeg_buffer_size, width * 4 * sizeof(s->ljpeg_buffer[0][0]));
1091 if (!s->ljpeg_buffer)
1092 return AVERROR(ENOMEM);
1094 buffer = s->ljpeg_buffer;
1096 for (i = 0; i < 4; i++)
1097 buffer[0][i] = 1 << (s->bits - 1);
1099 for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
1100 uint8_t *ptr = s->picture_ptr->data[0] + (linesize * mb_y);
1102 if (s->interlaced && s->bottom_field)
1103 ptr += linesize >> 1;
1105 for (i = 0; i < 4; i++)
1106 top[i] = left[i] = topleft[i] = buffer[0][i];
1108 if ((mb_y * s->width) % s->restart_interval == 0) {
1109 for (i = 0; i < 6; i++)
1110 vpred[i] = 1 << (s->bits-1);
1113 for (mb_x = 0; mb_x < width; mb_x++) {
1114 int modified_predictor = predictor;
1116 if (get_bits_left(&s->gb) < 1) {
1117 av_log(s->avctx, AV_LOG_ERROR, "bitstream end in rgb_scan\n");
1118 return AVERROR_INVALIDDATA;
1121 if (s->restart_interval && !s->restart_count){
1122 s->restart_count = s->restart_interval;
1126 top[i] = left[i]= topleft[i]= 1 << (s->bits - 1);
1128 if (mb_y == resync_mb_y || mb_y == resync_mb_y+1 && mb_x < resync_mb_x || !mb_x)
1129 modified_predictor = 1;
1131 for (i=0;i<nb_components;i++) {
1134 topleft[i] = top[i];
1135 top[i] = buffer[mb_x][i];
1137 dc = mjpeg_decode_dc(s, s->dc_index[i]);
1141 if (!s->bayer || mb_x) {
1143 } else { /* This path runs only for the first line in bayer images */
1145 pred = vpred[i] - dc;
1148 PREDICT(pred, topleft[i], top[i], pred, modified_predictor);
1150 left[i] = buffer[mb_x][i] =
1151 mask & (pred + (unsigned)(dc * (1 << point_transform)));
1154 if (s->restart_interval && !--s->restart_count) {
1155 align_get_bits(&s->gb);
1156 skip_bits(&s->gb, 16); /* skip RSTn */
1159 if (s->rct && s->nb_components == 4) {
1160 for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
1161 ptr[4*mb_x + 2] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2] - 0x200) >> 2);
1162 ptr[4*mb_x + 1] = buffer[mb_x][1] + ptr[4*mb_x + 2];
1163 ptr[4*mb_x + 3] = buffer[mb_x][2] + ptr[4*mb_x + 2];
1164 ptr[4*mb_x + 0] = buffer[mb_x][3];
1166 } else if (s->nb_components == 4) {
1167 for(i=0; i<nb_components; i++) {
1168 int c= s->comp_index[i];
1170 for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
1171 ptr[4*mb_x+3-c] = buffer[mb_x][i];
1173 } else if(s->bits == 9) {
1174 return AVERROR_PATCHWELCOME;
1176 for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
1177 ((uint16_t*)ptr)[4*mb_x+c] = buffer[mb_x][i];
1181 } else if (s->rct) {
1182 for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
1183 ptr[3*mb_x + 1] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2] - 0x200) >> 2);
1184 ptr[3*mb_x + 0] = buffer[mb_x][1] + ptr[3*mb_x + 1];
1185 ptr[3*mb_x + 2] = buffer[mb_x][2] + ptr[3*mb_x + 1];
1187 } else if (s->pegasus_rct) {
1188 for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
1189 ptr[3*mb_x + 1] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2]) >> 2);
1190 ptr[3*mb_x + 0] = buffer[mb_x][1] + ptr[3*mb_x + 1];
1191 ptr[3*mb_x + 2] = buffer[mb_x][2] + ptr[3*mb_x + 1];
1193 } else if (s->bayer) {
1194 if (nb_components == 1) {
1195 /* Leave decoding to the TIFF/DNG decoder (see comment in ff_mjpeg_decode_sof) */
1196 for (mb_x = 0; mb_x < width; mb_x++)
1197 ((uint16_t*)ptr)[mb_x] = buffer[mb_x][0];
1198 } else if (nb_components == 2) {
1199 for (mb_x = 0; mb_x < width; mb_x++) {
1200 ((uint16_t*)ptr)[2*mb_x + 0] = buffer[mb_x][0];
1201 ((uint16_t*)ptr)[2*mb_x + 1] = buffer[mb_x][1];
1205 for(i=0; i<nb_components; i++) {
1206 int c= s->comp_index[i];
1208 for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
1209 ptr[3*mb_x+2-c] = buffer[mb_x][i];
1211 } else if(s->bits == 9) {
1212 return AVERROR_PATCHWELCOME;
1214 for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
1215 ((uint16_t*)ptr)[3*mb_x+2-c] = buffer[mb_x][i];
1224 static int ljpeg_decode_yuv_scan(MJpegDecodeContext *s, int predictor,
1225 int point_transform, int nb_components)
1227 int i, mb_x, mb_y, mask;
1228 int bits= (s->bits+7)&~7;
1229 int resync_mb_y = 0;
1230 int resync_mb_x = 0;
1232 point_transform += bits - s->bits;
1233 mask = ((1 << s->bits) - 1) << point_transform;
1235 av_assert0(nb_components>=1 && nb_components<=4);
1237 for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
1238 for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
1239 if (get_bits_left(&s->gb) < 1) {
1240 av_log(s->avctx, AV_LOG_ERROR, "bitstream end in yuv_scan\n");
1241 return AVERROR_INVALIDDATA;
1243 if (s->restart_interval && !s->restart_count){
1244 s->restart_count = s->restart_interval;
1249 if(!mb_x || mb_y == resync_mb_y || mb_y == resync_mb_y+1 && mb_x < resync_mb_x || s->interlaced){
1250 int toprow = mb_y == resync_mb_y || mb_y == resync_mb_y+1 && mb_x < resync_mb_x;
1251 int leftcol = !mb_x || mb_y == resync_mb_y && mb_x == resync_mb_x;
1252 for (i = 0; i < nb_components; i++) {
1255 int n, h, v, x, y, c, j, linesize;
1256 n = s->nb_blocks[i];
1257 c = s->comp_index[i];
1262 linesize= s->linesize[c];
1264 if(bits>8) linesize /= 2;
1266 for(j=0; j<n; j++) {
1269 dc = mjpeg_decode_dc(s, s->dc_index[i]);
1272 if ( h * mb_x + x >= s->width
1273 || v * mb_y + y >= s->height) {
1275 } else if (bits<=8) {
1276 ptr = s->picture_ptr->data[c] + (linesize * (v * mb_y + y)) + (h * mb_x + x); //FIXME optimize this crap
1278 if(x==0 && leftcol){
1279 pred= 1 << (bits - 1);
1284 if(x==0 && leftcol){
1285 pred= ptr[-linesize];
1287 PREDICT(pred, ptr[-linesize-1], ptr[-linesize], ptr[-1], predictor);
1291 if (s->interlaced && s->bottom_field)
1292 ptr += linesize >> 1;
1294 *ptr= pred + ((unsigned)dc << point_transform);
1296 ptr16 = (uint16_t*)(s->picture_ptr->data[c] + 2*(linesize * (v * mb_y + y)) + 2*(h * mb_x + x)); //FIXME optimize this crap
1298 if(x==0 && leftcol){
1299 pred= 1 << (bits - 1);
1304 if(x==0 && leftcol){
1305 pred= ptr16[-linesize];
1307 PREDICT(pred, ptr16[-linesize-1], ptr16[-linesize], ptr16[-1], predictor);
1311 if (s->interlaced && s->bottom_field)
1312 ptr16 += linesize >> 1;
1314 *ptr16= pred + ((unsigned)dc << point_transform);
1323 for (i = 0; i < nb_components; i++) {
1326 int n, h, v, x, y, c, j, linesize, dc;
1327 n = s->nb_blocks[i];
1328 c = s->comp_index[i];
1333 linesize = s->linesize[c];
1335 if(bits>8) linesize /= 2;
1337 for (j = 0; j < n; j++) {
1340 dc = mjpeg_decode_dc(s, s->dc_index[i]);
1343 if ( h * mb_x + x >= s->width
1344 || v * mb_y + y >= s->height) {
1346 } else if (bits<=8) {
1347 ptr = s->picture_ptr->data[c] +
1348 (linesize * (v * mb_y + y)) +
1349 (h * mb_x + x); //FIXME optimize this crap
1350 PREDICT(pred, ptr[-linesize-1], ptr[-linesize], ptr[-1], predictor);
1353 *ptr = pred + ((unsigned)dc << point_transform);
1355 ptr16 = (uint16_t*)(s->picture_ptr->data[c] + 2*(linesize * (v * mb_y + y)) + 2*(h * mb_x + x)); //FIXME optimize this crap
1356 PREDICT(pred, ptr16[-linesize-1], ptr16[-linesize], ptr16[-1], predictor);
1359 *ptr16= pred + ((unsigned)dc << point_transform);
1369 if (s->restart_interval && !--s->restart_count) {
1370 align_get_bits(&s->gb);
1371 skip_bits(&s->gb, 16); /* skip RSTn */
1378 static av_always_inline void mjpeg_copy_block(MJpegDecodeContext *s,
1379 uint8_t *dst, const uint8_t *src,
1380 int linesize, int lowres)
1383 case 0: s->hdsp.put_pixels_tab[1][0](dst, src, linesize, 8);
1385 case 1: copy_block4(dst, src, linesize, linesize, 4);
1387 case 2: copy_block2(dst, src, linesize, linesize, 2);
1389 case 3: *dst = *src;
1394 static void shift_output(MJpegDecodeContext *s, uint8_t *ptr, int linesize)
1396 int block_x, block_y;
1397 int size = 8 >> s->avctx->lowres;
1399 for (block_y=0; block_y<size; block_y++)
1400 for (block_x=0; block_x<size; block_x++)
1401 *(uint16_t*)(ptr + 2*block_x + block_y*linesize) <<= 16 - s->bits;
1403 for (block_y=0; block_y<size; block_y++)
1404 for (block_x=0; block_x<size; block_x++)
1405 *(ptr + block_x + block_y*linesize) <<= 8 - s->bits;
1409 static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah,
1410 int Al, const uint8_t *mb_bitmask,
1411 int mb_bitmask_size,
1412 const AVFrame *reference)
1414 int i, mb_x, mb_y, chroma_h_shift, chroma_v_shift, chroma_width, chroma_height;
1415 uint8_t *data[MAX_COMPONENTS];
1416 const uint8_t *reference_data[MAX_COMPONENTS];
1417 int linesize[MAX_COMPONENTS];
1418 GetBitContext mb_bitmask_gb = {0}; // initialize to silence gcc warning
1419 int bytes_per_pixel = 1 + (s->bits > 8);
1422 if (mb_bitmask_size != (s->mb_width * s->mb_height + 7)>>3) {
1423 av_log(s->avctx, AV_LOG_ERROR, "mb_bitmask_size mismatches\n");
1424 return AVERROR_INVALIDDATA;
1426 init_get_bits(&mb_bitmask_gb, mb_bitmask, s->mb_width * s->mb_height);
1429 s->restart_count = 0;
1431 av_pix_fmt_get_chroma_sub_sample(s->avctx->pix_fmt, &chroma_h_shift,
1433 chroma_width = AV_CEIL_RSHIFT(s->width, chroma_h_shift);
1434 chroma_height = AV_CEIL_RSHIFT(s->height, chroma_v_shift);
1436 for (i = 0; i < nb_components; i++) {
1437 int c = s->comp_index[i];
1438 data[c] = s->picture_ptr->data[c];
1439 reference_data[c] = reference ? reference->data[c] : NULL;
1440 linesize[c] = s->linesize[c];
1441 s->coefs_finished[c] |= 1;
1444 for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
1445 for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
1446 const int copy_mb = mb_bitmask && !get_bits1(&mb_bitmask_gb);
1448 if (s->restart_interval && !s->restart_count)
1449 s->restart_count = s->restart_interval;
1451 if (get_bits_left(&s->gb) < 0) {
1452 av_log(s->avctx, AV_LOG_ERROR, "overread %d\n",
1453 -get_bits_left(&s->gb));
1454 return AVERROR_INVALIDDATA;
1456 for (i = 0; i < nb_components; i++) {
1458 int n, h, v, x, y, c, j;
1460 n = s->nb_blocks[i];
1461 c = s->comp_index[i];
1466 for (j = 0; j < n; j++) {
1467 block_offset = (((linesize[c] * (v * mb_y + y) * 8) +
1468 (h * mb_x + x) * 8 * bytes_per_pixel) >> s->avctx->lowres);
1470 if (s->interlaced && s->bottom_field)
1471 block_offset += linesize[c] >> 1;
1472 if ( 8*(h * mb_x + x) < ((c == 1) || (c == 2) ? chroma_width : s->width)
1473 && 8*(v * mb_y + y) < ((c == 1) || (c == 2) ? chroma_height : s->height)) {
1474 ptr = data[c] + block_offset;
1477 if (!s->progressive) {
1480 mjpeg_copy_block(s, ptr, reference_data[c] + block_offset,
1481 linesize[c], s->avctx->lowres);
1484 s->bdsp.clear_block(s->block);
1485 if (decode_block(s, s->block, i,
1486 s->dc_index[i], s->ac_index[i],
1487 s->quant_matrixes[s->quant_sindex[i]]) < 0) {
1488 av_log(s->avctx, AV_LOG_ERROR,
1489 "error y=%d x=%d\n", mb_y, mb_x);
1490 return AVERROR_INVALIDDATA;
1493 s->idsp.idct_put(ptr, linesize[c], s->block);
1495 shift_output(s, ptr, linesize[c]);
1499 int block_idx = s->block_stride[c] * (v * mb_y + y) +
1501 int16_t *block = s->blocks[c][block_idx];
1503 block[0] += get_bits1(&s->gb) *
1504 s->quant_matrixes[s->quant_sindex[i]][0] << Al;
1505 else if (decode_dc_progressive(s, block, i, s->dc_index[i],
1506 s->quant_matrixes[s->quant_sindex[i]],
1508 av_log(s->avctx, AV_LOG_ERROR,
1509 "error y=%d x=%d\n", mb_y, mb_x);
1510 return AVERROR_INVALIDDATA;
1513 ff_dlog(s->avctx, "mb: %d %d processed\n", mb_y, mb_x);
1514 ff_dlog(s->avctx, "%d %d %d %d %d %d %d %d \n",
1515 mb_x, mb_y, x, y, c, s->bottom_field,
1516 (v * mb_y + y) * 8, (h * mb_x + x) * 8);
1524 handle_rstn(s, nb_components);
1530 static int mjpeg_decode_scan_progressive_ac(MJpegDecodeContext *s, int ss,
1531 int se, int Ah, int Al)
1535 int c = s->comp_index[0];
1536 uint16_t *quant_matrix = s->quant_matrixes[s->quant_sindex[0]];
1538 av_assert0(ss>=0 && Ah>=0 && Al>=0);
1539 if (se < ss || se > 63) {
1540 av_log(s->avctx, AV_LOG_ERROR, "SS/SE %d/%d is invalid\n", ss, se);
1541 return AVERROR_INVALIDDATA;
1544 // s->coefs_finished is a bitmask for coefficients coded
1545 // ss and se are parameters telling start and end coefficients
1546 s->coefs_finished[c] |= (2ULL << se) - (1ULL << ss);
1548 s->restart_count = 0;
1550 for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
1551 int block_idx = mb_y * s->block_stride[c];
1552 int16_t (*block)[64] = &s->blocks[c][block_idx];
1553 uint8_t *last_nnz = &s->last_nnz[c][block_idx];
1554 if (get_bits_left(&s->gb) <= 0) {
1555 av_log(s->avctx, AV_LOG_ERROR, "bitstream truncated in mjpeg_decode_scan_progressive_ac\n");
1556 return AVERROR_INVALIDDATA;
1558 for (mb_x = 0; mb_x < s->mb_width; mb_x++, block++, last_nnz++) {
1560 if (s->restart_interval && !s->restart_count)
1561 s->restart_count = s->restart_interval;
1564 ret = decode_block_refinement(s, *block, last_nnz, s->ac_index[0],
1565 quant_matrix, ss, se, Al, &EOBRUN);
1567 ret = decode_block_progressive(s, *block, last_nnz, s->ac_index[0],
1568 quant_matrix, ss, se, Al, &EOBRUN);
1570 av_log(s->avctx, AV_LOG_ERROR,
1571 "error y=%d x=%d\n", mb_y, mb_x);
1572 return AVERROR_INVALIDDATA;
1575 if (handle_rstn(s, 0))
1582 static void mjpeg_idct_scan_progressive_ac(MJpegDecodeContext *s)
1586 const int bytes_per_pixel = 1 + (s->bits > 8);
1587 const int block_size = s->lossless ? 1 : 8;
1589 for (c = 0; c < s->nb_components; c++) {
1590 uint8_t *data = s->picture_ptr->data[c];
1591 int linesize = s->linesize[c];
1592 int h = s->h_max / s->h_count[c];
1593 int v = s->v_max / s->v_count[c];
1594 int mb_width = (s->width + h * block_size - 1) / (h * block_size);
1595 int mb_height = (s->height + v * block_size - 1) / (v * block_size);
1597 if (~s->coefs_finished[c])
1598 av_log(s->avctx, AV_LOG_WARNING, "component %d is incomplete\n", c);
1600 if (s->interlaced && s->bottom_field)
1601 data += linesize >> 1;
1603 for (mb_y = 0; mb_y < mb_height; mb_y++) {
1604 uint8_t *ptr = data + (mb_y * linesize * 8 >> s->avctx->lowres);
1605 int block_idx = mb_y * s->block_stride[c];
1606 int16_t (*block)[64] = &s->blocks[c][block_idx];
1607 for (mb_x = 0; mb_x < mb_width; mb_x++, block++) {
1608 s->idsp.idct_put(ptr, linesize, *block);
1610 shift_output(s, ptr, linesize);
1611 ptr += bytes_per_pixel*8 >> s->avctx->lowres;
1617 int ff_mjpeg_decode_sos(MJpegDecodeContext *s, const uint8_t *mb_bitmask,
1618 int mb_bitmask_size, const AVFrame *reference)
1620 int len, nb_components, i, h, v, predictor, point_transform;
1622 const int block_size = s->lossless ? 1 : 8;
1623 int ilv, prev_shift;
1625 if (!s->got_picture) {
1626 av_log(s->avctx, AV_LOG_WARNING,
1627 "Can not process SOS before SOF, skipping\n");
1632 if (reference->width != s->picture_ptr->width ||
1633 reference->height != s->picture_ptr->height ||
1634 reference->format != s->picture_ptr->format) {
1635 av_log(s->avctx, AV_LOG_ERROR, "Reference mismatching\n");
1636 return AVERROR_INVALIDDATA;
1640 /* XXX: verify len field validity */
1641 len = get_bits(&s->gb, 16);
1642 nb_components = get_bits(&s->gb, 8);
1643 if (nb_components == 0 || nb_components > MAX_COMPONENTS) {
1644 avpriv_report_missing_feature(s->avctx,
1645 "decode_sos: nb_components (%d)",
1647 return AVERROR_PATCHWELCOME;
1649 if (len != 6 + 2 * nb_components) {
1650 av_log(s->avctx, AV_LOG_ERROR, "decode_sos: invalid len (%d)\n", len);
1651 return AVERROR_INVALIDDATA;
1653 for (i = 0; i < nb_components; i++) {
1654 id = get_bits(&s->gb, 8) - 1;
1655 av_log(s->avctx, AV_LOG_DEBUG, "component: %d\n", id);
1656 /* find component index */
1657 for (index = 0; index < s->nb_components; index++)
1658 if (id == s->component_id[index])
1660 if (index == s->nb_components) {
1661 av_log(s->avctx, AV_LOG_ERROR,
1662 "decode_sos: index(%d) out of components\n", index);
1663 return AVERROR_INVALIDDATA;
1665 /* Metasoft MJPEG codec has Cb and Cr swapped */
1666 if (s->avctx->codec_tag == MKTAG('M', 'T', 'S', 'J')
1667 && nb_components == 3 && s->nb_components == 3 && i)
1670 s->quant_sindex[i] = s->quant_index[index];
1671 s->nb_blocks[i] = s->h_count[index] * s->v_count[index];
1672 s->h_scount[i] = s->h_count[index];
1673 s->v_scount[i] = s->v_count[index];
1675 if((nb_components == 1 || nb_components == 3) && s->nb_components == 3 && s->avctx->pix_fmt == AV_PIX_FMT_GBR24P)
1676 index = (index+2)%3;
1678 s->comp_index[i] = index;
1680 s->dc_index[i] = get_bits(&s->gb, 4);
1681 s->ac_index[i] = get_bits(&s->gb, 4);
1683 if (s->dc_index[i] < 0 || s->ac_index[i] < 0 ||
1684 s->dc_index[i] >= 4 || s->ac_index[i] >= 4)
1686 if (!s->vlcs[0][s->dc_index[i]].table || !(s->progressive ? s->vlcs[2][s->ac_index[0]].table : s->vlcs[1][s->ac_index[i]].table))
1690 predictor = get_bits(&s->gb, 8); /* JPEG Ss / lossless JPEG predictor /JPEG-LS NEAR */
1691 ilv = get_bits(&s->gb, 8); /* JPEG Se / JPEG-LS ILV */
1692 if(s->avctx->codec_tag != AV_RL32("CJPG")){
1693 prev_shift = get_bits(&s->gb, 4); /* Ah */
1694 point_transform = get_bits(&s->gb, 4); /* Al */
1696 prev_shift = point_transform = 0;
1698 if (nb_components > 1) {
1699 /* interleaved stream */
1700 s->mb_width = (s->width + s->h_max * block_size - 1) / (s->h_max * block_size);
1701 s->mb_height = (s->height + s->v_max * block_size - 1) / (s->v_max * block_size);
1702 } else if (!s->ls) { /* skip this for JPEG-LS */
1703 h = s->h_max / s->h_scount[0];
1704 v = s->v_max / s->v_scount[0];
1705 s->mb_width = (s->width + h * block_size - 1) / (h * block_size);
1706 s->mb_height = (s->height + v * block_size - 1) / (v * block_size);
1707 s->nb_blocks[0] = 1;
1712 if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1713 av_log(s->avctx, AV_LOG_DEBUG, "%s %s p:%d >>:%d ilv:%d bits:%d skip:%d %s comp:%d\n",
1714 s->lossless ? "lossless" : "sequential DCT", s->rgb ? "RGB" : "",
1715 predictor, point_transform, ilv, s->bits, s->mjpb_skiptosod,
1716 s->pegasus_rct ? "PRCT" : (s->rct ? "RCT" : ""), nb_components);
1719 /* mjpeg-b can have padding bytes between sos and image data, skip them */
1720 for (i = s->mjpb_skiptosod; i > 0; i--)
1721 skip_bits(&s->gb, 8);
1724 for (i = 0; i < nb_components; i++)
1725 s->last_dc[i] = (4 << s->bits);
1727 if (s->avctx->hwaccel) {
1728 int bytes_to_start = get_bits_count(&s->gb) / 8;
1729 av_assert0(bytes_to_start >= 0 &&
1730 s->raw_scan_buffer_size >= bytes_to_start);
1732 ret = s->avctx->hwaccel->decode_slice(s->avctx,
1733 s->raw_scan_buffer + bytes_to_start,
1734 s->raw_scan_buffer_size - bytes_to_start);
1738 } else if (s->lossless) {
1739 av_assert0(s->picture_ptr == s->picture);
1740 if (CONFIG_JPEGLS_DECODER && s->ls) {
1742 // reset_ls_coding_parameters(s, 0);
1744 if ((ret = ff_jpegls_decode_picture(s, predictor,
1745 point_transform, ilv)) < 0)
1748 if (s->rgb || s->bayer) {
1749 if ((ret = ljpeg_decode_rgb_scan(s, nb_components, predictor, point_transform)) < 0)
1752 if ((ret = ljpeg_decode_yuv_scan(s, predictor,
1754 nb_components)) < 0)
1759 if (s->progressive && predictor) {
1760 av_assert0(s->picture_ptr == s->picture);
1761 if ((ret = mjpeg_decode_scan_progressive_ac(s, predictor,
1763 point_transform)) < 0)
1766 if ((ret = mjpeg_decode_scan(s, nb_components,
1767 prev_shift, point_transform,
1768 mb_bitmask, mb_bitmask_size, reference)) < 0)
1773 if (s->interlaced &&
1774 get_bits_left(&s->gb) > 32 &&
1775 show_bits(&s->gb, 8) == 0xFF) {
1776 GetBitContext bak = s->gb;
1777 align_get_bits(&bak);
1778 if (show_bits(&bak, 16) == 0xFFD1) {
1779 av_log(s->avctx, AV_LOG_DEBUG, "AVRn interlaced picture marker found\n");
1781 skip_bits(&s->gb, 16);
1782 s->bottom_field ^= 1;
1791 av_log(s->avctx, AV_LOG_ERROR, "decode_sos: ac/dc index out of range\n");
1792 return AVERROR_INVALIDDATA;
1795 static int mjpeg_decode_dri(MJpegDecodeContext *s)
1797 if (get_bits(&s->gb, 16) != 4)
1798 return AVERROR_INVALIDDATA;
1799 s->restart_interval = get_bits(&s->gb, 16);
1800 s->restart_count = 0;
1801 av_log(s->avctx, AV_LOG_DEBUG, "restart interval: %d\n",
1802 s->restart_interval);
1807 static int mjpeg_decode_app(MJpegDecodeContext *s)
1811 len = get_bits(&s->gb, 16);
1814 // Pentax K-1 (digital camera) JPEG images embedded in DNG images contain unknown APP0 markers
1815 av_log(s->avctx, AV_LOG_WARNING, "skipping APPx (len=%"PRId32") for bayer-encoded image\n", len);
1816 skip_bits(&s->gb, len);
1819 return AVERROR_INVALIDDATA;
1821 if (8 * len > get_bits_left(&s->gb))
1822 return AVERROR_INVALIDDATA;
1824 id = get_bits_long(&s->gb, 32);
1827 if (s->avctx->debug & FF_DEBUG_STARTCODE)
1828 av_log(s->avctx, AV_LOG_DEBUG, "APPx (%s / %8X) len=%d\n",
1829 av_fourcc2str(av_bswap32(id)), id, len);
1831 /* Buggy AVID, it puts EOI only at every 10th frame. */
1832 /* Also, this fourcc is used by non-avid files too, it holds some
1833 information, but it's always present in AVID-created files. */
1834 if (id == AV_RB32("AVI1")) {
1840 4bytes field_size_less_padding
1843 i = get_bits(&s->gb, 8); len--;
1844 av_log(s->avctx, AV_LOG_DEBUG, "polarity %d\n", i);
1848 if (id == AV_RB32("JFIF")) {
1849 int t_w, t_h, v1, v2;
1852 skip_bits(&s->gb, 8); /* the trailing zero-byte */
1853 v1 = get_bits(&s->gb, 8);
1854 v2 = get_bits(&s->gb, 8);
1855 skip_bits(&s->gb, 8);
1857 s->avctx->sample_aspect_ratio.num = get_bits(&s->gb, 16);
1858 s->avctx->sample_aspect_ratio.den = get_bits(&s->gb, 16);
1859 if ( s->avctx->sample_aspect_ratio.num <= 0
1860 || s->avctx->sample_aspect_ratio.den <= 0) {
1861 s->avctx->sample_aspect_ratio.num = 0;
1862 s->avctx->sample_aspect_ratio.den = 1;
1865 if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1866 av_log(s->avctx, AV_LOG_INFO,
1867 "mjpeg: JFIF header found (version: %x.%x) SAR=%d/%d\n",
1869 s->avctx->sample_aspect_ratio.num,
1870 s->avctx->sample_aspect_ratio.den);
1874 t_w = get_bits(&s->gb, 8);
1875 t_h = get_bits(&s->gb, 8);
1877 /* skip thumbnail */
1878 if (len -10 - (t_w * t_h * 3) > 0)
1879 len -= t_w * t_h * 3;
1886 if ( id == AV_RB32("Adob")
1888 && show_bits(&s->gb, 8) == 'e'
1889 && show_bits_long(&s->gb, 32) != AV_RB32("e_CM")) {
1890 skip_bits(&s->gb, 8); /* 'e' */
1891 skip_bits(&s->gb, 16); /* version */
1892 skip_bits(&s->gb, 16); /* flags0 */
1893 skip_bits(&s->gb, 16); /* flags1 */
1894 s->adobe_transform = get_bits(&s->gb, 8);
1895 if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1896 av_log(s->avctx, AV_LOG_INFO, "mjpeg: Adobe header found, transform=%d\n", s->adobe_transform);
1901 if (id == AV_RB32("LJIF")) {
1903 int pegasus_rct = s->pegasus_rct;
1904 if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1905 av_log(s->avctx, AV_LOG_INFO,
1906 "Pegasus lossless jpeg header found\n");
1907 skip_bits(&s->gb, 16); /* version ? */
1908 skip_bits(&s->gb, 16); /* unknown always 0? */
1909 skip_bits(&s->gb, 16); /* unknown always 0? */
1910 skip_bits(&s->gb, 16); /* unknown always 0? */
1911 switch (i=get_bits(&s->gb, 8)) {
1921 av_log(s->avctx, AV_LOG_ERROR, "unknown colorspace %d\n", i);
1926 if (rgb != s->rgb || pegasus_rct != s->pegasus_rct) {
1927 av_log(s->avctx, AV_LOG_WARNING, "Mismatching LJIF tag\n");
1932 s->pegasus_rct = pegasus_rct;
1936 if (id == AV_RL32("colr") && len > 0) {
1937 s->colr = get_bits(&s->gb, 8);
1938 if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1939 av_log(s->avctx, AV_LOG_INFO, "COLR %d\n", s->colr);
1943 if (id == AV_RL32("xfrm") && len > 0) {
1944 s->xfrm = get_bits(&s->gb, 8);
1945 if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1946 av_log(s->avctx, AV_LOG_INFO, "XFRM %d\n", s->xfrm);
1951 /* JPS extension by VRex */
1952 if (s->start_code == APP3 && id == AV_RB32("_JPS") && len >= 10) {
1953 int flags, layout, type;
1954 if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1955 av_log(s->avctx, AV_LOG_INFO, "_JPSJPS_\n");
1957 skip_bits(&s->gb, 32); len -= 4; /* JPS_ */
1958 skip_bits(&s->gb, 16); len -= 2; /* block length */
1959 skip_bits(&s->gb, 8); /* reserved */
1960 flags = get_bits(&s->gb, 8);
1961 layout = get_bits(&s->gb, 8);
1962 type = get_bits(&s->gb, 8);
1965 av_freep(&s->stereo3d);
1966 s->stereo3d = av_stereo3d_alloc();
1971 s->stereo3d->type = AV_STEREO3D_2D;
1972 } else if (type == 1) {
1975 s->stereo3d->type = AV_STEREO3D_LINES;
1978 s->stereo3d->type = AV_STEREO3D_SIDEBYSIDE;
1981 s->stereo3d->type = AV_STEREO3D_TOPBOTTOM;
1984 if (!(flags & 0x04)) {
1985 s->stereo3d->flags = AV_STEREO3D_FLAG_INVERT;
1992 if (s->start_code == APP1 && id == AV_RB32("Exif") && len >= 2) {
1993 GetByteContext gbytes;
1994 int ret, le, ifd_offset, bytes_read;
1995 const uint8_t *aligned;
1997 skip_bits(&s->gb, 16); // skip padding
2000 // init byte wise reading
2001 aligned = align_get_bits(&s->gb);
2002 bytestream2_init(&gbytes, aligned, len);
2005 ret = ff_tdecode_header(&gbytes, &le, &ifd_offset);
2007 av_log(s->avctx, AV_LOG_ERROR, "mjpeg: invalid TIFF header in EXIF data\n");
2009 bytestream2_seek(&gbytes, ifd_offset, SEEK_SET);
2011 // read 0th IFD and store the metadata
2012 // (return values > 0 indicate the presence of subimage metadata)
2013 ret = ff_exif_decode_ifd(s->avctx, &gbytes, le, 0, &s->exif_metadata);
2015 av_log(s->avctx, AV_LOG_ERROR, "mjpeg: error decoding EXIF data\n");
2019 bytes_read = bytestream2_tell(&gbytes);
2020 skip_bits(&s->gb, bytes_read << 3);
2027 if ((s->start_code == APP1) && (len > (0x28 - 8))) {
2028 id = get_bits_long(&s->gb, 32);
2031 if (id == AV_RB32("mjpg")) {
2034 4bytes pad field size
2042 if (s->avctx->debug & FF_DEBUG_PICT_INFO)
2043 av_log(s->avctx, AV_LOG_INFO, "mjpeg: Apple MJPEG-A header found\n");
2047 if (s->start_code == APP2 && id == AV_RB32("ICC_") && len >= 10) {
2050 unsigned nummarkers;
2052 id = get_bits_long(&s->gb, 32);
2053 id2 = get_bits(&s->gb, 24);
2055 if (id != AV_RB32("PROF") || id2 != AV_RB24("ILE")) {
2056 av_log(s->avctx, AV_LOG_WARNING, "Invalid ICC_PROFILE header in APP2\n");
2060 skip_bits(&s->gb, 8);
2061 seqno = get_bits(&s->gb, 8);
2064 av_log(s->avctx, AV_LOG_WARNING, "Invalid sequence number in APP2\n");
2068 nummarkers = get_bits(&s->gb, 8);
2070 if (nummarkers == 0) {
2071 av_log(s->avctx, AV_LOG_WARNING, "Invalid number of markers coded in APP2\n");
2073 } else if (s->iccnum != 0 && nummarkers != s->iccnum) {
2074 av_log(s->avctx, AV_LOG_WARNING, "Mistmatch in coded number of ICC markers between markers\n");
2076 } else if (seqno > nummarkers) {
2077 av_log(s->avctx, AV_LOG_WARNING, "Mismatching sequence number and coded number of ICC markers\n");
2081 /* Allocate if this is the first APP2 we've seen. */
2082 if (s->iccnum == 0) {
2083 s->iccdata = av_mallocz(nummarkers * sizeof(*(s->iccdata)));
2084 s->iccdatalens = av_mallocz(nummarkers * sizeof(*(s->iccdatalens)));
2085 if (!s->iccdata || !s->iccdatalens) {
2086 av_log(s->avctx, AV_LOG_ERROR, "Could not allocate ICC data arrays\n");
2087 return AVERROR(ENOMEM);
2089 s->iccnum = nummarkers;
2092 if (s->iccdata[seqno - 1]) {
2093 av_log(s->avctx, AV_LOG_WARNING, "Duplicate ICC sequence number\n");
2097 s->iccdatalens[seqno - 1] = len;
2098 s->iccdata[seqno - 1] = av_malloc(len);
2099 if (!s->iccdata[seqno - 1]) {
2100 av_log(s->avctx, AV_LOG_ERROR, "Could not allocate ICC data buffer\n");
2101 return AVERROR(ENOMEM);
2104 memcpy(s->iccdata[seqno - 1], align_get_bits(&s->gb), len);
2105 skip_bits(&s->gb, len << 3);
2109 if (s->iccread > s->iccnum)
2110 av_log(s->avctx, AV_LOG_WARNING, "Read more ICC markers than are supposed to be coded\n");
2114 /* slow but needed for extreme adobe jpegs */
2116 av_log(s->avctx, AV_LOG_ERROR,
2117 "mjpeg: error, decode_app parser read over the end\n");
2119 skip_bits(&s->gb, 8);
2124 static int mjpeg_decode_com(MJpegDecodeContext *s)
2126 int len = get_bits(&s->gb, 16);
2127 if (len >= 2 && 8 * len - 16 <= get_bits_left(&s->gb)) {
2129 char *cbuf = av_malloc(len - 1);
2131 return AVERROR(ENOMEM);
2133 for (i = 0; i < len - 2; i++)
2134 cbuf[i] = get_bits(&s->gb, 8);
2135 if (i > 0 && cbuf[i - 1] == '\n')
2140 if (s->avctx->debug & FF_DEBUG_PICT_INFO)
2141 av_log(s->avctx, AV_LOG_INFO, "comment: '%s'\n", cbuf);
2143 /* buggy avid, it puts EOI only at every 10th frame */
2144 if (!strncmp(cbuf, "AVID", 4)) {
2145 parse_avid(s, cbuf, len);
2146 } else if (!strcmp(cbuf, "CS=ITU601"))
2148 else if ((!strncmp(cbuf, "Intel(R) JPEG Library, version 1", 32) && s->avctx->codec_tag) ||
2149 (!strncmp(cbuf, "Metasoft MJPEG Codec", 20)))
2151 else if (!strcmp(cbuf, "MULTISCOPE II")) {
2152 s->avctx->sample_aspect_ratio = (AVRational) { 1, 2 };
2162 /* return the 8 bit start code value and update the search
2163 state. Return -1 if no start code found */
2164 static int find_marker(const uint8_t **pbuf_ptr, const uint8_t *buf_end)
2166 const uint8_t *buf_ptr;
2171 buf_ptr = *pbuf_ptr;
2172 while (buf_end - buf_ptr > 1) {
2175 if ((v == 0xff) && (v2 >= SOF0) && (v2 <= COM) && buf_ptr < buf_end) {
2184 ff_dlog(NULL, "find_marker skipped %d bytes\n", skipped);
2185 *pbuf_ptr = buf_ptr;
2189 int ff_mjpeg_find_marker(MJpegDecodeContext *s,
2190 const uint8_t **buf_ptr, const uint8_t *buf_end,
2191 const uint8_t **unescaped_buf_ptr,
2192 int *unescaped_buf_size)
2195 start_code = find_marker(buf_ptr, buf_end);
2197 av_fast_padded_malloc(&s->buffer, &s->buffer_size, buf_end - *buf_ptr);
2199 return AVERROR(ENOMEM);
2201 /* unescape buffer of SOS, use special treatment for JPEG-LS */
2202 if (start_code == SOS && !s->ls) {
2203 const uint8_t *src = *buf_ptr;
2204 const uint8_t *ptr = src;
2205 uint8_t *dst = s->buffer;
2207 #define copy_data_segment(skip) do { \
2208 ptrdiff_t length = (ptr - src) - (skip); \
2210 memcpy(dst, src, length); \
2216 if (s->avctx->codec_id == AV_CODEC_ID_THP) {
2218 copy_data_segment(0);
2220 while (ptr < buf_end) {
2221 uint8_t x = *(ptr++);
2225 while (ptr < buf_end && x == 0xff) {
2230 /* 0xFF, 0xFF, ... */
2232 copy_data_segment(skip);
2234 /* decrement src as it is equal to ptr after the
2235 * copy_data_segment macro and we might want to
2236 * copy the current value of x later on */
2240 if (x < RST0 || x > RST7) {
2241 copy_data_segment(1);
2248 copy_data_segment(0);
2250 #undef copy_data_segment
2252 *unescaped_buf_ptr = s->buffer;
2253 *unescaped_buf_size = dst - s->buffer;
2254 memset(s->buffer + *unescaped_buf_size, 0,
2255 AV_INPUT_BUFFER_PADDING_SIZE);
2257 av_log(s->avctx, AV_LOG_DEBUG, "escaping removed %"PTRDIFF_SPECIFIER" bytes\n",
2258 (buf_end - *buf_ptr) - (dst - s->buffer));
2259 } else if (start_code == SOS && s->ls) {
2260 const uint8_t *src = *buf_ptr;
2261 uint8_t *dst = s->buffer;
2267 while (src + t < buf_end) {
2268 uint8_t x = src[t++];
2270 while ((src + t < buf_end) && x == 0xff)
2279 init_put_bits(&pb, dst, t);
2281 /* unescape bitstream */
2283 uint8_t x = src[b++];
2284 put_bits(&pb, 8, x);
2285 if (x == 0xFF && b < t) {
2288 av_log(s->avctx, AV_LOG_WARNING, "Invalid escape sequence\n");
2291 put_bits(&pb, 7, x);
2295 flush_put_bits(&pb);
2297 *unescaped_buf_ptr = dst;
2298 *unescaped_buf_size = (bit_count + 7) >> 3;
2299 memset(s->buffer + *unescaped_buf_size, 0,
2300 AV_INPUT_BUFFER_PADDING_SIZE);
2302 *unescaped_buf_ptr = *buf_ptr;
2303 *unescaped_buf_size = buf_end - *buf_ptr;
2309 static void reset_icc_profile(MJpegDecodeContext *s)
2314 for (i = 0; i < s->iccnum; i++)
2315 av_freep(&s->iccdata[i]);
2316 av_freep(&s->iccdata);
2317 av_freep(&s->iccdatalens);
2323 // SMV JPEG just stacks several output frames into one JPEG picture
2324 // we handle that by setting up the cropping parameters appropriately
2325 static int smv_process_frame(AVCodecContext *avctx, AVFrame *frame)
2327 MJpegDecodeContext *s = avctx->priv_data;
2330 if (s->smv_next_frame > 0) {
2331 av_assert0(s->smv_frame->buf[0]);
2332 av_frame_unref(frame);
2333 ret = av_frame_ref(frame, s->smv_frame);
2337 av_assert0(frame->buf[0]);
2338 av_frame_unref(s->smv_frame);
2339 ret = av_frame_ref(s->smv_frame, frame);
2344 av_assert0((s->smv_next_frame + 1) * avctx->height <= avctx->coded_height);
2346 frame->width = avctx->coded_width;
2347 frame->height = avctx->coded_height;
2348 frame->crop_top = FFMIN(s->smv_next_frame * avctx->height, frame->height);
2349 frame->crop_bottom = frame->height - (s->smv_next_frame + 1) * avctx->height;
2351 s->smv_next_frame = (s->smv_next_frame + 1) % s->smv_frames_per_jpeg;
2353 if (s->smv_next_frame == 0)
2354 av_frame_unref(s->smv_frame);
2359 static int mjpeg_get_packet(AVCodecContext *avctx)
2361 MJpegDecodeContext *s = avctx->priv_data;
2364 av_packet_unref(s->pkt);
2365 ret = ff_decode_get_packet(avctx, s->pkt);
2369 #if CONFIG_SP5X_DECODER || CONFIG_AMV_DECODER
2370 if (avctx->codec_id == AV_CODEC_ID_SP5X ||
2371 avctx->codec_id == AV_CODEC_ID_AMV) {
2372 ret = ff_sp5x_process_packet(avctx, s->pkt);
2378 s->buf_size = s->pkt->size;
2383 int ff_mjpeg_receive_frame(AVCodecContext *avctx, AVFrame *frame)
2385 MJpegDecodeContext *s = avctx->priv_data;
2386 const uint8_t *buf_end, *buf_ptr;
2387 const uint8_t *unescaped_buf_ptr;
2389 int unescaped_buf_size;
2395 if (avctx->codec_id == AV_CODEC_ID_SMVJPEG && s->smv_next_frame > 0)
2396 return smv_process_frame(avctx, frame);
2398 av_dict_free(&s->exif_metadata);
2399 av_freep(&s->stereo3d);
2400 s->adobe_transform = -1;
2403 reset_icc_profile(s);
2405 ret = mjpeg_get_packet(avctx);
2409 buf_ptr = s->pkt->data;
2410 buf_end = s->pkt->data + s->pkt->size;
2411 while (buf_ptr < buf_end) {
2412 /* find start next marker */
2413 start_code = ff_mjpeg_find_marker(s, &buf_ptr, buf_end,
2415 &unescaped_buf_size);
2417 if (start_code < 0) {
2419 } else if (unescaped_buf_size > INT_MAX / 8) {
2420 av_log(avctx, AV_LOG_ERROR,
2421 "MJPEG packet 0x%x too big (%d/%d), corrupt data?\n",
2422 start_code, unescaped_buf_size, s->pkt->size);
2423 return AVERROR_INVALIDDATA;
2425 av_log(avctx, AV_LOG_DEBUG, "marker=%x avail_size_in_buf=%"PTRDIFF_SPECIFIER"\n",
2426 start_code, buf_end - buf_ptr);
2428 ret = init_get_bits8(&s->gb, unescaped_buf_ptr, unescaped_buf_size);
2431 av_log(avctx, AV_LOG_ERROR, "invalid buffer\n");
2435 s->start_code = start_code;
2436 if (s->avctx->debug & FF_DEBUG_STARTCODE)
2437 av_log(avctx, AV_LOG_DEBUG, "startcode: %X\n", start_code);
2439 /* process markers */
2440 if (start_code >= RST0 && start_code <= RST7) {
2441 av_log(avctx, AV_LOG_DEBUG,
2442 "restart marker: %d\n", start_code & 0x0f);
2444 } else if (start_code >= APP0 && start_code <= APP15) {
2445 if ((ret = mjpeg_decode_app(s)) < 0)
2446 av_log(avctx, AV_LOG_ERROR, "unable to decode APP fields: %s\n",
2449 } else if (start_code == COM) {
2450 ret = mjpeg_decode_com(s);
2453 } else if (start_code == DQT) {
2454 ret = ff_mjpeg_decode_dqt(s);
2461 if (!CONFIG_JPEGLS_DECODER &&
2462 (start_code == SOF48 || start_code == LSE)) {
2463 av_log(avctx, AV_LOG_ERROR, "JPEG-LS support not enabled.\n");
2464 return AVERROR(ENOSYS);
2467 if (avctx->skip_frame == AVDISCARD_ALL) {
2468 switch(start_code) {
2483 switch (start_code) {
2485 s->restart_interval = 0;
2486 s->restart_count = 0;
2487 s->raw_image_buffer = buf_ptr;
2488 s->raw_image_buffer_size = buf_end - buf_ptr;
2489 /* nothing to do on SOI */
2492 if ((ret = ff_mjpeg_decode_dht(s)) < 0) {
2493 av_log(avctx, AV_LOG_ERROR, "huffman table decode error\n");
2499 if (start_code == SOF0)
2500 s->avctx->profile = FF_PROFILE_MJPEG_HUFFMAN_BASELINE_DCT;
2502 s->avctx->profile = FF_PROFILE_MJPEG_HUFFMAN_EXTENDED_SEQUENTIAL_DCT;
2506 if ((ret = ff_mjpeg_decode_sof(s)) < 0)
2510 s->avctx->profile = FF_PROFILE_MJPEG_HUFFMAN_PROGRESSIVE_DCT;
2514 if ((ret = ff_mjpeg_decode_sof(s)) < 0)
2518 s->avctx->profile = FF_PROFILE_MJPEG_HUFFMAN_LOSSLESS;
2519 s->avctx->properties |= FF_CODEC_PROPERTY_LOSSLESS;
2523 if ((ret = ff_mjpeg_decode_sof(s)) < 0)
2527 s->avctx->profile = FF_PROFILE_MJPEG_JPEG_LS;
2528 s->avctx->properties |= FF_CODEC_PROPERTY_LOSSLESS;
2532 if ((ret = ff_mjpeg_decode_sof(s)) < 0)
2536 if (!CONFIG_JPEGLS_DECODER ||
2537 (ret = ff_jpegls_decode_lse(s)) < 0)
2542 if (!avctx->hwaccel && avctx->skip_frame != AVDISCARD_ALL &&
2543 s->progressive && s->cur_scan && s->got_picture)
2544 mjpeg_idct_scan_progressive_ac(s);
2546 if (!s->got_picture) {
2547 av_log(avctx, AV_LOG_WARNING,
2548 "Found EOI before any SOF, ignoring\n");
2551 if (s->interlaced) {
2552 s->bottom_field ^= 1;
2553 /* if not bottom field, do not output image yet */
2554 if (s->bottom_field == !s->interlace_polarity)
2557 if (avctx->skip_frame == AVDISCARD_ALL) {
2559 ret = AVERROR(EAGAIN);
2560 goto the_end_no_picture;
2562 if (s->avctx->hwaccel) {
2563 ret = s->avctx->hwaccel->end_frame(s->avctx);
2567 av_freep(&s->hwaccel_picture_private);
2569 if ((ret = av_frame_ref(frame, s->picture_ptr)) < 0)
2573 frame->pkt_dts = s->pkt->dts;
2575 if (!s->lossless && avctx->debug & FF_DEBUG_QP) {
2576 int qp = FFMAX3(s->qscale[0],
2580 av_log(avctx, AV_LOG_DEBUG, "QP: %d\n", qp);
2585 s->raw_scan_buffer = buf_ptr;
2586 s->raw_scan_buffer_size = buf_end - buf_ptr;
2589 if (avctx->skip_frame == AVDISCARD_ALL) {
2590 skip_bits(&s->gb, get_bits_left(&s->gb));
2594 if ((ret = ff_mjpeg_decode_sos(s, NULL, 0, NULL)) < 0 &&
2595 (avctx->err_recognition & AV_EF_EXPLODE))
2599 if ((ret = mjpeg_decode_dri(s)) < 0)
2612 av_log(avctx, AV_LOG_ERROR,
2613 "mjpeg: unsupported coding type (%x)\n", start_code);
2618 /* eof process start code */
2619 buf_ptr += (get_bits_count(&s->gb) + 7) / 8;
2620 av_log(avctx, AV_LOG_DEBUG,
2621 "marker parser used %d bytes (%d bits)\n",
2622 (get_bits_count(&s->gb) + 7) / 8, get_bits_count(&s->gb));
2624 if (s->got_picture && s->cur_scan) {
2625 av_log(avctx, AV_LOG_WARNING, "EOI missing, emulating\n");
2628 av_log(avctx, AV_LOG_FATAL, "No JPEG data found in image\n");
2629 return AVERROR_INVALIDDATA;
2635 is16bit = av_pix_fmt_desc_get(s->avctx->pix_fmt)->comp[0].step > 1;
2637 if (AV_RB32(s->upscale_h)) {
2639 av_assert0(avctx->pix_fmt == AV_PIX_FMT_YUVJ444P ||
2640 avctx->pix_fmt == AV_PIX_FMT_YUV444P ||
2641 avctx->pix_fmt == AV_PIX_FMT_YUVJ440P ||
2642 avctx->pix_fmt == AV_PIX_FMT_YUV440P ||
2643 avctx->pix_fmt == AV_PIX_FMT_YUVA444P ||
2644 avctx->pix_fmt == AV_PIX_FMT_YUVJ420P ||
2645 avctx->pix_fmt == AV_PIX_FMT_YUV420P ||
2646 avctx->pix_fmt == AV_PIX_FMT_YUV420P16||
2647 avctx->pix_fmt == AV_PIX_FMT_YUVA420P ||
2648 avctx->pix_fmt == AV_PIX_FMT_YUVA420P16||
2649 avctx->pix_fmt == AV_PIX_FMT_GBRP ||
2650 avctx->pix_fmt == AV_PIX_FMT_GBRAP
2652 ret = av_pix_fmt_get_chroma_sub_sample(s->avctx->pix_fmt, &hshift, &vshift);
2656 av_assert0(s->nb_components == av_pix_fmt_count_planes(s->picture_ptr->format));
2657 for (p = 0; p<s->nb_components; p++) {
2658 uint8_t *line = s->picture_ptr->data[p];
2661 if (!s->upscale_h[p])
2664 w = AV_CEIL_RSHIFT(w, hshift);
2665 h = AV_CEIL_RSHIFT(h, vshift);
2667 if (s->upscale_v[p] == 1)
2670 for (i = 0; i < h; i++) {
2671 if (s->upscale_h[p] == 1) {
2672 if (is16bit) ((uint16_t*)line)[w - 1] = ((uint16_t*)line)[(w - 1) / 2];
2673 else line[w - 1] = line[(w - 1) / 2];
2674 for (index = w - 2; index > 0; index--) {
2676 ((uint16_t*)line)[index] = (((uint16_t*)line)[index / 2] + ((uint16_t*)line)[(index + 1) / 2]) >> 1;
2678 line[index] = (line[index / 2] + line[(index + 1) / 2]) >> 1;
2680 } else if (s->upscale_h[p] == 2) {
2682 ((uint16_t*)line)[w - 1] = ((uint16_t*)line)[(w - 1) / 3];
2684 ((uint16_t*)line)[w - 2] = ((uint16_t*)line)[w - 1];
2686 line[w - 1] = line[(w - 1) / 3];
2688 line[w - 2] = line[w - 1];
2690 for (index = w - 3; index > 0; index--) {
2691 line[index] = (line[index / 3] + line[(index + 1) / 3] + line[(index + 2) / 3] + 1) / 3;
2694 line += s->linesize[p];
2698 if (AV_RB32(s->upscale_v)) {
2700 av_assert0(avctx->pix_fmt == AV_PIX_FMT_YUVJ444P ||
2701 avctx->pix_fmt == AV_PIX_FMT_YUV444P ||
2702 avctx->pix_fmt == AV_PIX_FMT_YUVJ422P ||
2703 avctx->pix_fmt == AV_PIX_FMT_YUV422P ||
2704 avctx->pix_fmt == AV_PIX_FMT_YUVJ420P ||
2705 avctx->pix_fmt == AV_PIX_FMT_YUV420P ||
2706 avctx->pix_fmt == AV_PIX_FMT_YUV440P ||
2707 avctx->pix_fmt == AV_PIX_FMT_YUVJ440P ||
2708 avctx->pix_fmt == AV_PIX_FMT_YUVA444P ||
2709 avctx->pix_fmt == AV_PIX_FMT_YUVA420P ||
2710 avctx->pix_fmt == AV_PIX_FMT_YUVA420P16||
2711 avctx->pix_fmt == AV_PIX_FMT_GBRP ||
2712 avctx->pix_fmt == AV_PIX_FMT_GBRAP
2714 ret = av_pix_fmt_get_chroma_sub_sample(s->avctx->pix_fmt, &hshift, &vshift);
2718 av_assert0(s->nb_components == av_pix_fmt_count_planes(s->picture_ptr->format));
2719 for (p = 0; p < s->nb_components; p++) {
2723 if (!s->upscale_v[p])
2726 w = AV_CEIL_RSHIFT(w, hshift);
2727 h = AV_CEIL_RSHIFT(h, vshift);
2729 dst = &((uint8_t *)s->picture_ptr->data[p])[(h - 1) * s->linesize[p]];
2730 for (i = h - 1; i; i--) {
2731 uint8_t *src1 = &((uint8_t *)s->picture_ptr->data[p])[i * s->upscale_v[p] / (s->upscale_v[p] + 1) * s->linesize[p]];
2732 uint8_t *src2 = &((uint8_t *)s->picture_ptr->data[p])[(i + 1) * s->upscale_v[p] / (s->upscale_v[p] + 1) * s->linesize[p]];
2733 if (s->upscale_v[p] != 2 && (src1 == src2 || i == h - 1)) {
2734 memcpy(dst, src1, w);
2736 for (index = 0; index < w; index++)
2737 dst[index] = (src1[index] + src2[index]) >> 1;
2739 dst -= s->linesize[p];
2743 if (s->flipped && !s->rgb) {
2745 ret = av_pix_fmt_get_chroma_sub_sample(s->avctx->pix_fmt, &hshift, &vshift);
2749 av_assert0(s->nb_components == av_pix_fmt_count_planes(s->picture_ptr->format));
2750 for (index=0; index<s->nb_components; index++) {
2751 uint8_t *dst = s->picture_ptr->data[index];
2752 int w = s->picture_ptr->width;
2753 int h = s->picture_ptr->height;
2754 if(index && index<3){
2755 w = AV_CEIL_RSHIFT(w, hshift);
2756 h = AV_CEIL_RSHIFT(h, vshift);
2759 uint8_t *dst2 = dst + s->picture_ptr->linesize[index]*(h-1);
2760 for (i=0; i<h/2; i++) {
2762 FFSWAP(int, dst[j], dst2[j]);
2763 dst += s->picture_ptr->linesize[index];
2764 dst2 -= s->picture_ptr->linesize[index];
2769 if (s->adobe_transform == 0 && s->avctx->pix_fmt == AV_PIX_FMT_GBRAP) {
2770 int w = s->picture_ptr->width;
2771 int h = s->picture_ptr->height;
2772 av_assert0(s->nb_components == 4);
2773 for (i=0; i<h; i++) {
2776 for (index=0; index<4; index++) {
2777 dst[index] = s->picture_ptr->data[index]
2778 + s->picture_ptr->linesize[index]*i;
2780 for (j=0; j<w; j++) {
2782 int r = dst[0][j] * k;
2783 int g = dst[1][j] * k;
2784 int b = dst[2][j] * k;
2785 dst[0][j] = g*257 >> 16;
2786 dst[1][j] = b*257 >> 16;
2787 dst[2][j] = r*257 >> 16;
2792 if (s->adobe_transform == 2 && s->avctx->pix_fmt == AV_PIX_FMT_YUVA444P) {
2793 int w = s->picture_ptr->width;
2794 int h = s->picture_ptr->height;
2795 av_assert0(s->nb_components == 4);
2796 for (i=0; i<h; i++) {
2799 for (index=0; index<4; index++) {
2800 dst[index] = s->picture_ptr->data[index]
2801 + s->picture_ptr->linesize[index]*i;
2803 for (j=0; j<w; j++) {
2805 int r = (255 - dst[0][j]) * k;
2806 int g = (128 - dst[1][j]) * k;
2807 int b = (128 - dst[2][j]) * k;
2808 dst[0][j] = r*257 >> 16;
2809 dst[1][j] = (g*257 >> 16) + 128;
2810 dst[2][j] = (b*257 >> 16) + 128;
2817 AVStereo3D *stereo = av_stereo3d_create_side_data(frame);
2819 stereo->type = s->stereo3d->type;
2820 stereo->flags = s->stereo3d->flags;
2822 av_freep(&s->stereo3d);
2825 if (s->iccnum != 0 && s->iccnum == s->iccread) {
2826 AVFrameSideData *sd;
2831 /* Sum size of all parts. */
2832 for (i = 0; i < s->iccnum; i++)
2833 total_size += s->iccdatalens[i];
2835 sd = av_frame_new_side_data(frame, AV_FRAME_DATA_ICC_PROFILE, total_size);
2837 av_log(s->avctx, AV_LOG_ERROR, "Could not allocate frame side data\n");
2838 return AVERROR(ENOMEM);
2841 /* Reassemble the parts, which are now in-order. */
2842 for (i = 0; i < s->iccnum; i++) {
2843 memcpy(sd->data + offset, s->iccdata[i], s->iccdatalens[i]);
2844 offset += s->iccdatalens[i];
2848 av_dict_copy(&frame->metadata, s->exif_metadata, 0);
2849 av_dict_free(&s->exif_metadata);
2851 if (avctx->codec_id == AV_CODEC_ID_SMVJPEG) {
2852 ret = smv_process_frame(avctx, frame);
2854 av_frame_unref(frame);
2862 av_log(avctx, AV_LOG_DEBUG, "decode frame unused %"PTRDIFF_SPECIFIER" bytes\n",
2868 /* mxpeg may call the following function (with a blank MJpegDecodeContext)
2869 * even without having called ff_mjpeg_decode_init(). */
2870 av_cold int ff_mjpeg_decode_end(AVCodecContext *avctx)
2872 MJpegDecodeContext *s = avctx->priv_data;
2875 if (s->interlaced && s->bottom_field == !s->interlace_polarity && s->got_picture && !avctx->frame_number) {
2876 av_log(avctx, AV_LOG_INFO, "Single field\n");
2880 av_frame_free(&s->picture);
2881 s->picture_ptr = NULL;
2882 } else if (s->picture_ptr)
2883 av_frame_unref(s->picture_ptr);
2885 av_packet_free(&s->pkt);
2887 av_frame_free(&s->smv_frame);
2889 av_freep(&s->buffer);
2890 av_freep(&s->stereo3d);
2891 av_freep(&s->ljpeg_buffer);
2892 s->ljpeg_buffer_size = 0;
2894 for (i = 0; i < 3; i++) {
2895 for (j = 0; j < 4; j++)
2896 ff_free_vlc(&s->vlcs[i][j]);
2898 for (i = 0; i < MAX_COMPONENTS; i++) {
2899 av_freep(&s->blocks[i]);
2900 av_freep(&s->last_nnz[i]);
2902 av_dict_free(&s->exif_metadata);
2904 reset_icc_profile(s);
2906 av_freep(&s->hwaccel_picture_private);
2911 static void decode_flush(AVCodecContext *avctx)
2913 MJpegDecodeContext *s = avctx->priv_data;
2916 s->smv_next_frame = 0;
2917 av_frame_unref(s->smv_frame);
2920 #if CONFIG_MJPEG_DECODER
2921 #define OFFSET(x) offsetof(MJpegDecodeContext, x)
2922 #define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM
2923 static const AVOption options[] = {
2924 { "extern_huff", "Use external huffman table.",
2925 OFFSET(extern_huff), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VD },
2929 static const AVClass mjpegdec_class = {
2930 .class_name = "MJPEG decoder",
2931 .item_name = av_default_item_name,
2933 .version = LIBAVUTIL_VERSION_INT,
2936 AVCodec ff_mjpeg_decoder = {
2938 .long_name = NULL_IF_CONFIG_SMALL("MJPEG (Motion JPEG)"),
2939 .type = AVMEDIA_TYPE_VIDEO,
2940 .id = AV_CODEC_ID_MJPEG,
2941 .priv_data_size = sizeof(MJpegDecodeContext),
2942 .init = ff_mjpeg_decode_init,
2943 .close = ff_mjpeg_decode_end,
2944 .receive_frame = ff_mjpeg_receive_frame,
2945 .flush = decode_flush,
2946 .capabilities = AV_CODEC_CAP_DR1,
2948 .priv_class = &mjpegdec_class,
2949 .profiles = NULL_IF_CONFIG_SMALL(ff_mjpeg_profiles),
2950 .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP |
2951 FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM | FF_CODEC_CAP_SETS_PKT_DTS,
2952 .hw_configs = (const AVCodecHWConfigInternal *const []) {
2953 #if CONFIG_MJPEG_NVDEC_HWACCEL
2954 HWACCEL_NVDEC(mjpeg),
2956 #if CONFIG_MJPEG_VAAPI_HWACCEL
2957 HWACCEL_VAAPI(mjpeg),
2963 #if CONFIG_THP_DECODER
2964 AVCodec ff_thp_decoder = {
2966 .long_name = NULL_IF_CONFIG_SMALL("Nintendo Gamecube THP video"),
2967 .type = AVMEDIA_TYPE_VIDEO,
2968 .id = AV_CODEC_ID_THP,
2969 .priv_data_size = sizeof(MJpegDecodeContext),
2970 .init = ff_mjpeg_decode_init,
2971 .close = ff_mjpeg_decode_end,
2972 .receive_frame = ff_mjpeg_receive_frame,
2973 .flush = decode_flush,
2974 .capabilities = AV_CODEC_CAP_DR1,
2976 .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP |
2977 FF_CODEC_CAP_SETS_PKT_DTS,
2981 #if CONFIG_SMVJPEG_DECODER
2982 AVCodec ff_smvjpeg_decoder = {
2984 .long_name = NULL_IF_CONFIG_SMALL("SMV JPEG"),
2985 .type = AVMEDIA_TYPE_VIDEO,
2986 .id = AV_CODEC_ID_SMVJPEG,
2987 .priv_data_size = sizeof(MJpegDecodeContext),
2988 .init = ff_mjpeg_decode_init,
2989 .close = ff_mjpeg_decode_end,
2990 .receive_frame = ff_mjpeg_receive_frame,
2991 .flush = decode_flush,
2992 .capabilities = AV_CODEC_CAP_DR1,
2993 .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_EXPORTS_CROPPING |
2994 FF_CODEC_CAP_SETS_PKT_DTS | FF_CODEC_CAP_INIT_CLEANUP,