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