]> git.sesse.net Git - ffmpeg/blob - libavcodec/mjpegdec.c
lavc: Add support for increasing hardware frame pool sizes
[ffmpeg] / libavcodec / mjpegdec.c
1 /*
2  * MJPEG decoder
3  * Copyright (c) 2000, 2001 Fabrice Bellard
4  * Copyright (c) 2003 Alex Beregszaszi
5  * Copyright (c) 2003-2004 Michael Niedermayer
6  *
7  * Support for external huffman table, various fixes (AVID workaround),
8  * aspecting, new decode_frame mechanism and apple mjpeg-b support
9  *                                  by Alex Beregszaszi
10  *
11  * This file is part of Libav.
12  *
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.
17  *
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.
22  *
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
26  */
27
28 /**
29  * @file
30  * MJPEG decoder.
31  */
32
33 #include <assert.h>
34
35 #include "libavutil/imgutils.h"
36 #include "libavutil/opt.h"
37 #include "avcodec.h"
38 #include "blockdsp.h"
39 #include "idctdsp.h"
40 #include "internal.h"
41 #include "jpegtables.h"
42 #include "mjpeg.h"
43 #include "mjpegdec.h"
44 #include "jpeglsdec.h"
45 #include "put_bits.h"
46
47
48 static int build_vlc(VLC *vlc, const uint8_t *bits_table,
49                      const uint8_t *val_table, int nb_codes,
50                      int use_static, int is_ac)
51 {
52     uint8_t huff_size[256] = { 0 };
53     uint16_t huff_code[256];
54     uint16_t huff_sym[256];
55     int i;
56
57     assert(nb_codes <= 256);
58
59     ff_mjpeg_build_huffman_codes(huff_size, huff_code, bits_table, val_table);
60
61     for (i = 0; i < 256; i++)
62         huff_sym[i] = i + 16 * is_ac;
63
64     if (is_ac)
65         huff_sym[0] = 16 * 256;
66
67     return ff_init_vlc_sparse(vlc, 9, nb_codes, huff_size, 1, 1,
68                               huff_code, 2, 2, huff_sym, 2, 2, use_static);
69 }
70
71 static int build_basic_mjpeg_vlc(MJpegDecodeContext *s)
72 {
73     int ret;
74
75     if ((ret = build_vlc(&s->vlcs[0][0], avpriv_mjpeg_bits_dc_luminance,
76                          avpriv_mjpeg_val_dc, 12, 0, 0)) < 0)
77         return ret;
78
79     if ((ret = build_vlc(&s->vlcs[0][1], avpriv_mjpeg_bits_dc_chrominance,
80                          avpriv_mjpeg_val_dc, 12, 0, 0)) < 0)
81         return ret;
82
83     if ((ret = build_vlc(&s->vlcs[1][0], avpriv_mjpeg_bits_ac_luminance,
84                          avpriv_mjpeg_val_ac_luminance, 251, 0, 1)) < 0)
85         return ret;
86
87     if ((ret = build_vlc(&s->vlcs[1][1], avpriv_mjpeg_bits_ac_chrominance,
88                          avpriv_mjpeg_val_ac_chrominance, 251, 0, 1)) < 0)
89         return ret;
90
91     if ((ret = build_vlc(&s->vlcs[2][0], avpriv_mjpeg_bits_ac_luminance,
92                          avpriv_mjpeg_val_ac_luminance, 251, 0, 0)) < 0)
93         return ret;
94
95     if ((ret = build_vlc(&s->vlcs[2][1], avpriv_mjpeg_bits_ac_chrominance,
96                          avpriv_mjpeg_val_ac_chrominance, 251, 0, 0)) < 0)
97         return ret;
98
99
100     return 0;
101 }
102
103 av_cold int ff_mjpeg_decode_init(AVCodecContext *avctx)
104 {
105     MJpegDecodeContext *s = avctx->priv_data;
106     int ret;
107
108     if (!s->picture_ptr) {
109         s->picture = av_frame_alloc();
110         if (!s->picture)
111             return AVERROR(ENOMEM);
112         s->picture_ptr = s->picture;
113     }
114
115     s->avctx = avctx;
116     ff_blockdsp_init(&s->bdsp);
117     ff_hpeldsp_init(&s->hdsp, avctx->flags);
118     ff_idctdsp_init(&s->idsp, avctx);
119     ff_init_scantable(s->idsp.idct_permutation, &s->scantable,
120                       ff_zigzag_direct);
121     s->buffer_size   = 0;
122     s->buffer        = NULL;
123     s->start_code    = -1;
124     s->first_picture = 1;
125     s->org_height    = avctx->coded_height;
126     avctx->chroma_sample_location = AVCHROMA_LOC_CENTER;
127     avctx->colorspace = AVCOL_SPC_BT470BG;
128
129     if ((ret = build_basic_mjpeg_vlc(s)) < 0)
130         return ret;
131
132     if (s->extern_huff) {
133         av_log(avctx, AV_LOG_INFO, "mjpeg: using external huffman table\n");
134         if ((ret = init_get_bits(&s->gb, avctx->extradata, avctx->extradata_size * 8)) < 0)
135             return ret;
136         if ((ret = ff_mjpeg_decode_dht(s))) {
137             av_log(avctx, AV_LOG_ERROR,
138                    "mjpeg: error using external huffman table\n");
139             return ret;
140         }
141     }
142     if (avctx->field_order == AV_FIELD_BB) { /* quicktime icefloe 019 */
143         s->interlace_polarity = 1;           /* bottom field first */
144         av_log(avctx, AV_LOG_DEBUG, "mjpeg bottom field first\n");
145     }
146     if (avctx->codec->id == AV_CODEC_ID_AMV)
147         s->flipped = 1;
148
149     return 0;
150 }
151
152
153 /* quantize tables */
154 int ff_mjpeg_decode_dqt(MJpegDecodeContext *s)
155 {
156     int len, index, i, j;
157
158     len = get_bits(&s->gb, 16) - 2;
159
160     while (len >= 65) {
161         /* only 8-bit precision handled */
162         if (get_bits(&s->gb, 4) != 0) {
163             av_log(s->avctx, AV_LOG_ERROR, "dqt: 16-bit precision\n");
164             return -1;
165         }
166         index = get_bits(&s->gb, 4);
167         if (index >= 4)
168             return -1;
169         av_log(s->avctx, AV_LOG_DEBUG, "index=%d\n", index);
170         /* read quant table */
171         for (i = 0; i < 64; i++) {
172             j = s->scantable.permutated[i];
173             s->quant_matrixes[index][j] = get_bits(&s->gb, 8);
174         }
175
176         // XXX FIXME fine-tune, and perhaps add dc too
177         s->qscale[index] = FFMAX(s->quant_matrixes[index][s->scantable.permutated[1]],
178                                  s->quant_matrixes[index][s->scantable.permutated[8]]) >> 1;
179         av_log(s->avctx, AV_LOG_DEBUG, "qscale[%d]: %d\n",
180                index, s->qscale[index]);
181         len -= 65;
182     }
183     return 0;
184 }
185
186 /* decode huffman tables and build VLC decoders */
187 int ff_mjpeg_decode_dht(MJpegDecodeContext *s)
188 {
189     int len, index, i, class, n, v, code_max;
190     uint8_t bits_table[17];
191     uint8_t val_table[256];
192     int ret = 0;
193
194     len = get_bits(&s->gb, 16) - 2;
195
196     while (len > 0) {
197         if (len < 17)
198             return AVERROR_INVALIDDATA;
199         class = get_bits(&s->gb, 4);
200         if (class >= 2)
201             return AVERROR_INVALIDDATA;
202         index = get_bits(&s->gb, 4);
203         if (index >= 4)
204             return AVERROR_INVALIDDATA;
205         n = 0;
206         for (i = 1; i <= 16; i++) {
207             bits_table[i] = get_bits(&s->gb, 8);
208             n += bits_table[i];
209         }
210         len -= 17;
211         if (len < n || n > 256)
212             return AVERROR_INVALIDDATA;
213
214         code_max = 0;
215         for (i = 0; i < n; i++) {
216             v = get_bits(&s->gb, 8);
217             if (v > code_max)
218                 code_max = v;
219             val_table[i] = v;
220         }
221         len -= n;
222
223         /* build VLC and flush previous vlc if present */
224         ff_free_vlc(&s->vlcs[class][index]);
225         av_log(s->avctx, AV_LOG_DEBUG, "class=%d index=%d nb_codes=%d\n",
226                class, index, code_max + 1);
227         if ((ret = build_vlc(&s->vlcs[class][index], bits_table, val_table,
228                              code_max + 1, 0, class > 0)) < 0)
229             return ret;
230
231         if (class > 0) {
232             ff_free_vlc(&s->vlcs[2][index]);
233             if ((ret = build_vlc(&s->vlcs[2][index], bits_table, val_table,
234                                  code_max + 1, 0, 0)) < 0)
235                 return ret;
236         }
237     }
238     return 0;
239 }
240
241 int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
242 {
243     int h_count[MAX_COMPONENTS] = { 0 };
244     int v_count[MAX_COMPONENTS] = { 0 };
245     int len, nb_components, i, width, height, bits, pix_fmt_id, ret;
246
247     /* XXX: verify len field validity */
248     len     = get_bits(&s->gb, 16);
249     bits    = get_bits(&s->gb, 8);
250
251     if (s->pegasus_rct)
252         bits = 9;
253     if (bits == 9 && !s->pegasus_rct)
254         s->rct  = 1;    // FIXME ugly
255
256     if (bits != 8 && !s->lossless) {
257         av_log(s->avctx, AV_LOG_ERROR, "only 8 bits/component accepted\n");
258         return -1;
259     }
260
261     height = get_bits(&s->gb, 16);
262     width  = get_bits(&s->gb, 16);
263
264     // HACK for odd_height.mov
265     if (s->interlaced && s->width == width && s->height == height + 1)
266         height= s->height;
267
268     av_log(s->avctx, AV_LOG_DEBUG, "sof0: picture: %dx%d\n", width, height);
269     if (av_image_check_size(width, height, 0, s->avctx) < 0)
270         return AVERROR_INVALIDDATA;
271
272     nb_components = get_bits(&s->gb, 8);
273     if (nb_components <= 0 ||
274         nb_components > MAX_COMPONENTS)
275         return -1;
276     if (s->interlaced && (s->bottom_field == !s->interlace_polarity)) {
277         if (nb_components != s->nb_components) {
278             av_log(s->avctx, AV_LOG_ERROR,
279                    "nb_components changing in interlaced picture\n");
280             return AVERROR_INVALIDDATA;
281         }
282     }
283     if (s->ls && !(bits <= 8 || nb_components == 1)) {
284         avpriv_report_missing_feature(s->avctx,
285                                       "JPEG-LS that is not <= 8 "
286                                       "bits/component or 16-bit gray");
287         return AVERROR_PATCHWELCOME;
288     }
289     s->nb_components = nb_components;
290     s->h_max         = 1;
291     s->v_max         = 1;
292     for (i = 0; i < nb_components; i++) {
293         /* component id */
294         s->component_id[i] = get_bits(&s->gb, 8) - 1;
295         h_count[i]         = get_bits(&s->gb, 4);
296         v_count[i]         = get_bits(&s->gb, 4);
297         /* compute hmax and vmax (only used in interleaved case) */
298         if (h_count[i] > s->h_max)
299             s->h_max = h_count[i];
300         if (v_count[i] > s->v_max)
301             s->v_max = v_count[i];
302         s->quant_index[i] = get_bits(&s->gb, 8);
303         if (s->quant_index[i] >= 4)
304             return AVERROR_INVALIDDATA;
305         if (!h_count[i] || !v_count[i]) {
306             av_log(s->avctx, AV_LOG_ERROR,
307                    "Invalid sampling factor in component %d %d:%d\n",
308                    i, h_count[i], v_count[i]);
309             return AVERROR_INVALIDDATA;
310         }
311
312         av_log(s->avctx, AV_LOG_DEBUG, "component %d %d:%d id: %d quant:%d\n",
313                i, h_count[i], v_count[i],
314                s->component_id[i], s->quant_index[i]);
315     }
316
317     if (s->ls && (s->h_max > 1 || s->v_max > 1)) {
318         avpriv_report_missing_feature(s->avctx, "Subsampling in JPEG-LS");
319         return AVERROR_PATCHWELCOME;
320     }
321
322     if (s->v_max == 1 && s->h_max == 1 && s->lossless == 1)
323         s->rgb = 1;
324
325     /* if different size, realloc/alloc picture */
326     if (width != s->width || height != s->height || bits != s->bits ||
327         memcmp(s->h_count, h_count, sizeof(h_count))                ||
328         memcmp(s->v_count, v_count, sizeof(v_count))) {
329         s->width      = width;
330         s->height     = height;
331         s->bits       = bits;
332         memcpy(s->h_count, h_count, sizeof(h_count));
333         memcpy(s->v_count, v_count, sizeof(v_count));
334         s->interlaced = 0;
335
336         /* test interlaced mode */
337         if (s->first_picture   &&
338             s->org_height != 0 &&
339             s->height < ((s->org_height * 3) / 4)) {
340             s->interlaced                    = 1;
341             s->bottom_field                  = s->interlace_polarity;
342             s->picture_ptr->interlaced_frame = 1;
343             s->picture_ptr->top_field_first  = !s->interlace_polarity;
344             height *= 2;
345         }
346
347         ret = ff_set_dimensions(s->avctx, width, height);
348         if (ret < 0)
349             return ret;
350
351         s->first_picture = 0;
352     }
353
354     if (!(s->interlaced && (s->bottom_field == !s->interlace_polarity))) {
355     /* XXX: not complete test ! */
356     pix_fmt_id = (s->h_count[0] << 28) | (s->v_count[0] << 24) |
357                  (s->h_count[1] << 20) | (s->v_count[1] << 16) |
358                  (s->h_count[2] << 12) | (s->v_count[2] <<  8) |
359                  (s->h_count[3] <<  4) |  s->v_count[3];
360     av_log(s->avctx, AV_LOG_DEBUG, "pix fmt id %x\n", pix_fmt_id);
361     /* NOTE we do not allocate pictures large enough for the possible
362      * padding of h/v_count being 4 */
363     if (!(pix_fmt_id & 0xD0D0D0D0))
364         pix_fmt_id -= (pix_fmt_id & 0xF0F0F0F0) >> 1;
365     if (!(pix_fmt_id & 0x0D0D0D0D))
366         pix_fmt_id -= (pix_fmt_id & 0x0F0F0F0F) >> 1;
367
368     switch (pix_fmt_id) {
369     case 0x11111100:
370         if (s->rgb)
371             s->avctx->pix_fmt = AV_PIX_FMT_BGRA;
372         else {
373             s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV444P : AV_PIX_FMT_YUVJ444P;
374             s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
375         }
376         assert(s->nb_components == 3);
377         break;
378     case 0x11000000:
379         s->avctx->pix_fmt = AV_PIX_FMT_GRAY8;
380         break;
381     case 0x12111100:
382         s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV440P : AV_PIX_FMT_YUVJ440P;
383         s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
384         break;
385     case 0x21111100:
386         s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV422P : AV_PIX_FMT_YUVJ422P;
387         s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
388         break;
389     case 0x22111100:
390         s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV420P : AV_PIX_FMT_YUVJ420P;
391         s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
392         break;
393     default:
394         avpriv_report_missing_feature(s->avctx, "Pixel format 0x%x", pix_fmt_id);
395         return AVERROR_PATCHWELCOME;
396     }
397     if (s->ls) {
398         if (s->nb_components > 1)
399             s->avctx->pix_fmt = AV_PIX_FMT_RGB24;
400         else if (s->bits <= 8)
401             s->avctx->pix_fmt = AV_PIX_FMT_GRAY8;
402         else
403             s->avctx->pix_fmt = AV_PIX_FMT_GRAY16;
404     }
405
406     s->pix_desc = av_pix_fmt_desc_get(s->avctx->pix_fmt);
407     if (!s->pix_desc) {
408         av_log(s->avctx, AV_LOG_ERROR, "Could not get a pixel format descriptor.\n");
409         return AVERROR_BUG;
410     }
411
412     av_frame_unref(s->picture_ptr);
413     if (ff_get_buffer(s->avctx, s->picture_ptr, AV_GET_BUFFER_FLAG_REF) < 0) {
414         av_log(s->avctx, AV_LOG_ERROR, "get_buffer() failed\n");
415         return -1;
416     }
417     s->picture_ptr->pict_type = AV_PICTURE_TYPE_I;
418     s->picture_ptr->key_frame = 1;
419     s->got_picture            = 1;
420
421     for (i = 0; i < 3; i++)
422         s->linesize[i] = s->picture_ptr->linesize[i] << s->interlaced;
423
424     ff_dlog(s->avctx, "%d %d %d %d %d %d\n",
425             s->width, s->height, s->linesize[0], s->linesize[1],
426             s->interlaced, s->avctx->height);
427
428     if (len != (8 + (3 * nb_components)))
429         av_log(s->avctx, AV_LOG_DEBUG, "decode_sof0: error, len(%d) mismatch\n", len);
430     }
431
432     /* totally blank picture as progressive JPEG will only add details to it */
433     if (s->progressive) {
434         int bw = (width  + s->h_max * 8 - 1) / (s->h_max * 8);
435         int bh = (height + s->v_max * 8 - 1) / (s->v_max * 8);
436         for (i = 0; i < s->nb_components; i++) {
437             int size = bw * bh * s->h_count[i] * s->v_count[i];
438             av_freep(&s->blocks[i]);
439             av_freep(&s->last_nnz[i]);
440             s->blocks[i]       = av_malloc(size * sizeof(**s->blocks));
441             s->last_nnz[i]     = av_mallocz(size * sizeof(**s->last_nnz));
442             s->block_stride[i] = bw * s->h_count[i];
443         }
444         memset(s->coefs_finished, 0, sizeof(s->coefs_finished));
445     }
446     return 0;
447 }
448
449 static inline int mjpeg_decode_dc(MJpegDecodeContext *s, int dc_index)
450 {
451     int code;
452     code = get_vlc2(&s->gb, s->vlcs[0][dc_index].table, 9, 2);
453     if (code < 0) {
454         av_log(s->avctx, AV_LOG_WARNING,
455                "mjpeg_decode_dc: bad vlc: %d:%d (%p)\n",
456                0, dc_index, &s->vlcs[0][dc_index]);
457         return 0xffff;
458     }
459
460     if (code)
461         return get_xbits(&s->gb, code);
462     else
463         return 0;
464 }
465
466 /* decode block and dequantize */
467 static int decode_block(MJpegDecodeContext *s, int16_t *block, int component,
468                         int dc_index, int ac_index, int16_t *quant_matrix)
469 {
470     int code, i, j, level, val;
471
472     /* DC coef */
473     val = mjpeg_decode_dc(s, dc_index);
474     if (val == 0xffff) {
475         av_log(s->avctx, AV_LOG_ERROR, "error dc\n");
476         return AVERROR_INVALIDDATA;
477     }
478     val = val * quant_matrix[0] + s->last_dc[component];
479     s->last_dc[component] = val;
480     block[0] = val;
481     /* AC coefs */
482     i = 0;
483     {OPEN_READER(re, &s->gb);
484     do {
485         UPDATE_CACHE(re, &s->gb);
486         GET_VLC(code, re, &s->gb, s->vlcs[1][ac_index].table, 9, 2);
487
488         i += ((unsigned)code) >> 4;
489             code &= 0xf;
490         if (code) {
491             if (code > MIN_CACHE_BITS - 16)
492                 UPDATE_CACHE(re, &s->gb);
493
494             {
495                 int cache = GET_CACHE(re, &s->gb);
496                 int sign  = (~cache) >> 31;
497                 level     = (NEG_USR32(sign ^ cache,code) ^ sign) - sign;
498             }
499
500             LAST_SKIP_BITS(re, &s->gb, code);
501
502             if (i > 63) {
503                 av_log(s->avctx, AV_LOG_ERROR, "error count: %d\n", i);
504                 return AVERROR_INVALIDDATA;
505             }
506             j        = s->scantable.permutated[i];
507             block[j] = level * quant_matrix[j];
508         }
509     } while (i < 63);
510     CLOSE_READER(re, &s->gb);}
511
512     return 0;
513 }
514
515 static int decode_dc_progressive(MJpegDecodeContext *s, int16_t *block,
516                                  int component, int dc_index,
517                                  int16_t *quant_matrix, int Al)
518 {
519     int val;
520     s->bdsp.clear_block(block);
521     val = mjpeg_decode_dc(s, dc_index);
522     if (val == 0xffff) {
523         av_log(s->avctx, AV_LOG_ERROR, "error dc\n");
524         return AVERROR_INVALIDDATA;
525     }
526     val = (val * quant_matrix[0] << Al) + s->last_dc[component];
527     s->last_dc[component] = val;
528     block[0] = val;
529     return 0;
530 }
531
532 /* decode block and dequantize - progressive JPEG version */
533 static int decode_block_progressive(MJpegDecodeContext *s, int16_t *block,
534                                     uint8_t *last_nnz, int ac_index,
535                                     int16_t *quant_matrix,
536                                     int ss, int se, int Al, int *EOBRUN)
537 {
538     int code, i, j, level, val, run;
539
540     if (*EOBRUN) {
541         (*EOBRUN)--;
542         return 0;
543     }
544
545     {
546         OPEN_READER(re, &s->gb);
547         for (i = ss; ; i++) {
548             UPDATE_CACHE(re, &s->gb);
549             GET_VLC(code, re, &s->gb, s->vlcs[2][ac_index].table, 9, 2);
550
551             run = ((unsigned) code) >> 4;
552             code &= 0xF;
553             if (code) {
554                 i += run;
555                 if (code > MIN_CACHE_BITS - 16)
556                     UPDATE_CACHE(re, &s->gb);
557
558                 {
559                     int cache = GET_CACHE(re, &s->gb);
560                     int sign  = (~cache) >> 31;
561                     level     = (NEG_USR32(sign ^ cache,code) ^ sign) - sign;
562                 }
563
564                 LAST_SKIP_BITS(re, &s->gb, code);
565
566                 if (i >= se) {
567                     if (i == se) {
568                         j = s->scantable.permutated[se];
569                         block[j] = level * quant_matrix[j] << Al;
570                         break;
571                     }
572                     av_log(s->avctx, AV_LOG_ERROR, "error count: %d\n", i);
573                     return AVERROR_INVALIDDATA;
574                 }
575                 j = s->scantable.permutated[i];
576                 block[j] = level * quant_matrix[j] << Al;
577             } else {
578                 if (run == 0xF) {// ZRL - skip 15 coefficients
579                     i += 15;
580                     if (i >= se) {
581                         av_log(s->avctx, AV_LOG_ERROR, "ZRL overflow: %d\n", i);
582                         return AVERROR_INVALIDDATA;
583                     }
584                 } else {
585                     val = (1 << run);
586                     if (run) {
587                         UPDATE_CACHE(re, &s->gb);
588                         val += NEG_USR32(GET_CACHE(re, &s->gb), run);
589                         LAST_SKIP_BITS(re, &s->gb, run);
590                     }
591                     *EOBRUN = val - 1;
592                     break;
593                 }
594             }
595         }
596         CLOSE_READER(re, &s->gb);
597     }
598
599     if (i > *last_nnz)
600         *last_nnz = i;
601
602     return 0;
603 }
604
605 #define REFINE_BIT(j) {                                             \
606     UPDATE_CACHE(re, &s->gb);                                       \
607     sign = block[j] >> 15;                                          \
608     block[j] += SHOW_UBITS(re, &s->gb, 1) *                         \
609                 ((quant_matrix[j] ^ sign) - sign) << Al;            \
610     LAST_SKIP_BITS(re, &s->gb, 1);                                  \
611 }
612
613 #define ZERO_RUN                                                    \
614 for (; ; i++) {                                                     \
615     if (i > last) {                                                 \
616         i += run;                                                   \
617         if (i > se) {                                               \
618             av_log(s->avctx, AV_LOG_ERROR, "error count: %d\n", i); \
619             return -1;                                              \
620         }                                                           \
621         break;                                                      \
622     }                                                               \
623     j = s->scantable.permutated[i];                                 \
624     if (block[j])                                                   \
625         REFINE_BIT(j)                                               \
626     else if (run-- == 0)                                            \
627         break;                                                      \
628 }
629
630 /* decode block and dequantize - progressive JPEG refinement pass */
631 static int decode_block_refinement(MJpegDecodeContext *s, int16_t *block,
632                                    uint8_t *last_nnz,
633                                    int ac_index, int16_t *quant_matrix,
634                                    int ss, int se, int Al, int *EOBRUN)
635 {
636     int code, i = ss, j, sign, val, run;
637     int last    = FFMIN(se, *last_nnz);
638
639     OPEN_READER(re, &s->gb);
640     if (*EOBRUN) {
641         (*EOBRUN)--;
642     } else {
643         for (; ; i++) {
644             UPDATE_CACHE(re, &s->gb);
645             GET_VLC(code, re, &s->gb, s->vlcs[2][ac_index].table, 9, 2);
646
647             if (code & 0xF) {
648                 run = ((unsigned) code) >> 4;
649                 UPDATE_CACHE(re, &s->gb);
650                 val = SHOW_UBITS(re, &s->gb, 1);
651                 LAST_SKIP_BITS(re, &s->gb, 1);
652                 ZERO_RUN;
653                 j = s->scantable.permutated[i];
654                 val--;
655                 block[j] = ((quant_matrix[j]^val) - val) << Al;
656                 if (i == se) {
657                     if (i > *last_nnz)
658                         *last_nnz = i;
659                     CLOSE_READER(re, &s->gb);
660                     return 0;
661                 }
662             } else {
663                 run = ((unsigned) code) >> 4;
664                 if (run == 0xF) {
665                     ZERO_RUN;
666                 } else {
667                     val = run;
668                     run = (1 << run);
669                     if (val) {
670                         UPDATE_CACHE(re, &s->gb);
671                         run += SHOW_UBITS(re, &s->gb, val);
672                         LAST_SKIP_BITS(re, &s->gb, val);
673                     }
674                     *EOBRUN = run - 1;
675                     break;
676                 }
677             }
678         }
679
680         if (i > *last_nnz)
681             *last_nnz = i;
682     }
683
684     for (; i <= last; i++) {
685         j = s->scantable.permutated[i];
686         if (block[j])
687             REFINE_BIT(j)
688     }
689     CLOSE_READER(re, &s->gb);
690
691     return 0;
692 }
693 #undef REFINE_BIT
694 #undef ZERO_RUN
695
696 static int ljpeg_decode_rgb_scan(MJpegDecodeContext *s, int predictor,
697                                  int point_transform)
698 {
699     int i, mb_x, mb_y;
700     uint16_t (*buffer)[4];
701     int left[3], top[3], topleft[3];
702     const int linesize = s->linesize[0];
703     const int mask     = (1 << s->bits) - 1;
704
705     av_fast_malloc(&s->ljpeg_buffer, &s->ljpeg_buffer_size,
706                    (unsigned)s->mb_width * 4 * sizeof(s->ljpeg_buffer[0][0]));
707     if (!s->ljpeg_buffer)
708         return AVERROR(ENOMEM);
709
710     buffer = s->ljpeg_buffer;
711
712     for (i = 0; i < 3; i++)
713         buffer[0][i] = 1 << (s->bits + point_transform - 1);
714
715     for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
716         const int modified_predictor = mb_y ? predictor : 1;
717         uint8_t *ptr = s->picture_ptr->data[0] + (linesize * mb_y);
718
719         if (s->interlaced && s->bottom_field)
720             ptr += linesize >> 1;
721
722         for (i = 0; i < 3; i++)
723             top[i] = left[i] = topleft[i] = buffer[0][i];
724
725         for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
726             if (s->restart_interval && !s->restart_count)
727                 s->restart_count = s->restart_interval;
728
729             for (i = 0; i < 3; i++) {
730                 int pred;
731
732                 topleft[i] = top[i];
733                 top[i]     = buffer[mb_x][i];
734
735                 PREDICT(pred, topleft[i], top[i], left[i], modified_predictor);
736
737                 left[i] = buffer[mb_x][i] =
738                     mask & (pred + (mjpeg_decode_dc(s, s->dc_index[i]) << point_transform));
739             }
740
741             if (s->restart_interval && !--s->restart_count) {
742                 align_get_bits(&s->gb);
743                 skip_bits(&s->gb, 16); /* skip RSTn */
744             }
745         }
746
747         if (s->rct) {
748             for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
749                 ptr[4 * mb_x + 1] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2] - 0x200) >> 2);
750                 ptr[4 * mb_x + 0] = buffer[mb_x][1] + ptr[4 * mb_x + 1];
751                 ptr[4 * mb_x + 2] = buffer[mb_x][2] + ptr[4 * mb_x + 1];
752             }
753         } else if (s->pegasus_rct) {
754             for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
755                 ptr[4 * mb_x + 1] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2]) >> 2);
756                 ptr[4 * mb_x + 0] = buffer[mb_x][1] + ptr[4 * mb_x + 1];
757                 ptr[4 * mb_x + 2] = buffer[mb_x][2] + ptr[4 * mb_x + 1];
758             }
759         } else {
760             for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
761                 ptr[4 * mb_x + 0] = buffer[mb_x][2];
762                 ptr[4 * mb_x + 1] = buffer[mb_x][1];
763                 ptr[4 * mb_x + 2] = buffer[mb_x][0];
764             }
765         }
766     }
767     return 0;
768 }
769
770 static int ljpeg_decode_yuv_scan(MJpegDecodeContext *s, int predictor,
771                                  int point_transform, int nb_components)
772 {
773     int i, mb_x, mb_y;
774
775     for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
776         for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
777             if (s->restart_interval && !s->restart_count)
778                 s->restart_count = s->restart_interval;
779
780             if (mb_x == 0 || mb_y == 0 || s->interlaced) {
781                 for (i = 0; i < nb_components; i++) {
782                     uint8_t *ptr;
783                     int n, h, v, x, y, c, j, linesize;
784                     n        = s->nb_blocks[i];
785                     c        = s->comp_index[i];
786                     h        = s->h_scount[i];
787                     v        = s->v_scount[i];
788                     x        = 0;
789                     y        = 0;
790                     linesize = s->linesize[c];
791
792                     for (j = 0; j < n; j++) {
793                         int pred;
794                         // FIXME optimize this crap
795                         ptr = s->picture_ptr->data[c] +
796                               (linesize * (v * mb_y + y)) +
797                               (h * mb_x + x);
798                         if (y == 0 && mb_y == 0) {
799                             if (x == 0 && mb_x == 0)
800                                 pred = 128 << point_transform;
801                             else
802                                 pred = ptr[-1];
803                         } else {
804                             if (x == 0 && mb_x == 0)
805                                 pred = ptr[-linesize];
806                             else
807                                 PREDICT(pred, ptr[-linesize - 1],
808                                         ptr[-linesize], ptr[-1], predictor);
809                        }
810
811                         if (s->interlaced && s->bottom_field)
812                             ptr += linesize >> 1;
813                         *ptr = pred + (mjpeg_decode_dc(s, s->dc_index[i]) << point_transform);
814
815                         if (++x == h) {
816                             x = 0;
817                             y++;
818                         }
819                     }
820                 }
821             } else {
822                 for (i = 0; i < nb_components; i++) {
823                     uint8_t *ptr;
824                     int n, h, v, x, y, c, j, linesize;
825                     n        = s->nb_blocks[i];
826                     c        = s->comp_index[i];
827                     h        = s->h_scount[i];
828                     v        = s->v_scount[i];
829                     x        = 0;
830                     y        = 0;
831                     linesize = s->linesize[c];
832
833                     for (j = 0; j < n; j++) {
834                         int pred;
835
836                         // FIXME optimize this crap
837                         ptr = s->picture_ptr->data[c] +
838                               (linesize * (v * mb_y + y)) +
839                               (h * mb_x + x);
840                         PREDICT(pred, ptr[-linesize - 1],
841                                 ptr[-linesize], ptr[-1], predictor);
842                         *ptr = pred + (mjpeg_decode_dc(s, s->dc_index[i]) << point_transform);
843                         if (++x == h) {
844                             x = 0;
845                             y++;
846                         }
847                     }
848                 }
849             }
850             if (s->restart_interval && !--s->restart_count) {
851                 align_get_bits(&s->gb);
852                 skip_bits(&s->gb, 16); /* skip RSTn */
853             }
854         }
855     }
856     return 0;
857 }
858
859 static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah,
860                              int Al, const uint8_t *mb_bitmask,
861                              const AVFrame *reference)
862 {
863     int i, mb_x, mb_y;
864     uint8_t *data[MAX_COMPONENTS];
865     const uint8_t *reference_data[MAX_COMPONENTS];
866     int linesize[MAX_COMPONENTS];
867     GetBitContext mb_bitmask_gb;
868
869     if (mb_bitmask)
870         init_get_bits(&mb_bitmask_gb, mb_bitmask, s->mb_width * s->mb_height);
871
872     for (i = 0; i < nb_components; i++) {
873         int c   = s->comp_index[i];
874         data[c] = s->picture_ptr->data[c];
875         reference_data[c] = reference ? reference->data[c] : NULL;
876         linesize[c] = s->linesize[c];
877         s->coefs_finished[c] |= 1;
878     }
879
880     for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
881         for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
882             const int copy_mb = mb_bitmask && !get_bits1(&mb_bitmask_gb);
883
884             if (s->restart_interval && !s->restart_count)
885                 s->restart_count = s->restart_interval;
886
887             if (get_bits_left(&s->gb) < 0) {
888                 av_log(s->avctx, AV_LOG_ERROR, "overread %d\n",
889                        -get_bits_left(&s->gb));
890                 return AVERROR_INVALIDDATA;
891             }
892             for (i = 0; i < nb_components; i++) {
893                 uint8_t *ptr;
894                 int n, h, v, x, y, c, j;
895                 int block_offset;
896                 n = s->nb_blocks[i];
897                 c = s->comp_index[i];
898                 h = s->h_scount[i];
899                 v = s->v_scount[i];
900                 x = 0;
901                 y = 0;
902                 for (j = 0; j < n; j++) {
903                     block_offset = ((linesize[c] * (v * mb_y + y) * 8) +
904                                     (h * mb_x + x) * 8);
905
906                     if (s->interlaced && s->bottom_field)
907                         block_offset += linesize[c] >> 1;
908                     ptr = data[c] + block_offset;
909                     if (!s->progressive) {
910                         if (copy_mb)
911                             s->hdsp.put_pixels_tab[1][0](ptr,
912                                 reference_data[c] + block_offset,
913                                 linesize[c], 8);
914                         else {
915                             s->bdsp.clear_block(s->block);
916                             if (decode_block(s, s->block, i,
917                                              s->dc_index[i], s->ac_index[i],
918                                              s->quant_matrixes[s->quant_index[c]]) < 0) {
919                                 av_log(s->avctx, AV_LOG_ERROR,
920                                        "error y=%d x=%d\n", mb_y, mb_x);
921                                 return AVERROR_INVALIDDATA;
922                             }
923                             s->idsp.idct_put(ptr, linesize[c], s->block);
924                         }
925                     } else {
926                         int block_idx  = s->block_stride[c] * (v * mb_y + y) +
927                                          (h * mb_x + x);
928                         int16_t *block = s->blocks[c][block_idx];
929                         if (Ah)
930                             block[0] += get_bits1(&s->gb) *
931                                         s->quant_matrixes[s->quant_index[c]][0] << Al;
932                         else if (decode_dc_progressive(s, block, i, s->dc_index[i],
933                                                        s->quant_matrixes[s->quant_index[c]],
934                                                        Al) < 0) {
935                             av_log(s->avctx, AV_LOG_ERROR,
936                                    "error y=%d x=%d\n", mb_y, mb_x);
937                             return AVERROR_INVALIDDATA;
938                         }
939                     }
940                     ff_dlog(s->avctx, "mb: %d %d processed\n", mb_y, mb_x);
941                     ff_dlog(s->avctx, "%d %d %d %d %d %d %d %d \n",
942                             mb_x, mb_y, x, y, c, s->bottom_field,
943                             (v * mb_y + y) * 8, (h * mb_x + x) * 8);
944                     if (++x == h) {
945                         x = 0;
946                         y++;
947                     }
948                 }
949             }
950
951             if (s->restart_interval) {
952                 s->restart_count--;
953                 i = 8 + ((-get_bits_count(&s->gb)) & 7);
954                 /* skip RSTn */
955                 if (show_bits(&s->gb, i) == (1 << i) - 1) {
956                     int pos = get_bits_count(&s->gb);
957                     align_get_bits(&s->gb);
958                     while (get_bits_left(&s->gb) >= 8 && show_bits(&s->gb, 8) == 0xFF)
959                         skip_bits(&s->gb, 8);
960                     if ((get_bits(&s->gb, 8) & 0xF8) == 0xD0) {
961                         for (i = 0; i < nb_components; i++) /* reset dc */
962                             s->last_dc[i] = 1024;
963                     } else
964                         skip_bits_long(&s->gb, pos - get_bits_count(&s->gb));
965                 }
966             }
967         }
968     }
969     return 0;
970 }
971
972 static int mjpeg_decode_scan_progressive_ac(MJpegDecodeContext *s, int ss,
973                                             int se, int Ah, int Al,
974                                             const uint8_t *mb_bitmask,
975                                             const AVFrame *reference)
976 {
977     int mb_x, mb_y;
978     int EOBRUN = 0;
979     int c = s->comp_index[0];
980     uint8_t *data = s->picture_ptr->data[c];
981     const uint8_t *reference_data = reference ? reference->data[c] : NULL;
982     int linesize  = s->linesize[c];
983     int last_scan = 0;
984     int16_t *quant_matrix = s->quant_matrixes[s->quant_index[c]];
985     GetBitContext mb_bitmask_gb;
986
987     if (ss < 0  || ss >= 64 ||
988         se < ss || se >= 64 ||
989         Ah < 0  || Al < 0)
990         return AVERROR_INVALIDDATA;
991
992     if (mb_bitmask)
993         init_get_bits(&mb_bitmask_gb, mb_bitmask, s->mb_width * s->mb_height);
994
995     if (!Al) {
996         // s->coefs_finished is a bitmask for coefficients coded
997         // ss and se are parameters telling start and end coefficients
998         s->coefs_finished[c] |= (~0ULL >> (63 - (se - ss))) << ss;
999         last_scan = !~s->coefs_finished[c];
1000     }
1001
1002     if (s->interlaced && s->bottom_field) {
1003         int offset      = linesize >> 1;
1004         data           += offset;
1005         reference_data += offset;
1006     }
1007
1008     for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
1009         int block_offset = mb_y * linesize * 8;
1010         uint8_t *ptr     = data + block_offset;
1011         int block_idx    = mb_y * s->block_stride[c];
1012         int16_t (*block)[64] = &s->blocks[c][block_idx];
1013         uint8_t *last_nnz    = &s->last_nnz[c][block_idx];
1014         for (mb_x = 0; mb_x < s->mb_width; mb_x++, block++, last_nnz++) {
1015             const int copy_mb = mb_bitmask && !get_bits1(&mb_bitmask_gb);
1016
1017             if (!copy_mb) {
1018                 int ret;
1019                 if (Ah)
1020                     ret = decode_block_refinement(s, *block, last_nnz, s->ac_index[0],
1021                                                   quant_matrix, ss, se, Al, &EOBRUN);
1022                 else
1023                     ret = decode_block_progressive(s, *block, last_nnz, s->ac_index[0],
1024                                                    quant_matrix, ss, se, Al, &EOBRUN);
1025                 if (ret < 0) {
1026                     av_log(s->avctx, AV_LOG_ERROR,
1027                            "error y=%d x=%d\n", mb_y, mb_x);
1028                     return AVERROR_INVALIDDATA;
1029                 }
1030             }
1031
1032             if (last_scan) {
1033                 if (copy_mb) {
1034                     s->hdsp.put_pixels_tab[1][0](ptr,
1035                                                  reference_data + block_offset,
1036                                                  linesize, 8);
1037                 } else {
1038                     s->idsp.idct_put(ptr, linesize, *block);
1039                     ptr += 8;
1040                 }
1041             }
1042         }
1043     }
1044     return 0;
1045 }
1046
1047 int ff_mjpeg_decode_sos(MJpegDecodeContext *s, const uint8_t *mb_bitmask,
1048                         const AVFrame *reference)
1049 {
1050     int len, nb_components, i, h, v, predictor, point_transform;
1051     int index, id, ret;
1052     const int block_size = s->lossless ? 1 : 8;
1053     int ilv, prev_shift;
1054
1055     /* XXX: verify len field validity */
1056     len = get_bits(&s->gb, 16);
1057     nb_components = get_bits(&s->gb, 8);
1058     if (nb_components == 0 || nb_components > MAX_COMPONENTS) {
1059         avpriv_report_missing_feature(s->avctx,
1060                                       "decode_sos: nb_components (%d)",
1061                                       nb_components);
1062         return AVERROR_PATCHWELCOME;
1063     }
1064     if (len != 6 + 2 * nb_components) {
1065         av_log(s->avctx, AV_LOG_ERROR, "decode_sos: invalid len (%d)\n", len);
1066         return AVERROR_INVALIDDATA;
1067     }
1068     for (i = 0; i < nb_components; i++) {
1069         id = get_bits(&s->gb, 8) - 1;
1070         av_log(s->avctx, AV_LOG_DEBUG, "component: %d\n", id);
1071         /* find component index */
1072         for (index = 0; index < s->nb_components; index++)
1073             if (id == s->component_id[index])
1074                 break;
1075         if (index == s->nb_components) {
1076             av_log(s->avctx, AV_LOG_ERROR,
1077                    "decode_sos: index(%d) out of components\n", index);
1078             return AVERROR_INVALIDDATA;
1079         }
1080         /* Metasoft MJPEG codec has Cb and Cr swapped */
1081         if (s->avctx->codec_tag == MKTAG('M', 'T', 'S', 'J')
1082             && nb_components == 3 && s->nb_components == 3 && i)
1083             index = 3 - i;
1084
1085         s->comp_index[i] = index;
1086
1087         s->nb_blocks[i] = s->h_count[index] * s->v_count[index];
1088         s->h_scount[i]  = s->h_count[index];
1089         s->v_scount[i]  = s->v_count[index];
1090
1091         s->dc_index[i] = get_bits(&s->gb, 4);
1092         s->ac_index[i] = get_bits(&s->gb, 4);
1093
1094         if (s->dc_index[i] <  0 || s->ac_index[i] < 0 ||
1095             s->dc_index[i] >= 4 || s->ac_index[i] >= 4)
1096             goto out_of_range;
1097         if (!s->vlcs[0][s->dc_index[i]].table ||
1098             !s->vlcs[1][s->ac_index[i]].table)
1099             goto out_of_range;
1100     }
1101
1102     predictor = get_bits(&s->gb, 8);       /* JPEG Ss / lossless JPEG predictor /JPEG-LS NEAR */
1103     ilv = get_bits(&s->gb, 8);             /* JPEG Se / JPEG-LS ILV */
1104     prev_shift      = get_bits(&s->gb, 4); /* Ah */
1105     point_transform = get_bits(&s->gb, 4); /* Al */
1106
1107     if (nb_components > 1) {
1108         /* interleaved stream */
1109         s->mb_width  = (s->width  + s->h_max * block_size - 1) / (s->h_max * block_size);
1110         s->mb_height = (s->height + s->v_max * block_size - 1) / (s->v_max * block_size);
1111     } else if (!s->ls) { /* skip this for JPEG-LS */
1112         h = s->h_max / s->h_scount[0];
1113         v = s->v_max / s->v_scount[0];
1114         s->mb_width     = (s->width  + h * block_size - 1) / (h * block_size);
1115         s->mb_height    = (s->height + v * block_size - 1) / (v * block_size);
1116         s->nb_blocks[0] = 1;
1117         s->h_scount[0]  = 1;
1118         s->v_scount[0]  = 1;
1119     }
1120
1121     if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1122         av_log(s->avctx, AV_LOG_DEBUG, "%s %s p:%d >>:%d ilv:%d bits:%d %s\n",
1123                s->lossless ? "lossless" : "sequential DCT", s->rgb ? "RGB" : "",
1124                predictor, point_transform, ilv, s->bits,
1125                s->pegasus_rct ? "PRCT" : (s->rct ? "RCT" : ""));
1126
1127
1128     /* mjpeg-b can have padding bytes between sos and image data, skip them */
1129     for (i = s->mjpb_skiptosod; i > 0; i--)
1130         skip_bits(&s->gb, 8);
1131
1132     if (s->lossless && s->rgb && nb_components != 3) {
1133         avpriv_request_sample(s->avctx,
1134                               "Lossless RGB image without 3 components");
1135         return AVERROR_PATCHWELCOME;
1136     }
1137
1138 next_field:
1139     for (i = 0; i < nb_components; i++)
1140         s->last_dc[i] = 1024;
1141
1142     if (s->lossless) {
1143         if (CONFIG_JPEGLS_DECODER && s->ls) {
1144 //            for () {
1145 //            reset_ls_coding_parameters(s, 0);
1146
1147             if ((ret = ff_jpegls_decode_picture(s, predictor,
1148                                                 point_transform, ilv)) < 0)
1149                 return ret;
1150         } else {
1151             if (s->rgb) {
1152                 if ((ret = ljpeg_decode_rgb_scan(s, predictor,
1153                                                  point_transform)) < 0)
1154                     return ret;
1155             } else {
1156                 if ((ret = ljpeg_decode_yuv_scan(s, predictor,
1157                                                  point_transform,
1158                                                  nb_components)) < 0)
1159                     return ret;
1160             }
1161         }
1162     } else {
1163         if (s->progressive && predictor) {
1164             if ((ret = mjpeg_decode_scan_progressive_ac(s, predictor,
1165                                                         ilv, prev_shift,
1166                                                         point_transform,
1167                                                         mb_bitmask,
1168                                                         reference)) < 0)
1169                 return ret;
1170         } else {
1171             if ((ret = mjpeg_decode_scan(s, nb_components,
1172                                          prev_shift, point_transform,
1173                                          mb_bitmask, reference)) < 0)
1174                 return ret;
1175         }
1176     }
1177
1178     if (s->interlaced &&
1179         get_bits_left(&s->gb) > 32 &&
1180         show_bits(&s->gb, 8) == 0xFF) {
1181         GetBitContext bak = s->gb;
1182         align_get_bits(&bak);
1183         if (show_bits(&bak, 16) == 0xFFD1) {
1184             ff_dlog(s->avctx, "AVRn interlaced picture marker found\n");
1185             s->gb = bak;
1186             skip_bits(&s->gb, 16);
1187             s->bottom_field ^= 1;
1188
1189             goto next_field;
1190         }
1191     }
1192
1193     emms_c();
1194     return 0;
1195  out_of_range:
1196     av_log(s->avctx, AV_LOG_ERROR, "decode_sos: ac/dc index out of range\n");
1197     return AVERROR_INVALIDDATA;
1198 }
1199
1200 static int mjpeg_decode_dri(MJpegDecodeContext *s)
1201 {
1202     if (get_bits(&s->gb, 16) != 4)
1203         return AVERROR_INVALIDDATA;
1204     s->restart_interval = get_bits(&s->gb, 16);
1205     s->restart_count    = 0;
1206     av_log(s->avctx, AV_LOG_DEBUG, "restart interval: %d\n",
1207            s->restart_interval);
1208
1209     return 0;
1210 }
1211
1212 static int mjpeg_decode_app(MJpegDecodeContext *s)
1213 {
1214     int len, id, i;
1215
1216     len = get_bits(&s->gb, 16);
1217     if (len < 5)
1218         return AVERROR_INVALIDDATA;
1219     if (8 * len > get_bits_left(&s->gb))
1220         return AVERROR_INVALIDDATA;
1221
1222     id   = get_bits_long(&s->gb, 32);
1223     id   = av_be2ne32(id);
1224     len -= 6;
1225
1226     if (s->avctx->debug & FF_DEBUG_STARTCODE)
1227         av_log(s->avctx, AV_LOG_DEBUG, "APPx %8X\n", id);
1228
1229     /* Buggy AVID, it puts EOI only at every 10th frame. */
1230     /* Also, this fourcc is used by non-avid files too, it holds some
1231        information, but it's always present in AVID-created files. */
1232     if (id == AV_RL32("AVI1")) {
1233         /* structure:
1234             4bytes      AVI1
1235             1bytes      polarity
1236             1bytes      always zero
1237             4bytes      field_size
1238             4bytes      field_size_less_padding
1239         */
1240         s->buggy_avid = 1;
1241         i = get_bits(&s->gb, 8);
1242         if (i == 2)
1243             s->bottom_field = 1;
1244         else if (i == 1)
1245             s->bottom_field = 0;
1246         goto out;
1247     }
1248
1249     if (id == AV_RL32("JFIF")) {
1250         int t_w, t_h, v1, v2;
1251         skip_bits(&s->gb, 8); /* the trailing zero-byte */
1252         v1 = get_bits(&s->gb, 8);
1253         v2 = get_bits(&s->gb, 8);
1254         skip_bits(&s->gb, 8);
1255
1256         s->avctx->sample_aspect_ratio.num = get_bits(&s->gb, 16);
1257         s->avctx->sample_aspect_ratio.den = get_bits(&s->gb, 16);
1258         ff_set_sar(s->avctx, s->avctx->sample_aspect_ratio);
1259
1260         if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1261             av_log(s->avctx, AV_LOG_INFO,
1262                    "mjpeg: JFIF header found (version: %x.%x) SAR=%d/%d\n",
1263                    v1, v2,
1264                    s->avctx->sample_aspect_ratio.num,
1265                    s->avctx->sample_aspect_ratio.den);
1266
1267         t_w = get_bits(&s->gb, 8);
1268         t_h = get_bits(&s->gb, 8);
1269         if (t_w && t_h) {
1270             /* skip thumbnail */
1271             if (len -10 - (t_w * t_h * 3) > 0)
1272                 len -= t_w * t_h * 3;
1273         }
1274         len -= 10;
1275         goto out;
1276     }
1277
1278     if (id == AV_RL32("Adob") && (get_bits(&s->gb, 8) == 'e')) {
1279         if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1280             av_log(s->avctx, AV_LOG_INFO, "mjpeg: Adobe header found\n");
1281         skip_bits(&s->gb, 16); /* version */
1282         skip_bits(&s->gb, 16); /* flags0 */
1283         skip_bits(&s->gb, 16); /* flags1 */
1284         skip_bits(&s->gb,  8); /* transform */
1285         len -= 7;
1286         goto out;
1287     }
1288
1289     if (id == AV_RL32("LJIF")) {
1290         if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1291             av_log(s->avctx, AV_LOG_INFO,
1292                    "Pegasus lossless jpeg header found\n");
1293         skip_bits(&s->gb, 16); /* version ? */
1294         skip_bits(&s->gb, 16); /* unknown always 0? */
1295         skip_bits(&s->gb, 16); /* unknown always 0? */
1296         skip_bits(&s->gb, 16); /* unknown always 0? */
1297         switch (get_bits(&s->gb, 8)) {
1298         case 1:
1299             s->rgb         = 1;
1300             s->pegasus_rct = 0;
1301             break;
1302         case 2:
1303             s->rgb         = 1;
1304             s->pegasus_rct = 1;
1305             break;
1306         default:
1307             av_log(s->avctx, AV_LOG_ERROR, "unknown colorspace\n");
1308         }
1309         len -= 9;
1310         goto out;
1311     }
1312
1313     /* Apple MJPEG-A */
1314     if ((s->start_code == APP1) && (len > (0x28 - 8))) {
1315         id   = get_bits_long(&s->gb, 32);
1316         id   = av_be2ne32(id);
1317         len -= 4;
1318         /* Apple MJPEG-A */
1319         if (id == AV_RL32("mjpg")) {
1320             if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1321                 av_log(s->avctx, AV_LOG_INFO, "mjpeg: Apple MJPEG-A header found\n");
1322         }
1323     }
1324
1325 out:
1326     /* slow but needed for extreme adobe jpegs */
1327     if (len < 0)
1328         av_log(s->avctx, AV_LOG_ERROR,
1329                "mjpeg: error, decode_app parser read over the end\n");
1330     while (--len > 0)
1331         skip_bits(&s->gb, 8);
1332
1333     return 0;
1334 }
1335
1336 static int mjpeg_decode_com(MJpegDecodeContext *s)
1337 {
1338     int len = get_bits(&s->gb, 16);
1339     if (len >= 2 && 8 * len - 16 <= get_bits_left(&s->gb)) {
1340         int i;
1341         char *cbuf = av_malloc(len - 1);
1342         if (!cbuf)
1343             return AVERROR(ENOMEM);
1344
1345         for (i = 0; i < len - 2; i++)
1346             cbuf[i] = get_bits(&s->gb, 8);
1347         if (i > 0 && cbuf[i - 1] == '\n')
1348             cbuf[i - 1] = 0;
1349         else
1350             cbuf[i] = 0;
1351
1352         if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1353             av_log(s->avctx, AV_LOG_INFO, "mjpeg comment: '%s'\n", cbuf);
1354
1355         /* buggy avid, it puts EOI only at every 10th frame */
1356         if (!strcmp(cbuf, "AVID")) {
1357             s->buggy_avid = 1;
1358         } else if (!strcmp(cbuf, "CS=ITU601"))
1359             s->cs_itu601 = 1;
1360         else if ((len > 20 && !strncmp(cbuf, "Intel(R) JPEG Library", 21)) ||
1361                  (len > 19 && !strncmp(cbuf, "Metasoft MJPEG Codec", 20)))
1362             s->flipped = 1;
1363
1364         av_free(cbuf);
1365     }
1366
1367     return 0;
1368 }
1369
1370 /* return the 8 bit start code value and update the search
1371    state. Return -1 if no start code found */
1372 static int find_marker(const uint8_t **pbuf_ptr, const uint8_t *buf_end)
1373 {
1374     const uint8_t *buf_ptr;
1375     unsigned int v, v2;
1376     int val;
1377 #ifdef DEBUG
1378     int skipped = 0;
1379 #endif
1380
1381     buf_ptr = *pbuf_ptr;
1382     while (buf_ptr < buf_end) {
1383         v  = *buf_ptr++;
1384         v2 = *buf_ptr;
1385         if ((v == 0xff) && (v2 >= 0xc0) && (v2 <= 0xfe) && buf_ptr < buf_end) {
1386             val = *buf_ptr++;
1387             goto found;
1388         }
1389 #ifdef DEBUG
1390         skipped++;
1391 #endif
1392     }
1393     val = -1;
1394 found:
1395     ff_dlog(NULL, "find_marker skipped %d bytes\n", skipped);
1396     *pbuf_ptr = buf_ptr;
1397     return val;
1398 }
1399
1400 int ff_mjpeg_find_marker(MJpegDecodeContext *s,
1401                          const uint8_t **buf_ptr, const uint8_t *buf_end,
1402                          const uint8_t **unescaped_buf_ptr,
1403                          int *unescaped_buf_size)
1404 {
1405     int start_code;
1406     start_code = find_marker(buf_ptr, buf_end);
1407
1408     av_fast_padded_malloc(&s->buffer, &s->buffer_size, buf_end - *buf_ptr);
1409     if (!s->buffer)
1410         return AVERROR(ENOMEM);
1411
1412     /* unescape buffer of SOS, use special treatment for JPEG-LS */
1413     if (start_code == SOS && !s->ls) {
1414         const uint8_t *src = *buf_ptr;
1415         uint8_t *dst = s->buffer;
1416
1417         while (src < buf_end) {
1418             uint8_t x = *(src++);
1419
1420             *(dst++) = x;
1421             if (s->avctx->codec_id != AV_CODEC_ID_THP) {
1422                 if (x == 0xff) {
1423                     while (src < buf_end && x == 0xff)
1424                         x = *(src++);
1425
1426                     if (x >= 0xd0 && x <= 0xd7)
1427                         *(dst++) = x;
1428                     else if (x)
1429                         break;
1430                 }
1431             }
1432         }
1433         *unescaped_buf_ptr  = s->buffer;
1434         *unescaped_buf_size = dst - s->buffer;
1435         memset(s->buffer + *unescaped_buf_size, 0,
1436                AV_INPUT_BUFFER_PADDING_SIZE);
1437
1438         av_log(s->avctx, AV_LOG_DEBUG, "escaping removed %td bytes\n",
1439                (buf_end - *buf_ptr) - (dst - s->buffer));
1440     } else if (start_code == SOS && s->ls) {
1441         const uint8_t *src = *buf_ptr;
1442         uint8_t *dst  = s->buffer;
1443         int bit_count = 0;
1444         int t = 0, b = 0;
1445         PutBitContext pb;
1446
1447         s->cur_scan++;
1448
1449         /* find marker */
1450         while (src + t < buf_end) {
1451             uint8_t x = src[t++];
1452             if (x == 0xff) {
1453                 while ((src + t < buf_end) && x == 0xff)
1454                     x = src[t++];
1455                 if (x & 0x80) {
1456                     t -= 2;
1457                     break;
1458                 }
1459             }
1460         }
1461         bit_count = t * 8;
1462         init_put_bits(&pb, dst, t);
1463
1464         /* unescape bitstream */
1465         while (b < t) {
1466             uint8_t x = src[b++];
1467             put_bits(&pb, 8, x);
1468             if (x == 0xFF) {
1469                 x = src[b++];
1470                 put_bits(&pb, 7, x);
1471                 bit_count--;
1472             }
1473         }
1474         flush_put_bits(&pb);
1475
1476         *unescaped_buf_ptr  = dst;
1477         *unescaped_buf_size = (bit_count + 7) >> 3;
1478         memset(s->buffer + *unescaped_buf_size, 0,
1479                AV_INPUT_BUFFER_PADDING_SIZE);
1480     } else {
1481         *unescaped_buf_ptr  = *buf_ptr;
1482         *unescaped_buf_size = buf_end - *buf_ptr;
1483     }
1484
1485     return start_code;
1486 }
1487
1488 int ff_mjpeg_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
1489                           AVPacket *avpkt)
1490 {
1491     AVFrame     *frame = data;
1492     const uint8_t *buf = avpkt->data;
1493     int buf_size       = avpkt->size;
1494     MJpegDecodeContext *s = avctx->priv_data;
1495     const uint8_t *buf_end, *buf_ptr;
1496     const uint8_t *unescaped_buf_ptr;
1497     int unescaped_buf_size;
1498     int start_code;
1499     int ret = 0;
1500
1501     s->got_picture = 0; // picture from previous image can not be reused
1502     buf_ptr = buf;
1503     buf_end = buf + buf_size;
1504     while (buf_ptr < buf_end) {
1505         /* find start next marker */
1506         start_code = ff_mjpeg_find_marker(s, &buf_ptr, buf_end,
1507                                           &unescaped_buf_ptr,
1508                                           &unescaped_buf_size);
1509         /* EOF */
1510         if (start_code < 0) {
1511             goto the_end;
1512         } else if (unescaped_buf_size > INT_MAX / 8) {
1513             av_log(avctx, AV_LOG_ERROR,
1514                    "MJPEG packet 0x%x too big (%d/%d), corrupt data?\n",
1515                    start_code, unescaped_buf_size, buf_size);
1516             return AVERROR_INVALIDDATA;
1517         }
1518
1519         av_log(avctx, AV_LOG_DEBUG, "marker=%x avail_size_in_buf=%td\n",
1520                start_code, buf_end - buf_ptr);
1521
1522         ret = init_get_bits(&s->gb, unescaped_buf_ptr,
1523                             unescaped_buf_size * 8);
1524         if (ret < 0)
1525             return ret;
1526
1527         s->start_code = start_code;
1528         if (s->avctx->debug & FF_DEBUG_STARTCODE)
1529             av_log(avctx, AV_LOG_DEBUG, "startcode: %X\n", start_code);
1530
1531         /* process markers */
1532         if (start_code >= 0xd0 && start_code <= 0xd7) {
1533             av_log(avctx, AV_LOG_DEBUG,
1534                    "restart marker: %d\n", start_code & 0x0f);
1535             /* APP fields */
1536         } else if (start_code >= APP0 && start_code <= APP15) {
1537             if ((ret = mjpeg_decode_app(s)) < 0)
1538                 return ret;
1539             /* Comment */
1540         } else if (start_code == COM) {
1541             ret = mjpeg_decode_com(s);
1542             if (ret < 0)
1543                 return ret;
1544         }
1545
1546         if (!CONFIG_JPEGLS_DECODER &&
1547             (start_code == SOF48 || start_code == LSE)) {
1548             av_log(avctx, AV_LOG_ERROR, "JPEG-LS support not enabled.\n");
1549             return AVERROR(ENOSYS);
1550         }
1551
1552         switch (start_code) {
1553         case SOI:
1554             s->restart_interval = 0;
1555             s->restart_count    = 0;
1556             /* nothing to do on SOI */
1557             break;
1558         case DQT:
1559             if ((ret = ff_mjpeg_decode_dqt(s)) < 0)
1560                 return ret;
1561             break;
1562         case DHT:
1563             if ((ret = ff_mjpeg_decode_dht(s)) < 0) {
1564                 av_log(avctx, AV_LOG_ERROR, "huffman table decode error\n");
1565                 return ret;
1566             }
1567             break;
1568         case SOF0:
1569         case SOF1:
1570             s->lossless    = 0;
1571             s->ls          = 0;
1572             s->progressive = 0;
1573             if ((ret = ff_mjpeg_decode_sof(s)) < 0)
1574                 return ret;
1575             break;
1576         case SOF2:
1577             s->lossless    = 0;
1578             s->ls          = 0;
1579             s->progressive = 1;
1580             if ((ret = ff_mjpeg_decode_sof(s)) < 0)
1581                 return ret;
1582             break;
1583         case SOF3:
1584             s->lossless    = 1;
1585             s->ls          = 0;
1586             s->progressive = 0;
1587             if ((ret = ff_mjpeg_decode_sof(s)) < 0)
1588                 return ret;
1589             break;
1590         case SOF48:
1591             s->lossless    = 1;
1592             s->ls          = 1;
1593             s->progressive = 0;
1594             if ((ret = ff_mjpeg_decode_sof(s)) < 0)
1595                 return ret;
1596             break;
1597         case LSE:
1598             if (!CONFIG_JPEGLS_DECODER ||
1599                 (ret = ff_jpegls_decode_lse(s)) < 0)
1600                 return ret;
1601             break;
1602         case EOI:
1603             s->cur_scan = 0;
1604             if ((s->buggy_avid && !s->interlaced) || s->restart_interval)
1605                 break;
1606 eoi_parser:
1607             if (!s->got_picture) {
1608                 av_log(avctx, AV_LOG_WARNING,
1609                        "Found EOI before any SOF, ignoring\n");
1610                 break;
1611             }
1612             if (s->interlaced) {
1613                 s->bottom_field ^= 1;
1614                 /* if not bottom field, do not output image yet */
1615                 if (s->bottom_field == !s->interlace_polarity)
1616                     goto not_the_end;
1617             }
1618             if ((ret = av_frame_ref(frame, s->picture_ptr)) < 0)
1619                 return ret;
1620             if (s->flipped) {
1621                 int i;
1622                 for (i = 0; frame->data[i]; i++) {
1623                     int h = frame->height >> ((i == 1 || i == 2) ?
1624                                               s->pix_desc->log2_chroma_h : 0);
1625                     frame->data[i] += frame->linesize[i] * (h - 1);
1626                     frame->linesize[i] *= -1;
1627                 }
1628             }
1629             *got_frame = 1;
1630
1631             if (!s->lossless &&
1632                 avctx->debug & FF_DEBUG_QP) {
1633                 av_log(avctx, AV_LOG_DEBUG,
1634                        "QP: %d\n", FFMAX3(s->qscale[0],
1635                                           s->qscale[1],
1636                                           s->qscale[2]));
1637             }
1638
1639             goto the_end;
1640         case SOS:
1641             if (!s->got_picture) {
1642                 av_log(avctx, AV_LOG_WARNING,
1643                        "Can not process SOS before SOF, skipping\n");
1644                 break;
1645                 }
1646             if ((ret = ff_mjpeg_decode_sos(s, NULL, NULL)) < 0 &&
1647                 (avctx->err_recognition & AV_EF_EXPLODE))
1648                 return ret;
1649             /* buggy avid puts EOI every 10-20th frame */
1650             /* if restart period is over process EOI */
1651             if ((s->buggy_avid && !s->interlaced) || s->restart_interval)
1652                 goto eoi_parser;
1653             break;
1654         case DRI:
1655             if ((ret = mjpeg_decode_dri(s)) < 0)
1656                 return ret;
1657             break;
1658         case SOF5:
1659         case SOF6:
1660         case SOF7:
1661         case SOF9:
1662         case SOF10:
1663         case SOF11:
1664         case SOF13:
1665         case SOF14:
1666         case SOF15:
1667         case JPG:
1668             av_log(avctx, AV_LOG_ERROR,
1669                    "mjpeg: unsupported coding type (%x)\n", start_code);
1670             break;
1671         }
1672
1673 not_the_end:
1674         /* eof process start code */
1675         buf_ptr += (get_bits_count(&s->gb) + 7) / 8;
1676         av_log(avctx, AV_LOG_DEBUG,
1677                "marker parser used %d bytes (%d bits)\n",
1678                (get_bits_count(&s->gb) + 7) / 8, get_bits_count(&s->gb));
1679     }
1680     if (s->got_picture) {
1681         av_log(avctx, AV_LOG_WARNING, "EOI missing, emulating\n");
1682         goto eoi_parser;
1683     }
1684     av_log(avctx, AV_LOG_FATAL, "No JPEG data found in image\n");
1685     return AVERROR_INVALIDDATA;
1686 the_end:
1687     av_log(avctx, AV_LOG_DEBUG, "mjpeg decode frame unused %td bytes\n",
1688            buf_end - buf_ptr);
1689 //  return buf_end - buf_ptr;
1690     return buf_ptr - buf;
1691 }
1692
1693 av_cold int ff_mjpeg_decode_end(AVCodecContext *avctx)
1694 {
1695     MJpegDecodeContext *s = avctx->priv_data;
1696     int i, j;
1697
1698     if (s->picture) {
1699         av_frame_free(&s->picture);
1700         s->picture_ptr = NULL;
1701     } else if (s->picture_ptr)
1702         av_frame_unref(s->picture_ptr);
1703
1704     av_free(s->buffer);
1705     av_freep(&s->ljpeg_buffer);
1706     s->ljpeg_buffer_size = 0;
1707
1708     for (i = 0; i < 3; i++) {
1709         for (j = 0; j < 4; j++)
1710             ff_free_vlc(&s->vlcs[i][j]);
1711     }
1712     for (i = 0; i < MAX_COMPONENTS; i++) {
1713         av_freep(&s->blocks[i]);
1714         av_freep(&s->last_nnz[i]);
1715     }
1716     return 0;
1717 }
1718
1719 #define OFFSET(x) offsetof(MJpegDecodeContext, x)
1720 #define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM
1721 static const AVOption options[] = {
1722     { "extern_huff", "Use external huffman table.",
1723       OFFSET(extern_huff), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VD },
1724     { NULL },
1725 };
1726
1727 static const AVClass mjpegdec_class = {
1728     .class_name = "MJPEG decoder",
1729     .item_name  = av_default_item_name,
1730     .option     = options,
1731     .version    = LIBAVUTIL_VERSION_INT,
1732 };
1733
1734 AVCodec ff_mjpeg_decoder = {
1735     .name           = "mjpeg",
1736     .long_name      = NULL_IF_CONFIG_SMALL("MJPEG (Motion JPEG)"),
1737     .type           = AVMEDIA_TYPE_VIDEO,
1738     .id             = AV_CODEC_ID_MJPEG,
1739     .priv_data_size = sizeof(MJpegDecodeContext),
1740     .init           = ff_mjpeg_decode_init,
1741     .close          = ff_mjpeg_decode_end,
1742     .decode         = ff_mjpeg_decode_frame,
1743     .capabilities   = AV_CODEC_CAP_DR1,
1744     .priv_class     = &mjpegdec_class,
1745     .caps_internal  = FF_CODEC_CAP_INIT_THREADSAFE,
1746 };
1747
1748 AVCodec ff_thp_decoder = {
1749     .name           = "thp",
1750     .long_name      = NULL_IF_CONFIG_SMALL("Nintendo Gamecube THP video"),
1751     .type           = AVMEDIA_TYPE_VIDEO,
1752     .id             = AV_CODEC_ID_THP,
1753     .priv_data_size = sizeof(MJpegDecodeContext),
1754     .init           = ff_mjpeg_decode_init,
1755     .close          = ff_mjpeg_decode_end,
1756     .decode         = ff_mjpeg_decode_frame,
1757     .capabilities   = AV_CODEC_CAP_DR1,
1758     .caps_internal  = FF_CODEC_CAP_INIT_THREADSAFE,
1759 };