]> git.sesse.net Git - ffmpeg/blob - libavcodec/mjpegdec.c
avcodec/mjpegdec: handle luma upscale detection generically
[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 FFmpeg.
12  *
13  * FFmpeg is free software; you can redistribute it and/or
14  * modify it under the terms of the GNU Lesser General Public
15  * License as published by the Free Software Foundation; either
16  * version 2.1 of the License, or (at your option) any later version.
17  *
18  * FFmpeg is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21  * Lesser General Public License for more details.
22  *
23  * You should have received a copy of the GNU Lesser General Public
24  * License along with FFmpeg; if not, write to the Free Software
25  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
26  */
27
28 /**
29  * @file
30  * MJPEG decoder.
31  */
32
33 #include "libavutil/imgutils.h"
34 #include "libavutil/avassert.h"
35 #include "libavutil/opt.h"
36 #include "avcodec.h"
37 #include "blockdsp.h"
38 #include "copy_block.h"
39 #include "idctdsp.h"
40 #include "internal.h"
41 #include "mjpeg.h"
42 #include "mjpegdec.h"
43 #include "jpeglsdec.h"
44 #include "tiff.h"
45 #include "exif.h"
46 #include "bytestream.h"
47
48
49 static int build_vlc(VLC *vlc, const uint8_t *bits_table,
50                      const uint8_t *val_table, int nb_codes,
51                      int use_static, int is_ac)
52 {
53     uint8_t huff_size[256] = { 0 };
54     uint16_t huff_code[256];
55     uint16_t huff_sym[256];
56     int i;
57
58     av_assert0(nb_codes <= 256);
59
60     ff_mjpeg_build_huffman_codes(huff_size, huff_code, bits_table, val_table);
61
62     for (i = 0; i < 256; i++)
63         huff_sym[i] = i + 16 * is_ac;
64
65     if (is_ac)
66         huff_sym[0] = 16 * 256;
67
68     return ff_init_vlc_sparse(vlc, 9, nb_codes, huff_size, 1, 1,
69                               huff_code, 2, 2, huff_sym, 2, 2, use_static);
70 }
71
72 static void build_basic_mjpeg_vlc(MJpegDecodeContext *s)
73 {
74     build_vlc(&s->vlcs[0][0], avpriv_mjpeg_bits_dc_luminance,
75               avpriv_mjpeg_val_dc, 12, 0, 0);
76     build_vlc(&s->vlcs[0][1], avpriv_mjpeg_bits_dc_chrominance,
77               avpriv_mjpeg_val_dc, 12, 0, 0);
78     build_vlc(&s->vlcs[1][0], avpriv_mjpeg_bits_ac_luminance,
79               avpriv_mjpeg_val_ac_luminance, 251, 0, 1);
80     build_vlc(&s->vlcs[1][1], avpriv_mjpeg_bits_ac_chrominance,
81               avpriv_mjpeg_val_ac_chrominance, 251, 0, 1);
82     build_vlc(&s->vlcs[2][0], avpriv_mjpeg_bits_ac_luminance,
83               avpriv_mjpeg_val_ac_luminance, 251, 0, 0);
84     build_vlc(&s->vlcs[2][1], avpriv_mjpeg_bits_ac_chrominance,
85               avpriv_mjpeg_val_ac_chrominance, 251, 0, 0);
86 }
87
88 static void parse_avid(MJpegDecodeContext *s, uint8_t *buf, int len)
89 {
90     s->buggy_avid = 1;
91     if (len > 14 && buf[12] == 1) /* 1 - NTSC */
92         s->interlace_polarity = 1;
93     if (len > 14 && buf[12] == 2) /* 2 - PAL */
94         s->interlace_polarity = 0;
95     if (s->avctx->debug & FF_DEBUG_PICT_INFO)
96         av_log(s->avctx, AV_LOG_INFO, "AVID: len:%d %d\n", len, len > 14 ? buf[12] : -1);
97 }
98
99 av_cold int ff_mjpeg_decode_init(AVCodecContext *avctx)
100 {
101     MJpegDecodeContext *s = avctx->priv_data;
102
103     if (!s->picture_ptr) {
104         s->picture = av_frame_alloc();
105         if (!s->picture)
106             return AVERROR(ENOMEM);
107         s->picture_ptr = s->picture;
108     }
109
110     s->avctx = avctx;
111     ff_blockdsp_init(&s->bdsp, avctx);
112     ff_hpeldsp_init(&s->hdsp, avctx->flags);
113     ff_idctdsp_init(&s->idsp, avctx);
114     ff_init_scantable(s->idsp.idct_permutation, &s->scantable,
115                       ff_zigzag_direct);
116     s->buffer_size   = 0;
117     s->buffer        = NULL;
118     s->start_code    = -1;
119     s->first_picture = 1;
120     s->got_picture   = 0;
121     s->org_height    = avctx->coded_height;
122     avctx->chroma_sample_location = AVCHROMA_LOC_CENTER;
123     avctx->colorspace = AVCOL_SPC_BT470BG;
124
125     build_basic_mjpeg_vlc(s);
126
127     if (s->extern_huff) {
128         av_log(avctx, AV_LOG_INFO, "using external huffman table\n");
129         init_get_bits(&s->gb, avctx->extradata, avctx->extradata_size * 8);
130         if (ff_mjpeg_decode_dht(s)) {
131             av_log(avctx, AV_LOG_ERROR,
132                    "error using external huffman table, switching back to internal\n");
133             build_basic_mjpeg_vlc(s);
134         }
135     }
136     if (avctx->field_order == AV_FIELD_BB) { /* quicktime icefloe 019 */
137         s->interlace_polarity = 1;           /* bottom field first */
138         av_log(avctx, AV_LOG_DEBUG, "bottom field first\n");
139     } else if (avctx->field_order == AV_FIELD_UNKNOWN) {
140         if (avctx->codec_tag == AV_RL32("MJPG"))
141             s->interlace_polarity = 1;
142     }
143
144     if (   avctx->extradata_size > 8
145         && AV_RL32(avctx->extradata) == 0x2C
146         && AV_RL32(avctx->extradata+4) == 0x18) {
147         parse_avid(s, avctx->extradata, avctx->extradata_size);
148     }
149
150     if (avctx->codec->id == AV_CODEC_ID_AMV)
151         s->flipped = 1;
152
153     return 0;
154 }
155
156
157 /* quantize tables */
158 int ff_mjpeg_decode_dqt(MJpegDecodeContext *s)
159 {
160     int len, index, i, j;
161
162     len = get_bits(&s->gb, 16) - 2;
163
164     while (len >= 65) {
165         int pr = get_bits(&s->gb, 4);
166         if (pr > 1) {
167             av_log(s->avctx, AV_LOG_ERROR, "dqt: invalid precision\n");
168             return AVERROR_INVALIDDATA;
169         }
170         index = get_bits(&s->gb, 4);
171         if (index >= 4)
172             return -1;
173         av_log(s->avctx, AV_LOG_DEBUG, "index=%d\n", index);
174         /* read quant table */
175         for (i = 0; i < 64; i++) {
176             j = s->scantable.permutated[i];
177             s->quant_matrixes[index][j] = get_bits(&s->gb, pr ? 16 : 8);
178         }
179
180         // XXX FIXME finetune, and perhaps add dc too
181         s->qscale[index] = FFMAX(s->quant_matrixes[index][s->scantable.permutated[1]],
182                                  s->quant_matrixes[index][s->scantable.permutated[8]]) >> 1;
183         av_log(s->avctx, AV_LOG_DEBUG, "qscale[%d]: %d\n",
184                index, s->qscale[index]);
185         len -= 65;
186     }
187     return 0;
188 }
189
190 /* decode huffman tables and build VLC decoders */
191 int ff_mjpeg_decode_dht(MJpegDecodeContext *s)
192 {
193     int len, index, i, class, n, v, code_max;
194     uint8_t bits_table[17];
195     uint8_t val_table[256];
196     int ret = 0;
197
198     len = get_bits(&s->gb, 16) - 2;
199
200     while (len > 0) {
201         if (len < 17)
202             return AVERROR_INVALIDDATA;
203         class = get_bits(&s->gb, 4);
204         if (class >= 2)
205             return AVERROR_INVALIDDATA;
206         index = get_bits(&s->gb, 4);
207         if (index >= 4)
208             return AVERROR_INVALIDDATA;
209         n = 0;
210         for (i = 1; i <= 16; i++) {
211             bits_table[i] = get_bits(&s->gb, 8);
212             n += bits_table[i];
213         }
214         len -= 17;
215         if (len < n || n > 256)
216             return AVERROR_INVALIDDATA;
217
218         code_max = 0;
219         for (i = 0; i < n; i++) {
220             v = get_bits(&s->gb, 8);
221             if (v > code_max)
222                 code_max = v;
223             val_table[i] = v;
224         }
225         len -= n;
226
227         /* build VLC and flush previous vlc if present */
228         ff_free_vlc(&s->vlcs[class][index]);
229         av_log(s->avctx, AV_LOG_DEBUG, "class=%d index=%d nb_codes=%d\n",
230                class, index, code_max + 1);
231         if ((ret = build_vlc(&s->vlcs[class][index], bits_table, val_table,
232                              code_max + 1, 0, class > 0)) < 0)
233             return ret;
234
235         if (class > 0) {
236             ff_free_vlc(&s->vlcs[2][index]);
237             if ((ret = build_vlc(&s->vlcs[2][index], bits_table, val_table,
238                                  code_max + 1, 0, 0)) < 0)
239                 return ret;
240         }
241     }
242     return 0;
243 }
244
245 int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
246 {
247     int len, nb_components, i, width, height, pix_fmt_id, ret;
248     int h_count[MAX_COMPONENTS];
249     int v_count[MAX_COMPONENTS];
250
251     s->cur_scan = 0;
252     s->upscale_h = s->upscale_v = 0;
253
254     /* XXX: verify len field validity */
255     len     = get_bits(&s->gb, 16);
256     s->avctx->bits_per_raw_sample =
257     s->bits = get_bits(&s->gb, 8);
258
259     if (s->pegasus_rct)
260         s->bits = 9;
261     if (s->bits == 9 && !s->pegasus_rct)
262         s->rct  = 1;    // FIXME ugly
263
264     if(s->lossless && s->avctx->lowres){
265         av_log(s->avctx, AV_LOG_ERROR, "lowres is not possible with lossless jpeg\n");
266         return -1;
267     }
268
269     height = get_bits(&s->gb, 16);
270     width  = get_bits(&s->gb, 16);
271
272     if (s->avctx->codec_id == AV_CODEC_ID_AMV && (height&15))
273         avpriv_request_sample(s->avctx, "non mod 16 height AMV\n");
274
275     // HACK for odd_height.mov
276     if (s->interlaced && s->width == width && s->height == height + 1)
277         height= s->height;
278
279     av_log(s->avctx, AV_LOG_DEBUG, "sof0: picture: %dx%d\n", width, height);
280     if (av_image_check_size(width, height, 0, s->avctx))
281         return AVERROR_INVALIDDATA;
282
283     nb_components = get_bits(&s->gb, 8);
284     if (nb_components <= 0 ||
285         nb_components > MAX_COMPONENTS)
286         return -1;
287     if (s->interlaced && (s->bottom_field == !s->interlace_polarity)) {
288         if (nb_components != s->nb_components) {
289             av_log(s->avctx, AV_LOG_ERROR,
290                    "nb_components changing in interlaced picture\n");
291             return AVERROR_INVALIDDATA;
292         }
293     }
294     if (s->ls && !(s->bits <= 8 || nb_components == 1)) {
295         avpriv_report_missing_feature(s->avctx,
296                                       "JPEG-LS that is not <= 8 "
297                                       "bits/component or 16-bit gray");
298         return AVERROR_PATCHWELCOME;
299     }
300     s->nb_components = nb_components;
301     s->h_max         = 1;
302     s->v_max         = 1;
303     memset(h_count, 0, sizeof(h_count));
304     memset(v_count, 0, sizeof(v_count));
305     for (i = 0; i < nb_components; i++) {
306         /* component id */
307         s->component_id[i] = get_bits(&s->gb, 8) - 1;
308         h_count[i]         = get_bits(&s->gb, 4);
309         v_count[i]         = get_bits(&s->gb, 4);
310         /* compute hmax and vmax (only used in interleaved case) */
311         if (h_count[i] > s->h_max)
312             s->h_max = h_count[i];
313         if (v_count[i] > s->v_max)
314             s->v_max = v_count[i];
315         s->quant_index[i] = get_bits(&s->gb, 8);
316         if (s->quant_index[i] >= 4) {
317             av_log(s->avctx, AV_LOG_ERROR, "quant_index is invalid\n");
318             return AVERROR_INVALIDDATA;
319         }
320         if (!h_count[i] || !v_count[i]) {
321             av_log(s->avctx, AV_LOG_ERROR,
322                    "Invalid sampling factor in component %d %d:%d\n",
323                    i, h_count[i], v_count[i]);
324             return AVERROR_INVALIDDATA;
325         }
326
327         av_log(s->avctx, AV_LOG_DEBUG, "component %d %d:%d id: %d quant:%d\n",
328                i, h_count[i], v_count[i],
329                s->component_id[i], s->quant_index[i]);
330     }
331
332     if (s->ls && (s->h_max > 1 || s->v_max > 1)) {
333         avpriv_report_missing_feature(s->avctx, "Subsampling in JPEG-LS");
334         return AVERROR_PATCHWELCOME;
335     }
336
337
338     /* if different size, realloc/alloc picture */
339     if (   width != s->width || height != s->height
340         || memcmp(s->h_count, h_count, sizeof(h_count))
341         || memcmp(s->v_count, v_count, sizeof(v_count))) {
342
343         s->width      = width;
344         s->height     = height;
345         memcpy(s->h_count, h_count, sizeof(h_count));
346         memcpy(s->v_count, v_count, sizeof(v_count));
347         s->interlaced = 0;
348         s->got_picture = 0;
349
350         /* test interlaced mode */
351         if (s->first_picture   &&
352             s->org_height != 0 &&
353             s->height < ((s->org_height * 3) / 4)) {
354             s->interlaced                    = 1;
355             s->bottom_field                  = s->interlace_polarity;
356             s->picture_ptr->interlaced_frame = 1;
357             s->picture_ptr->top_field_first  = !s->interlace_polarity;
358             height *= 2;
359         }
360
361         ret = ff_set_dimensions(s->avctx, width, height);
362         if (ret < 0)
363             return ret;
364
365         s->first_picture = 0;
366     }
367
368     if (s->got_picture && s->interlaced && (s->bottom_field == !s->interlace_polarity)) {
369         if (s->progressive) {
370             avpriv_request_sample(s->avctx, "progressively coded interlaced picture");
371             return AVERROR_INVALIDDATA;
372         }
373     } else{
374         if (s->v_max == 1 && s->h_max == 1 && s->lossless==1 && (nb_components==3 || nb_components==4))
375             s->rgb = 1;
376         else if (!s->lossless)
377             s->rgb = 0;
378     /* XXX: not complete test ! */
379     pix_fmt_id = (s->h_count[0] << 28) | (s->v_count[0] << 24) |
380                  (s->h_count[1] << 20) | (s->v_count[1] << 16) |
381                  (s->h_count[2] << 12) | (s->v_count[2] <<  8) |
382                  (s->h_count[3] <<  4) |  s->v_count[3];
383     av_log(s->avctx, AV_LOG_DEBUG, "pix fmt id %x\n", pix_fmt_id);
384     /* NOTE we do not allocate pictures large enough for the possible
385      * padding of h/v_count being 4 */
386     if (!(pix_fmt_id & 0xD0D0D0D0))
387         pix_fmt_id -= (pix_fmt_id & 0xF0F0F0F0) >> 1;
388     if (!(pix_fmt_id & 0x0D0D0D0D))
389         pix_fmt_id -= (pix_fmt_id & 0x0F0F0F0F) >> 1;
390
391     for (i = 0; i < 8; i++) {
392         int j = 6 + (i&1) - (i&6);
393         int is = (pix_fmt_id >> (4*i)) & 0xF;
394         int js = (pix_fmt_id >> (4*j)) & 0xF;
395
396         if (is == 1 && js != 2 && (i < 2 || i > 5))
397             js = (pix_fmt_id >> ( 8 + 4*(i&1))) & 0xF;
398         if (is == 1 && js != 2 && (i < 2 || i > 5))
399             js = (pix_fmt_id >> (16 + 4*(i&1))) & 0xF;
400
401         if (is == 1 && js == 2) {
402             if (i & 1) s->upscale_h |= 1 << (j/2);
403             else       s->upscale_v |= 1 << (j/2);
404         }
405     }
406
407     switch (pix_fmt_id) {
408     case 0x11111100:
409         if (s->rgb)
410             s->avctx->pix_fmt = s->bits <= 9 ? AV_PIX_FMT_BGR24 : AV_PIX_FMT_BGR48;
411         else {
412             if (s->component_id[0] == 'Q' && s->component_id[1] == 'F' && s->component_id[2] == 'A') {
413                 s->avctx->pix_fmt = s->bits <= 8 ? AV_PIX_FMT_GBRP : AV_PIX_FMT_GBRP16;
414             } else {
415                 if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV444P : AV_PIX_FMT_YUVJ444P;
416                 else              s->avctx->pix_fmt = AV_PIX_FMT_YUV444P16;
417             s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
418             }
419         }
420         av_assert0(s->nb_components == 3);
421         break;
422     case 0x11111111:
423         if (s->rgb)
424             s->avctx->pix_fmt = s->bits <= 9 ? AV_PIX_FMT_ABGR : AV_PIX_FMT_RGBA64;
425         else {
426             if (s->adobe_transform == 0 && s->bits <= 8) {
427                 s->avctx->pix_fmt = AV_PIX_FMT_GBRAP;
428             } else {
429                 s->avctx->pix_fmt = s->bits <= 8 ? AV_PIX_FMT_YUVA444P : AV_PIX_FMT_YUVA444P16;
430                 s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
431             }
432         }
433         av_assert0(s->nb_components == 4);
434         break;
435     case 0x22111122:
436         if (s->adobe_transform == 0 && s->bits <= 8) {
437             s->avctx->pix_fmt = AV_PIX_FMT_GBRAP;
438             s->upscale_v = 6;
439             s->upscale_h = 6;
440             s->chroma_height = s->height;
441         } else if (s->adobe_transform == 2 && s->bits <= 8) {
442             s->avctx->pix_fmt = AV_PIX_FMT_YUVA444P;
443             s->upscale_v = 6;
444             s->upscale_h = 6;
445             s->chroma_height = s->height;
446             s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
447         } else {
448             if (s->bits <= 8) s->avctx->pix_fmt = AV_PIX_FMT_YUVA420P;
449             else              s->avctx->pix_fmt = AV_PIX_FMT_YUVA420P16;
450             s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
451         }
452         av_assert0(s->nb_components == 4);
453         break;
454     case 0x12121100:
455     case 0x22122100:
456         if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV444P : AV_PIX_FMT_YUVJ444P;
457         else
458             goto unk_pixfmt;
459         s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
460         s->chroma_height = s->height;
461         break;
462     case 0x21211100:
463     case 0x22211200:
464         if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV444P : AV_PIX_FMT_YUVJ444P;
465         else
466             goto unk_pixfmt;
467         s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
468         s->chroma_height = s->height;
469         break;
470     case 0x22221100:
471     case 0x22112200:
472         if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV444P : AV_PIX_FMT_YUVJ444P;
473         else
474             goto unk_pixfmt;
475         s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
476         s->chroma_height = s->height / 2;
477         break;
478     case 0x11222200:
479         if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV444P : AV_PIX_FMT_YUVJ444P;
480         else
481             goto unk_pixfmt;
482         s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
483         s->chroma_height = s->height / 2;
484         break;
485     case 0x11000000:
486     case 0x13000000:
487     case 0x14000000:
488     case 0x31000000:
489     case 0x33000000:
490     case 0x34000000:
491     case 0x41000000:
492     case 0x43000000:
493     case 0x44000000:
494         if(s->bits <= 8)
495             s->avctx->pix_fmt = AV_PIX_FMT_GRAY8;
496         else
497             s->avctx->pix_fmt = AV_PIX_FMT_GRAY16;
498         break;
499     case 0x12111100:
500     case 0x22211100:
501     case 0x22112100:
502         if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV440P : AV_PIX_FMT_YUVJ440P;
503         else
504             goto unk_pixfmt;
505         s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
506         s->chroma_height = s->height / 2;
507         break;
508     case 0x21111100:
509         if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV422P : AV_PIX_FMT_YUVJ422P;
510         else              s->avctx->pix_fmt = AV_PIX_FMT_YUV422P16;
511         s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
512         break;
513     case 0x22121100:
514     case 0x22111200:
515         if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV422P : AV_PIX_FMT_YUVJ422P;
516         else
517             goto unk_pixfmt;
518         s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
519         break;
520     case 0x22111100:
521     case 0x42111100:
522         if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV420P : AV_PIX_FMT_YUVJ420P;
523         else              s->avctx->pix_fmt = AV_PIX_FMT_YUV420P16;
524         s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
525         if (pix_fmt_id == 0x42111100) {
526             s->upscale_h = 6;
527             s->chroma_height = s->height / 2;
528         }
529         break;
530     case 0x41111100:
531         if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV411P : AV_PIX_FMT_YUVJ411P;
532         else
533             goto unk_pixfmt;
534         s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
535         break;
536     default:
537 unk_pixfmt:
538         av_log(s->avctx, AV_LOG_ERROR, "Unhandled pixel format 0x%x\n", pix_fmt_id);
539         s->upscale_h = s->upscale_v = 0;
540         return AVERROR_PATCHWELCOME;
541     }
542     if ((s->upscale_h || s->upscale_v) && s->avctx->lowres) {
543         av_log(s->avctx, AV_LOG_ERROR, "lowres not supported for weird subsampling\n");
544         return AVERROR_PATCHWELCOME;
545     }
546     if (s->ls) {
547         s->upscale_h = s->upscale_v = 0;
548         if (s->nb_components > 1)
549             s->avctx->pix_fmt = AV_PIX_FMT_RGB24;
550         else if (s->palette_index && s->bits <= 8)
551             s->avctx->pix_fmt = AV_PIX_FMT_PAL8;
552         else if (s->bits <= 8)
553             s->avctx->pix_fmt = AV_PIX_FMT_GRAY8;
554         else
555             s->avctx->pix_fmt = AV_PIX_FMT_GRAY16;
556     }
557
558     s->pix_desc = av_pix_fmt_desc_get(s->avctx->pix_fmt);
559     if (!s->pix_desc) {
560         av_log(s->avctx, AV_LOG_ERROR, "Could not get a pixel format descriptor.\n");
561         return AVERROR_BUG;
562     }
563
564     av_frame_unref(s->picture_ptr);
565     if (ff_get_buffer(s->avctx, s->picture_ptr, AV_GET_BUFFER_FLAG_REF) < 0)
566         return -1;
567     s->picture_ptr->pict_type = AV_PICTURE_TYPE_I;
568     s->picture_ptr->key_frame = 1;
569     s->got_picture            = 1;
570
571     for (i = 0; i < 4; i++)
572         s->linesize[i] = s->picture_ptr->linesize[i] << s->interlaced;
573
574     av_dlog(s->avctx, "%d %d %d %d %d %d\n",
575             s->width, s->height, s->linesize[0], s->linesize[1],
576             s->interlaced, s->avctx->height);
577
578     if (len != (8 + (3 * nb_components)))
579         av_log(s->avctx, AV_LOG_DEBUG, "decode_sof0: error, len(%d) mismatch\n", len);
580     }
581
582     if (s->rgb && !s->lossless && !s->ls) {
583         av_log(s->avctx, AV_LOG_ERROR, "Unsupported coding and pixel format combination\n");
584         return AVERROR_PATCHWELCOME;
585     }
586
587     /* totally blank picture as progressive JPEG will only add details to it */
588     if (s->progressive) {
589         int bw = (width  + s->h_max * 8 - 1) / (s->h_max * 8);
590         int bh = (height + s->v_max * 8 - 1) / (s->v_max * 8);
591         for (i = 0; i < s->nb_components; i++) {
592             int size = bw * bh * s->h_count[i] * s->v_count[i];
593             av_freep(&s->blocks[i]);
594             av_freep(&s->last_nnz[i]);
595             s->blocks[i]       = av_mallocz_array(size, sizeof(**s->blocks));
596             s->last_nnz[i]     = av_mallocz_array(size, sizeof(**s->last_nnz));
597             if (!s->blocks[i] || !s->last_nnz[i])
598                 return AVERROR(ENOMEM);
599             s->block_stride[i] = bw * s->h_count[i];
600         }
601         memset(s->coefs_finished, 0, sizeof(s->coefs_finished));
602     }
603     return 0;
604 }
605
606 static inline int mjpeg_decode_dc(MJpegDecodeContext *s, int dc_index)
607 {
608     int code;
609     code = get_vlc2(&s->gb, s->vlcs[0][dc_index].table, 9, 2);
610     if (code < 0 || code > 16) {
611         av_log(s->avctx, AV_LOG_WARNING,
612                "mjpeg_decode_dc: bad vlc: %d:%d (%p)\n",
613                0, dc_index, &s->vlcs[0][dc_index]);
614         return 0xfffff;
615     }
616
617     if (code)
618         return get_xbits(&s->gb, code);
619     else
620         return 0;
621 }
622
623 /* decode block and dequantize */
624 static int decode_block(MJpegDecodeContext *s, int16_t *block, int component,
625                         int dc_index, int ac_index, int16_t *quant_matrix)
626 {
627     int code, i, j, level, val;
628
629     /* DC coef */
630     val = mjpeg_decode_dc(s, dc_index);
631     if (val == 0xfffff) {
632         av_log(s->avctx, AV_LOG_ERROR, "error dc\n");
633         return AVERROR_INVALIDDATA;
634     }
635     val = val * quant_matrix[0] + s->last_dc[component];
636     s->last_dc[component] = val;
637     block[0] = val;
638     /* AC coefs */
639     i = 0;
640     {OPEN_READER(re, &s->gb);
641     do {
642         UPDATE_CACHE(re, &s->gb);
643         GET_VLC(code, re, &s->gb, s->vlcs[1][ac_index].table, 9, 2);
644
645         i += ((unsigned)code) >> 4;
646             code &= 0xf;
647         if (code) {
648             if (code > MIN_CACHE_BITS - 16)
649                 UPDATE_CACHE(re, &s->gb);
650
651             {
652                 int cache = GET_CACHE(re, &s->gb);
653                 int sign  = (~cache) >> 31;
654                 level     = (NEG_USR32(sign ^ cache,code) ^ sign) - sign;
655             }
656
657             LAST_SKIP_BITS(re, &s->gb, code);
658
659             if (i > 63) {
660                 av_log(s->avctx, AV_LOG_ERROR, "error count: %d\n", i);
661                 return AVERROR_INVALIDDATA;
662             }
663             j        = s->scantable.permutated[i];
664             block[j] = level * quant_matrix[j];
665         }
666     } while (i < 63);
667     CLOSE_READER(re, &s->gb);}
668
669     return 0;
670 }
671
672 static int decode_dc_progressive(MJpegDecodeContext *s, int16_t *block,
673                                  int component, int dc_index,
674                                  int16_t *quant_matrix, int Al)
675 {
676     int val;
677     s->bdsp.clear_block(block);
678     val = mjpeg_decode_dc(s, dc_index);
679     if (val == 0xfffff) {
680         av_log(s->avctx, AV_LOG_ERROR, "error dc\n");
681         return AVERROR_INVALIDDATA;
682     }
683     val = (val * quant_matrix[0] << Al) + s->last_dc[component];
684     s->last_dc[component] = val;
685     block[0] = val;
686     return 0;
687 }
688
689 /* decode block and dequantize - progressive JPEG version */
690 static int decode_block_progressive(MJpegDecodeContext *s, int16_t *block,
691                                     uint8_t *last_nnz, int ac_index,
692                                     int16_t *quant_matrix,
693                                     int ss, int se, int Al, int *EOBRUN)
694 {
695     int code, i, j, level, val, run;
696
697     if (*EOBRUN) {
698         (*EOBRUN)--;
699         return 0;
700     }
701
702     {
703         OPEN_READER(re, &s->gb);
704         for (i = ss; ; i++) {
705             UPDATE_CACHE(re, &s->gb);
706             GET_VLC(code, re, &s->gb, s->vlcs[2][ac_index].table, 9, 2);
707
708             run = ((unsigned) code) >> 4;
709             code &= 0xF;
710             if (code) {
711                 i += run;
712                 if (code > MIN_CACHE_BITS - 16)
713                     UPDATE_CACHE(re, &s->gb);
714
715                 {
716                     int cache = GET_CACHE(re, &s->gb);
717                     int sign  = (~cache) >> 31;
718                     level     = (NEG_USR32(sign ^ cache,code) ^ sign) - sign;
719                 }
720
721                 LAST_SKIP_BITS(re, &s->gb, code);
722
723                 if (i >= se) {
724                     if (i == se) {
725                         j = s->scantable.permutated[se];
726                         block[j] = level * quant_matrix[j] << Al;
727                         break;
728                     }
729                     av_log(s->avctx, AV_LOG_ERROR, "error count: %d\n", i);
730                     return AVERROR_INVALIDDATA;
731                 }
732                 j = s->scantable.permutated[i];
733                 block[j] = level * quant_matrix[j] << Al;
734             } else {
735                 if (run == 0xF) {// ZRL - skip 15 coefficients
736                     i += 15;
737                     if (i >= se) {
738                         av_log(s->avctx, AV_LOG_ERROR, "ZRL overflow: %d\n", i);
739                         return AVERROR_INVALIDDATA;
740                     }
741                 } else {
742                     val = (1 << run);
743                     if (run) {
744                         UPDATE_CACHE(re, &s->gb);
745                         val += NEG_USR32(GET_CACHE(re, &s->gb), run);
746                         LAST_SKIP_BITS(re, &s->gb, run);
747                     }
748                     *EOBRUN = val - 1;
749                     break;
750                 }
751             }
752         }
753         CLOSE_READER(re, &s->gb);
754     }
755
756     if (i > *last_nnz)
757         *last_nnz = i;
758
759     return 0;
760 }
761
762 #define REFINE_BIT(j) {                                             \
763     UPDATE_CACHE(re, &s->gb);                                       \
764     sign = block[j] >> 15;                                          \
765     block[j] += SHOW_UBITS(re, &s->gb, 1) *                         \
766                 ((quant_matrix[j] ^ sign) - sign) << Al;            \
767     LAST_SKIP_BITS(re, &s->gb, 1);                                  \
768 }
769
770 #define ZERO_RUN                                                    \
771 for (; ; i++) {                                                     \
772     if (i > last) {                                                 \
773         i += run;                                                   \
774         if (i > se) {                                               \
775             av_log(s->avctx, AV_LOG_ERROR, "error count: %d\n", i); \
776             return -1;                                              \
777         }                                                           \
778         break;                                                      \
779     }                                                               \
780     j = s->scantable.permutated[i];                                 \
781     if (block[j])                                                   \
782         REFINE_BIT(j)                                               \
783     else if (run-- == 0)                                            \
784         break;                                                      \
785 }
786
787 /* decode block and dequantize - progressive JPEG refinement pass */
788 static int decode_block_refinement(MJpegDecodeContext *s, int16_t *block,
789                                    uint8_t *last_nnz,
790                                    int ac_index, int16_t *quant_matrix,
791                                    int ss, int se, int Al, int *EOBRUN)
792 {
793     int code, i = ss, j, sign, val, run;
794     int last    = FFMIN(se, *last_nnz);
795
796     OPEN_READER(re, &s->gb);
797     if (*EOBRUN) {
798         (*EOBRUN)--;
799     } else {
800         for (; ; i++) {
801             UPDATE_CACHE(re, &s->gb);
802             GET_VLC(code, re, &s->gb, s->vlcs[2][ac_index].table, 9, 2);
803
804             if (code & 0xF) {
805                 run = ((unsigned) code) >> 4;
806                 UPDATE_CACHE(re, &s->gb);
807                 val = SHOW_UBITS(re, &s->gb, 1);
808                 LAST_SKIP_BITS(re, &s->gb, 1);
809                 ZERO_RUN;
810                 j = s->scantable.permutated[i];
811                 val--;
812                 block[j] = ((quant_matrix[j]^val) - val) << Al;
813                 if (i == se) {
814                     if (i > *last_nnz)
815                         *last_nnz = i;
816                     CLOSE_READER(re, &s->gb);
817                     return 0;
818                 }
819             } else {
820                 run = ((unsigned) code) >> 4;
821                 if (run == 0xF) {
822                     ZERO_RUN;
823                 } else {
824                     val = run;
825                     run = (1 << run);
826                     if (val) {
827                         UPDATE_CACHE(re, &s->gb);
828                         run += SHOW_UBITS(re, &s->gb, val);
829                         LAST_SKIP_BITS(re, &s->gb, val);
830                     }
831                     *EOBRUN = run - 1;
832                     break;
833                 }
834             }
835         }
836
837         if (i > *last_nnz)
838             *last_nnz = i;
839     }
840
841     for (; i <= last; i++) {
842         j = s->scantable.permutated[i];
843         if (block[j])
844             REFINE_BIT(j)
845     }
846     CLOSE_READER(re, &s->gb);
847
848     return 0;
849 }
850 #undef REFINE_BIT
851 #undef ZERO_RUN
852
853 static int handle_rstn(MJpegDecodeContext *s, int nb_components)
854 {
855     int i;
856     int reset = 0;
857
858     if (s->restart_interval) {
859         s->restart_count--;
860         if(s->restart_count == 0 && s->avctx->codec_id == AV_CODEC_ID_THP){
861             align_get_bits(&s->gb);
862             for (i = 0; i < nb_components; i++) /* reset dc */
863                 s->last_dc[i] = (4 << s->bits);
864         }
865
866         i = 8 + ((-get_bits_count(&s->gb)) & 7);
867         /* skip RSTn */
868         if (s->restart_count == 0) {
869             if(   show_bits(&s->gb, i) == (1 << i) - 1
870                || show_bits(&s->gb, i) == 0xFF) {
871                 int pos = get_bits_count(&s->gb);
872                 align_get_bits(&s->gb);
873                 while (get_bits_left(&s->gb) >= 8 && show_bits(&s->gb, 8) == 0xFF)
874                     skip_bits(&s->gb, 8);
875                 if (get_bits_left(&s->gb) >= 8 && (get_bits(&s->gb, 8) & 0xF8) == 0xD0) {
876                     for (i = 0; i < nb_components; i++) /* reset dc */
877                         s->last_dc[i] = (4 << s->bits);
878                     reset = 1;
879                 } else
880                     skip_bits_long(&s->gb, pos - get_bits_count(&s->gb));
881             }
882         }
883     }
884     return reset;
885 }
886
887 static int ljpeg_decode_rgb_scan(MJpegDecodeContext *s, int nb_components, int predictor, int point_transform)
888 {
889     int i, mb_x, mb_y;
890     uint16_t (*buffer)[4];
891     int left[4], top[4], topleft[4];
892     const int linesize = s->linesize[0];
893     const int mask     = ((1 << s->bits) - 1) << point_transform;
894     int resync_mb_y = 0;
895     int resync_mb_x = 0;
896
897     if (s->nb_components != 3 && s->nb_components != 4)
898         return AVERROR_INVALIDDATA;
899     if (s->v_max != 1 || s->h_max != 1 || !s->lossless)
900         return AVERROR_INVALIDDATA;
901
902
903     s->restart_count = s->restart_interval;
904
905     av_fast_malloc(&s->ljpeg_buffer, &s->ljpeg_buffer_size,
906                    (unsigned)s->mb_width * 4 * sizeof(s->ljpeg_buffer[0][0]));
907     buffer = s->ljpeg_buffer;
908
909     for (i = 0; i < 4; i++)
910         buffer[0][i] = 1 << (s->bits - 1);
911
912     for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
913         uint8_t *ptr = s->picture_ptr->data[0] + (linesize * mb_y);
914
915         if (s->interlaced && s->bottom_field)
916             ptr += linesize >> 1;
917
918         for (i = 0; i < 4; i++)
919             top[i] = left[i] = topleft[i] = buffer[0][i];
920
921         for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
922             int modified_predictor = predictor;
923
924             if (s->restart_interval && !s->restart_count){
925                 s->restart_count = s->restart_interval;
926                 resync_mb_x = mb_x;
927                 resync_mb_y = mb_y;
928                 for(i=0; i<4; i++)
929                     top[i] = left[i]= topleft[i]= 1 << (s->bits - 1);
930             }
931             if (mb_y == resync_mb_y || mb_y == resync_mb_y+1 && mb_x < resync_mb_x || !mb_x)
932                 modified_predictor = 1;
933
934             for (i=0;i<nb_components;i++) {
935                 int pred, dc;
936
937                 topleft[i] = top[i];
938                 top[i]     = buffer[mb_x][i];
939
940                 PREDICT(pred, topleft[i], top[i], left[i], modified_predictor);
941
942                 dc = mjpeg_decode_dc(s, s->dc_index[i]);
943                 if(dc == 0xFFFFF)
944                     return -1;
945
946                 left[i] = buffer[mb_x][i] =
947                     mask & (pred + (dc << point_transform));
948             }
949
950             if (s->restart_interval && !--s->restart_count) {
951                 align_get_bits(&s->gb);
952                 skip_bits(&s->gb, 16); /* skip RSTn */
953             }
954         }
955         if (s->nb_components == 4) {
956             for(i=0; i<nb_components; i++) {
957                 int c= s->comp_index[i];
958                 if (s->bits <= 8) {
959                     for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
960                         ptr[4*mb_x+3-c] = buffer[mb_x][i];
961                     }
962                 } else if(s->bits == 9) {
963                     return AVERROR_PATCHWELCOME;
964                 } else {
965                     for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
966                         ((uint16_t*)ptr)[4*mb_x+c] = buffer[mb_x][i];
967                     }
968                 }
969             }
970         } else if (s->rct) {
971             for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
972                 ptr[3*mb_x + 1] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2] - 0x200) >> 2);
973                 ptr[3*mb_x + 0] = buffer[mb_x][1] + ptr[3*mb_x + 1];
974                 ptr[3*mb_x + 2] = buffer[mb_x][2] + ptr[3*mb_x + 1];
975             }
976         } else if (s->pegasus_rct) {
977             for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
978                 ptr[3*mb_x + 1] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2]) >> 2);
979                 ptr[3*mb_x + 0] = buffer[mb_x][1] + ptr[3*mb_x + 1];
980                 ptr[3*mb_x + 2] = buffer[mb_x][2] + ptr[3*mb_x + 1];
981             }
982         } else {
983             for(i=0; i<nb_components; i++) {
984                 int c= s->comp_index[i];
985                 if (s->bits <= 8) {
986                     for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
987                         ptr[3*mb_x+2-c] = buffer[mb_x][i];
988                     }
989                 } else if(s->bits == 9) {
990                     return AVERROR_PATCHWELCOME;
991                 } else {
992                     for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
993                         ((uint16_t*)ptr)[3*mb_x+2-c] = buffer[mb_x][i];
994                     }
995                 }
996             }
997         }
998     }
999     return 0;
1000 }
1001
1002 static int ljpeg_decode_yuv_scan(MJpegDecodeContext *s, int predictor,
1003                                  int point_transform, int nb_components)
1004 {
1005     int i, mb_x, mb_y, mask;
1006     int bits= (s->bits+7)&~7;
1007     int resync_mb_y = 0;
1008     int resync_mb_x = 0;
1009
1010     point_transform += bits - s->bits;
1011     mask = ((1 << s->bits) - 1) << point_transform;
1012
1013     av_assert0(nb_components>=1 && nb_components<=4);
1014
1015     for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
1016         for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
1017             if (s->restart_interval && !s->restart_count){
1018                 s->restart_count = s->restart_interval;
1019                 resync_mb_x = mb_x;
1020                 resync_mb_y = mb_y;
1021             }
1022
1023             if(!mb_x || mb_y == resync_mb_y || mb_y == resync_mb_y+1 && mb_x < resync_mb_x || s->interlaced){
1024                 int toprow  = mb_y == resync_mb_y || mb_y == resync_mb_y+1 && mb_x < resync_mb_x;
1025                 int leftcol = !mb_x || mb_y == resync_mb_y && mb_x == resync_mb_x;
1026                 for (i = 0; i < nb_components; i++) {
1027                     uint8_t *ptr;
1028                     uint16_t *ptr16;
1029                     int n, h, v, x, y, c, j, linesize;
1030                     n = s->nb_blocks[i];
1031                     c = s->comp_index[i];
1032                     h = s->h_scount[i];
1033                     v = s->v_scount[i];
1034                     x = 0;
1035                     y = 0;
1036                     linesize= s->linesize[c];
1037
1038                     if(bits>8) linesize /= 2;
1039
1040                     for(j=0; j<n; j++) {
1041                         int pred, dc;
1042
1043                         dc = mjpeg_decode_dc(s, s->dc_index[i]);
1044                         if(dc == 0xFFFFF)
1045                             return -1;
1046                         if(bits<=8){
1047                         ptr = s->picture_ptr->data[c] + (linesize * (v * mb_y + y)) + (h * mb_x + x); //FIXME optimize this crap
1048                         if(y==0 && toprow){
1049                             if(x==0 && leftcol){
1050                                 pred= 1 << (bits - 1);
1051                             }else{
1052                                 pred= ptr[-1];
1053                             }
1054                         }else{
1055                             if(x==0 && leftcol){
1056                                 pred= ptr[-linesize];
1057                             }else{
1058                                 PREDICT(pred, ptr[-linesize-1], ptr[-linesize], ptr[-1], predictor);
1059                             }
1060                         }
1061
1062                         if (s->interlaced && s->bottom_field)
1063                             ptr += linesize >> 1;
1064                         pred &= mask;
1065                         *ptr= pred + (dc << point_transform);
1066                         }else{
1067                             ptr16 = (uint16_t*)(s->picture_ptr->data[c] + 2*(linesize * (v * mb_y + y)) + 2*(h * mb_x + x)); //FIXME optimize this crap
1068                             if(y==0 && toprow){
1069                                 if(x==0 && leftcol){
1070                                     pred= 1 << (bits - 1);
1071                                 }else{
1072                                     pred= ptr16[-1];
1073                                 }
1074                             }else{
1075                                 if(x==0 && leftcol){
1076                                     pred= ptr16[-linesize];
1077                                 }else{
1078                                     PREDICT(pred, ptr16[-linesize-1], ptr16[-linesize], ptr16[-1], predictor);
1079                                 }
1080                             }
1081
1082                             if (s->interlaced && s->bottom_field)
1083                                 ptr16 += linesize >> 1;
1084                             pred &= mask;
1085                             *ptr16= pred + (dc << point_transform);
1086                         }
1087                         if (++x == h) {
1088                             x = 0;
1089                             y++;
1090                         }
1091                     }
1092                 }
1093             } else {
1094                 for (i = 0; i < nb_components; i++) {
1095                     uint8_t *ptr;
1096                     uint16_t *ptr16;
1097                     int n, h, v, x, y, c, j, linesize, dc;
1098                     n        = s->nb_blocks[i];
1099                     c        = s->comp_index[i];
1100                     h        = s->h_scount[i];
1101                     v        = s->v_scount[i];
1102                     x        = 0;
1103                     y        = 0;
1104                     linesize = s->linesize[c];
1105
1106                     if(bits>8) linesize /= 2;
1107
1108                     for (j = 0; j < n; j++) {
1109                         int pred;
1110
1111                         dc = mjpeg_decode_dc(s, s->dc_index[i]);
1112                         if(dc == 0xFFFFF)
1113                             return -1;
1114                         if(bits<=8){
1115                             ptr = s->picture_ptr->data[c] +
1116                               (linesize * (v * mb_y + y)) +
1117                               (h * mb_x + x); //FIXME optimize this crap
1118                             PREDICT(pred, ptr[-linesize-1], ptr[-linesize], ptr[-1], predictor);
1119
1120                             pred &= mask;
1121                             *ptr = pred + (dc << point_transform);
1122                         }else{
1123                             ptr16 = (uint16_t*)(s->picture_ptr->data[c] + 2*(linesize * (v * mb_y + y)) + 2*(h * mb_x + x)); //FIXME optimize this crap
1124                             PREDICT(pred, ptr16[-linesize-1], ptr16[-linesize], ptr16[-1], predictor);
1125
1126                             pred &= mask;
1127                             *ptr16= pred + (dc << point_transform);
1128                         }
1129
1130                         if (++x == h) {
1131                             x = 0;
1132                             y++;
1133                         }
1134                     }
1135                 }
1136             }
1137             if (s->restart_interval && !--s->restart_count) {
1138                 align_get_bits(&s->gb);
1139                 skip_bits(&s->gb, 16); /* skip RSTn */
1140             }
1141         }
1142     }
1143     return 0;
1144 }
1145
1146 static av_always_inline void mjpeg_copy_block(MJpegDecodeContext *s,
1147                                               uint8_t *dst, const uint8_t *src,
1148                                               int linesize, int lowres)
1149 {
1150     switch (lowres) {
1151     case 0: s->hdsp.put_pixels_tab[1][0](dst, src, linesize, 8);
1152         break;
1153     case 1: copy_block4(dst, src, linesize, linesize, 4);
1154         break;
1155     case 2: copy_block2(dst, src, linesize, linesize, 2);
1156         break;
1157     case 3: *dst = *src;
1158         break;
1159     }
1160 }
1161
1162 static void shift_output(MJpegDecodeContext *s, uint8_t *ptr, int linesize)
1163 {
1164     int block_x, block_y;
1165     int size = 8 >> s->avctx->lowres;
1166     if (s->bits > 8) {
1167         for (block_y=0; block_y<size; block_y++)
1168             for (block_x=0; block_x<size; block_x++)
1169                 *(uint16_t*)(ptr + 2*block_x + block_y*linesize) <<= 16 - s->bits;
1170     } else {
1171         for (block_y=0; block_y<size; block_y++)
1172             for (block_x=0; block_x<size; block_x++)
1173                 *(ptr + block_x + block_y*linesize) <<= 8 - s->bits;
1174     }
1175 }
1176
1177 static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah,
1178                              int Al, const uint8_t *mb_bitmask,
1179                              int mb_bitmask_size,
1180                              const AVFrame *reference)
1181 {
1182     int i, mb_x, mb_y;
1183     uint8_t *data[MAX_COMPONENTS];
1184     const uint8_t *reference_data[MAX_COMPONENTS];
1185     int linesize[MAX_COMPONENTS];
1186     GetBitContext mb_bitmask_gb = {0}; // initialize to silence gcc warning
1187     int bytes_per_pixel = 1 + (s->bits > 8);
1188
1189     if (mb_bitmask) {
1190         if (mb_bitmask_size != (s->mb_width * s->mb_height + 7)>>3) {
1191             av_log(s->avctx, AV_LOG_ERROR, "mb_bitmask_size mismatches\n");
1192             return AVERROR_INVALIDDATA;
1193         }
1194         init_get_bits(&mb_bitmask_gb, mb_bitmask, s->mb_width * s->mb_height);
1195     }
1196
1197     s->restart_count = 0;
1198
1199     for (i = 0; i < nb_components; i++) {
1200         int c   = s->comp_index[i];
1201         data[c] = s->picture_ptr->data[c];
1202         reference_data[c] = reference ? reference->data[c] : NULL;
1203         linesize[c] = s->linesize[c];
1204         s->coefs_finished[c] |= 1;
1205     }
1206
1207     for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
1208         for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
1209             const int copy_mb = mb_bitmask && !get_bits1(&mb_bitmask_gb);
1210
1211             if (s->restart_interval && !s->restart_count)
1212                 s->restart_count = s->restart_interval;
1213
1214             if (get_bits_left(&s->gb) < 0) {
1215                 av_log(s->avctx, AV_LOG_ERROR, "overread %d\n",
1216                        -get_bits_left(&s->gb));
1217                 return AVERROR_INVALIDDATA;
1218             }
1219             for (i = 0; i < nb_components; i++) {
1220                 uint8_t *ptr;
1221                 int n, h, v, x, y, c, j;
1222                 int block_offset;
1223                 n = s->nb_blocks[i];
1224                 c = s->comp_index[i];
1225                 h = s->h_scount[i];
1226                 v = s->v_scount[i];
1227                 x = 0;
1228                 y = 0;
1229                 for (j = 0; j < n; j++) {
1230                     block_offset = (((linesize[c] * (v * mb_y + y) * 8) +
1231                                      (h * mb_x + x) * 8 * bytes_per_pixel) >> s->avctx->lowres);
1232
1233                     if (s->interlaced && s->bottom_field)
1234                         block_offset += linesize[c] >> 1;
1235                     ptr = data[c] + block_offset;
1236                     if (!s->progressive) {
1237                         if (copy_mb)
1238                             mjpeg_copy_block(s, ptr, reference_data[c] + block_offset,
1239                                              linesize[c], s->avctx->lowres);
1240
1241                         else {
1242                             s->bdsp.clear_block(s->block);
1243                             if (decode_block(s, s->block, i,
1244                                              s->dc_index[i], s->ac_index[i],
1245                                              s->quant_matrixes[s->quant_sindex[i]]) < 0) {
1246                                 av_log(s->avctx, AV_LOG_ERROR,
1247                                        "error y=%d x=%d\n", mb_y, mb_x);
1248                                 return AVERROR_INVALIDDATA;
1249                             }
1250                             s->idsp.idct_put(ptr, linesize[c], s->block);
1251                             if (s->bits & 7)
1252                                 shift_output(s, ptr, linesize[c]);
1253                         }
1254                     } else {
1255                         int block_idx  = s->block_stride[c] * (v * mb_y + y) +
1256                                          (h * mb_x + x);
1257                         int16_t *block = s->blocks[c][block_idx];
1258                         if (Ah)
1259                             block[0] += get_bits1(&s->gb) *
1260                                         s->quant_matrixes[s->quant_sindex[i]][0] << Al;
1261                         else if (decode_dc_progressive(s, block, i, s->dc_index[i],
1262                                                        s->quant_matrixes[s->quant_sindex[i]],
1263                                                        Al) < 0) {
1264                             av_log(s->avctx, AV_LOG_ERROR,
1265                                    "error y=%d x=%d\n", mb_y, mb_x);
1266                             return AVERROR_INVALIDDATA;
1267                         }
1268                     }
1269                     av_dlog(s->avctx, "mb: %d %d processed\n", mb_y, mb_x);
1270                     av_dlog(s->avctx, "%d %d %d %d %d %d %d %d \n",
1271                             mb_x, mb_y, x, y, c, s->bottom_field,
1272                             (v * mb_y + y) * 8, (h * mb_x + x) * 8);
1273                     if (++x == h) {
1274                         x = 0;
1275                         y++;
1276                     }
1277                 }
1278             }
1279
1280             handle_rstn(s, nb_components);
1281         }
1282     }
1283     return 0;
1284 }
1285
1286 static int mjpeg_decode_scan_progressive_ac(MJpegDecodeContext *s, int ss,
1287                                             int se, int Ah, int Al)
1288 {
1289     int mb_x, mb_y;
1290     int EOBRUN = 0;
1291     int c = s->comp_index[0];
1292     uint8_t *data = s->picture_ptr->data[c];
1293     int linesize  = s->linesize[c];
1294     int last_scan = 0;
1295     int16_t *quant_matrix = s->quant_matrixes[s->quant_sindex[0]];
1296     int bytes_per_pixel = 1 + (s->bits > 8);
1297
1298     av_assert0(ss>=0 && Ah>=0 && Al>=0);
1299     if (se < ss || se > 63) {
1300         av_log(s->avctx, AV_LOG_ERROR, "SS/SE %d/%d is invalid\n", ss, se);
1301         return AVERROR_INVALIDDATA;
1302     }
1303
1304     if (!Al) {
1305         s->coefs_finished[c] |= (2ULL << se) - (1ULL << ss);
1306         last_scan = !~s->coefs_finished[c];
1307     }
1308
1309     if (s->interlaced && s->bottom_field)
1310         data += linesize >> 1;
1311
1312     s->restart_count = 0;
1313
1314     for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
1315         uint8_t *ptr     = data + (mb_y * linesize * 8 >> s->avctx->lowres);
1316         int block_idx    = mb_y * s->block_stride[c];
1317         int16_t (*block)[64] = &s->blocks[c][block_idx];
1318         uint8_t *last_nnz    = &s->last_nnz[c][block_idx];
1319         for (mb_x = 0; mb_x < s->mb_width; mb_x++, block++, last_nnz++) {
1320                 int ret;
1321                 if (s->restart_interval && !s->restart_count)
1322                     s->restart_count = s->restart_interval;
1323
1324                 if (Ah)
1325                     ret = decode_block_refinement(s, *block, last_nnz, s->ac_index[0],
1326                                                   quant_matrix, ss, se, Al, &EOBRUN);
1327                 else
1328                     ret = decode_block_progressive(s, *block, last_nnz, s->ac_index[0],
1329                                                    quant_matrix, ss, se, Al, &EOBRUN);
1330                 if (ret < 0) {
1331                     av_log(s->avctx, AV_LOG_ERROR,
1332                            "error y=%d x=%d\n", mb_y, mb_x);
1333                     return AVERROR_INVALIDDATA;
1334                 }
1335
1336             if (last_scan) {
1337                     s->idsp.idct_put(ptr, linesize, *block);
1338                     if (s->bits & 7)
1339                         shift_output(s, ptr, linesize);
1340                     ptr += bytes_per_pixel*8 >> s->avctx->lowres;
1341             }
1342             if (handle_rstn(s, 0))
1343                 EOBRUN = 0;
1344         }
1345     }
1346     return 0;
1347 }
1348
1349 int ff_mjpeg_decode_sos(MJpegDecodeContext *s, const uint8_t *mb_bitmask,
1350                         int mb_bitmask_size, const AVFrame *reference)
1351 {
1352     int len, nb_components, i, h, v, predictor, point_transform;
1353     int index, id, ret;
1354     const int block_size = s->lossless ? 1 : 8;
1355     int ilv, prev_shift;
1356
1357     if (!s->got_picture) {
1358         av_log(s->avctx, AV_LOG_WARNING,
1359                 "Can not process SOS before SOF, skipping\n");
1360         return -1;
1361     }
1362
1363     av_assert0(s->picture_ptr->data[0]);
1364     /* XXX: verify len field validity */
1365     len = get_bits(&s->gb, 16);
1366     nb_components = get_bits(&s->gb, 8);
1367     if (nb_components == 0 || nb_components > MAX_COMPONENTS) {
1368         av_log(s->avctx, AV_LOG_ERROR,
1369                "decode_sos: nb_components (%d) unsupported\n", nb_components);
1370         return AVERROR_PATCHWELCOME;
1371     }
1372     if (len != 6 + 2 * nb_components) {
1373         av_log(s->avctx, AV_LOG_ERROR, "decode_sos: invalid len (%d)\n", len);
1374         return AVERROR_INVALIDDATA;
1375     }
1376     for (i = 0; i < nb_components; i++) {
1377         id = get_bits(&s->gb, 8) - 1;
1378         av_log(s->avctx, AV_LOG_DEBUG, "component: %d\n", id);
1379         /* find component index */
1380         for (index = 0; index < s->nb_components; index++)
1381             if (id == s->component_id[index])
1382                 break;
1383         if (index == s->nb_components) {
1384             av_log(s->avctx, AV_LOG_ERROR,
1385                    "decode_sos: index(%d) out of components\n", index);
1386             return AVERROR_INVALIDDATA;
1387         }
1388         /* Metasoft MJPEG codec has Cb and Cr swapped */
1389         if (s->avctx->codec_tag == MKTAG('M', 'T', 'S', 'J')
1390             && nb_components == 3 && s->nb_components == 3 && i)
1391             index = 3 - i;
1392
1393         s->quant_sindex[i] = s->quant_index[index];
1394         s->nb_blocks[i] = s->h_count[index] * s->v_count[index];
1395         s->h_scount[i]  = s->h_count[index];
1396         s->v_scount[i]  = s->v_count[index];
1397
1398         if(nb_components == 3 && s->nb_components == 3 && s->avctx->pix_fmt == AV_PIX_FMT_GBR24P)
1399             index = (i+2)%3;
1400         if(nb_components == 1 && s->nb_components == 3 && s->avctx->pix_fmt == AV_PIX_FMT_GBR24P)
1401             index = (index+2)%3;
1402
1403         s->comp_index[i] = index;
1404
1405         s->dc_index[i] = get_bits(&s->gb, 4);
1406         s->ac_index[i] = get_bits(&s->gb, 4);
1407
1408         if (s->dc_index[i] <  0 || s->ac_index[i] < 0 ||
1409             s->dc_index[i] >= 4 || s->ac_index[i] >= 4)
1410             goto out_of_range;
1411         if (!s->vlcs[0][s->dc_index[i]].table || !(s->progressive ? s->vlcs[2][s->ac_index[0]].table : s->vlcs[1][s->ac_index[i]].table))
1412             goto out_of_range;
1413     }
1414
1415     predictor = get_bits(&s->gb, 8);       /* JPEG Ss / lossless JPEG predictor /JPEG-LS NEAR */
1416     ilv = get_bits(&s->gb, 8);             /* JPEG Se / JPEG-LS ILV */
1417     if(s->avctx->codec_tag != AV_RL32("CJPG")){
1418         prev_shift      = get_bits(&s->gb, 4); /* Ah */
1419         point_transform = get_bits(&s->gb, 4); /* Al */
1420     }else
1421         prev_shift = point_transform = 0;
1422
1423     if (nb_components > 1) {
1424         /* interleaved stream */
1425         s->mb_width  = (s->width  + s->h_max * block_size - 1) / (s->h_max * block_size);
1426         s->mb_height = (s->height + s->v_max * block_size - 1) / (s->v_max * block_size);
1427     } else if (!s->ls) { /* skip this for JPEG-LS */
1428         h = s->h_max / s->h_scount[0];
1429         v = s->v_max / s->v_scount[0];
1430         s->mb_width     = (s->width  + h * block_size - 1) / (h * block_size);
1431         s->mb_height    = (s->height + v * block_size - 1) / (v * block_size);
1432         s->nb_blocks[0] = 1;
1433         s->h_scount[0]  = 1;
1434         s->v_scount[0]  = 1;
1435     }
1436
1437     if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1438         av_log(s->avctx, AV_LOG_DEBUG, "%s %s p:%d >>:%d ilv:%d bits:%d skip:%d %s comp:%d\n",
1439                s->lossless ? "lossless" : "sequential DCT", s->rgb ? "RGB" : "",
1440                predictor, point_transform, ilv, s->bits, s->mjpb_skiptosod,
1441                s->pegasus_rct ? "PRCT" : (s->rct ? "RCT" : ""), nb_components);
1442
1443
1444     /* mjpeg-b can have padding bytes between sos and image data, skip them */
1445     for (i = s->mjpb_skiptosod; i > 0; i--)
1446         skip_bits(&s->gb, 8);
1447
1448 next_field:
1449     for (i = 0; i < nb_components; i++)
1450         s->last_dc[i] = (4 << s->bits);
1451
1452     if (s->lossless) {
1453         av_assert0(s->picture_ptr == s->picture);
1454         if (CONFIG_JPEGLS_DECODER && s->ls) {
1455 //            for () {
1456 //            reset_ls_coding_parameters(s, 0);
1457
1458             if ((ret = ff_jpegls_decode_picture(s, predictor,
1459                                                 point_transform, ilv)) < 0)
1460                 return ret;
1461         } else {
1462             if (s->rgb) {
1463                 if ((ret = ljpeg_decode_rgb_scan(s, nb_components, predictor, point_transform)) < 0)
1464                     return ret;
1465             } else {
1466                 if ((ret = ljpeg_decode_yuv_scan(s, predictor,
1467                                                  point_transform,
1468                                                  nb_components)) < 0)
1469                     return ret;
1470             }
1471         }
1472     } else {
1473         if (s->progressive && predictor) {
1474             av_assert0(s->picture_ptr == s->picture);
1475             if ((ret = mjpeg_decode_scan_progressive_ac(s, predictor,
1476                                                         ilv, prev_shift,
1477                                                         point_transform)) < 0)
1478                 return ret;
1479         } else {
1480             if ((ret = mjpeg_decode_scan(s, nb_components,
1481                                          prev_shift, point_transform,
1482                                          mb_bitmask, mb_bitmask_size, reference)) < 0)
1483                 return ret;
1484         }
1485     }
1486
1487     if (s->interlaced &&
1488         get_bits_left(&s->gb) > 32 &&
1489         show_bits(&s->gb, 8) == 0xFF) {
1490         GetBitContext bak = s->gb;
1491         align_get_bits(&bak);
1492         if (show_bits(&bak, 16) == 0xFFD1) {
1493             av_log(s->avctx, AV_LOG_DEBUG, "AVRn interlaced picture marker found\n");
1494             s->gb = bak;
1495             skip_bits(&s->gb, 16);
1496             s->bottom_field ^= 1;
1497
1498             goto next_field;
1499         }
1500     }
1501
1502     emms_c();
1503     return 0;
1504  out_of_range:
1505     av_log(s->avctx, AV_LOG_ERROR, "decode_sos: ac/dc index out of range\n");
1506     return AVERROR_INVALIDDATA;
1507 }
1508
1509 static int mjpeg_decode_dri(MJpegDecodeContext *s)
1510 {
1511     if (get_bits(&s->gb, 16) != 4)
1512         return AVERROR_INVALIDDATA;
1513     s->restart_interval = get_bits(&s->gb, 16);
1514     s->restart_count    = 0;
1515     av_log(s->avctx, AV_LOG_DEBUG, "restart interval: %d\n",
1516            s->restart_interval);
1517
1518     return 0;
1519 }
1520
1521 static int mjpeg_decode_app(MJpegDecodeContext *s)
1522 {
1523     int len, id, i;
1524
1525     len = get_bits(&s->gb, 16);
1526     if (len < 6)
1527         return AVERROR_INVALIDDATA;
1528     if (8 * len > get_bits_left(&s->gb))
1529         return AVERROR_INVALIDDATA;
1530
1531     id   = get_bits_long(&s->gb, 32);
1532     len -= 6;
1533
1534     if (s->avctx->debug & FF_DEBUG_STARTCODE) {
1535         char id_str[32];
1536         av_get_codec_tag_string(id_str, sizeof(id_str), av_bswap32(id));
1537         av_log(s->avctx, AV_LOG_DEBUG, "APPx (%s / %8X) len=%d\n", id_str, id, len);
1538     }
1539
1540     /* Buggy AVID, it puts EOI only at every 10th frame. */
1541     /* Also, this fourcc is used by non-avid files too, it holds some
1542        information, but it's always present in AVID-created files. */
1543     if (id == AV_RB32("AVI1")) {
1544         /* structure:
1545             4bytes      AVI1
1546             1bytes      polarity
1547             1bytes      always zero
1548             4bytes      field_size
1549             4bytes      field_size_less_padding
1550         */
1551             s->buggy_avid = 1;
1552         i = get_bits(&s->gb, 8); len--;
1553         av_log(s->avctx, AV_LOG_DEBUG, "polarity %d\n", i);
1554 #if 0
1555         skip_bits(&s->gb, 8);
1556         skip_bits(&s->gb, 32);
1557         skip_bits(&s->gb, 32);
1558         len -= 10;
1559 #endif
1560         goto out;
1561     }
1562
1563 //    len -= 2;
1564
1565     if (id == AV_RB32("JFIF")) {
1566         int t_w, t_h, v1, v2;
1567         skip_bits(&s->gb, 8); /* the trailing zero-byte */
1568         v1 = get_bits(&s->gb, 8);
1569         v2 = get_bits(&s->gb, 8);
1570         skip_bits(&s->gb, 8);
1571
1572         s->avctx->sample_aspect_ratio.num = get_bits(&s->gb, 16);
1573         s->avctx->sample_aspect_ratio.den = get_bits(&s->gb, 16);
1574         ff_set_sar(s->avctx, s->avctx->sample_aspect_ratio);
1575
1576         if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1577             av_log(s->avctx, AV_LOG_INFO,
1578                    "mjpeg: JFIF header found (version: %x.%x) SAR=%d/%d\n",
1579                    v1, v2,
1580                    s->avctx->sample_aspect_ratio.num,
1581                    s->avctx->sample_aspect_ratio.den);
1582
1583         t_w = get_bits(&s->gb, 8);
1584         t_h = get_bits(&s->gb, 8);
1585         if (t_w && t_h) {
1586             /* skip thumbnail */
1587             if (len -10 - (t_w * t_h * 3) > 0)
1588                 len -= t_w * t_h * 3;
1589         }
1590         len -= 10;
1591         goto out;
1592     }
1593
1594     if (id == AV_RB32("Adob") && (get_bits(&s->gb, 8) == 'e')) {
1595         skip_bits(&s->gb, 16); /* version */
1596         skip_bits(&s->gb, 16); /* flags0 */
1597         skip_bits(&s->gb, 16); /* flags1 */
1598         s->adobe_transform = get_bits(&s->gb,  8);
1599         if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1600             av_log(s->avctx, AV_LOG_INFO, "mjpeg: Adobe header found, transform=%d\n", s->adobe_transform);
1601         len -= 7;
1602         goto out;
1603     }
1604
1605     if (id == AV_RB32("LJIF")) {
1606         if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1607             av_log(s->avctx, AV_LOG_INFO,
1608                    "Pegasus lossless jpeg header found\n");
1609         skip_bits(&s->gb, 16); /* version ? */
1610         skip_bits(&s->gb, 16); /* unknown always 0? */
1611         skip_bits(&s->gb, 16); /* unknown always 0? */
1612         skip_bits(&s->gb, 16); /* unknown always 0? */
1613         switch (i=get_bits(&s->gb, 8)) {
1614         case 1:
1615             s->rgb         = 1;
1616             s->pegasus_rct = 0;
1617             break;
1618         case 2:
1619             s->rgb         = 1;
1620             s->pegasus_rct = 1;
1621             break;
1622         default:
1623             av_log(s->avctx, AV_LOG_ERROR, "unknown colorspace %d\n", i);
1624         }
1625         len -= 9;
1626         goto out;
1627     }
1628     if (id == AV_RL32("colr") && len > 0) {
1629         s->colr = get_bits(&s->gb, 8);
1630         if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1631             av_log(s->avctx, AV_LOG_INFO, "COLR %d\n", s->colr);
1632         len --;
1633         goto out;
1634     }
1635     if (id == AV_RL32("xfrm") && len > 0) {
1636         s->xfrm = get_bits(&s->gb, 8);
1637         if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1638             av_log(s->avctx, AV_LOG_INFO, "XFRM %d\n", s->xfrm);
1639         len --;
1640         goto out;
1641     }
1642
1643     /* JPS extension by VRex */
1644     if (s->start_code == APP3 && id == AV_RB32("_JPS") && len >= 10) {
1645         int flags, layout, type;
1646         if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1647             av_log(s->avctx, AV_LOG_INFO, "_JPSJPS_\n");
1648
1649         skip_bits(&s->gb, 32); len -= 4;  /* JPS_ */
1650         skip_bits(&s->gb, 16); len -= 2;  /* block length */
1651         skip_bits(&s->gb, 8);             /* reserved */
1652         flags  = get_bits(&s->gb, 8);
1653         layout = get_bits(&s->gb, 8);
1654         type   = get_bits(&s->gb, 8);
1655         len -= 4;
1656
1657         s->stereo3d = av_stereo3d_alloc();
1658         if (!s->stereo3d) {
1659             goto out;
1660         }
1661         if (type == 0) {
1662             s->stereo3d->type = AV_STEREO3D_2D;
1663         } else if (type == 1) {
1664             switch (layout) {
1665             case 0x01:
1666                 s->stereo3d->type = AV_STEREO3D_LINES;
1667                 break;
1668             case 0x02:
1669                 s->stereo3d->type = AV_STEREO3D_SIDEBYSIDE;
1670                 break;
1671             case 0x03:
1672                 s->stereo3d->type = AV_STEREO3D_TOPBOTTOM;
1673                 break;
1674             }
1675             if (!(flags & 0x04)) {
1676                 s->stereo3d->flags = AV_STEREO3D_FLAG_INVERT;
1677             }
1678         }
1679         goto out;
1680     }
1681
1682     /* EXIF metadata */
1683     if (s->start_code == APP1 && id == AV_RB32("Exif") && len >= 2) {
1684         GetByteContext gbytes;
1685         int ret, le, ifd_offset, bytes_read;
1686         const uint8_t *aligned;
1687
1688         skip_bits(&s->gb, 16); // skip padding
1689         len -= 2;
1690
1691         // init byte wise reading
1692         aligned = align_get_bits(&s->gb);
1693         bytestream2_init(&gbytes, aligned, len);
1694
1695         // read TIFF header
1696         ret = ff_tdecode_header(&gbytes, &le, &ifd_offset);
1697         if (ret) {
1698             av_log(s->avctx, AV_LOG_ERROR, "mjpeg: invalid TIFF header in EXIF data\n");
1699         } else {
1700             bytestream2_seek(&gbytes, ifd_offset, SEEK_SET);
1701
1702             // read 0th IFD and store the metadata
1703             // (return values > 0 indicate the presence of subimage metadata)
1704             ret = avpriv_exif_decode_ifd(s->avctx, &gbytes, le, 0, &s->exif_metadata);
1705             if (ret < 0) {
1706                 av_log(s->avctx, AV_LOG_ERROR, "mjpeg: error decoding EXIF data\n");
1707             }
1708         }
1709
1710         bytes_read = bytestream2_tell(&gbytes);
1711         skip_bits(&s->gb, bytes_read << 3);
1712         len -= bytes_read;
1713
1714         goto out;
1715     }
1716
1717     /* Apple MJPEG-A */
1718     if ((s->start_code == APP1) && (len > (0x28 - 8))) {
1719         id   = get_bits_long(&s->gb, 32);
1720         len -= 4;
1721         /* Apple MJPEG-A */
1722         if (id == AV_RB32("mjpg")) {
1723 #if 0
1724             skip_bits(&s->gb, 32); /* field size */
1725             skip_bits(&s->gb, 32); /* pad field size */
1726             skip_bits(&s->gb, 32); /* next off */
1727             skip_bits(&s->gb, 32); /* quant off */
1728             skip_bits(&s->gb, 32); /* huff off */
1729             skip_bits(&s->gb, 32); /* image off */
1730             skip_bits(&s->gb, 32); /* scan off */
1731             skip_bits(&s->gb, 32); /* data off */
1732 #endif
1733             if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1734                 av_log(s->avctx, AV_LOG_INFO, "mjpeg: Apple MJPEG-A header found\n");
1735         }
1736     }
1737
1738 out:
1739     /* slow but needed for extreme adobe jpegs */
1740     if (len < 0)
1741         av_log(s->avctx, AV_LOG_ERROR,
1742                "mjpeg: error, decode_app parser read over the end\n");
1743     while (--len > 0)
1744         skip_bits(&s->gb, 8);
1745
1746     return 0;
1747 }
1748
1749 static int mjpeg_decode_com(MJpegDecodeContext *s)
1750 {
1751     int len = get_bits(&s->gb, 16);
1752     if (len >= 2 && 8 * len - 16 <= get_bits_left(&s->gb)) {
1753         char *cbuf = av_malloc(len - 1);
1754         if (cbuf) {
1755             int i;
1756             for (i = 0; i < len - 2; i++)
1757                 cbuf[i] = get_bits(&s->gb, 8);
1758             if (i > 0 && cbuf[i - 1] == '\n')
1759                 cbuf[i - 1] = 0;
1760             else
1761                 cbuf[i] = 0;
1762
1763             if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1764                 av_log(s->avctx, AV_LOG_INFO, "comment: '%s'\n", cbuf);
1765
1766             /* buggy avid, it puts EOI only at every 10th frame */
1767             if (!strncmp(cbuf, "AVID", 4)) {
1768                 parse_avid(s, cbuf, len);
1769             } else if (!strcmp(cbuf, "CS=ITU601"))
1770                 s->cs_itu601 = 1;
1771             else if ((!strncmp(cbuf, "Intel(R) JPEG Library, version 1", 32) && s->avctx->codec_tag) ||
1772                      (!strncmp(cbuf, "Metasoft MJPEG Codec", 20)))
1773                 s->flipped = 1;
1774
1775             av_free(cbuf);
1776         }
1777     }
1778
1779     return 0;
1780 }
1781
1782 /* return the 8 bit start code value and update the search
1783    state. Return -1 if no start code found */
1784 static int find_marker(const uint8_t **pbuf_ptr, const uint8_t *buf_end)
1785 {
1786     const uint8_t *buf_ptr;
1787     unsigned int v, v2;
1788     int val;
1789     int skipped = 0;
1790
1791     buf_ptr = *pbuf_ptr;
1792     while (buf_end - buf_ptr > 1) {
1793         v  = *buf_ptr++;
1794         v2 = *buf_ptr;
1795         if ((v == 0xff) && (v2 >= 0xc0) && (v2 <= 0xfe) && buf_ptr < buf_end) {
1796             val = *buf_ptr++;
1797             goto found;
1798         }
1799         skipped++;
1800     }
1801     buf_ptr = buf_end;
1802     val = -1;
1803 found:
1804     av_dlog(NULL, "find_marker skipped %d bytes\n", skipped);
1805     *pbuf_ptr = buf_ptr;
1806     return val;
1807 }
1808
1809 int ff_mjpeg_find_marker(MJpegDecodeContext *s,
1810                          const uint8_t **buf_ptr, const uint8_t *buf_end,
1811                          const uint8_t **unescaped_buf_ptr,
1812                          int *unescaped_buf_size)
1813 {
1814     int start_code;
1815     start_code = find_marker(buf_ptr, buf_end);
1816
1817     av_fast_padded_malloc(&s->buffer, &s->buffer_size, buf_end - *buf_ptr);
1818     if (!s->buffer)
1819         return AVERROR(ENOMEM);
1820
1821     /* unescape buffer of SOS, use special treatment for JPEG-LS */
1822     if (start_code == SOS && !s->ls) {
1823         const uint8_t *src = *buf_ptr;
1824         uint8_t *dst = s->buffer;
1825
1826         while (src < buf_end) {
1827             uint8_t x = *(src++);
1828
1829             *(dst++) = x;
1830             if (s->avctx->codec_id != AV_CODEC_ID_THP) {
1831                 if (x == 0xff) {
1832                     while (src < buf_end && x == 0xff)
1833                         x = *(src++);
1834
1835                     if (x >= 0xd0 && x <= 0xd7)
1836                         *(dst++) = x;
1837                     else if (x)
1838                         break;
1839                 }
1840             }
1841         }
1842         *unescaped_buf_ptr  = s->buffer;
1843         *unescaped_buf_size = dst - s->buffer;
1844         memset(s->buffer + *unescaped_buf_size, 0,
1845                FF_INPUT_BUFFER_PADDING_SIZE);
1846
1847         av_log(s->avctx, AV_LOG_DEBUG, "escaping removed %"PTRDIFF_SPECIFIER" bytes\n",
1848                (buf_end - *buf_ptr) - (dst - s->buffer));
1849     } else if (start_code == SOS && s->ls) {
1850         const uint8_t *src = *buf_ptr;
1851         uint8_t *dst  = s->buffer;
1852         int bit_count = 0;
1853         int t = 0, b = 0;
1854         PutBitContext pb;
1855
1856         /* find marker */
1857         while (src + t < buf_end) {
1858             uint8_t x = src[t++];
1859             if (x == 0xff) {
1860                 while ((src + t < buf_end) && x == 0xff)
1861                     x = src[t++];
1862                 if (x & 0x80) {
1863                     t -= FFMIN(2, t);
1864                     break;
1865                 }
1866             }
1867         }
1868         bit_count = t * 8;
1869         init_put_bits(&pb, dst, t);
1870
1871         /* unescape bitstream */
1872         while (b < t) {
1873             uint8_t x = src[b++];
1874             put_bits(&pb, 8, x);
1875             if (x == 0xFF) {
1876                 x = src[b++];
1877                 put_bits(&pb, 7, x);
1878                 bit_count--;
1879             }
1880         }
1881         flush_put_bits(&pb);
1882
1883         *unescaped_buf_ptr  = dst;
1884         *unescaped_buf_size = (bit_count + 7) >> 3;
1885         memset(s->buffer + *unescaped_buf_size, 0,
1886                FF_INPUT_BUFFER_PADDING_SIZE);
1887     } else {
1888         *unescaped_buf_ptr  = *buf_ptr;
1889         *unescaped_buf_size = buf_end - *buf_ptr;
1890     }
1891
1892     return start_code;
1893 }
1894
1895 int ff_mjpeg_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
1896                           AVPacket *avpkt)
1897 {
1898     AVFrame     *frame = data;
1899     const uint8_t *buf = avpkt->data;
1900     int buf_size       = avpkt->size;
1901     MJpegDecodeContext *s = avctx->priv_data;
1902     const uint8_t *buf_end, *buf_ptr;
1903     const uint8_t *unescaped_buf_ptr;
1904     int hshift, vshift;
1905     int unescaped_buf_size;
1906     int start_code;
1907     int i, index;
1908     int ret = 0;
1909
1910     av_dict_free(&s->exif_metadata);
1911     av_freep(&s->stereo3d);
1912     s->adobe_transform = -1;
1913
1914     buf_ptr = buf;
1915     buf_end = buf + buf_size;
1916     while (buf_ptr < buf_end) {
1917         /* find start next marker */
1918         start_code = ff_mjpeg_find_marker(s, &buf_ptr, buf_end,
1919                                           &unescaped_buf_ptr,
1920                                           &unescaped_buf_size);
1921         /* EOF */
1922         if (start_code < 0) {
1923             break;
1924         } else if (unescaped_buf_size > INT_MAX / 8) {
1925             av_log(avctx, AV_LOG_ERROR,
1926                    "MJPEG packet 0x%x too big (%d/%d), corrupt data?\n",
1927                    start_code, unescaped_buf_size, buf_size);
1928             return AVERROR_INVALIDDATA;
1929         }
1930         av_log(avctx, AV_LOG_DEBUG, "marker=%x avail_size_in_buf=%"PTRDIFF_SPECIFIER"\n",
1931                start_code, buf_end - buf_ptr);
1932
1933         ret = init_get_bits8(&s->gb, unescaped_buf_ptr, unescaped_buf_size);
1934
1935         if (ret < 0) {
1936             av_log(avctx, AV_LOG_ERROR, "invalid buffer\n");
1937             goto fail;
1938         }
1939
1940         s->start_code = start_code;
1941         if (s->avctx->debug & FF_DEBUG_STARTCODE)
1942             av_log(avctx, AV_LOG_DEBUG, "startcode: %X\n", start_code);
1943
1944         /* process markers */
1945         if (start_code >= 0xd0 && start_code <= 0xd7)
1946             av_log(avctx, AV_LOG_DEBUG,
1947                    "restart marker: %d\n", start_code & 0x0f);
1948             /* APP fields */
1949         else if (start_code >= APP0 && start_code <= APP15)
1950             mjpeg_decode_app(s);
1951             /* Comment */
1952         else if (start_code == COM)
1953             mjpeg_decode_com(s);
1954
1955         ret = -1;
1956
1957         if (!CONFIG_JPEGLS_DECODER &&
1958             (start_code == SOF48 || start_code == LSE)) {
1959             av_log(avctx, AV_LOG_ERROR, "JPEG-LS support not enabled.\n");
1960             return AVERROR(ENOSYS);
1961         }
1962
1963         switch (start_code) {
1964         case SOI:
1965             s->restart_interval = 0;
1966             s->restart_count    = 0;
1967             /* nothing to do on SOI */
1968             break;
1969         case DQT:
1970             ff_mjpeg_decode_dqt(s);
1971             break;
1972         case DHT:
1973             if ((ret = ff_mjpeg_decode_dht(s)) < 0) {
1974                 av_log(avctx, AV_LOG_ERROR, "huffman table decode error\n");
1975                 goto fail;
1976             }
1977             break;
1978         case SOF0:
1979         case SOF1:
1980             s->lossless    = 0;
1981             s->ls          = 0;
1982             s->progressive = 0;
1983             if ((ret = ff_mjpeg_decode_sof(s)) < 0)
1984                 goto fail;
1985             break;
1986         case SOF2:
1987             s->lossless    = 0;
1988             s->ls          = 0;
1989             s->progressive = 1;
1990             if ((ret = ff_mjpeg_decode_sof(s)) < 0)
1991                 goto fail;
1992             break;
1993         case SOF3:
1994             s->lossless    = 1;
1995             s->ls          = 0;
1996             s->progressive = 0;
1997             if ((ret = ff_mjpeg_decode_sof(s)) < 0)
1998                 goto fail;
1999             break;
2000         case SOF48:
2001             s->lossless    = 1;
2002             s->ls          = 1;
2003             s->progressive = 0;
2004             if ((ret = ff_mjpeg_decode_sof(s)) < 0)
2005                 goto fail;
2006             break;
2007         case LSE:
2008             if (!CONFIG_JPEGLS_DECODER ||
2009                 (ret = ff_jpegls_decode_lse(s)) < 0)
2010                 goto fail;
2011             break;
2012         case EOI:
2013 eoi_parser:
2014             s->cur_scan = 0;
2015             if (!s->got_picture) {
2016                 av_log(avctx, AV_LOG_WARNING,
2017                        "Found EOI before any SOF, ignoring\n");
2018                 break;
2019             }
2020             if (s->interlaced) {
2021                 s->bottom_field ^= 1;
2022                 /* if not bottom field, do not output image yet */
2023                 if (s->bottom_field == !s->interlace_polarity)
2024                     break;
2025             }
2026             if ((ret = av_frame_ref(frame, s->picture_ptr)) < 0)
2027                 return ret;
2028             *got_frame = 1;
2029             s->got_picture = 0;
2030
2031             if (!s->lossless) {
2032                 int qp = FFMAX3(s->qscale[0],
2033                                 s->qscale[1],
2034                                 s->qscale[2]);
2035                 int qpw = (s->width + 15) / 16;
2036                 AVBufferRef *qp_table_buf = av_buffer_alloc(qpw);
2037                 if (qp_table_buf) {
2038                     memset(qp_table_buf->data, qp, qpw);
2039                     av_frame_set_qp_table(data, qp_table_buf, 0, FF_QSCALE_TYPE_MPEG1);
2040                 }
2041
2042                 if(avctx->debug & FF_DEBUG_QP)
2043                     av_log(avctx, AV_LOG_DEBUG, "QP: %d\n", qp);
2044             }
2045
2046             goto the_end;
2047         case SOS:
2048             s->cur_scan++;
2049             if ((ret = ff_mjpeg_decode_sos(s, NULL, 0, NULL)) < 0 &&
2050                 (avctx->err_recognition & AV_EF_EXPLODE))
2051                 goto fail;
2052             break;
2053         case DRI:
2054             mjpeg_decode_dri(s);
2055             break;
2056         case SOF5:
2057         case SOF6:
2058         case SOF7:
2059         case SOF9:
2060         case SOF10:
2061         case SOF11:
2062         case SOF13:
2063         case SOF14:
2064         case SOF15:
2065         case JPG:
2066             av_log(avctx, AV_LOG_ERROR,
2067                    "mjpeg: unsupported coding type (%x)\n", start_code);
2068             break;
2069         }
2070
2071         /* eof process start code */
2072         buf_ptr += (get_bits_count(&s->gb) + 7) / 8;
2073         av_log(avctx, AV_LOG_DEBUG,
2074                "marker parser used %d bytes (%d bits)\n",
2075                (get_bits_count(&s->gb) + 7) / 8, get_bits_count(&s->gb));
2076     }
2077     if (s->got_picture && s->cur_scan) {
2078         av_log(avctx, AV_LOG_WARNING, "EOI missing, emulating\n");
2079         goto eoi_parser;
2080     }
2081     av_log(avctx, AV_LOG_FATAL, "No JPEG data found in image\n");
2082     return AVERROR_INVALIDDATA;
2083 fail:
2084     s->got_picture = 0;
2085     return ret;
2086 the_end:
2087     if (s->upscale_h) {
2088         int p;
2089         av_assert0(avctx->pix_fmt == AV_PIX_FMT_YUVJ444P ||
2090                    avctx->pix_fmt == AV_PIX_FMT_YUV444P  ||
2091                    avctx->pix_fmt == AV_PIX_FMT_YUVJ440P ||
2092                    avctx->pix_fmt == AV_PIX_FMT_YUV440P  ||
2093                    avctx->pix_fmt == AV_PIX_FMT_YUVA444P ||
2094                    avctx->pix_fmt == AV_PIX_FMT_YUVJ420P ||
2095                    avctx->pix_fmt == AV_PIX_FMT_YUV420P  ||
2096                    avctx->pix_fmt == AV_PIX_FMT_GBRAP
2097                   );
2098         avcodec_get_chroma_sub_sample(s->avctx->pix_fmt, &hshift, &vshift);
2099         for (p = 0; p<4; p++) {
2100             uint8_t *line = s->picture_ptr->data[p];
2101             int w = s->width;
2102             if (!(s->upscale_h & (1<<p)))
2103                 continue;
2104             if (p==1 || p==2)
2105                 w >>= hshift;
2106             for (i = 0; i < s->chroma_height; i++) {
2107                 for (index = w - 1; index; index--)
2108                     line[index] = (line[index / 2] + line[(index + 1) / 2]) >> 1;
2109                 line += s->linesize[p];
2110             }
2111         }
2112     }
2113     if (s->upscale_v) {
2114         int p;
2115         av_assert0(avctx->pix_fmt == AV_PIX_FMT_YUVJ444P ||
2116                    avctx->pix_fmt == AV_PIX_FMT_YUV444P  ||
2117                    avctx->pix_fmt == AV_PIX_FMT_YUVJ422P ||
2118                    avctx->pix_fmt == AV_PIX_FMT_YUV422P  ||
2119                    avctx->pix_fmt == AV_PIX_FMT_YUVA444P ||
2120                    avctx->pix_fmt == AV_PIX_FMT_GBRAP
2121                    );
2122         avcodec_get_chroma_sub_sample(s->avctx->pix_fmt, &hshift, &vshift);
2123         for (p = 0; p < 4; p++) {
2124             uint8_t *dst = &((uint8_t *)s->picture_ptr->data[p])[(s->height - 1) * s->linesize[p]];
2125             int w = s->width;
2126             if (!(s->upscale_v & (1<<p)))
2127                 continue;
2128             if (p==1 || p==2)
2129                 w >>= hshift;
2130             for (i = s->height - 1; i; i--) {
2131                 uint8_t *src1 = &((uint8_t *)s->picture_ptr->data[p])[i / 2 * s->linesize[p]];
2132                 uint8_t *src2 = &((uint8_t *)s->picture_ptr->data[p])[(i + 1) / 2 * s->linesize[p]];
2133                 if (src1 == src2) {
2134                     memcpy(dst, src1, w);
2135                 } else {
2136                     for (index = 0; index < w; index++)
2137                         dst[index] = (src1[index] + src2[index]) >> 1;
2138                 }
2139                 dst -= s->linesize[p];
2140             }
2141         }
2142     }
2143     if (s->flipped) {
2144         int j;
2145         avcodec_get_chroma_sub_sample(s->avctx->pix_fmt, &hshift, &vshift);
2146         for (index=0; index<4; index++) {
2147             uint8_t *dst = s->picture_ptr->data[index];
2148             int w = s->picture_ptr->width;
2149             int h = s->picture_ptr->height;
2150             if(index && index<3){
2151                 w = FF_CEIL_RSHIFT(w, hshift);
2152                 h = FF_CEIL_RSHIFT(h, vshift);
2153             }
2154             if(dst){
2155                 uint8_t *dst2 = dst + s->picture_ptr->linesize[index]*(h-1);
2156                 for (i=0; i<h/2; i++) {
2157                     for (j=0; j<w; j++)
2158                         FFSWAP(int, dst[j], dst2[j]);
2159                     dst  += s->picture_ptr->linesize[index];
2160                     dst2 -= s->picture_ptr->linesize[index];
2161                 }
2162             }
2163         }
2164     }
2165     if (s->adobe_transform == 0 && s->avctx->pix_fmt == AV_PIX_FMT_GBRAP) {
2166         int w = s->picture_ptr->width;
2167         int h = s->picture_ptr->height;
2168         for (i=0; i<h; i++) {
2169             int j;
2170             uint8_t *dst[4];
2171             for (index=0; index<4; index++) {
2172                 dst[index] =   s->picture_ptr->data[index]
2173                              + s->picture_ptr->linesize[index]*i;
2174             }
2175             for (j=0; j<w; j++) {
2176                 int k = dst[3][j];
2177                 int r = dst[0][j] * k;
2178                 int g = dst[1][j] * k;
2179                 int b = dst[2][j] * k;
2180                 dst[0][j] = g*257 >> 16;
2181                 dst[1][j] = b*257 >> 16;
2182                 dst[2][j] = r*257 >> 16;
2183                 dst[3][j] = 255;
2184             }
2185         }
2186     }
2187     if (s->adobe_transform == 2 && s->avctx->pix_fmt == AV_PIX_FMT_YUVA444P) {
2188         int w = s->picture_ptr->width;
2189         int h = s->picture_ptr->height;
2190         for (i=0; i<h; i++) {
2191             int j;
2192             uint8_t *dst[4];
2193             for (index=0; index<4; index++) {
2194                 dst[index] =   s->picture_ptr->data[index]
2195                              + s->picture_ptr->linesize[index]*i;
2196             }
2197             for (j=0; j<w; j++) {
2198                 int k = dst[3][j];
2199                 int r = (255 - dst[0][j]) * k;
2200                 int g = (128 - dst[1][j]) * k;
2201                 int b = (128 - dst[2][j]) * k;
2202                 dst[0][j] = r*257 >> 16;
2203                 dst[1][j] = (g*257 >> 16) + 128;
2204                 dst[2][j] = (b*257 >> 16) + 128;
2205                 dst[3][j] = 255;
2206             }
2207         }
2208     }
2209
2210     if (s->stereo3d) {
2211         AVStereo3D *stereo = av_stereo3d_create_side_data(data);
2212         if (stereo) {
2213             stereo->type  = s->stereo3d->type;
2214             stereo->flags = s->stereo3d->flags;
2215         }
2216         av_freep(&s->stereo3d);
2217     }
2218
2219     av_dict_copy(avpriv_frame_get_metadatap(data), s->exif_metadata, 0);
2220     av_dict_free(&s->exif_metadata);
2221
2222     av_log(avctx, AV_LOG_DEBUG, "decode frame unused %"PTRDIFF_SPECIFIER" bytes\n",
2223            buf_end - buf_ptr);
2224 //  return buf_end - buf_ptr;
2225     return buf_ptr - buf;
2226 }
2227
2228 av_cold int ff_mjpeg_decode_end(AVCodecContext *avctx)
2229 {
2230     MJpegDecodeContext *s = avctx->priv_data;
2231     int i, j;
2232
2233     if (s->interlaced && s->bottom_field == !s->interlace_polarity && s->got_picture && !avctx->frame_number) {
2234         av_log(avctx, AV_LOG_INFO, "Single field\n");
2235     }
2236
2237     if (s->picture) {
2238         av_frame_free(&s->picture);
2239         s->picture_ptr = NULL;
2240     } else if (s->picture_ptr)
2241         av_frame_unref(s->picture_ptr);
2242
2243     av_freep(&s->buffer);
2244     av_freep(&s->stereo3d);
2245     av_freep(&s->ljpeg_buffer);
2246     s->ljpeg_buffer_size = 0;
2247
2248     for (i = 0; i < 3; i++) {
2249         for (j = 0; j < 4; j++)
2250             ff_free_vlc(&s->vlcs[i][j]);
2251     }
2252     for (i = 0; i < MAX_COMPONENTS; i++) {
2253         av_freep(&s->blocks[i]);
2254         av_freep(&s->last_nnz[i]);
2255     }
2256     av_dict_free(&s->exif_metadata);
2257     return 0;
2258 }
2259
2260 static void decode_flush(AVCodecContext *avctx)
2261 {
2262     MJpegDecodeContext *s = avctx->priv_data;
2263     s->got_picture = 0;
2264 }
2265
2266 #if CONFIG_MJPEG_DECODER
2267 #define OFFSET(x) offsetof(MJpegDecodeContext, x)
2268 #define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM
2269 static const AVOption options[] = {
2270     { "extern_huff", "Use external huffman table.",
2271       OFFSET(extern_huff), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VD },
2272     { NULL },
2273 };
2274
2275 static const AVClass mjpegdec_class = {
2276     .class_name = "MJPEG decoder",
2277     .item_name  = av_default_item_name,
2278     .option     = options,
2279     .version    = LIBAVUTIL_VERSION_INT,
2280 };
2281
2282 AVCodec ff_mjpeg_decoder = {
2283     .name           = "mjpeg",
2284     .long_name      = NULL_IF_CONFIG_SMALL("MJPEG (Motion JPEG)"),
2285     .type           = AVMEDIA_TYPE_VIDEO,
2286     .id             = AV_CODEC_ID_MJPEG,
2287     .priv_data_size = sizeof(MJpegDecodeContext),
2288     .init           = ff_mjpeg_decode_init,
2289     .close          = ff_mjpeg_decode_end,
2290     .decode         = ff_mjpeg_decode_frame,
2291     .flush          = decode_flush,
2292     .capabilities   = CODEC_CAP_DR1,
2293     .max_lowres     = 3,
2294     .priv_class     = &mjpegdec_class,
2295 };
2296 #endif
2297 #if CONFIG_THP_DECODER
2298 AVCodec ff_thp_decoder = {
2299     .name           = "thp",
2300     .long_name      = NULL_IF_CONFIG_SMALL("Nintendo Gamecube THP video"),
2301     .type           = AVMEDIA_TYPE_VIDEO,
2302     .id             = AV_CODEC_ID_THP,
2303     .priv_data_size = sizeof(MJpegDecodeContext),
2304     .init           = ff_mjpeg_decode_init,
2305     .close          = ff_mjpeg_decode_end,
2306     .decode         = ff_mjpeg_decode_frame,
2307     .flush          = decode_flush,
2308     .capabilities   = CODEC_CAP_DR1,
2309     .max_lowres     = 3,
2310 };
2311 #endif