~medibuntu-maintainers/mplayer/medibuntu.precise

« back to all changes in this revision

Viewing changes to ffmpeg/libavcodec/mjpegdec.c

  • Committer: Gauvain Pocentek
  • Date: 2012-03-06 11:59:12 UTC
  • mfrom: (66.1.15 precise)
  • Revision ID: gauvain@pocentek.net-20120306115912-h9d6kt9j0l532oo5
* Merge from Ubuntu:
  - put back faac support
  - recommends apport-hooks-medibuntu
  - change Maintainer, Uploaders & Vcs-* fields.
* New upstream snapshot
* upload to unstable
* Build against external libmpeg2
* drop 51_FTBFS_arm.patch again
* no longer build depend on libcdparanoia-dev on the Hurd
* Fix FTBFS on the hurd.
  Thanks to Samuel Thibault <sthibault@debian.org> (Closes: #654974)
* Fix FTBFS on arm
* New upstream snapshot, Closes: #650339, #643621, #481807
* Imported Upstream version 1.0~rc4+svn34492
* Bump standards version
* Bump dependency on libav >= 4:0.8~, Closes: #653887
* Fix build-indep
* Build mplayer-gui again, Closes: #568514
* Drop debian/all-lang-config-mak.sh, no longer needed
* include .dfsg1 in version number
* remove get-orig-source target
* no longer prune compiler flags from the environment
* No longer advertise nor build 3fdx, mga and dxr3 backends,
  Closes: #496106, #442181, #533546
* beautify mplayer version identification string
* Brown paperbag upload.
* Next try to fix build failure on sparce after recent binutils change.
* Brown paperbag upload.
* Really fix build failure on sparc after recent binutils change.
* Properly set Replaces/Conflicts on mplayer2{,-dbg} to avoid
  file overwrite errors.
* Adjust versioning of mplayer listed in the mplayer-dbg's Depends field.
* Fix build failure on sparc after recent binutils change.
* Urgency medium bumped because of RC-level bugfix
  and speeding up x264 transition.
* Update to my @debian.org email.
* Upload to unstable
* Enable joystick support on Linux only, Closes: #638408
* Rebuild fixes toolchain issue on arm, Closes: #637077
* New upstream snapshot
* following the discussion started by Diego Biurrun <diego@biurrun.de>
  in debian-devel, I have prepared a new packaging of 'mplayer'
  (with code that comes from CVS)
* the upstream tar.bz cannot be distributed by Debian, since it contains
   CSS code; so I am repackaging it 
* I have tried my best to address all known issues:
  - the package contains the detailed Copyright made by Diego Biurrun 
  - the package does not contain CSS code, or  AFAIK other code on which 
     there is active patent enforcement
  - there is a script  debian/cvs-changelog.sh  that shows all changes
     done to files included in this source.
    This should comply with GPLv2 sec 2.a  (in spirit if not in letter)
    For this reason, the source code contains CVS directories.
* needs   make (>= 3.80) for 'html-chunked-$(1)' in DOCS/xml/Makefile

* some corrections, as suggested Diego Biurrun
  - binary codecs should go into /usr/lib/codecs (upstream default)
  - better template 'mplayer/install_codecs'
  - an empty 'font=' in mplayer.conf breaks mplayer: postinst corrected
* correction in 'mplayer/cfgnote'
* better mplayer.postinst and mplayer.config

* New upstream release
* better debian/copyright file
* do not ship a skin
* New upstream release
* changed DEB_BUILD_OPTIONS to DEB_BUILD_CONFIGURE ,
  DEB_BUILD_OPTIONS is used as in debian policy
* use gcc-3.4
* changed xlibs-dev to a long list of dependencies, for Debian/etch
* try to adhere to  http://www.mplayerhq.hu/DOCS/tech/binary-packaging.txt
  (see README.Debian for details)
* removed dependency on xlibmesa-dev, disabled opengl
* New upstream release
* Simon McVittie <hacks@pseudorandom.co.uk> wonderful work:
- Work around Debian bug #267442 (glibc's sys/uio.h and gcc's altivec.h have
  conflicting uses for __vector) by re-ordering #includes
- Fix potential symlink attack in ./configure
- Disable support for binary codecs on platforms for which those codecs
  aren't available; also disable the corresponding Debconf note when it's
  inappropriate
- Changed Build-Depends: so it works in pbuilder
- Explicitly build-depend on libjpeg62-dev, libfontconfig1-dev,
  libungif4-dev 
- Tweak debian/rules to avoid certain errors being ignored
- Use --language=all
* provide a target  'debian/rules get-orig-source' 
  that recreates the orig.tar.gz ; then use the above orig.tar.gz
* rewrote some parts of debian/rules
* don't clean and recompile docs if upstream ships them
* mplayer-doc was shipping too much stuff
* translated man pages where not installed properly
* compile with libdv4-dev
* correct README.Debian
* Forgot build-dep on libtheora
* Must not depend on libxvidcore
* New upstream release
* new release.
* rc1 to become 0.90
* new pre-release
* new pre-release
* gtk bug fixed.
* new release.
* version bumped
* 0.60 pre2 release
* 0.60 pre-release.

Show diffs side-by-side

added added

removed removed

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