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