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 Libav.
13 * Libav 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 * Libav 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 Libav; if not, write to the Free Software
25 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
36 #include "libavutil/imgutils.h"
37 #include "libavutil/opt.h"
42 #include "jpeglsdec.h"
45 static int build_vlc(VLC
*vlc
, const uint8_t *bits_table
,
46 const uint8_t *val_table
, int nb_codes
,
47 int use_static
, int is_ac
)
49 uint8_t huff_size
[256] = { 0 };
50 uint16_t huff_code
[256];
51 uint16_t huff_sym
[256];
54 assert(nb_codes
<= 256);
56 ff_mjpeg_build_huffman_codes(huff_size
, huff_code
, bits_table
, val_table
);
58 for (i
= 0; i
< 256; i
++)
59 huff_sym
[i
] = i
+ 16 * is_ac
;
62 huff_sym
[0] = 16 * 256;
64 return ff_init_vlc_sparse(vlc
, 9, nb_codes
, huff_size
, 1, 1,
65 huff_code
, 2, 2, huff_sym
, 2, 2, use_static
);
68 static void build_basic_mjpeg_vlc(MJpegDecodeContext
*s
)
70 build_vlc(&s
->vlcs
[0][0], avpriv_mjpeg_bits_dc_luminance
,
71 avpriv_mjpeg_val_dc
, 12, 0, 0);
72 build_vlc(&s
->vlcs
[0][1], avpriv_mjpeg_bits_dc_chrominance
,
73 avpriv_mjpeg_val_dc
, 12, 0, 0);
74 build_vlc(&s
->vlcs
[1][0], avpriv_mjpeg_bits_ac_luminance
,
75 avpriv_mjpeg_val_ac_luminance
, 251, 0, 1);
76 build_vlc(&s
->vlcs
[1][1], avpriv_mjpeg_bits_ac_chrominance
,
77 avpriv_mjpeg_val_ac_chrominance
, 251, 0, 1);
78 build_vlc(&s
->vlcs
[2][0], avpriv_mjpeg_bits_ac_luminance
,
79 avpriv_mjpeg_val_ac_luminance
, 251, 0, 0);
80 build_vlc(&s
->vlcs
[2][1], avpriv_mjpeg_bits_ac_chrominance
,
81 avpriv_mjpeg_val_ac_chrominance
, 251, 0, 0);
84 av_cold
int ff_mjpeg_decode_init(AVCodecContext
*avctx
)
86 MJpegDecodeContext
*s
= avctx
->priv_data
;
89 s
->picture_ptr
= &s
->picture
;
92 ff_dsputil_init(&s
->dsp
, avctx
);
93 ff_init_scantable(s
->dsp
.idct_permutation
, &s
->scantable
, ff_zigzag_direct
);
98 s
->org_height
= avctx
->coded_height
;
99 avctx
->chroma_sample_location
= AVCHROMA_LOC_CENTER
;
101 build_basic_mjpeg_vlc(s
);
103 if (s
->extern_huff
) {
105 av_log(avctx
, AV_LOG_INFO
, "mjpeg: using external huffman table\n");
106 init_get_bits(&s
->gb
, avctx
->extradata
, avctx
->extradata_size
* 8);
107 if ((ret
= ff_mjpeg_decode_dht(s
))) {
108 av_log(avctx
, AV_LOG_ERROR
,
109 "mjpeg: error using external huffman table\n");
113 if (avctx
->field_order
== AV_FIELD_BB
) { /* quicktime icefloe 019 */
114 s
->interlace_polarity
= 1; /* bottom field first */
115 av_log(avctx
, AV_LOG_DEBUG
, "mjpeg bottom field first\n");
117 if (avctx
->codec
->id
== AV_CODEC_ID_AMV
)
124 /* quantize tables */
125 int ff_mjpeg_decode_dqt(MJpegDecodeContext
*s
)
127 int len
, index
, i
, j
;
129 len
= get_bits(&s
->gb
, 16) - 2;
132 /* only 8 bit precision handled */
133 if (get_bits(&s
->gb
, 4) != 0) {
134 av_log(s
->avctx
, AV_LOG_ERROR
, "dqt: 16bit precision\n");
137 index
= get_bits(&s
->gb
, 4);
140 av_log(s
->avctx
, AV_LOG_DEBUG
, "index=%d\n", index
);
141 /* read quant table */
142 for (i
= 0; i
< 64; i
++) {
143 j
= s
->scantable
.permutated
[i
];
144 s
->quant_matrixes
[index
][j
] = get_bits(&s
->gb
, 8);
147 // XXX FIXME finetune, and perhaps add dc too
148 s
->qscale
[index
] = FFMAX(s
->quant_matrixes
[index
][s
->scantable
.permutated
[1]],
149 s
->quant_matrixes
[index
][s
->scantable
.permutated
[8]]) >> 1;
150 av_log(s
->avctx
, AV_LOG_DEBUG
, "qscale[%d]: %d\n",
151 index
, s
->qscale
[index
]);
157 /* decode huffman tables and build VLC decoders */
158 int ff_mjpeg_decode_dht(MJpegDecodeContext
*s
)
160 int len
, index
, i
, class, n
, v
, code_max
;
161 uint8_t bits_table
[17];
162 uint8_t val_table
[256];
165 len
= get_bits(&s
->gb
, 16) - 2;
169 return AVERROR_INVALIDDATA
;
170 class = get_bits(&s
->gb
, 4);
172 return AVERROR_INVALIDDATA
;
173 index
= get_bits(&s
->gb
, 4);
175 return AVERROR_INVALIDDATA
;
177 for (i
= 1; i
<= 16; i
++) {
178 bits_table
[i
] = get_bits(&s
->gb
, 8);
182 if (len
< n
|| n
> 256)
183 return AVERROR_INVALIDDATA
;
186 for (i
= 0; i
< n
; i
++) {
187 v
= get_bits(&s
->gb
, 8);
194 /* build VLC and flush previous vlc if present */
195 ff_free_vlc(&s
->vlcs
[class][index
]);
196 av_log(s
->avctx
, AV_LOG_DEBUG
, "class=%d index=%d nb_codes=%d\n",
197 class, index
, code_max
+ 1);
198 if ((ret
= build_vlc(&s
->vlcs
[class][index
], bits_table
, val_table
,
199 code_max
+ 1, 0, class > 0)) < 0)
203 ff_free_vlc(&s
->vlcs
[2][index
]);
204 if ((ret
= build_vlc(&s
->vlcs
[2][index
], bits_table
, val_table
,
205 code_max
+ 1, 0, 0)) < 0)
212 int ff_mjpeg_decode_sof(MJpegDecodeContext
*s
)
214 int len
, nb_components
, i
, width
, height
, pix_fmt_id
;
216 /* XXX: verify len field validity */
217 len
= get_bits(&s
->gb
, 16);
218 s
->bits
= get_bits(&s
->gb
, 8);
222 if (s
->bits
== 9 && !s
->pegasus_rct
)
223 s
->rct
= 1; // FIXME ugly
225 if (s
->bits
!= 8 && !s
->lossless
) {
226 av_log(s
->avctx
, AV_LOG_ERROR
, "only 8 bits/component accepted\n");
230 height
= get_bits(&s
->gb
, 16);
231 width
= get_bits(&s
->gb
, 16);
233 // HACK for odd_height.mov
234 if (s
->interlaced
&& s
->width
== width
&& s
->height
== height
+ 1)
237 av_log(s
->avctx
, AV_LOG_DEBUG
, "sof0: picture: %dx%d\n", width
, height
);
238 if (av_image_check_size(width
, height
, 0, s
->avctx
))
239 return AVERROR_INVALIDDATA
;
241 nb_components
= get_bits(&s
->gb
, 8);
242 if (nb_components
<= 0 ||
243 nb_components
> MAX_COMPONENTS
)
245 if (s
->ls
&& !(s
->bits
<= 8 || nb_components
== 1)) {
246 av_log_missing_feature(s
->avctx
,
247 "For JPEG-LS anything except <= 8 bits/component"
248 " or 16-bit gray", 0);
249 return AVERROR_PATCHWELCOME
;
251 s
->nb_components
= nb_components
;
254 for (i
= 0; i
< nb_components
; i
++) {
256 s
->component_id
[i
] = get_bits(&s
->gb
, 8) - 1;
257 s
->h_count
[i
] = get_bits(&s
->gb
, 4);
258 s
->v_count
[i
] = get_bits(&s
->gb
, 4);
259 /* compute hmax and vmax (only used in interleaved case) */
260 if (s
->h_count
[i
] > s
->h_max
)
261 s
->h_max
= s
->h_count
[i
];
262 if (s
->v_count
[i
] > s
->v_max
)
263 s
->v_max
= s
->v_count
[i
];
264 s
->quant_index
[i
] = get_bits(&s
->gb
, 8);
265 if (s
->quant_index
[i
] >= 4)
266 return AVERROR_INVALIDDATA
;
267 av_log(s
->avctx
, AV_LOG_DEBUG
, "component %d %d:%d id: %d quant:%d\n",
268 i
, s
->h_count
[i
], s
->v_count
[i
],
269 s
->component_id
[i
], s
->quant_index
[i
]);
272 if (s
->ls
&& (s
->h_max
> 1 || s
->v_max
> 1)) {
273 av_log_missing_feature(s
->avctx
, "Subsampling in JPEG-LS", 0);
274 return AVERROR_PATCHWELCOME
;
277 if (s
->v_max
== 1 && s
->h_max
== 1 && s
->lossless
== 1)
280 /* if different size, realloc/alloc picture */
281 /* XXX: also check h_count and v_count */
282 if (width
!= s
->width
|| height
!= s
->height
) {
283 av_freep(&s
->qscale_table
);
289 /* test interlaced mode */
290 if (s
->first_picture
&&
291 s
->org_height
!= 0 &&
292 s
->height
< ((s
->org_height
* 3) / 4)) {
294 s
->bottom_field
= s
->interlace_polarity
;
295 s
->picture_ptr
->interlaced_frame
= 1;
296 s
->picture_ptr
->top_field_first
= !s
->interlace_polarity
;
300 avcodec_set_dimensions(s
->avctx
, width
, height
);
302 s
->qscale_table
= av_mallocz((s
->width
+ 15) / 16);
303 s
->first_picture
= 0;
306 if (!(s
->interlaced
&& (s
->bottom_field
== !s
->interlace_polarity
))) {
307 /* XXX: not complete test ! */
308 pix_fmt_id
= (s
->h_count
[0] << 28) | (s
->v_count
[0] << 24) |
309 (s
->h_count
[1] << 20) | (s
->v_count
[1] << 16) |
310 (s
->h_count
[2] << 12) | (s
->v_count
[2] << 8) |
311 (s
->h_count
[3] << 4) | s
->v_count
[3];
312 av_log(s
->avctx
, AV_LOG_DEBUG
, "pix fmt id %x\n", pix_fmt_id
);
313 /* NOTE we do not allocate pictures large enough for the possible
314 * padding of h/v_count being 4 */
315 if (!(pix_fmt_id
& 0xD0D0D0D0))
316 pix_fmt_id
-= (pix_fmt_id
& 0xF0F0F0F0) >> 1;
317 if (!(pix_fmt_id
& 0x0D0D0D0D))
318 pix_fmt_id
-= (pix_fmt_id
& 0x0F0F0F0F) >> 1;
320 switch (pix_fmt_id
) {
323 s
->avctx
->pix_fmt
= AV_PIX_FMT_BGRA
;
325 s
->avctx
->pix_fmt
= s
->cs_itu601
? AV_PIX_FMT_YUV444P
: AV_PIX_FMT_YUVJ444P
;
326 assert(s
->nb_components
== 3);
329 s
->avctx
->pix_fmt
= AV_PIX_FMT_GRAY8
;
332 s
->avctx
->pix_fmt
= s
->cs_itu601
? AV_PIX_FMT_YUV440P
: AV_PIX_FMT_YUVJ440P
;
335 s
->avctx
->pix_fmt
= s
->cs_itu601
? AV_PIX_FMT_YUV422P
: AV_PIX_FMT_YUVJ422P
;
338 s
->avctx
->pix_fmt
= s
->cs_itu601
? AV_PIX_FMT_YUV420P
: AV_PIX_FMT_YUVJ420P
;
341 av_log(s
->avctx
, AV_LOG_ERROR
, "Unhandled pixel format 0x%x\n", pix_fmt_id
);
342 return AVERROR_PATCHWELCOME
;
345 if (s
->nb_components
> 1)
346 s
->avctx
->pix_fmt
= AV_PIX_FMT_RGB24
;
347 else if (s
->bits
<= 8)
348 s
->avctx
->pix_fmt
= AV_PIX_FMT_GRAY8
;
350 s
->avctx
->pix_fmt
= AV_PIX_FMT_GRAY16
;
353 if (s
->picture_ptr
->data
[0])
354 s
->avctx
->release_buffer(s
->avctx
, s
->picture_ptr
);
356 if (ff_get_buffer(s
->avctx
, s
->picture_ptr
) < 0) {
357 av_log(s
->avctx
, AV_LOG_ERROR
, "get_buffer() failed\n");
360 s
->picture_ptr
->pict_type
= AV_PICTURE_TYPE_I
;
361 s
->picture_ptr
->key_frame
= 1;
364 for (i
= 0; i
< 3; i
++)
365 s
->linesize
[i
] = s
->picture_ptr
->linesize
[i
] << s
->interlaced
;
367 av_dlog(s
->avctx
, "%d %d %d %d %d %d\n",
368 s
->width
, s
->height
, s
->linesize
[0], s
->linesize
[1],
369 s
->interlaced
, s
->avctx
->height
);
371 if (len
!= (8 + (3 * nb_components
)))
372 av_log(s
->avctx
, AV_LOG_DEBUG
, "decode_sof0: error, len(%d) mismatch\n", len
);
375 /* totally blank picture as progressive JPEG will only add details to it */
376 if (s
->progressive
) {
377 int bw
= (width
+ s
->h_max
* 8 - 1) / (s
->h_max
* 8);
378 int bh
= (height
+ s
->v_max
* 8 - 1) / (s
->v_max
* 8);
379 for (i
= 0; i
< s
->nb_components
; i
++) {
380 int size
= bw
* bh
* s
->h_count
[i
] * s
->v_count
[i
];
381 av_freep(&s
->blocks
[i
]);
382 av_freep(&s
->last_nnz
[i
]);
383 s
->blocks
[i
] = av_malloc(size
* sizeof(**s
->blocks
));
384 s
->last_nnz
[i
] = av_mallocz(size
* sizeof(**s
->last_nnz
));
385 s
->block_stride
[i
] = bw
* s
->h_count
[i
];
387 memset(s
->coefs_finished
, 0, sizeof(s
->coefs_finished
));
392 static inline int mjpeg_decode_dc(MJpegDecodeContext
*s
, int dc_index
)
395 code
= get_vlc2(&s
->gb
, s
->vlcs
[0][dc_index
].table
, 9, 2);
397 av_log(s
->avctx
, AV_LOG_WARNING
,
398 "mjpeg_decode_dc: bad vlc: %d:%d (%p)\n",
399 0, dc_index
, &s
->vlcs
[0][dc_index
]);
404 return get_xbits(&s
->gb
, code
);
409 /* decode block and dequantize */
410 static int decode_block(MJpegDecodeContext
*s
, int16_t *block
, int component
,
411 int dc_index
, int ac_index
, int16_t *quant_matrix
)
413 int code
, i
, j
, level
, val
;
416 val
= mjpeg_decode_dc(s
, dc_index
);
418 av_log(s
->avctx
, AV_LOG_ERROR
, "error dc\n");
419 return AVERROR_INVALIDDATA
;
421 val
= val
* quant_matrix
[0] + s
->last_dc
[component
];
422 s
->last_dc
[component
] = val
;
426 {OPEN_READER(re
, &s
->gb
);
428 UPDATE_CACHE(re
, &s
->gb
);
429 GET_VLC(code
, re
, &s
->gb
, s
->vlcs
[1][ac_index
].table
, 9, 2);
431 i
+= ((unsigned)code
) >> 4;
434 if (code
> MIN_CACHE_BITS
- 16)
435 UPDATE_CACHE(re
, &s
->gb
);
438 int cache
= GET_CACHE(re
, &s
->gb
);
439 int sign
= (~cache
) >> 31;
440 level
= (NEG_USR32(sign
^ cache
,code
) ^ sign
) - sign
;
443 LAST_SKIP_BITS(re
, &s
->gb
, code
);
446 av_log(s
->avctx
, AV_LOG_ERROR
, "error count: %d\n", i
);
447 return AVERROR_INVALIDDATA
;
449 j
= s
->scantable
.permutated
[i
];
450 block
[j
] = level
* quant_matrix
[j
];
453 CLOSE_READER(re
, &s
->gb
);}
458 static int decode_dc_progressive(MJpegDecodeContext
*s
, int16_t *block
,
459 int component
, int dc_index
,
460 int16_t *quant_matrix
, int Al
)
463 s
->dsp
.clear_block(block
);
464 val
= mjpeg_decode_dc(s
, dc_index
);
466 av_log(s
->avctx
, AV_LOG_ERROR
, "error dc\n");
467 return AVERROR_INVALIDDATA
;
469 val
= (val
* quant_matrix
[0] << Al
) + s
->last_dc
[component
];
470 s
->last_dc
[component
] = val
;
475 /* decode block and dequantize - progressive JPEG version */
476 static int decode_block_progressive(MJpegDecodeContext
*s
, int16_t *block
,
477 uint8_t *last_nnz
, int ac_index
,
478 int16_t *quant_matrix
,
479 int ss
, int se
, int Al
, int *EOBRUN
)
481 int code
, i
, j
, level
, val
, run
;
489 OPEN_READER(re
, &s
->gb
);
490 for (i
= ss
; ; i
++) {
491 UPDATE_CACHE(re
, &s
->gb
);
492 GET_VLC(code
, re
, &s
->gb
, s
->vlcs
[2][ac_index
].table
, 9, 2);
494 run
= ((unsigned) code
) >> 4;
498 if (code
> MIN_CACHE_BITS
- 16)
499 UPDATE_CACHE(re
, &s
->gb
);
502 int cache
= GET_CACHE(re
, &s
->gb
);
503 int sign
= (~cache
) >> 31;
504 level
= (NEG_USR32(sign
^ cache
,code
) ^ sign
) - sign
;
507 LAST_SKIP_BITS(re
, &s
->gb
, code
);
511 j
= s
->scantable
.permutated
[se
];
512 block
[j
] = level
* quant_matrix
[j
] << Al
;
515 av_log(s
->avctx
, AV_LOG_ERROR
, "error count: %d\n", i
);
516 return AVERROR_INVALIDDATA
;
518 j
= s
->scantable
.permutated
[i
];
519 block
[j
] = level
* quant_matrix
[j
] << Al
;
521 if (run
== 0xF) {// ZRL - skip 15 coefficients
524 av_log(s
->avctx
, AV_LOG_ERROR
, "ZRL overflow: %d\n", i
);
525 return AVERROR_INVALIDDATA
;
530 UPDATE_CACHE(re
, &s
->gb
);
531 val
+= NEG_USR32(GET_CACHE(re
, &s
->gb
), run
);
532 LAST_SKIP_BITS(re
, &s
->gb
, run
);
539 CLOSE_READER(re
, &s
->gb
);
548 #define REFINE_BIT(j) { \
549 UPDATE_CACHE(re, &s->gb); \
550 sign = block[j] >> 15; \
551 block[j] += SHOW_UBITS(re, &s->gb, 1) * \
552 ((quant_matrix[j] ^ sign) - sign) << Al; \
553 LAST_SKIP_BITS(re, &s->gb, 1); \
561 av_log(s->avctx, AV_LOG_ERROR, "error count: %d\n", i); \
566 j = s->scantable.permutated[i]; \
569 else if (run-- == 0) \
573 /* decode block and dequantize - progressive JPEG refinement pass */
574 static int decode_block_refinement(MJpegDecodeContext
*s
, int16_t *block
,
576 int ac_index
, int16_t *quant_matrix
,
577 int ss
, int se
, int Al
, int *EOBRUN
)
579 int code
, i
= ss
, j
, sign
, val
, run
;
580 int last
= FFMIN(se
, *last_nnz
);
582 OPEN_READER(re
, &s
->gb
);
587 UPDATE_CACHE(re
, &s
->gb
);
588 GET_VLC(code
, re
, &s
->gb
, s
->vlcs
[2][ac_index
].table
, 9, 2);
591 run
= ((unsigned) code
) >> 4;
592 UPDATE_CACHE(re
, &s
->gb
);
593 val
= SHOW_UBITS(re
, &s
->gb
, 1);
594 LAST_SKIP_BITS(re
, &s
->gb
, 1);
596 j
= s
->scantable
.permutated
[i
];
598 block
[j
] = ((quant_matrix
[j
]^val
) - val
) << Al
;
602 CLOSE_READER(re
, &s
->gb
);
606 run
= ((unsigned) code
) >> 4;
613 UPDATE_CACHE(re
, &s
->gb
);
614 run
+= SHOW_UBITS(re
, &s
->gb
, val
);
615 LAST_SKIP_BITS(re
, &s
->gb
, val
);
627 for (; i
<= last
; i
++) {
628 j
= s
->scantable
.permutated
[i
];
632 CLOSE_READER(re
, &s
->gb
);
639 static int ljpeg_decode_rgb_scan(MJpegDecodeContext
*s
, int predictor
,
643 uint16_t (*buffer
)[4];
644 int left
[3], top
[3], topleft
[3];
645 const int linesize
= s
->linesize
[0];
646 const int mask
= (1 << s
->bits
) - 1;
648 av_fast_malloc(&s
->ljpeg_buffer
, &s
->ljpeg_buffer_size
,
649 (unsigned)s
->mb_width
* 4 * sizeof(s
->ljpeg_buffer
[0][0]));
650 buffer
= s
->ljpeg_buffer
;
652 for (i
= 0; i
< 3; i
++)
653 buffer
[0][i
] = 1 << (s
->bits
+ point_transform
- 1);
655 for (mb_y
= 0; mb_y
< s
->mb_height
; mb_y
++) {
656 const int modified_predictor
= mb_y
? predictor
: 1;
657 uint8_t *ptr
= s
->picture_ptr
->data
[0] + (linesize
* mb_y
);
659 if (s
->interlaced
&& s
->bottom_field
)
660 ptr
+= linesize
>> 1;
662 for (i
= 0; i
< 3; i
++)
663 top
[i
] = left
[i
] = topleft
[i
] = buffer
[0][i
];
665 for (mb_x
= 0; mb_x
< s
->mb_width
; mb_x
++) {
666 if (s
->restart_interval
&& !s
->restart_count
)
667 s
->restart_count
= s
->restart_interval
;
669 for (i
= 0; i
< 3; i
++) {
673 top
[i
] = buffer
[mb_x
][i
];
675 PREDICT(pred
, topleft
[i
], top
[i
], left
[i
], modified_predictor
);
677 left
[i
] = buffer
[mb_x
][i
] =
678 mask
& (pred
+ (mjpeg_decode_dc(s
, s
->dc_index
[i
]) << point_transform
));
681 if (s
->restart_interval
&& !--s
->restart_count
) {
682 align_get_bits(&s
->gb
);
683 skip_bits(&s
->gb
, 16); /* skip RSTn */
688 for (mb_x
= 0; mb_x
< s
->mb_width
; mb_x
++) {
689 ptr
[4 * mb_x
+ 1] = buffer
[mb_x
][0] - ((buffer
[mb_x
][1] + buffer
[mb_x
][2] - 0x200) >> 2);
690 ptr
[4 * mb_x
+ 0] = buffer
[mb_x
][1] + ptr
[4 * mb_x
+ 1];
691 ptr
[4 * mb_x
+ 2] = buffer
[mb_x
][2] + ptr
[4 * mb_x
+ 1];
693 } else if (s
->pegasus_rct
) {
694 for (mb_x
= 0; mb_x
< s
->mb_width
; mb_x
++) {
695 ptr
[4 * mb_x
+ 1] = buffer
[mb_x
][0] - ((buffer
[mb_x
][1] + buffer
[mb_x
][2]) >> 2);
696 ptr
[4 * mb_x
+ 0] = buffer
[mb_x
][1] + ptr
[4 * mb_x
+ 1];
697 ptr
[4 * mb_x
+ 2] = buffer
[mb_x
][2] + ptr
[4 * mb_x
+ 1];
700 for (mb_x
= 0; mb_x
< s
->mb_width
; mb_x
++) {
701 ptr
[4 * mb_x
+ 0] = buffer
[mb_x
][2];
702 ptr
[4 * mb_x
+ 1] = buffer
[mb_x
][1];
703 ptr
[4 * mb_x
+ 2] = buffer
[mb_x
][0];
710 static int ljpeg_decode_yuv_scan(MJpegDecodeContext
*s
, int predictor
,
714 const int nb_components
= 3;
716 for (mb_y
= 0; mb_y
< s
->mb_height
; mb_y
++) {
717 for (mb_x
= 0; mb_x
< s
->mb_width
; mb_x
++) {
718 if (s
->restart_interval
&& !s
->restart_count
)
719 s
->restart_count
= s
->restart_interval
;
721 if (mb_x
== 0 || mb_y
== 0 || s
->interlaced
) {
722 for (i
= 0; i
< nb_components
; i
++) {
724 int n
, h
, v
, x
, y
, c
, j
, linesize
;
726 c
= s
->comp_index
[i
];
731 linesize
= s
->linesize
[c
];
733 for (j
= 0; j
< n
; j
++) {
735 // FIXME optimize this crap
736 ptr
= s
->picture_ptr
->data
[c
] +
737 (linesize
* (v
* mb_y
+ y
)) +
739 if (y
== 0 && mb_y
== 0) {
740 if (x
== 0 && mb_x
== 0)
741 pred
= 128 << point_transform
;
745 if (x
== 0 && mb_x
== 0)
746 pred
= ptr
[-linesize
];
748 PREDICT(pred
, ptr
[-linesize
- 1],
749 ptr
[-linesize
], ptr
[-1], predictor
);
752 if (s
->interlaced
&& s
->bottom_field
)
753 ptr
+= linesize
>> 1;
754 *ptr
= pred
+ (mjpeg_decode_dc(s
, s
->dc_index
[i
]) << point_transform
);
763 for (i
= 0; i
< nb_components
; i
++) {
765 int n
, h
, v
, x
, y
, c
, j
, linesize
;
767 c
= s
->comp_index
[i
];
772 linesize
= s
->linesize
[c
];
774 for (j
= 0; j
< n
; j
++) {
777 // FIXME optimize this crap
778 ptr
= s
->picture_ptr
->data
[c
] +
779 (linesize
* (v
* mb_y
+ y
)) +
781 PREDICT(pred
, ptr
[-linesize
- 1],
782 ptr
[-linesize
], ptr
[-1], predictor
);
783 *ptr
= pred
+ (mjpeg_decode_dc(s
, s
->dc_index
[i
]) << point_transform
);
791 if (s
->restart_interval
&& !--s
->restart_count
) {
792 align_get_bits(&s
->gb
);
793 skip_bits(&s
->gb
, 16); /* skip RSTn */
800 static int mjpeg_decode_scan(MJpegDecodeContext
*s
, int nb_components
, int Ah
,
801 int Al
, const uint8_t *mb_bitmask
,
802 const AVFrame
*reference
)
805 uint8_t *data
[MAX_COMPONENTS
];
806 const uint8_t *reference_data
[MAX_COMPONENTS
];
807 int linesize
[MAX_COMPONENTS
];
808 GetBitContext mb_bitmask_gb
;
811 init_get_bits(&mb_bitmask_gb
, mb_bitmask
, s
->mb_width
* s
->mb_height
);
813 if (s
->flipped
&& s
->avctx
->flags
& CODEC_FLAG_EMU_EDGE
) {
814 av_log(s
->avctx
, AV_LOG_ERROR
,
815 "Can not flip image with CODEC_FLAG_EMU_EDGE set!\n");
819 for (i
= 0; i
< nb_components
; i
++) {
820 int c
= s
->comp_index
[i
];
821 data
[c
] = s
->picture_ptr
->data
[c
];
822 reference_data
[c
] = reference
? reference
->data
[c
] : NULL
;
823 linesize
[c
] = s
->linesize
[c
];
824 s
->coefs_finished
[c
] |= 1;
826 // picture should be flipped upside-down for this codec
827 int offset
= (linesize
[c
] * (s
->v_scount
[i
] *
828 (8 * s
->mb_height
- ((s
->height
/ s
->v_max
) & 7)) - 1));
830 reference_data
[c
] += offset
;
835 for (mb_y
= 0; mb_y
< s
->mb_height
; mb_y
++) {
836 for (mb_x
= 0; mb_x
< s
->mb_width
; mb_x
++) {
837 const int copy_mb
= mb_bitmask
&& !get_bits1(&mb_bitmask_gb
);
839 if (s
->restart_interval
&& !s
->restart_count
)
840 s
->restart_count
= s
->restart_interval
;
842 if (get_bits_left(&s
->gb
) < 0) {
843 av_log(s
->avctx
, AV_LOG_ERROR
, "overread %d\n",
844 -get_bits_left(&s
->gb
));
845 return AVERROR_INVALIDDATA
;
847 for (i
= 0; i
< nb_components
; i
++) {
849 int n
, h
, v
, x
, y
, c
, j
;
852 c
= s
->comp_index
[i
];
857 for (j
= 0; j
< n
; j
++) {
858 block_offset
= ((linesize
[c
] * (v
* mb_y
+ y
) * 8) +
861 if (s
->interlaced
&& s
->bottom_field
)
862 block_offset
+= linesize
[c
] >> 1;
863 ptr
= data
[c
] + block_offset
;
864 if (!s
->progressive
) {
866 s
->dsp
.put_pixels_tab
[1][0](ptr
,
867 reference_data
[c
] + block_offset
,
870 s
->dsp
.clear_block(s
->block
);
871 if (decode_block(s
, s
->block
, i
,
872 s
->dc_index
[i
], s
->ac_index
[i
],
873 s
->quant_matrixes
[s
->quant_index
[c
]]) < 0) {
874 av_log(s
->avctx
, AV_LOG_ERROR
,
875 "error y=%d x=%d\n", mb_y
, mb_x
);
876 return AVERROR_INVALIDDATA
;
878 s
->dsp
.idct_put(ptr
, linesize
[c
], s
->block
);
881 int block_idx
= s
->block_stride
[c
] * (v
* mb_y
+ y
) +
883 int16_t *block
= s
->blocks
[c
][block_idx
];
885 block
[0] += get_bits1(&s
->gb
) *
886 s
->quant_matrixes
[s
->quant_index
[c
]][0] << Al
;
887 else if (decode_dc_progressive(s
, block
, i
, s
->dc_index
[i
],
888 s
->quant_matrixes
[s
->quant_index
[c
]],
890 av_log(s
->avctx
, AV_LOG_ERROR
,
891 "error y=%d x=%d\n", mb_y
, mb_x
);
892 return AVERROR_INVALIDDATA
;
895 av_dlog(s
->avctx
, "mb: %d %d processed\n", mb_y
, mb_x
);
896 av_dlog(s
->avctx
, "%d %d %d %d %d %d %d %d \n",
897 mb_x
, mb_y
, x
, y
, c
, s
->bottom_field
,
898 (v
* mb_y
+ y
) * 8, (h
* mb_x
+ x
) * 8);
906 if (s
->restart_interval
) {
908 i
= 8 + ((-get_bits_count(&s
->gb
)) & 7);
910 if (show_bits(&s
->gb
, i
) == (1 << i
) - 1) {
911 int pos
= get_bits_count(&s
->gb
);
912 align_get_bits(&s
->gb
);
913 while (get_bits_left(&s
->gb
) >= 8 && show_bits(&s
->gb
, 8) == 0xFF)
914 skip_bits(&s
->gb
, 8);
915 if ((get_bits(&s
->gb
, 8) & 0xF8) == 0xD0) {
916 for (i
= 0; i
< nb_components
; i
++) /* reset dc */
917 s
->last_dc
[i
] = 1024;
919 skip_bits_long(&s
->gb
, pos
- get_bits_count(&s
->gb
));
927 static int mjpeg_decode_scan_progressive_ac(MJpegDecodeContext
*s
, int ss
,
928 int se
, int Ah
, int Al
,
929 const uint8_t *mb_bitmask
,
930 const AVFrame
*reference
)
934 int c
= s
->comp_index
[0];
935 uint8_t *data
= s
->picture_ptr
->data
[c
];
936 const uint8_t *reference_data
= reference
? reference
->data
[c
] : NULL
;
937 int linesize
= s
->linesize
[c
];
939 int16_t *quant_matrix
= s
->quant_matrixes
[s
->quant_index
[c
]];
940 GetBitContext mb_bitmask_gb
;
943 init_get_bits(&mb_bitmask_gb
, mb_bitmask
, s
->mb_width
* s
->mb_height
);
946 s
->coefs_finished
[c
] |= (1LL << (se
+ 1)) - (1LL << ss
);
947 last_scan
= !~s
->coefs_finished
[c
];
950 if (s
->interlaced
&& s
->bottom_field
) {
951 int offset
= linesize
>> 1;
953 reference_data
+= offset
;
956 for (mb_y
= 0; mb_y
< s
->mb_height
; mb_y
++) {
957 int block_offset
= mb_y
* linesize
* 8;
958 uint8_t *ptr
= data
+ block_offset
;
959 int block_idx
= mb_y
* s
->block_stride
[c
];
960 int16_t (*block
)[64] = &s
->blocks
[c
][block_idx
];
961 uint8_t *last_nnz
= &s
->last_nnz
[c
][block_idx
];
962 for (mb_x
= 0; mb_x
< s
->mb_width
; mb_x
++, block
++, last_nnz
++) {
963 const int copy_mb
= mb_bitmask
&& !get_bits1(&mb_bitmask_gb
);
968 ret
= decode_block_refinement(s
, *block
, last_nnz
, s
->ac_index
[0],
969 quant_matrix
, ss
, se
, Al
, &EOBRUN
);
971 ret
= decode_block_progressive(s
, *block
, last_nnz
, s
->ac_index
[0],
972 quant_matrix
, ss
, se
, Al
, &EOBRUN
);
974 av_log(s
->avctx
, AV_LOG_ERROR
,
975 "error y=%d x=%d\n", mb_y
, mb_x
);
976 return AVERROR_INVALIDDATA
;
982 s
->dsp
.put_pixels_tab
[1][0](ptr
,
983 reference_data
+ block_offset
,
986 s
->dsp
.idct_put(ptr
, linesize
, *block
);
995 int ff_mjpeg_decode_sos(MJpegDecodeContext
*s
, const uint8_t *mb_bitmask
,
996 const AVFrame
*reference
)
998 int len
, nb_components
, i
, h
, v
, predictor
, point_transform
;
1000 const int block_size
= s
->lossless
? 1 : 8;
1001 int ilv
, prev_shift
;
1003 /* XXX: verify len field validity */
1004 len
= get_bits(&s
->gb
, 16);
1005 nb_components
= get_bits(&s
->gb
, 8);
1006 if (nb_components
== 0 || nb_components
> MAX_COMPONENTS
) {
1007 av_log(s
->avctx
, AV_LOG_ERROR
,
1008 "decode_sos: nb_components (%d) unsupported\n", nb_components
);
1009 return AVERROR_PATCHWELCOME
;
1011 if (len
!= 6 + 2 * nb_components
) {
1012 av_log(s
->avctx
, AV_LOG_ERROR
, "decode_sos: invalid len (%d)\n", len
);
1013 return AVERROR_INVALIDDATA
;
1015 for (i
= 0; i
< nb_components
; i
++) {
1016 id
= get_bits(&s
->gb
, 8) - 1;
1017 av_log(s
->avctx
, AV_LOG_DEBUG
, "component: %d\n", id
);
1018 /* find component index */
1019 for (index
= 0; index
< s
->nb_components
; index
++)
1020 if (id
== s
->component_id
[index
])
1022 if (index
== s
->nb_components
) {
1023 av_log(s
->avctx
, AV_LOG_ERROR
,
1024 "decode_sos: index(%d) out of components\n", index
);
1025 return AVERROR_INVALIDDATA
;
1027 /* Metasoft MJPEG codec has Cb and Cr swapped */
1028 if (s
->avctx
->codec_tag
== MKTAG('M', 'T', 'S', 'J')
1029 && nb_components
== 3 && s
->nb_components
== 3 && i
)
1032 s
->comp_index
[i
] = index
;
1034 s
->nb_blocks
[i
] = s
->h_count
[index
] * s
->v_count
[index
];
1035 s
->h_scount
[i
] = s
->h_count
[index
];
1036 s
->v_scount
[i
] = s
->v_count
[index
];
1038 s
->dc_index
[i
] = get_bits(&s
->gb
, 4);
1039 s
->ac_index
[i
] = get_bits(&s
->gb
, 4);
1041 if (s
->dc_index
[i
] < 0 || s
->ac_index
[i
] < 0 ||
1042 s
->dc_index
[i
] >= 4 || s
->ac_index
[i
] >= 4)
1044 if (!s
->vlcs
[0][s
->dc_index
[i
]].table
||
1045 !s
->vlcs
[1][s
->ac_index
[i
]].table
)
1049 predictor
= get_bits(&s
->gb
, 8); /* JPEG Ss / lossless JPEG predictor /JPEG-LS NEAR */
1050 ilv
= get_bits(&s
->gb
, 8); /* JPEG Se / JPEG-LS ILV */
1051 prev_shift
= get_bits(&s
->gb
, 4); /* Ah */
1052 point_transform
= get_bits(&s
->gb
, 4); /* Al */
1054 if (nb_components
> 1) {
1055 /* interleaved stream */
1056 s
->mb_width
= (s
->width
+ s
->h_max
* block_size
- 1) / (s
->h_max
* block_size
);
1057 s
->mb_height
= (s
->height
+ s
->v_max
* block_size
- 1) / (s
->v_max
* block_size
);
1058 } else if (!s
->ls
) { /* skip this for JPEG-LS */
1059 h
= s
->h_max
/ s
->h_scount
[0];
1060 v
= s
->v_max
/ s
->v_scount
[0];
1061 s
->mb_width
= (s
->width
+ h
* block_size
- 1) / (h
* block_size
);
1062 s
->mb_height
= (s
->height
+ v
* block_size
- 1) / (v
* block_size
);
1063 s
->nb_blocks
[0] = 1;
1068 if (s
->avctx
->debug
& FF_DEBUG_PICT_INFO
)
1069 av_log(s
->avctx
, AV_LOG_DEBUG
, "%s %s p:%d >>:%d ilv:%d bits:%d %s\n",
1070 s
->lossless
? "lossless" : "sequential DCT", s
->rgb
? "RGB" : "",
1071 predictor
, point_transform
, ilv
, s
->bits
,
1072 s
->pegasus_rct
? "PRCT" : (s
->rct
? "RCT" : ""));
1075 /* mjpeg-b can have padding bytes between sos and image data, skip them */
1076 for (i
= s
->mjpb_skiptosod
; i
> 0; i
--)
1077 skip_bits(&s
->gb
, 8);
1080 for (i
= 0; i
< nb_components
; i
++)
1081 s
->last_dc
[i
] = 1024;
1084 if (CONFIG_JPEGLS_DECODER
&& s
->ls
) {
1086 // reset_ls_coding_parameters(s, 0);
1088 if ((ret
= ff_jpegls_decode_picture(s
, predictor
,
1089 point_transform
, ilv
)) < 0)
1093 if ((ret
= ljpeg_decode_rgb_scan(s
, predictor
,
1094 point_transform
)) < 0)
1097 if ((ret
= ljpeg_decode_yuv_scan(s
, predictor
,
1098 point_transform
)) < 0)
1103 if (s
->progressive
&& predictor
) {
1104 if ((ret
= mjpeg_decode_scan_progressive_ac(s
, predictor
,
1111 if ((ret
= mjpeg_decode_scan(s
, nb_components
,
1112 prev_shift
, point_transform
,
1113 mb_bitmask
, reference
)) < 0)
1118 if (s
->interlaced
&&
1119 get_bits_left(&s
->gb
) > 32 &&
1120 show_bits(&s
->gb
, 8) == 0xFF) {
1121 GetBitContext bak
= s
->gb
;
1122 align_get_bits(&bak
);
1123 if (show_bits(&bak
, 16) == 0xFFD1) {
1124 av_dlog(s
->avctx
, "AVRn interlaced picture marker found\n");
1126 skip_bits(&s
->gb
, 16);
1127 s
->bottom_field
^= 1;
1136 av_log(s
->avctx
, AV_LOG_ERROR
, "decode_sos: ac/dc index out of range\n");
1137 return AVERROR_INVALIDDATA
;
1140 static int mjpeg_decode_dri(MJpegDecodeContext
*s
)
1142 if (get_bits(&s
->gb
, 16) != 4)
1143 return AVERROR_INVALIDDATA
;
1144 s
->restart_interval
= get_bits(&s
->gb
, 16);
1145 s
->restart_count
= 0;
1146 av_log(s
->avctx
, AV_LOG_DEBUG
, "restart interval: %d\n",
1147 s
->restart_interval
);
1152 static int mjpeg_decode_app(MJpegDecodeContext
*s
)
1156 len
= get_bits(&s
->gb
, 16);
1158 return AVERROR_INVALIDDATA
;
1159 if (8 * len
> get_bits_left(&s
->gb
))
1160 return AVERROR_INVALIDDATA
;
1162 id
= get_bits_long(&s
->gb
, 32);
1163 id
= av_be2ne32(id
);
1166 if (s
->avctx
->debug
& FF_DEBUG_STARTCODE
)
1167 av_log(s
->avctx
, AV_LOG_DEBUG
, "APPx %8X\n", id
);
1169 /* Buggy AVID, it puts EOI only at every 10th frame. */
1170 /* Also, this fourcc is used by non-avid files too, it holds some
1171 information, but it's always present in AVID-created files. */
1172 if (id
== AV_RL32("AVI1")) {
1178 4bytes field_size_less_padding
1181 i
= get_bits(&s
->gb
, 8);
1183 s
->bottom_field
= 1;
1185 s
->bottom_field
= 0;
1187 skip_bits(&s
->gb
, 8);
1188 skip_bits(&s
->gb
, 32);
1189 skip_bits(&s
->gb
, 32);
1197 if (id
== AV_RL32("JFIF")) {
1198 int t_w
, t_h
, v1
, v2
;
1199 skip_bits(&s
->gb
, 8); /* the trailing zero-byte */
1200 v1
= get_bits(&s
->gb
, 8);
1201 v2
= get_bits(&s
->gb
, 8);
1202 skip_bits(&s
->gb
, 8);
1204 s
->avctx
->sample_aspect_ratio
.num
= get_bits(&s
->gb
, 16);
1205 s
->avctx
->sample_aspect_ratio
.den
= get_bits(&s
->gb
, 16);
1207 if (s
->avctx
->debug
& FF_DEBUG_PICT_INFO
)
1208 av_log(s
->avctx
, AV_LOG_INFO
,
1209 "mjpeg: JFIF header found (version: %x.%x) SAR=%d/%d\n",
1211 s
->avctx
->sample_aspect_ratio
.num
,
1212 s
->avctx
->sample_aspect_ratio
.den
);
1214 t_w
= get_bits(&s
->gb
, 8);
1215 t_h
= get_bits(&s
->gb
, 8);
1217 /* skip thumbnail */
1218 if (len
-10 - (t_w
* t_h
* 3) > 0)
1219 len
-= t_w
* t_h
* 3;
1225 if (id
== AV_RL32("Adob") && (get_bits(&s
->gb
, 8) == 'e')) {
1226 if (s
->avctx
->debug
& FF_DEBUG_PICT_INFO
)
1227 av_log(s
->avctx
, AV_LOG_INFO
, "mjpeg: Adobe header found\n");
1228 skip_bits(&s
->gb
, 16); /* version */
1229 skip_bits(&s
->gb
, 16); /* flags0 */
1230 skip_bits(&s
->gb
, 16); /* flags1 */
1231 skip_bits(&s
->gb
, 8); /* transform */
1236 if (id
== AV_RL32("LJIF")) {
1237 if (s
->avctx
->debug
& FF_DEBUG_PICT_INFO
)
1238 av_log(s
->avctx
, AV_LOG_INFO
,
1239 "Pegasus lossless jpeg header found\n");
1240 skip_bits(&s
->gb
, 16); /* version ? */
1241 skip_bits(&s
->gb
, 16); /* unknwon always 0? */
1242 skip_bits(&s
->gb
, 16); /* unknwon always 0? */
1243 skip_bits(&s
->gb
, 16); /* unknwon always 0? */
1244 switch (get_bits(&s
->gb
, 8)) {
1254 av_log(s
->avctx
, AV_LOG_ERROR
, "unknown colorspace\n");
1261 if ((s
->start_code
== APP1
) && (len
> (0x28 - 8))) {
1262 id
= get_bits_long(&s
->gb
, 32);
1263 id
= av_be2ne32(id
);
1266 if (id
== AV_RL32("mjpg")) {
1268 skip_bits(&s
->gb
, 32); /* field size */
1269 skip_bits(&s
->gb
, 32); /* pad field size */
1270 skip_bits(&s
->gb
, 32); /* next off */
1271 skip_bits(&s
->gb
, 32); /* quant off */
1272 skip_bits(&s
->gb
, 32); /* huff off */
1273 skip_bits(&s
->gb
, 32); /* image off */
1274 skip_bits(&s
->gb
, 32); /* scan off */
1275 skip_bits(&s
->gb
, 32); /* data off */
1277 if (s
->avctx
->debug
& FF_DEBUG_PICT_INFO
)
1278 av_log(s
->avctx
, AV_LOG_INFO
, "mjpeg: Apple MJPEG-A header found\n");
1283 /* slow but needed for extreme adobe jpegs */
1285 av_log(s
->avctx
, AV_LOG_ERROR
,
1286 "mjpeg: error, decode_app parser read over the end\n");
1288 skip_bits(&s
->gb
, 8);
1293 static int mjpeg_decode_com(MJpegDecodeContext
*s
)
1295 int len
= get_bits(&s
->gb
, 16);
1296 if (len
>= 2 && 8 * len
- 16 <= get_bits_left(&s
->gb
)) {
1297 char *cbuf
= av_malloc(len
- 1);
1300 for (i
= 0; i
< len
- 2; i
++)
1301 cbuf
[i
] = get_bits(&s
->gb
, 8);
1302 if (i
> 0 && cbuf
[i
- 1] == '\n')
1307 if (s
->avctx
->debug
& FF_DEBUG_PICT_INFO
)
1308 av_log(s
->avctx
, AV_LOG_INFO
, "mjpeg comment: '%s'\n", cbuf
);
1310 /* buggy avid, it puts EOI only at every 10th frame */
1311 if (!strcmp(cbuf
, "AVID")) {
1313 } else if (!strcmp(cbuf
, "CS=ITU601"))
1315 else if ((len
> 20 && !strncmp(cbuf
, "Intel(R) JPEG Library", 21)) ||
1316 (len
> 19 && !strncmp(cbuf
, "Metasoft MJPEG Codec", 20)))
1326 /* return the 8 bit start code value and update the search
1327 state. Return -1 if no start code found */
1328 static int find_marker(const uint8_t **pbuf_ptr
, const uint8_t *buf_end
)
1330 const uint8_t *buf_ptr
;
1337 buf_ptr
= *pbuf_ptr
;
1338 while (buf_ptr
< buf_end
) {
1341 if ((v
== 0xff) && (v2
>= 0xc0) && (v2
<= 0xfe) && buf_ptr
< buf_end
) {
1351 av_dlog(NULL
, "find_marker skipped %d bytes\n", skipped
);
1352 *pbuf_ptr
= buf_ptr
;
1356 int ff_mjpeg_find_marker(MJpegDecodeContext
*s
,
1357 const uint8_t **buf_ptr
, const uint8_t *buf_end
,
1358 const uint8_t **unescaped_buf_ptr
,
1359 int *unescaped_buf_size
)
1362 start_code
= find_marker(buf_ptr
, buf_end
);
1364 av_fast_padded_malloc(&s
->buffer
, &s
->buffer_size
, buf_end
- *buf_ptr
);
1366 return AVERROR(ENOMEM
);
1368 /* unescape buffer of SOS, use special treatment for JPEG-LS */
1369 if (start_code
== SOS
&& !s
->ls
) {
1370 const uint8_t *src
= *buf_ptr
;
1371 uint8_t *dst
= s
->buffer
;
1373 while (src
< buf_end
) {
1374 uint8_t x
= *(src
++);
1377 if (s
->avctx
->codec_id
!= AV_CODEC_ID_THP
) {
1379 while (src
< buf_end
&& x
== 0xff)
1382 if (x
>= 0xd0 && x
<= 0xd7)
1389 *unescaped_buf_ptr
= s
->buffer
;
1390 *unescaped_buf_size
= dst
- s
->buffer
;
1391 memset(s
->buffer
+ *unescaped_buf_size
, 0,
1392 FF_INPUT_BUFFER_PADDING_SIZE
);
1394 av_log(s
->avctx
, AV_LOG_DEBUG
, "escaping removed %td bytes\n",
1395 (buf_end
- *buf_ptr
) - (dst
- s
->buffer
));
1396 } else if (start_code
== SOS
&& s
->ls
) {
1397 const uint8_t *src
= *buf_ptr
;
1398 uint8_t *dst
= s
->buffer
;
1406 while (src
+ t
< buf_end
) {
1407 uint8_t x
= src
[t
++];
1409 while ((src
+ t
< buf_end
) && x
== 0xff)
1418 init_put_bits(&pb
, dst
, t
);
1420 /* unescape bitstream */
1422 uint8_t x
= src
[b
++];
1423 put_bits(&pb
, 8, x
);
1426 put_bits(&pb
, 7, x
);
1430 flush_put_bits(&pb
);
1432 *unescaped_buf_ptr
= dst
;
1433 *unescaped_buf_size
= (bit_count
+ 7) >> 3;
1434 memset(s
->buffer
+ *unescaped_buf_size
, 0,
1435 FF_INPUT_BUFFER_PADDING_SIZE
);
1437 *unescaped_buf_ptr
= *buf_ptr
;
1438 *unescaped_buf_size
= buf_end
- *buf_ptr
;
1444 int ff_mjpeg_decode_frame(AVCodecContext
*avctx
, void *data
, int *got_frame
,
1447 const uint8_t *buf
= avpkt
->data
;
1448 int buf_size
= avpkt
->size
;
1449 MJpegDecodeContext
*s
= avctx
->priv_data
;
1450 const uint8_t *buf_end
, *buf_ptr
;
1451 const uint8_t *unescaped_buf_ptr
;
1452 int unescaped_buf_size
;
1455 AVFrame
*picture
= data
;
1457 s
->got_picture
= 0; // picture from previous image can not be reused
1459 buf_end
= buf
+ buf_size
;
1460 while (buf_ptr
< buf_end
) {
1461 /* find start next marker */
1462 start_code
= ff_mjpeg_find_marker(s
, &buf_ptr
, buf_end
,
1464 &unescaped_buf_size
);
1466 if (start_code
< 0) {
1468 } else if (unescaped_buf_size
> (1U<<29)) {
1469 av_log(avctx
, AV_LOG_ERROR
, "MJPEG packet 0x%x too big (0x%x/0x%x), corrupt data?\n",
1470 start_code
, unescaped_buf_size
, buf_size
);
1471 return AVERROR_INVALIDDATA
;
1473 av_log(avctx
, AV_LOG_DEBUG
, "marker=%x avail_size_in_buf=%td\n",
1474 start_code
, buf_end
- buf_ptr
);
1476 init_get_bits(&s
->gb
, unescaped_buf_ptr
, unescaped_buf_size
* 8);
1478 s
->start_code
= start_code
;
1479 if (s
->avctx
->debug
& FF_DEBUG_STARTCODE
)
1480 av_log(avctx
, AV_LOG_DEBUG
, "startcode: %X\n", start_code
);
1482 /* process markers */
1483 if (start_code
>= 0xd0 && start_code
<= 0xd7)
1484 av_log(avctx
, AV_LOG_DEBUG
,
1485 "restart marker: %d\n", start_code
& 0x0f);
1487 else if (start_code
>= APP0
&& start_code
<= APP15
)
1488 mjpeg_decode_app(s
);
1490 else if (start_code
== COM
)
1491 mjpeg_decode_com(s
);
1493 switch (start_code
) {
1495 s
->restart_interval
= 0;
1496 s
->restart_count
= 0;
1497 /* nothing to do on SOI */
1500 ff_mjpeg_decode_dqt(s
);
1503 if ((ret
= ff_mjpeg_decode_dht(s
)) < 0) {
1504 av_log(avctx
, AV_LOG_ERROR
, "huffman table decode error\n");
1513 if ((ret
= ff_mjpeg_decode_sof(s
)) < 0)
1520 if ((ret
= ff_mjpeg_decode_sof(s
)) < 0)
1527 if ((ret
= ff_mjpeg_decode_sof(s
)) < 0)
1534 if ((ret
= ff_mjpeg_decode_sof(s
)) < 0)
1538 if (!CONFIG_JPEGLS_DECODER
||
1539 (ret
= ff_jpegls_decode_lse(s
)) < 0)
1544 if ((s
->buggy_avid
&& !s
->interlaced
) || s
->restart_interval
)
1547 if (!s
->got_picture
) {
1548 av_log(avctx
, AV_LOG_WARNING
,
1549 "Found EOI before any SOF, ignoring\n");
1552 if (s
->interlaced
) {
1553 s
->bottom_field
^= 1;
1554 /* if not bottom field, do not output image yet */
1555 if (s
->bottom_field
== !s
->interlace_polarity
)
1558 *picture
= *s
->picture_ptr
;
1562 picture
->quality
= FFMAX3(s
->qscale
[0],
1565 picture
->qstride
= 0;
1566 picture
->qscale_table
= s
->qscale_table
;
1567 memset(picture
->qscale_table
, picture
->quality
,
1568 (s
->width
+ 15) / 16);
1569 if (avctx
->debug
& FF_DEBUG_QP
)
1570 av_log(avctx
, AV_LOG_DEBUG
,
1571 "QP: %d\n", picture
->quality
);
1572 picture
->quality
*= FF_QP2LAMBDA
;
1577 if (!s
->got_picture
) {
1578 av_log(avctx
, AV_LOG_WARNING
,
1579 "Can not process SOS before SOF, skipping\n");
1582 if ((ret
= ff_mjpeg_decode_sos(s
, NULL
, NULL
)) < 0 &&
1583 (avctx
->err_recognition
& AV_EF_EXPLODE
))
1585 /* buggy avid puts EOI every 10-20th frame */
1586 /* if restart period is over process EOI */
1587 if ((s
->buggy_avid
&& !s
->interlaced
) || s
->restart_interval
)
1591 mjpeg_decode_dri(s
);
1603 av_log(avctx
, AV_LOG_ERROR
,
1604 "mjpeg: unsupported coding type (%x)\n", start_code
);
1609 /* eof process start code */
1610 buf_ptr
+= (get_bits_count(&s
->gb
) + 7) / 8;
1611 av_log(avctx
, AV_LOG_DEBUG
,
1612 "marker parser used %d bytes (%d bits)\n",
1613 (get_bits_count(&s
->gb
) + 7) / 8, get_bits_count(&s
->gb
));
1616 if (s
->got_picture
) {
1617 av_log(avctx
, AV_LOG_WARNING
, "EOI missing, emulating\n");
1620 av_log(avctx
, AV_LOG_FATAL
, "No JPEG data found in image\n");
1621 return AVERROR_INVALIDDATA
;
1623 av_log(avctx
, AV_LOG_DEBUG
, "mjpeg decode frame unused %td bytes\n",
1625 // return buf_end - buf_ptr;
1626 return buf_ptr
- buf
;
1629 av_cold
int ff_mjpeg_decode_end(AVCodecContext
*avctx
)
1631 MJpegDecodeContext
*s
= avctx
->priv_data
;
1634 if (s
->picture_ptr
&& s
->picture_ptr
->data
[0])
1635 avctx
->release_buffer(avctx
, s
->picture_ptr
);
1638 av_free(s
->qscale_table
);
1639 av_freep(&s
->ljpeg_buffer
);
1640 s
->ljpeg_buffer_size
= 0;
1642 for (i
= 0; i
< 3; i
++) {
1643 for (j
= 0; j
< 4; j
++)
1644 ff_free_vlc(&s
->vlcs
[i
][j
]);
1646 for (i
= 0; i
< MAX_COMPONENTS
; i
++) {
1647 av_freep(&s
->blocks
[i
]);
1648 av_freep(&s
->last_nnz
[i
]);
1653 #define OFFSET(x) offsetof(MJpegDecodeContext, x)
1654 #define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM
1655 static const AVOption options
[] = {
1656 { "extern_huff", "Use external huffman table.",
1657 OFFSET(extern_huff
), AV_OPT_TYPE_INT
, { .i64
= 0 }, 0, 1, VD
},
1661 static const AVClass mjpegdec_class
= {
1662 .class_name
= "MJPEG decoder",
1663 .item_name
= av_default_item_name
,
1665 .version
= LIBAVUTIL_VERSION_INT
,
1668 AVCodec ff_mjpeg_decoder
= {
1670 .type
= AVMEDIA_TYPE_VIDEO
,
1671 .id
= AV_CODEC_ID_MJPEG
,
1672 .priv_data_size
= sizeof(MJpegDecodeContext
),
1673 .init
= ff_mjpeg_decode_init
,
1674 .close
= ff_mjpeg_decode_end
,
1675 .decode
= ff_mjpeg_decode_frame
,
1676 .capabilities
= CODEC_CAP_DR1
,
1677 .long_name
= NULL_IF_CONFIG_SMALL("MJPEG (Motion JPEG)"),
1678 .priv_class
= &mjpegdec_class
,
1681 AVCodec ff_thp_decoder
= {
1683 .type
= AVMEDIA_TYPE_VIDEO
,
1684 .id
= AV_CODEC_ID_THP
,
1685 .priv_data_size
= sizeof(MJpegDecodeContext
),
1686 .init
= ff_mjpeg_decode_init
,
1687 .close
= ff_mjpeg_decode_end
,
1688 .decode
= ff_mjpeg_decode_frame
,
1689 .capabilities
= CODEC_CAP_DR1
,
1690 .long_name
= NULL_IF_CONFIG_SMALL("Nintendo Gamecube THP video"),