~ubuntu-dev/mplayer/ubuntu-feisty

« back to all changes in this revision

Viewing changes to libavcodec/h263.c

  • Committer: Reinhard Tartler
  • Date: 2006-07-08 08:45:33 UTC
  • Revision ID: siretart@tauware.de-20060708084533-dbc155bde7122e78
imported mplayer_0.99+1.0pre7try2+cvs20060117

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * H263/MPEG4 backend for ffmpeg encoder and decoder
 
3
 * Copyright (c) 2000,2001 Fabrice Bellard.
 
4
 * H263+ support.
 
5
 * Copyright (c) 2001 Juan J. Sierralta P.
 
6
 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
 
7
 *
 
8
 * This library is free software; you can redistribute it and/or
 
9
 * modify it under the terms of the GNU Lesser General Public
 
10
 * License as published by the Free Software Foundation; either
 
11
 * version 2 of the License, or (at your option) any later version.
 
12
 *
 
13
 * This library is distributed in the hope that it will be useful,
 
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
16
 * Lesser General Public License for more details.
 
17
 *
 
18
 * You should have received a copy of the GNU Lesser General Public
 
19
 * License along with this library; if not, write to the Free Software
 
20
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
21
 *
 
22
 * ac prediction encoding, b-frame support, error resilience, optimizations,
 
23
 * qpel decoding, gmc decoding, interlaced decoding,
 
24
 * by Michael Niedermayer <michaelni@gmx.at>
 
25
 */
 
26
 
 
27
/**
 
28
 * @file h263.c
 
29
 * h263/mpeg4 codec.
 
30
 */
 
31
 
 
32
//#define DEBUG
 
33
#include <limits.h>
 
34
 
 
35
#include "common.h"
 
36
#include "dsputil.h"
 
37
#include "avcodec.h"
 
38
#include "mpegvideo.h"
 
39
#include "h263data.h"
 
40
#include "mpeg4data.h"
 
41
 
 
42
//#undef NDEBUG
 
43
//#include <assert.h>
 
44
 
 
45
#define INTRA_MCBPC_VLC_BITS 6
 
46
#define INTER_MCBPC_VLC_BITS 7
 
47
#define CBPY_VLC_BITS 6
 
48
#define MV_VLC_BITS 9
 
49
#define DC_VLC_BITS 9
 
50
#define SPRITE_TRAJ_VLC_BITS 6
 
51
#define MB_TYPE_B_VLC_BITS 4
 
52
#define TEX_VLC_BITS 9
 
53
#define H263_MBTYPE_B_VLC_BITS 6
 
54
#define CBPC_B_VLC_BITS 3
 
55
 
 
56
#ifdef CONFIG_ENCODERS
 
57
static void h263_encode_block(MpegEncContext * s, DCTELEM * block,
 
58
                              int n);
 
59
static void h263p_encode_umotion(MpegEncContext * s, int val);
 
60
static inline void mpeg4_encode_block(MpegEncContext * s, DCTELEM * block,
 
61
                               int n, int dc, uint8_t *scan_table,
 
62
                               PutBitContext *dc_pb, PutBitContext *ac_pb);
 
63
#endif
 
64
 
 
65
static int h263_decode_motion(MpegEncContext * s, int pred, int fcode);
 
66
static int h263p_decode_umotion(MpegEncContext * s, int pred);
 
67
static int h263_decode_block(MpegEncContext * s, DCTELEM * block,
 
68
                             int n, int coded);
 
69
static inline int mpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr);
 
70
static inline int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block,
 
71
                              int n, int coded, int intra, int rvlc);
 
72
static int mpeg4_get_block_length(MpegEncContext * s, DCTELEM * block, int n, int intra_dc,
 
73
                               uint8_t *scan_table);
 
74
static int h263_pred_dc(MpegEncContext * s, int n, uint16_t **dc_val_ptr);
 
75
#ifdef CONFIG_ENCODERS
 
76
static void mpeg4_encode_visual_object_header(MpegEncContext * s);
 
77
static void mpeg4_encode_vol_header(MpegEncContext * s, int vo_number, int vol_number);
 
78
#endif //CONFIG_ENCODERS
 
79
static void mpeg4_decode_sprite_trajectory(MpegEncContext * s, GetBitContext *gb);
 
80
static inline int ff_mpeg4_pred_dc(MpegEncContext * s, int n, int level, int *dir_ptr, int encoding);
 
81
 
 
82
#ifdef CONFIG_ENCODERS
 
83
static uint8_t uni_DCtab_lum_len[512];
 
84
static uint8_t uni_DCtab_chrom_len[512];
 
85
static uint16_t uni_DCtab_lum_bits[512];
 
86
static uint16_t uni_DCtab_chrom_bits[512];
 
87
 
 
88
static uint8_t (*mv_penalty)[MAX_MV*2+1]= NULL;
 
89
static uint8_t fcode_tab[MAX_MV*2+1];
 
90
static uint8_t umv_fcode_tab[MAX_MV*2+1];
 
91
 
 
92
static uint32_t uni_mpeg4_intra_rl_bits[64*64*2*2];
 
93
static uint8_t  uni_mpeg4_intra_rl_len [64*64*2*2];
 
94
static uint32_t uni_mpeg4_inter_rl_bits[64*64*2*2];
 
95
static uint8_t  uni_mpeg4_inter_rl_len [64*64*2*2];
 
96
static uint8_t  uni_h263_intra_aic_rl_len [64*64*2*2];
 
97
static uint8_t  uni_h263_inter_rl_len [64*64*2*2];
 
98
//#define UNI_MPEG4_ENC_INDEX(last,run,level) ((last)*128 + (run)*256 + (level))
 
99
//#define UNI_MPEG4_ENC_INDEX(last,run,level) ((last)*128*64 + (run) + (level)*64)
 
100
#define UNI_MPEG4_ENC_INDEX(last,run,level) ((last)*128*64 + (run)*128 + (level))
 
101
 
 
102
/* mpeg4
 
103
inter
 
104
max level: 24/6
 
105
max run: 53/63
 
106
 
 
107
intra
 
108
max level: 53/16
 
109
max run: 29/41
 
110
*/
 
111
#endif
 
112
 
 
113
#if 0 //3IV1 is quite rare and it slows things down a tiny bit
 
114
#define IS_3IV1 s->avctx->codec_tag == ff_get_fourcc("3IV1")
 
115
#else
 
116
#define IS_3IV1 0
 
117
#endif
 
118
 
 
119
int h263_get_picture_format(int width, int height)
 
120
{
 
121
    int format;
 
122
 
 
123
    if (width == 128 && height == 96)
 
124
        format = 1;
 
125
    else if (width == 176 && height == 144)
 
126
        format = 2;
 
127
    else if (width == 352 && height == 288)
 
128
        format = 3;
 
129
    else if (width == 704 && height == 576)
 
130
        format = 4;
 
131
    else if (width == 1408 && height == 1152)
 
132
        format = 5;
 
133
    else
 
134
        format = 7;
 
135
    return format;
 
136
}
 
137
 
 
138
#ifdef CONFIG_ENCODERS
 
139
 
 
140
static void aspect_to_info(MpegEncContext * s, AVRational aspect){
 
141
    int i;
 
142
 
 
143
    if(aspect.num==0) aspect= (AVRational){1,1};
 
144
 
 
145
    for(i=1; i<6; i++){
 
146
        if(av_cmp_q(pixel_aspect[i], aspect) == 0){
 
147
            s->aspect_ratio_info=i;
 
148
            return;
 
149
        }
 
150
    }
 
151
 
 
152
    s->aspect_ratio_info= FF_ASPECT_EXTENDED;
 
153
}
 
154
 
 
155
void ff_flv_encode_picture_header(MpegEncContext * s, int picture_number)
 
156
{
 
157
      int format;
 
158
 
 
159
      align_put_bits(&s->pb);
 
160
 
 
161
      put_bits(&s->pb, 17, 1);
 
162
      put_bits(&s->pb, 5, (s->h263_flv-1)); /* 0: h263 escape codes 1: 11-bit escape codes */
 
163
      put_bits(&s->pb, 8, (((int64_t)s->picture_number * 30 * s->avctx->time_base.num) / //FIXME use timestamp
 
164
                           s->avctx->time_base.den) & 0xff); /* TemporalReference */
 
165
      if (s->width == 352 && s->height == 288)
 
166
        format = 2;
 
167
      else if (s->width == 176 && s->height == 144)
 
168
        format = 3;
 
169
      else if (s->width == 128 && s->height == 96)
 
170
        format = 4;
 
171
      else if (s->width == 320 && s->height == 240)
 
172
        format = 5;
 
173
      else if (s->width == 160 && s->height == 120)
 
174
        format = 6;
 
175
      else if (s->width <= 255 && s->height <= 255)
 
176
        format = 0; /* use 1 byte width & height */
 
177
      else
 
178
        format = 1; /* use 2 bytes width & height */
 
179
      put_bits(&s->pb, 3, format); /* PictureSize */
 
180
      if (format == 0) {
 
181
        put_bits(&s->pb, 8, s->width);
 
182
        put_bits(&s->pb, 8, s->height);
 
183
      } else if (format == 1) {
 
184
        put_bits(&s->pb, 16, s->width);
 
185
        put_bits(&s->pb, 16, s->height);
 
186
      }
 
187
      put_bits(&s->pb, 2, s->pict_type == P_TYPE); /* PictureType */
 
188
      put_bits(&s->pb, 1, 1); /* DeblockingFlag: on */
 
189
      put_bits(&s->pb, 5, s->qscale); /* Quantizer */
 
190
      put_bits(&s->pb, 1, 0); /* ExtraInformation */
 
191
 
 
192
      if(s->h263_aic){
 
193
        s->y_dc_scale_table=
 
194
          s->c_dc_scale_table= ff_aic_dc_scale_table;
 
195
      }else{
 
196
        s->y_dc_scale_table=
 
197
          s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
 
198
      }
 
199
}
 
200
 
 
201
void h263_encode_picture_header(MpegEncContext * s, int picture_number)
 
202
{
 
203
    int format, coded_frame_rate, coded_frame_rate_base, i, temp_ref;
 
204
    int best_clock_code=1;
 
205
    int best_divisor=60;
 
206
    int best_error= INT_MAX;
 
207
 
 
208
    if(s->h263_plus){
 
209
        for(i=0; i<2; i++){
 
210
            int div, error;
 
211
            div= (s->avctx->time_base.num*1800000LL + 500LL*s->avctx->time_base.den) / ((1000LL+i)*s->avctx->time_base.den);
 
212
            div= clip(1, div, 127);
 
213
            error= ABS(s->avctx->time_base.num*1800000LL - (1000LL+i)*s->avctx->time_base.den*div);
 
214
            if(error < best_error){
 
215
                best_error= error;
 
216
                best_divisor= div;
 
217
                best_clock_code= i;
 
218
            }
 
219
        }
 
220
    }
 
221
    s->custom_pcf= best_clock_code!=1 || best_divisor!=60;
 
222
    coded_frame_rate= 1800000;
 
223
    coded_frame_rate_base= (1000+best_clock_code)*best_divisor;
 
224
 
 
225
    align_put_bits(&s->pb);
 
226
 
 
227
    /* Update the pointer to last GOB */
 
228
    s->ptr_lastgob = pbBufPtr(&s->pb);
 
229
    put_bits(&s->pb, 22, 0x20); /* PSC */
 
230
    temp_ref= s->picture_number * (int64_t)coded_frame_rate * s->avctx->time_base.num / //FIXME use timestamp
 
231
                         (coded_frame_rate_base * (int64_t)s->avctx->time_base.den);
 
232
    put_bits(&s->pb, 8, temp_ref & 0xff); /* TemporalReference */
 
233
 
 
234
    put_bits(&s->pb, 1, 1);     /* marker */
 
235
    put_bits(&s->pb, 1, 0);     /* h263 id */
 
236
    put_bits(&s->pb, 1, 0);     /* split screen off */
 
237
    put_bits(&s->pb, 1, 0);     /* camera  off */
 
238
    put_bits(&s->pb, 1, 0);     /* freeze picture release off */
 
239
 
 
240
    format = h263_get_picture_format(s->width, s->height);
 
241
    if (!s->h263_plus) {
 
242
        /* H.263v1 */
 
243
        put_bits(&s->pb, 3, format);
 
244
        put_bits(&s->pb, 1, (s->pict_type == P_TYPE));
 
245
        /* By now UMV IS DISABLED ON H.263v1, since the restrictions
 
246
        of H.263v1 UMV implies to check the predicted MV after
 
247
        calculation of the current MB to see if we're on the limits */
 
248
        put_bits(&s->pb, 1, 0);         /* Unrestricted Motion Vector: off */
 
249
        put_bits(&s->pb, 1, 0);         /* SAC: off */
 
250
        put_bits(&s->pb, 1, s->obmc);   /* Advanced Prediction */
 
251
        put_bits(&s->pb, 1, 0);         /* only I/P frames, no PB frame */
 
252
        put_bits(&s->pb, 5, s->qscale);
 
253
        put_bits(&s->pb, 1, 0);         /* Continuous Presence Multipoint mode: off */
 
254
    } else {
 
255
        int ufep=1;
 
256
        /* H.263v2 */
 
257
        /* H.263 Plus PTYPE */
 
258
 
 
259
        put_bits(&s->pb, 3, 7);
 
260
        put_bits(&s->pb,3,ufep); /* Update Full Extended PTYPE */
 
261
        if (format == 7)
 
262
            put_bits(&s->pb,3,6); /* Custom Source Format */
 
263
        else
 
264
            put_bits(&s->pb, 3, format);
 
265
 
 
266
        put_bits(&s->pb,1, s->custom_pcf);
 
267
        put_bits(&s->pb,1, s->umvplus); /* Unrestricted Motion Vector */
 
268
        put_bits(&s->pb,1,0); /* SAC: off */
 
269
        put_bits(&s->pb,1,s->obmc); /* Advanced Prediction Mode */
 
270
        put_bits(&s->pb,1,s->h263_aic); /* Advanced Intra Coding */
 
271
        put_bits(&s->pb,1,s->loop_filter); /* Deblocking Filter */
 
272
        put_bits(&s->pb,1,s->h263_slice_structured); /* Slice Structured */
 
273
        put_bits(&s->pb,1,0); /* Reference Picture Selection: off */
 
274
        put_bits(&s->pb,1,0); /* Independent Segment Decoding: off */
 
275
        put_bits(&s->pb,1,s->alt_inter_vlc); /* Alternative Inter VLC */
 
276
        put_bits(&s->pb,1,s->modified_quant); /* Modified Quantization: */
 
277
        put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
 
278
        put_bits(&s->pb,3,0); /* Reserved */
 
279
 
 
280
        put_bits(&s->pb, 3, s->pict_type == P_TYPE);
 
281
 
 
282
        put_bits(&s->pb,1,0); /* Reference Picture Resampling: off */
 
283
        put_bits(&s->pb,1,0); /* Reduced-Resolution Update: off */
 
284
        put_bits(&s->pb,1,s->no_rounding); /* Rounding Type */
 
285
        put_bits(&s->pb,2,0); /* Reserved */
 
286
        put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
 
287
 
 
288
        /* This should be here if PLUSPTYPE */
 
289
        put_bits(&s->pb, 1, 0); /* Continuous Presence Multipoint mode: off */
 
290
 
 
291
                if (format == 7) {
 
292
            /* Custom Picture Format (CPFMT) */
 
293
            aspect_to_info(s, s->avctx->sample_aspect_ratio);
 
294
 
 
295
            put_bits(&s->pb,4,s->aspect_ratio_info);
 
296
            put_bits(&s->pb,9,(s->width >> 2) - 1);
 
297
            put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
 
298
            put_bits(&s->pb,9,(s->height >> 2));
 
299
            if (s->aspect_ratio_info == FF_ASPECT_EXTENDED){
 
300
                put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.num);
 
301
                put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.den);
 
302
            }
 
303
        }
 
304
        if(s->custom_pcf){
 
305
            if(ufep){
 
306
                put_bits(&s->pb, 1, best_clock_code);
 
307
                put_bits(&s->pb, 7, best_divisor);
 
308
            }
 
309
            put_bits(&s->pb, 2, (temp_ref>>8)&3);
 
310
        }
 
311
 
 
312
        /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */
 
313
        if (s->umvplus)
 
314
//            put_bits(&s->pb,1,1); /* Limited according tables of Annex D */
 
315
//FIXME check actual requested range
 
316
            put_bits(&s->pb,2,1); /* unlimited */
 
317
        if(s->h263_slice_structured)
 
318
            put_bits(&s->pb,2,0); /* no weird submodes */
 
319
 
 
320
        put_bits(&s->pb, 5, s->qscale);
 
321
    }
 
322
 
 
323
    put_bits(&s->pb, 1, 0);     /* no PEI */
 
324
 
 
325
    if(s->h263_slice_structured){
 
326
        put_bits(&s->pb, 1, 1);
 
327
 
 
328
        assert(s->mb_x == 0 && s->mb_y == 0);
 
329
        ff_h263_encode_mba(s);
 
330
 
 
331
        put_bits(&s->pb, 1, 1);
 
332
    }
 
333
 
 
334
    if(s->h263_aic){
 
335
         s->y_dc_scale_table=
 
336
         s->c_dc_scale_table= ff_aic_dc_scale_table;
 
337
    }else{
 
338
        s->y_dc_scale_table=
 
339
        s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
 
340
    }
 
341
}
 
342
 
 
343
/**
 
344
 * Encodes a group of blocks header.
 
345
 */
 
346
void h263_encode_gob_header(MpegEncContext * s, int mb_line)
 
347
{
 
348
    put_bits(&s->pb, 17, 1); /* GBSC */
 
349
 
 
350
    if(s->h263_slice_structured){
 
351
        put_bits(&s->pb, 1, 1);
 
352
 
 
353
        ff_h263_encode_mba(s);
 
354
 
 
355
        if(s->mb_num > 1583)
 
356
            put_bits(&s->pb, 1, 1);
 
357
        put_bits(&s->pb, 5, s->qscale); /* GQUANT */
 
358
        put_bits(&s->pb, 1, 1);
 
359
        put_bits(&s->pb, 2, s->pict_type == I_TYPE); /* GFID */
 
360
    }else{
 
361
        int gob_number= mb_line / s->gob_index;
 
362
 
 
363
        put_bits(&s->pb, 5, gob_number); /* GN */
 
364
        put_bits(&s->pb, 2, s->pict_type == I_TYPE); /* GFID */
 
365
        put_bits(&s->pb, 5, s->qscale); /* GQUANT */
 
366
    }
 
367
}
 
368
 
 
369
static inline int get_block_rate(MpegEncContext * s, DCTELEM block[64], int block_last_index, uint8_t scantable[64]){
 
370
    int last=0;
 
371
    int j;
 
372
    int rate=0;
 
373
 
 
374
    for(j=1; j<=block_last_index; j++){
 
375
        const int index= scantable[j];
 
376
        int level= block[index];
 
377
        if(level){
 
378
            level+= 64;
 
379
            if((level&(~127)) == 0){
 
380
                if(j<block_last_index) rate+= s->intra_ac_vlc_length     [UNI_AC_ENC_INDEX(j-last-1, level)];
 
381
                else                   rate+= s->intra_ac_vlc_last_length[UNI_AC_ENC_INDEX(j-last-1, level)];
 
382
            }else
 
383
                rate += s->ac_esc_length;
 
384
            level-= 64;
 
385
 
 
386
            last= j;
 
387
        }
 
388
    }
 
389
 
 
390
    return rate;
 
391
}
 
392
 
 
393
static inline int decide_ac_pred(MpegEncContext * s, DCTELEM block[6][64], int dir[6], uint8_t *st[6], int zigzag_last_index[6])
 
394
{
 
395
    int score= 0;
 
396
    int i, n;
 
397
    int8_t * const qscale_table= s->current_picture.qscale_table;
 
398
 
 
399
    memcpy(zigzag_last_index, s->block_last_index, sizeof(int)*6);
 
400
 
 
401
    for(n=0; n<6; n++){
 
402
        int16_t *ac_val, *ac_val1;
 
403
 
 
404
        score -= get_block_rate(s, block[n], s->block_last_index[n], s->intra_scantable.permutated);
 
405
 
 
406
        ac_val = s->ac_val[0][0] + s->block_index[n] * 16;
 
407
        ac_val1= ac_val;
 
408
        if(dir[n]){
 
409
            const int xy= s->mb_x + s->mb_y*s->mb_stride - s->mb_stride;
 
410
            /* top prediction */
 
411
            ac_val-= s->block_wrap[n]*16;
 
412
            if(s->mb_y==0 || s->qscale == qscale_table[xy] || n==2 || n==3){
 
413
                /* same qscale */
 
414
                for(i=1; i<8; i++){
 
415
                    const int level= block[n][s->dsp.idct_permutation[i   ]];
 
416
                    block[n][s->dsp.idct_permutation[i   ]] = level - ac_val[i+8];
 
417
                    ac_val1[i  ]=    block[n][s->dsp.idct_permutation[i<<3]];
 
418
                    ac_val1[i+8]= level;
 
419
                }
 
420
            }else{
 
421
                /* different qscale, we must rescale */
 
422
                for(i=1; i<8; i++){
 
423
                    const int level= block[n][s->dsp.idct_permutation[i   ]];
 
424
                    block[n][s->dsp.idct_permutation[i   ]] = level - ROUNDED_DIV(ac_val[i + 8]*qscale_table[xy], s->qscale);
 
425
                    ac_val1[i  ]=    block[n][s->dsp.idct_permutation[i<<3]];
 
426
                    ac_val1[i+8]= level;
 
427
                }
 
428
            }
 
429
            st[n]= s->intra_h_scantable.permutated;
 
430
        }else{
 
431
            const int xy= s->mb_x-1 + s->mb_y*s->mb_stride;
 
432
            /* left prediction */
 
433
            ac_val-= 16;
 
434
            if(s->mb_x==0 || s->qscale == qscale_table[xy] || n==1 || n==3){
 
435
                /* same qscale */
 
436
                for(i=1; i<8; i++){
 
437
                    const int level= block[n][s->dsp.idct_permutation[i<<3]];
 
438
                    block[n][s->dsp.idct_permutation[i<<3]]= level - ac_val[i];
 
439
                    ac_val1[i  ]= level;
 
440
                    ac_val1[i+8]=    block[n][s->dsp.idct_permutation[i   ]];
 
441
                }
 
442
            }else{
 
443
                /* different qscale, we must rescale */
 
444
                for(i=1; i<8; i++){
 
445
                    const int level= block[n][s->dsp.idct_permutation[i<<3]];
 
446
                    block[n][s->dsp.idct_permutation[i<<3]]= level - ROUNDED_DIV(ac_val[i]*qscale_table[xy], s->qscale);
 
447
                    ac_val1[i  ]= level;
 
448
                    ac_val1[i+8]=    block[n][s->dsp.idct_permutation[i   ]];
 
449
                }
 
450
            }
 
451
            st[n]= s->intra_v_scantable.permutated;
 
452
        }
 
453
 
 
454
        for(i=63; i>0; i--) //FIXME optimize
 
455
            if(block[n][ st[n][i] ]) break;
 
456
        s->block_last_index[n]= i;
 
457
 
 
458
        score += get_block_rate(s, block[n], s->block_last_index[n], st[n]);
 
459
    }
 
460
 
 
461
    return score < 0;
 
462
}
 
463
 
 
464
static inline void restore_ac_coeffs(MpegEncContext * s, DCTELEM block[6][64], int dir[6], uint8_t *st[6], int zigzag_last_index[6])
 
465
{
 
466
    int i, n;
 
467
    memcpy(s->block_last_index, zigzag_last_index, sizeof(int)*6);
 
468
 
 
469
    for(n=0; n<6; n++){
 
470
        int16_t *ac_val = s->ac_val[0][0] + s->block_index[n] * 16;
 
471
 
 
472
        st[n]= s->intra_scantable.permutated;
 
473
        if(dir[n]){
 
474
            /* top prediction */
 
475
            for(i=1; i<8; i++){
 
476
                block[n][s->dsp.idct_permutation[i   ]] = ac_val[i+8];
 
477
            }
 
478
        }else{
 
479
            /* left prediction */
 
480
            for(i=1; i<8; i++){
 
481
                block[n][s->dsp.idct_permutation[i<<3]]= ac_val[i  ];
 
482
            }
 
483
        }
 
484
    }
 
485
}
 
486
 
 
487
/**
 
488
 * modify qscale so that encoding is acually possible in h263 (limit difference to -2..2)
 
489
 */
 
490
void ff_clean_h263_qscales(MpegEncContext *s){
 
491
    int i;
 
492
    int8_t * const qscale_table= s->current_picture.qscale_table;
 
493
 
 
494
    for(i=1; i<s->mb_num; i++){
 
495
        if(qscale_table[ s->mb_index2xy[i] ] - qscale_table[ s->mb_index2xy[i-1] ] >2)
 
496
            qscale_table[ s->mb_index2xy[i] ]= qscale_table[ s->mb_index2xy[i-1] ]+2;
 
497
    }
 
498
    for(i=s->mb_num-2; i>=0; i--){
 
499
        if(qscale_table[ s->mb_index2xy[i] ] - qscale_table[ s->mb_index2xy[i+1] ] >2)
 
500
            qscale_table[ s->mb_index2xy[i] ]= qscale_table[ s->mb_index2xy[i+1] ]+2;
 
501
    }
 
502
 
 
503
    if(s->codec_id != CODEC_ID_H263P){
 
504
        for(i=1; i<s->mb_num; i++){
 
505
            int mb_xy= s->mb_index2xy[i];
 
506
 
 
507
            if(qscale_table[mb_xy] != qscale_table[s->mb_index2xy[i-1]] && (s->mb_type[mb_xy]&CANDIDATE_MB_TYPE_INTER4V)){
 
508
                s->mb_type[mb_xy]&= ~CANDIDATE_MB_TYPE_INTER4V;
 
509
                s->mb_type[mb_xy]|= CANDIDATE_MB_TYPE_INTER;
 
510
            }
 
511
        }
 
512
    }
 
513
}
 
514
 
 
515
/**
 
516
 * modify mb_type & qscale so that encoding is acually possible in mpeg4
 
517
 */
 
518
void ff_clean_mpeg4_qscales(MpegEncContext *s){
 
519
    int i;
 
520
    int8_t * const qscale_table= s->current_picture.qscale_table;
 
521
 
 
522
    ff_clean_h263_qscales(s);
 
523
 
 
524
    if(s->pict_type== B_TYPE){
 
525
        int odd=0;
 
526
        /* ok, come on, this isn't funny anymore, there's more code for handling this mpeg4 mess than for the actual adaptive quantization */
 
527
 
 
528
        for(i=0; i<s->mb_num; i++){
 
529
            int mb_xy= s->mb_index2xy[i];
 
530
            odd += qscale_table[mb_xy]&1;
 
531
        }
 
532
 
 
533
        if(2*odd > s->mb_num) odd=1;
 
534
        else                  odd=0;
 
535
 
 
536
        for(i=0; i<s->mb_num; i++){
 
537
            int mb_xy= s->mb_index2xy[i];
 
538
            if((qscale_table[mb_xy]&1) != odd)
 
539
                qscale_table[mb_xy]++;
 
540
            if(qscale_table[mb_xy] > 31)
 
541
                qscale_table[mb_xy]= 31;
 
542
        }
 
543
 
 
544
        for(i=1; i<s->mb_num; i++){
 
545
            int mb_xy= s->mb_index2xy[i];
 
546
            if(qscale_table[mb_xy] != qscale_table[s->mb_index2xy[i-1]] && (s->mb_type[mb_xy]&CANDIDATE_MB_TYPE_DIRECT)){
 
547
                s->mb_type[mb_xy]&= ~CANDIDATE_MB_TYPE_DIRECT;
 
548
                s->mb_type[mb_xy]|= CANDIDATE_MB_TYPE_BIDIR;
 
549
            }
 
550
        }
 
551
    }
 
552
}
 
553
 
 
554
#endif //CONFIG_ENCODERS
 
555
/**
 
556
 *
 
557
 * @return the mb_type
 
558
 */
 
559
int ff_mpeg4_set_direct_mv(MpegEncContext *s, int mx, int my){
 
560
    const int mb_index= s->mb_x + s->mb_y*s->mb_stride;
 
561
    const int colocated_mb_type= s->next_picture.mb_type[mb_index];
 
562
    int xy= s->block_index[0];
 
563
    uint16_t time_pp= s->pp_time;
 
564
    uint16_t time_pb= s->pb_time;
 
565
    int i;
 
566
 
 
567
    //FIXME avoid divides
 
568
 
 
569
    if(IS_8X8(colocated_mb_type)){
 
570
        s->mv_type = MV_TYPE_8X8;
 
571
        for(i=0; i<4; i++){
 
572
            xy= s->block_index[i];
 
573
            s->mv[0][i][0] = s->next_picture.motion_val[0][xy][0]*time_pb/time_pp + mx;
 
574
            s->mv[0][i][1] = s->next_picture.motion_val[0][xy][1]*time_pb/time_pp + my;
 
575
            s->mv[1][i][0] = mx ? s->mv[0][i][0] - s->next_picture.motion_val[0][xy][0]
 
576
                                : s->next_picture.motion_val[0][xy][0]*(time_pb - time_pp)/time_pp;
 
577
            s->mv[1][i][1] = my ? s->mv[0][i][1] - s->next_picture.motion_val[0][xy][1]
 
578
                                : s->next_picture.motion_val[0][xy][1]*(time_pb - time_pp)/time_pp;
 
579
        }
 
580
        return MB_TYPE_DIRECT2 | MB_TYPE_8x8 | MB_TYPE_L0L1;
 
581
    } else if(IS_INTERLACED(colocated_mb_type)){
 
582
        s->mv_type = MV_TYPE_FIELD;
 
583
        for(i=0; i<2; i++){
 
584
            int field_select= s->next_picture.ref_index[0][s->block_index[2*i]];
 
585
            if(s->top_field_first){
 
586
                time_pp= s->pp_field_time - field_select + i;
 
587
                time_pb= s->pb_field_time - field_select + i;
 
588
            }else{
 
589
                time_pp= s->pp_field_time + field_select - i;
 
590
                time_pb= s->pb_field_time + field_select - i;
 
591
            }
 
592
            s->mv[0][i][0] = s->p_field_mv_table[i][0][mb_index][0]*time_pb/time_pp + mx;
 
593
            s->mv[0][i][1] = s->p_field_mv_table[i][0][mb_index][1]*time_pb/time_pp + my;
 
594
            s->mv[1][i][0] = mx ? s->mv[0][i][0] - s->p_field_mv_table[i][0][mb_index][0]
 
595
                                : s->p_field_mv_table[i][0][mb_index][0]*(time_pb - time_pp)/time_pp;
 
596
            s->mv[1][i][1] = my ? s->mv[0][i][1] - s->p_field_mv_table[i][0][mb_index][1]
 
597
                                : s->p_field_mv_table[i][0][mb_index][1]*(time_pb - time_pp)/time_pp;
 
598
        }
 
599
        return MB_TYPE_DIRECT2 | MB_TYPE_16x8 | MB_TYPE_L0L1 | MB_TYPE_INTERLACED;
 
600
    }else{
 
601
        s->mv[0][0][0] = s->mv[0][1][0] = s->mv[0][2][0] = s->mv[0][3][0] = s->next_picture.motion_val[0][xy][0]*time_pb/time_pp + mx;
 
602
        s->mv[0][0][1] = s->mv[0][1][1] = s->mv[0][2][1] = s->mv[0][3][1] = s->next_picture.motion_val[0][xy][1]*time_pb/time_pp + my;
 
603
        s->mv[1][0][0] = s->mv[1][1][0] = s->mv[1][2][0] = s->mv[1][3][0] = mx ? s->mv[0][0][0] - s->next_picture.motion_val[0][xy][0]
 
604
                            : s->next_picture.motion_val[0][xy][0]*(time_pb - time_pp)/time_pp;
 
605
        s->mv[1][0][1] = s->mv[1][1][1] = s->mv[1][2][1] = s->mv[1][3][1] = my ? s->mv[0][0][1] - s->next_picture.motion_val[0][xy][1]
 
606
                            : s->next_picture.motion_val[0][xy][1]*(time_pb - time_pp)/time_pp;
 
607
        if((s->avctx->workaround_bugs & FF_BUG_DIRECT_BLOCKSIZE) || !s->quarter_sample)
 
608
            s->mv_type= MV_TYPE_16X16;
 
609
        else
 
610
            s->mv_type= MV_TYPE_8X8;
 
611
        return MB_TYPE_DIRECT2 | MB_TYPE_16x16 | MB_TYPE_L0L1; //Note see prev line
 
612
    }
 
613
}
 
614
 
 
615
void ff_h263_update_motion_val(MpegEncContext * s){
 
616
    const int mb_xy = s->mb_y * s->mb_stride + s->mb_x;
 
617
               //FIXME a lot of that is only needed for !low_delay
 
618
    const int wrap = s->b8_stride;
 
619
    const int xy = s->block_index[0];
 
620
 
 
621
    s->current_picture.mbskip_table[mb_xy]= s->mb_skipped;
 
622
 
 
623
    if(s->mv_type != MV_TYPE_8X8){
 
624
        int motion_x, motion_y;
 
625
        if (s->mb_intra) {
 
626
            motion_x = 0;
 
627
            motion_y = 0;
 
628
        } else if (s->mv_type == MV_TYPE_16X16) {
 
629
            motion_x = s->mv[0][0][0];
 
630
            motion_y = s->mv[0][0][1];
 
631
        } else /*if (s->mv_type == MV_TYPE_FIELD)*/ {
 
632
            int i;
 
633
            motion_x = s->mv[0][0][0] + s->mv[0][1][0];
 
634
            motion_y = s->mv[0][0][1] + s->mv[0][1][1];
 
635
            motion_x = (motion_x>>1) | (motion_x&1);
 
636
            for(i=0; i<2; i++){
 
637
                s->p_field_mv_table[i][0][mb_xy][0]= s->mv[0][i][0];
 
638
                s->p_field_mv_table[i][0][mb_xy][1]= s->mv[0][i][1];
 
639
            }
 
640
            s->current_picture.ref_index[0][xy           ]=
 
641
            s->current_picture.ref_index[0][xy        + 1]= s->field_select[0][0];
 
642
            s->current_picture.ref_index[0][xy + wrap    ]=
 
643
            s->current_picture.ref_index[0][xy + wrap + 1]= s->field_select[0][1];
 
644
        }
 
645
 
 
646
        /* no update if 8X8 because it has been done during parsing */
 
647
        s->current_picture.motion_val[0][xy][0] = motion_x;
 
648
        s->current_picture.motion_val[0][xy][1] = motion_y;
 
649
        s->current_picture.motion_val[0][xy + 1][0] = motion_x;
 
650
        s->current_picture.motion_val[0][xy + 1][1] = motion_y;
 
651
        s->current_picture.motion_val[0][xy + wrap][0] = motion_x;
 
652
        s->current_picture.motion_val[0][xy + wrap][1] = motion_y;
 
653
        s->current_picture.motion_val[0][xy + 1 + wrap][0] = motion_x;
 
654
        s->current_picture.motion_val[0][xy + 1 + wrap][1] = motion_y;
 
655
    }
 
656
 
 
657
    if(s->encoding){ //FIXME encoding MUST be cleaned up
 
658
        if (s->mv_type == MV_TYPE_8X8)
 
659
            s->current_picture.mb_type[mb_xy]= MB_TYPE_L0 | MB_TYPE_8x8;
 
660
        else if(s->mb_intra)
 
661
            s->current_picture.mb_type[mb_xy]= MB_TYPE_INTRA;
 
662
        else
 
663
            s->current_picture.mb_type[mb_xy]= MB_TYPE_L0 | MB_TYPE_16x16;
 
664
    }
 
665
}
 
666
 
 
667
#ifdef CONFIG_ENCODERS
 
668
 
 
669
static inline int h263_get_motion_length(MpegEncContext * s, int val, int f_code){
 
670
    int l, bit_size, code;
 
671
 
 
672
    if (val == 0) {
 
673
        return mvtab[0][1];
 
674
    } else {
 
675
        bit_size = f_code - 1;
 
676
        /* modulo encoding */
 
677
        l= INT_BIT - 6 - bit_size;
 
678
        val = (val<<l)>>l;
 
679
        val--;
 
680
        code = (val >> bit_size) + 1;
 
681
 
 
682
        return mvtab[code][1] + 1 + bit_size;
 
683
    }
 
684
}
 
685
 
 
686
static inline void ff_h263_encode_motion_vector(MpegEncContext * s, int x, int y, int f_code){
 
687
    if(s->flags2 & CODEC_FLAG2_NO_OUTPUT){
 
688
        skip_put_bits(&s->pb,
 
689
            h263_get_motion_length(s, x, f_code)
 
690
           +h263_get_motion_length(s, y, f_code));
 
691
    }else{
 
692
        ff_h263_encode_motion(s, x, f_code);
 
693
        ff_h263_encode_motion(s, y, f_code);
 
694
    }
 
695
}
 
696
 
 
697
static inline int get_p_cbp(MpegEncContext * s,
 
698
                      DCTELEM block[6][64],
 
699
                      int motion_x, int motion_y){
 
700
    int cbp, i;
 
701
 
 
702
    if(s->flags & CODEC_FLAG_CBP_RD){
 
703
        int best_cbpy_score= INT_MAX;
 
704
        int best_cbpc_score= INT_MAX;
 
705
        int cbpc = (-1), cbpy= (-1);
 
706
        const int offset= (s->mv_type==MV_TYPE_16X16 ? 0 : 16) + (s->dquant ? 8 : 0);
 
707
        const int lambda= s->lambda2 >> (FF_LAMBDA_SHIFT - 6);
 
708
 
 
709
        for(i=0; i<4; i++){
 
710
            int score= inter_MCBPC_bits[i + offset] * lambda;
 
711
            if(i&1) score += s->coded_score[5];
 
712
            if(i&2) score += s->coded_score[4];
 
713
 
 
714
            if(score < best_cbpc_score){
 
715
                best_cbpc_score= score;
 
716
                cbpc= i;
 
717
            }
 
718
        }
 
719
 
 
720
        for(i=0; i<16; i++){
 
721
            int score= cbpy_tab[i ^ 0xF][1] * lambda;
 
722
            if(i&1) score += s->coded_score[3];
 
723
            if(i&2) score += s->coded_score[2];
 
724
            if(i&4) score += s->coded_score[1];
 
725
            if(i&8) score += s->coded_score[0];
 
726
 
 
727
            if(score < best_cbpy_score){
 
728
                best_cbpy_score= score;
 
729
                cbpy= i;
 
730
            }
 
731
        }
 
732
        cbp= cbpc + 4*cbpy;
 
733
        if ((motion_x | motion_y | s->dquant) == 0 && s->mv_type==MV_TYPE_16X16){
 
734
            if(best_cbpy_score + best_cbpc_score + 2*lambda >= 0)
 
735
                cbp= 0;
 
736
        }
 
737
 
 
738
        for (i = 0; i < 6; i++) {
 
739
            if (s->block_last_index[i] >= 0 && ((cbp >> (5 - i))&1)==0 ){
 
740
                s->block_last_index[i]= -1;
 
741
                memset(s->block[i], 0, sizeof(DCTELEM)*64);
 
742
            }
 
743
        }
 
744
    }else{
 
745
        cbp= 0;
 
746
        for (i = 0; i < 6; i++) {
 
747
            if (s->block_last_index[i] >= 0)
 
748
                cbp |= 1 << (5 - i);
 
749
        }
 
750
    }
 
751
    return cbp;
 
752
}
 
753
 
 
754
static inline int get_b_cbp(MpegEncContext * s, DCTELEM block[6][64],
 
755
                            int motion_x, int motion_y, int mb_type){
 
756
    int cbp=0, i;
 
757
 
 
758
    if(s->flags & CODEC_FLAG_CBP_RD){
 
759
        int score=0;
 
760
        const int lambda= s->lambda2 >> (FF_LAMBDA_SHIFT - 6);
 
761
 
 
762
        for(i=0; i<6; i++){
 
763
            if(s->coded_score[i] < 0){
 
764
                score += s->coded_score[i];
 
765
                cbp |= 1 << (5 - i);
 
766
            }
 
767
        }
 
768
 
 
769
        if(cbp){
 
770
            int zero_score= -6;
 
771
            if ((motion_x | motion_y | s->dquant | mb_type) == 0){
 
772
                zero_score-= 4; //2*MV + mb_type + cbp bit
 
773
            }
 
774
 
 
775
            zero_score*= lambda;
 
776
            if(zero_score <= score){
 
777
                cbp=0;
 
778
            }
 
779
        }
 
780
 
 
781
        for (i = 0; i < 6; i++) {
 
782
            if (s->block_last_index[i] >= 0 && ((cbp >> (5 - i))&1)==0 ){
 
783
                s->block_last_index[i]= -1;
 
784
                memset(s->block[i], 0, sizeof(DCTELEM)*64);
 
785
            }
 
786
        }
 
787
    }else{
 
788
        for (i = 0; i < 6; i++) {
 
789
            if (s->block_last_index[i] >= 0)
 
790
                cbp |= 1 << (5 - i);
 
791
        }
 
792
    }
 
793
    return cbp;
 
794
}
 
795
 
 
796
static inline void mpeg4_encode_blocks(MpegEncContext * s, DCTELEM block[6][64], int intra_dc[6],
 
797
                               uint8_t **scan_table, PutBitContext *dc_pb, PutBitContext *ac_pb){
 
798
    int i;
 
799
 
 
800
    if(scan_table){
 
801
        if(s->flags2 & CODEC_FLAG2_NO_OUTPUT){
 
802
            for (i = 0; i < 6; i++) {
 
803
                skip_put_bits(&s->pb, mpeg4_get_block_length(s, block[i], i, intra_dc[i], scan_table[i]));
 
804
            }
 
805
        }else{
 
806
            /* encode each block */
 
807
            for (i = 0; i < 6; i++) {
 
808
                mpeg4_encode_block(s, block[i], i, intra_dc[i], scan_table[i], dc_pb, ac_pb);
 
809
            }
 
810
        }
 
811
    }else{
 
812
        if(s->flags2 & CODEC_FLAG2_NO_OUTPUT){
 
813
            for (i = 0; i < 6; i++) {
 
814
                skip_put_bits(&s->pb, mpeg4_get_block_length(s, block[i], i, 0, s->intra_scantable.permutated));
 
815
            }
 
816
        }else{
 
817
            /* encode each block */
 
818
            for (i = 0; i < 6; i++) {
 
819
                mpeg4_encode_block(s, block[i], i, 0, s->intra_scantable.permutated, dc_pb, ac_pb);
 
820
            }
 
821
        }
 
822
    }
 
823
}
 
824
 
 
825
void mpeg4_encode_mb(MpegEncContext * s,
 
826
                    DCTELEM block[6][64],
 
827
                    int motion_x, int motion_y)
 
828
{
 
829
    int cbpc, cbpy, pred_x, pred_y;
 
830
    PutBitContext * const pb2    = s->data_partitioning                         ? &s->pb2    : &s->pb;
 
831
    PutBitContext * const tex_pb = s->data_partitioning && s->pict_type!=B_TYPE ? &s->tex_pb : &s->pb;
 
832
    PutBitContext * const dc_pb  = s->data_partitioning && s->pict_type!=I_TYPE ? &s->pb2    : &s->pb;
 
833
    const int interleaved_stats= (s->flags&CODEC_FLAG_PASS1) && !s->data_partitioning ? 1 : 0;
 
834
    const int dquant_code[5]= {1,0,9,2,3};
 
835
 
 
836
    //    printf("**mb x=%d y=%d\n", s->mb_x, s->mb_y);
 
837
    if (!s->mb_intra) {
 
838
        int i, cbp;
 
839
 
 
840
        if(s->pict_type==B_TYPE){
 
841
            static const int mb_type_table[8]= {-1, 2, 3, 1,-1,-1,-1, 0}; /* convert from mv_dir to type */
 
842
            int mb_type=  mb_type_table[s->mv_dir];
 
843
 
 
844
            if(s->mb_x==0){
 
845
                for(i=0; i<2; i++){
 
846
                    s->last_mv[i][0][0]=
 
847
                    s->last_mv[i][0][1]=
 
848
                    s->last_mv[i][1][0]=
 
849
                    s->last_mv[i][1][1]= 0;
 
850
                }
 
851
            }
 
852
 
 
853
            assert(s->dquant>=-2 && s->dquant<=2);
 
854
            assert((s->dquant&1)==0);
 
855
            assert(mb_type>=0);
 
856
 
 
857
            /* nothing to do if this MB was skipped in the next P Frame */
 
858
            if(s->next_picture.mbskip_table[s->mb_y * s->mb_stride + s->mb_x]){ //FIXME avoid DCT & ...
 
859
                s->skip_count++;
 
860
                s->mv[0][0][0]=
 
861
                s->mv[0][0][1]=
 
862
                s->mv[1][0][0]=
 
863
                s->mv[1][0][1]= 0;
 
864
                s->mv_dir= MV_DIR_FORWARD; //doesn't matter
 
865
                s->qscale -= s->dquant;
 
866
//                s->mb_skipped=1;
 
867
 
 
868
                return;
 
869
            }
 
870
 
 
871
            cbp= get_b_cbp(s, block, motion_x, motion_y, mb_type);
 
872
 
 
873
            if ((cbp | motion_x | motion_y | mb_type) ==0) {
 
874
                /* direct MB with MV={0,0} */
 
875
                assert(s->dquant==0);
 
876
 
 
877
                put_bits(&s->pb, 1, 1); /* mb not coded modb1=1 */
 
878
 
 
879
                if(interleaved_stats){
 
880
                    s->misc_bits++;
 
881
                    s->last_bits++;
 
882
                }
 
883
                s->skip_count++;
 
884
                return;
 
885
            }
 
886
 
 
887
            put_bits(&s->pb, 1, 0);     /* mb coded modb1=0 */
 
888
            put_bits(&s->pb, 1, cbp ? 0 : 1); /* modb2 */ //FIXME merge
 
889
            put_bits(&s->pb, mb_type+1, 1); // this table is so simple that we don't need it :)
 
890
            if(cbp) put_bits(&s->pb, 6, cbp);
 
891
 
 
892
            if(cbp && mb_type){
 
893
                if(s->dquant)
 
894
                    put_bits(&s->pb, 2, (s->dquant>>2)+3);
 
895
                else
 
896
                    put_bits(&s->pb, 1, 0);
 
897
            }else
 
898
                s->qscale -= s->dquant;
 
899
 
 
900
            if(!s->progressive_sequence){
 
901
                if(cbp)
 
902
                    put_bits(&s->pb, 1, s->interlaced_dct);
 
903
                if(mb_type) // not direct mode
 
904
                    put_bits(&s->pb, 1, s->mv_type == MV_TYPE_FIELD);
 
905
            }
 
906
 
 
907
            if(interleaved_stats){
 
908
                s->misc_bits+= get_bits_diff(s);
 
909
            }
 
910
 
 
911
            if(mb_type == 0){
 
912
                assert(s->mv_dir & MV_DIRECT);
 
913
                ff_h263_encode_motion_vector(s, motion_x, motion_y, 1);
 
914
                s->b_count++;
 
915
                s->f_count++;
 
916
            }else{
 
917
                assert(mb_type > 0 && mb_type < 4);
 
918
                if(s->mv_type != MV_TYPE_FIELD){
 
919
                    if(s->mv_dir & MV_DIR_FORWARD){
 
920
                        ff_h263_encode_motion_vector(s, s->mv[0][0][0] - s->last_mv[0][0][0],
 
921
                                                        s->mv[0][0][1] - s->last_mv[0][0][1], s->f_code);
 
922
                        s->last_mv[0][0][0]= s->last_mv[0][1][0]= s->mv[0][0][0];
 
923
                        s->last_mv[0][0][1]= s->last_mv[0][1][1]= s->mv[0][0][1];
 
924
                        s->f_count++;
 
925
                    }
 
926
                    if(s->mv_dir & MV_DIR_BACKWARD){
 
927
                        ff_h263_encode_motion_vector(s, s->mv[1][0][0] - s->last_mv[1][0][0],
 
928
                                                        s->mv[1][0][1] - s->last_mv[1][0][1], s->b_code);
 
929
                        s->last_mv[1][0][0]= s->last_mv[1][1][0]= s->mv[1][0][0];
 
930
                        s->last_mv[1][0][1]= s->last_mv[1][1][1]= s->mv[1][0][1];
 
931
                        s->b_count++;
 
932
                    }
 
933
                }else{
 
934
                    if(s->mv_dir & MV_DIR_FORWARD){
 
935
                        put_bits(&s->pb, 1, s->field_select[0][0]);
 
936
                        put_bits(&s->pb, 1, s->field_select[0][1]);
 
937
                    }
 
938
                    if(s->mv_dir & MV_DIR_BACKWARD){
 
939
                        put_bits(&s->pb, 1, s->field_select[1][0]);
 
940
                        put_bits(&s->pb, 1, s->field_select[1][1]);
 
941
                    }
 
942
                    if(s->mv_dir & MV_DIR_FORWARD){
 
943
                        for(i=0; i<2; i++){
 
944
                            ff_h263_encode_motion_vector(s, s->mv[0][i][0] - s->last_mv[0][i][0]  ,
 
945
                                                            s->mv[0][i][1] - s->last_mv[0][i][1]/2, s->f_code);
 
946
                            s->last_mv[0][i][0]= s->mv[0][i][0];
 
947
                            s->last_mv[0][i][1]= s->mv[0][i][1]*2;
 
948
                        }
 
949
                        s->f_count++;
 
950
                    }
 
951
                    if(s->mv_dir & MV_DIR_BACKWARD){
 
952
                        for(i=0; i<2; i++){
 
953
                            ff_h263_encode_motion_vector(s, s->mv[1][i][0] - s->last_mv[1][i][0]  ,
 
954
                                                            s->mv[1][i][1] - s->last_mv[1][i][1]/2, s->b_code);
 
955
                            s->last_mv[1][i][0]= s->mv[1][i][0];
 
956
                            s->last_mv[1][i][1]= s->mv[1][i][1]*2;
 
957
                        }
 
958
                        s->b_count++;
 
959
                    }
 
960
                }
 
961
            }
 
962
 
 
963
            if(interleaved_stats){
 
964
                s->mv_bits+= get_bits_diff(s);
 
965
            }
 
966
 
 
967
            mpeg4_encode_blocks(s, block, NULL, NULL, NULL, &s->pb);
 
968
 
 
969
            if(interleaved_stats){
 
970
                s->p_tex_bits+= get_bits_diff(s);
 
971
            }
 
972
 
 
973
        }else{ /* s->pict_type==B_TYPE */
 
974
            cbp= get_p_cbp(s, block, motion_x, motion_y);
 
975
 
 
976
            if ((cbp | motion_x | motion_y | s->dquant) == 0 && s->mv_type==MV_TYPE_16X16) {
 
977
                /* check if the B frames can skip it too, as we must skip it if we skip here
 
978
                   why didn't they just compress the skip-mb bits instead of reusing them ?! */
 
979
                if(s->max_b_frames>0){
 
980
                    int i;
 
981
                    int x,y, offset;
 
982
                    uint8_t *p_pic;
 
983
 
 
984
                    x= s->mb_x*16;
 
985
                    y= s->mb_y*16;
 
986
                    if(x+16 > s->width)  x= s->width-16;
 
987
                    if(y+16 > s->height) y= s->height-16;
 
988
 
 
989
                    offset= x + y*s->linesize;
 
990
                    p_pic= s->new_picture.data[0] + offset;
 
991
 
 
992
                    s->mb_skipped=1;
 
993
                    for(i=0; i<s->max_b_frames; i++){
 
994
                        uint8_t *b_pic;
 
995
                        int diff;
 
996
                        Picture *pic= s->reordered_input_picture[i+1];
 
997
 
 
998
                        if(pic==NULL || pic->pict_type!=B_TYPE) break;
 
999
 
 
1000
                        b_pic= pic->data[0] + offset + 16; //FIXME +16
 
1001
                        diff= s->dsp.sad[0](NULL, p_pic, b_pic, s->linesize, 16);
 
1002
                        if(diff>s->qscale*70){ //FIXME check that 70 is optimal
 
1003
                            s->mb_skipped=0;
 
1004
                            break;
 
1005
                        }
 
1006
                    }
 
1007
                }else
 
1008
                    s->mb_skipped=1;
 
1009
 
 
1010
                if(s->mb_skipped==1){
 
1011
                    /* skip macroblock */
 
1012
                    put_bits(&s->pb, 1, 1);
 
1013
 
 
1014
                    if(interleaved_stats){
 
1015
                        s->misc_bits++;
 
1016
                        s->last_bits++;
 
1017
                    }
 
1018
                    s->skip_count++;
 
1019
 
 
1020
                    return;
 
1021
                }
 
1022
            }
 
1023
 
 
1024
            put_bits(&s->pb, 1, 0);     /* mb coded */
 
1025
            cbpc = cbp & 3;
 
1026
            cbpy = cbp >> 2;
 
1027
            cbpy ^= 0xf;
 
1028
            if(s->mv_type==MV_TYPE_16X16){
 
1029
                if(s->dquant) cbpc+= 8;
 
1030
                put_bits(&s->pb,
 
1031
                        inter_MCBPC_bits[cbpc],
 
1032
                        inter_MCBPC_code[cbpc]);
 
1033
 
 
1034
                put_bits(pb2, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
 
1035
                if(s->dquant)
 
1036
                    put_bits(pb2, 2, dquant_code[s->dquant+2]);
 
1037
 
 
1038
                if(!s->progressive_sequence){
 
1039
                    if(cbp)
 
1040
                        put_bits(pb2, 1, s->interlaced_dct);
 
1041
                    put_bits(pb2, 1, 0);
 
1042
                }
 
1043
 
 
1044
                if(interleaved_stats){
 
1045
                    s->misc_bits+= get_bits_diff(s);
 
1046
                }
 
1047
 
 
1048
                /* motion vectors: 16x16 mode */
 
1049
                h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
 
1050
 
 
1051
                ff_h263_encode_motion_vector(s, motion_x - pred_x,
 
1052
                                                motion_y - pred_y, s->f_code);
 
1053
            }else if(s->mv_type==MV_TYPE_FIELD){
 
1054
                if(s->dquant) cbpc+= 8;
 
1055
                put_bits(&s->pb,
 
1056
                        inter_MCBPC_bits[cbpc],
 
1057
                        inter_MCBPC_code[cbpc]);
 
1058
 
 
1059
                put_bits(pb2, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
 
1060
                if(s->dquant)
 
1061
                    put_bits(pb2, 2, dquant_code[s->dquant+2]);
 
1062
 
 
1063
                assert(!s->progressive_sequence);
 
1064
                if(cbp)
 
1065
                    put_bits(pb2, 1, s->interlaced_dct);
 
1066
                put_bits(pb2, 1, 1);
 
1067
 
 
1068
                if(interleaved_stats){
 
1069
                    s->misc_bits+= get_bits_diff(s);
 
1070
                }
 
1071
 
 
1072
                /* motion vectors: 16x8 interlaced mode */
 
1073
                h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
 
1074
                pred_y /=2;
 
1075
 
 
1076
                put_bits(&s->pb, 1, s->field_select[0][0]);
 
1077
                put_bits(&s->pb, 1, s->field_select[0][1]);
 
1078
 
 
1079
                ff_h263_encode_motion_vector(s, s->mv[0][0][0] - pred_x,
 
1080
                                                s->mv[0][0][1] - pred_y, s->f_code);
 
1081
                ff_h263_encode_motion_vector(s, s->mv[0][1][0] - pred_x,
 
1082
                                                s->mv[0][1][1] - pred_y, s->f_code);
 
1083
            }else{
 
1084
                assert(s->mv_type==MV_TYPE_8X8);
 
1085
                put_bits(&s->pb,
 
1086
                        inter_MCBPC_bits[cbpc+16],
 
1087
                        inter_MCBPC_code[cbpc+16]);
 
1088
                put_bits(pb2, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
 
1089
 
 
1090
                if(!s->progressive_sequence){
 
1091
                    if(cbp)
 
1092
                        put_bits(pb2, 1, s->interlaced_dct);
 
1093
                }
 
1094
 
 
1095
                if(interleaved_stats){
 
1096
                    s->misc_bits+= get_bits_diff(s);
 
1097
                }
 
1098
 
 
1099
                for(i=0; i<4; i++){
 
1100
                    /* motion vectors: 8x8 mode*/
 
1101
                    h263_pred_motion(s, i, 0, &pred_x, &pred_y);
 
1102
 
 
1103
                    ff_h263_encode_motion_vector(s, s->current_picture.motion_val[0][ s->block_index[i] ][0] - pred_x,
 
1104
                                                    s->current_picture.motion_val[0][ s->block_index[i] ][1] - pred_y, s->f_code);
 
1105
                }
 
1106
            }
 
1107
 
 
1108
            if(interleaved_stats){
 
1109
                s->mv_bits+= get_bits_diff(s);
 
1110
            }
 
1111
 
 
1112
            mpeg4_encode_blocks(s, block, NULL, NULL, NULL, tex_pb);
 
1113
 
 
1114
            if(interleaved_stats){
 
1115
                s->p_tex_bits+= get_bits_diff(s);
 
1116
            }
 
1117
            s->f_count++;
 
1118
        }
 
1119
    } else {
 
1120
        int cbp;
 
1121
        int dc_diff[6];   //dc values with the dc prediction subtracted
 
1122
        int dir[6];  //prediction direction
 
1123
        int zigzag_last_index[6];
 
1124
        uint8_t *scan_table[6];
 
1125
        int i;
 
1126
 
 
1127
        for(i=0; i<6; i++){
 
1128
            dc_diff[i]= ff_mpeg4_pred_dc(s, i, block[i][0], &dir[i], 1);
 
1129
        }
 
1130
 
 
1131
        if(s->flags & CODEC_FLAG_AC_PRED){
 
1132
            s->ac_pred= decide_ac_pred(s, block, dir, scan_table, zigzag_last_index);
 
1133
            if(!s->ac_pred)
 
1134
                restore_ac_coeffs(s, block, dir, scan_table, zigzag_last_index);
 
1135
        }else{
 
1136
            for(i=0; i<6; i++)
 
1137
                scan_table[i]= s->intra_scantable.permutated;
 
1138
        }
 
1139
 
 
1140
        /* compute cbp */
 
1141
        cbp = 0;
 
1142
        for (i = 0; i < 6; i++) {
 
1143
            if (s->block_last_index[i] >= 1)
 
1144
                cbp |= 1 << (5 - i);
 
1145
        }
 
1146
 
 
1147
        cbpc = cbp & 3;
 
1148
        if (s->pict_type == I_TYPE) {
 
1149
            if(s->dquant) cbpc+=4;
 
1150
            put_bits(&s->pb,
 
1151
                intra_MCBPC_bits[cbpc],
 
1152
                intra_MCBPC_code[cbpc]);
 
1153
        } else {
 
1154
            if(s->dquant) cbpc+=8;
 
1155
            put_bits(&s->pb, 1, 0);     /* mb coded */
 
1156
            put_bits(&s->pb,
 
1157
                inter_MCBPC_bits[cbpc + 4],
 
1158
                inter_MCBPC_code[cbpc + 4]);
 
1159
        }
 
1160
        put_bits(pb2, 1, s->ac_pred);
 
1161
        cbpy = cbp >> 2;
 
1162
        put_bits(pb2, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
 
1163
        if(s->dquant)
 
1164
            put_bits(dc_pb, 2, dquant_code[s->dquant+2]);
 
1165
 
 
1166
        if(!s->progressive_sequence){
 
1167
            put_bits(dc_pb, 1, s->interlaced_dct);
 
1168
        }
 
1169
 
 
1170
        if(interleaved_stats){
 
1171
            s->misc_bits+= get_bits_diff(s);
 
1172
        }
 
1173
 
 
1174
        mpeg4_encode_blocks(s, block, dc_diff, scan_table, dc_pb, tex_pb);
 
1175
 
 
1176
        if(interleaved_stats){
 
1177
            s->i_tex_bits+= get_bits_diff(s);
 
1178
        }
 
1179
        s->i_count++;
 
1180
 
 
1181
        /* restore ac coeffs & last_index stuff if we messed them up with the prediction */
 
1182
        if(s->ac_pred)
 
1183
            restore_ac_coeffs(s, block, dir, scan_table, zigzag_last_index);
 
1184
    }
 
1185
}
 
1186
 
 
1187
void h263_encode_mb(MpegEncContext * s,
 
1188
                    DCTELEM block[6][64],
 
1189
                    int motion_x, int motion_y)
 
1190
{
 
1191
    int cbpc, cbpy, i, cbp, pred_x, pred_y;
 
1192
    int16_t pred_dc;
 
1193
    int16_t rec_intradc[6];
 
1194
    uint16_t *dc_ptr[6];
 
1195
    const int interleaved_stats= (s->flags&CODEC_FLAG_PASS1);
 
1196
    const int dquant_code[5]= {1,0,9,2,3};
 
1197
 
 
1198
    //printf("**mb x=%d y=%d\n", s->mb_x, s->mb_y);
 
1199
    if (!s->mb_intra) {
 
1200
        /* compute cbp */
 
1201
        cbp= get_p_cbp(s, block, motion_x, motion_y);
 
1202
 
 
1203
        if ((cbp | motion_x | motion_y | s->dquant | (s->mv_type - MV_TYPE_16X16)) == 0) {
 
1204
            /* skip macroblock */
 
1205
            put_bits(&s->pb, 1, 1);
 
1206
            if(interleaved_stats){
 
1207
                s->misc_bits++;
 
1208
                s->last_bits++;
 
1209
            }
 
1210
            s->skip_count++;
 
1211
 
 
1212
            return;
 
1213
        }
 
1214
        put_bits(&s->pb, 1, 0);         /* mb coded */
 
1215
 
 
1216
        cbpc = cbp & 3;
 
1217
        cbpy = cbp >> 2;
 
1218
        if(s->alt_inter_vlc==0 || cbpc!=3)
 
1219
            cbpy ^= 0xF;
 
1220
        if(s->dquant) cbpc+= 8;
 
1221
        if(s->mv_type==MV_TYPE_16X16){
 
1222
            put_bits(&s->pb,
 
1223
                    inter_MCBPC_bits[cbpc],
 
1224
                    inter_MCBPC_code[cbpc]);
 
1225
 
 
1226
            put_bits(&s->pb, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
 
1227
            if(s->dquant)
 
1228
                put_bits(&s->pb, 2, dquant_code[s->dquant+2]);
 
1229
 
 
1230
            if(interleaved_stats){
 
1231
                s->misc_bits+= get_bits_diff(s);
 
1232
            }
 
1233
 
 
1234
            /* motion vectors: 16x16 mode */
 
1235
            h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
 
1236
 
 
1237
            if (!s->umvplus) {
 
1238
                ff_h263_encode_motion_vector(s, motion_x - pred_x,
 
1239
                                                motion_y - pred_y, 1);
 
1240
            }
 
1241
            else {
 
1242
                h263p_encode_umotion(s, motion_x - pred_x);
 
1243
                h263p_encode_umotion(s, motion_y - pred_y);
 
1244
                if (((motion_x - pred_x) == 1) && ((motion_y - pred_y) == 1))
 
1245
                    /* To prevent Start Code emulation */
 
1246
                    put_bits(&s->pb,1,1);
 
1247
            }
 
1248
        }else{
 
1249
            put_bits(&s->pb,
 
1250
                    inter_MCBPC_bits[cbpc+16],
 
1251
                    inter_MCBPC_code[cbpc+16]);
 
1252
            put_bits(&s->pb, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
 
1253
            if(s->dquant)
 
1254
                put_bits(&s->pb, 2, dquant_code[s->dquant+2]);
 
1255
 
 
1256
            if(interleaved_stats){
 
1257
                s->misc_bits+= get_bits_diff(s);
 
1258
            }
 
1259
 
 
1260
            for(i=0; i<4; i++){
 
1261
                /* motion vectors: 8x8 mode*/
 
1262
                h263_pred_motion(s, i, 0, &pred_x, &pred_y);
 
1263
 
 
1264
                motion_x= s->current_picture.motion_val[0][ s->block_index[i] ][0];
 
1265
                motion_y= s->current_picture.motion_val[0][ s->block_index[i] ][1];
 
1266
                if (!s->umvplus) {
 
1267
                    ff_h263_encode_motion_vector(s, motion_x - pred_x,
 
1268
                                                    motion_y - pred_y, 1);
 
1269
                }
 
1270
                else {
 
1271
                    h263p_encode_umotion(s, motion_x - pred_x);
 
1272
                    h263p_encode_umotion(s, motion_y - pred_y);
 
1273
                    if (((motion_x - pred_x) == 1) && ((motion_y - pred_y) == 1))
 
1274
                        /* To prevent Start Code emulation */
 
1275
                        put_bits(&s->pb,1,1);
 
1276
                }
 
1277
            }
 
1278
        }
 
1279
 
 
1280
        if(interleaved_stats){
 
1281
            s->mv_bits+= get_bits_diff(s);
 
1282
        }
 
1283
    } else {
 
1284
        assert(s->mb_intra);
 
1285
 
 
1286
        cbp = 0;
 
1287
        if (s->h263_aic) {
 
1288
            /* Predict DC */
 
1289
            for(i=0; i<6; i++) {
 
1290
                int16_t level = block[i][0];
 
1291
                int scale;
 
1292
 
 
1293
                if(i<4) scale= s->y_dc_scale;
 
1294
                else    scale= s->c_dc_scale;
 
1295
 
 
1296
                pred_dc = h263_pred_dc(s, i, &dc_ptr[i]);
 
1297
                level -= pred_dc;
 
1298
                /* Quant */
 
1299
                if (level >= 0)
 
1300
                    level = (level + (scale>>1))/scale;
 
1301
                else
 
1302
                    level = (level - (scale>>1))/scale;
 
1303
 
 
1304
                /* AIC can change CBP */
 
1305
                if (level == 0 && s->block_last_index[i] == 0)
 
1306
                    s->block_last_index[i] = -1;
 
1307
 
 
1308
                if(!s->modified_quant){
 
1309
                    if (level < -127)
 
1310
                        level = -127;
 
1311
                    else if (level > 127)
 
1312
                        level = 127;
 
1313
                }
 
1314
 
 
1315
                block[i][0] = level;
 
1316
                /* Reconstruction */
 
1317
                rec_intradc[i] = scale*level + pred_dc;
 
1318
                /* Oddify */
 
1319
                rec_intradc[i] |= 1;
 
1320
                //if ((rec_intradc[i] % 2) == 0)
 
1321
                //    rec_intradc[i]++;
 
1322
                /* Clipping */
 
1323
                if (rec_intradc[i] < 0)
 
1324
                    rec_intradc[i] = 0;
 
1325
                else if (rec_intradc[i] > 2047)
 
1326
                    rec_intradc[i] = 2047;
 
1327
 
 
1328
                /* Update AC/DC tables */
 
1329
                *dc_ptr[i] = rec_intradc[i];
 
1330
                if (s->block_last_index[i] >= 0)
 
1331
                    cbp |= 1 << (5 - i);
 
1332
            }
 
1333
        }else{
 
1334
            for(i=0; i<6; i++) {
 
1335
                /* compute cbp */
 
1336
                if (s->block_last_index[i] >= 1)
 
1337
                    cbp |= 1 << (5 - i);
 
1338
            }
 
1339
        }
 
1340
 
 
1341
        cbpc = cbp & 3;
 
1342
        if (s->pict_type == I_TYPE) {
 
1343
            if(s->dquant) cbpc+=4;
 
1344
            put_bits(&s->pb,
 
1345
                intra_MCBPC_bits[cbpc],
 
1346
                intra_MCBPC_code[cbpc]);
 
1347
        } else {
 
1348
            if(s->dquant) cbpc+=8;
 
1349
            put_bits(&s->pb, 1, 0);     /* mb coded */
 
1350
            put_bits(&s->pb,
 
1351
                inter_MCBPC_bits[cbpc + 4],
 
1352
                inter_MCBPC_code[cbpc + 4]);
 
1353
        }
 
1354
        if (s->h263_aic) {
 
1355
            /* XXX: currently, we do not try to use ac prediction */
 
1356
            put_bits(&s->pb, 1, 0);     /* no AC prediction */
 
1357
        }
 
1358
        cbpy = cbp >> 2;
 
1359
        put_bits(&s->pb, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
 
1360
        if(s->dquant)
 
1361
            put_bits(&s->pb, 2, dquant_code[s->dquant+2]);
 
1362
 
 
1363
        if(interleaved_stats){
 
1364
            s->misc_bits+= get_bits_diff(s);
 
1365
        }
 
1366
    }
 
1367
 
 
1368
    for(i=0; i<6; i++) {
 
1369
        /* encode each block */
 
1370
        h263_encode_block(s, block[i], i);
 
1371
 
 
1372
        /* Update INTRADC for decoding */
 
1373
        if (s->h263_aic && s->mb_intra) {
 
1374
            block[i][0] = rec_intradc[i];
 
1375
 
 
1376
        }
 
1377
    }
 
1378
 
 
1379
    if(interleaved_stats){
 
1380
        if (!s->mb_intra) {
 
1381
            s->p_tex_bits+= get_bits_diff(s);
 
1382
            s->f_count++;
 
1383
        }else{
 
1384
            s->i_tex_bits+= get_bits_diff(s);
 
1385
            s->i_count++;
 
1386
        }
 
1387
    }
 
1388
}
 
1389
#endif
 
1390
 
 
1391
void ff_h263_loop_filter(MpegEncContext * s){
 
1392
    int qp_c;
 
1393
    const int linesize  = s->linesize;
 
1394
    const int uvlinesize= s->uvlinesize;
 
1395
    const int xy = s->mb_y * s->mb_stride + s->mb_x;
 
1396
    uint8_t *dest_y = s->dest[0];
 
1397
    uint8_t *dest_cb= s->dest[1];
 
1398
    uint8_t *dest_cr= s->dest[2];
 
1399
 
 
1400
//    if(s->pict_type==B_TYPE && !s->readable) return;
 
1401
 
 
1402
    /*
 
1403
       Diag Top
 
1404
       Left Center
 
1405
    */
 
1406
    if(!IS_SKIP(s->current_picture.mb_type[xy])){
 
1407
        qp_c= s->qscale;
 
1408
        s->dsp.h263_v_loop_filter(dest_y+8*linesize  , linesize, qp_c);
 
1409
        s->dsp.h263_v_loop_filter(dest_y+8*linesize+8, linesize, qp_c);
 
1410
    }else
 
1411
        qp_c= 0;
 
1412
 
 
1413
    if(s->mb_y){
 
1414
        int qp_dt, qp_t, qp_tc;
 
1415
 
 
1416
        if(IS_SKIP(s->current_picture.mb_type[xy-s->mb_stride]))
 
1417
            qp_t=0;
 
1418
        else
 
1419
            qp_t= s->current_picture.qscale_table[xy-s->mb_stride];
 
1420
 
 
1421
        if(qp_c)
 
1422
            qp_tc= qp_c;
 
1423
        else
 
1424
            qp_tc= qp_t;
 
1425
 
 
1426
        if(qp_tc){
 
1427
            const int chroma_qp= s->chroma_qscale_table[qp_tc];
 
1428
            s->dsp.h263_v_loop_filter(dest_y  ,   linesize, qp_tc);
 
1429
            s->dsp.h263_v_loop_filter(dest_y+8,   linesize, qp_tc);
 
1430
 
 
1431
            s->dsp.h263_v_loop_filter(dest_cb , uvlinesize, chroma_qp);
 
1432
            s->dsp.h263_v_loop_filter(dest_cr , uvlinesize, chroma_qp);
 
1433
        }
 
1434
 
 
1435
        if(qp_t)
 
1436
            s->dsp.h263_h_loop_filter(dest_y-8*linesize+8  ,   linesize, qp_t);
 
1437
 
 
1438
        if(s->mb_x){
 
1439
            if(qp_t || IS_SKIP(s->current_picture.mb_type[xy-1-s->mb_stride]))
 
1440
                qp_dt= qp_t;
 
1441
            else
 
1442
                qp_dt= s->current_picture.qscale_table[xy-1-s->mb_stride];
 
1443
 
 
1444
            if(qp_dt){
 
1445
                const int chroma_qp= s->chroma_qscale_table[qp_dt];
 
1446
                s->dsp.h263_h_loop_filter(dest_y -8*linesize  ,   linesize, qp_dt);
 
1447
                s->dsp.h263_h_loop_filter(dest_cb-8*uvlinesize, uvlinesize, chroma_qp);
 
1448
                s->dsp.h263_h_loop_filter(dest_cr-8*uvlinesize, uvlinesize, chroma_qp);
 
1449
            }
 
1450
        }
 
1451
    }
 
1452
 
 
1453
    if(qp_c){
 
1454
        s->dsp.h263_h_loop_filter(dest_y +8,   linesize, qp_c);
 
1455
        if(s->mb_y + 1 == s->mb_height)
 
1456
            s->dsp.h263_h_loop_filter(dest_y+8*linesize+8,   linesize, qp_c);
 
1457
    }
 
1458
 
 
1459
    if(s->mb_x){
 
1460
        int qp_lc;
 
1461
        if(qp_c || IS_SKIP(s->current_picture.mb_type[xy-1]))
 
1462
            qp_lc= qp_c;
 
1463
        else
 
1464
            qp_lc= s->current_picture.qscale_table[xy-1];
 
1465
 
 
1466
        if(qp_lc){
 
1467
            s->dsp.h263_h_loop_filter(dest_y,   linesize, qp_lc);
 
1468
            if(s->mb_y + 1 == s->mb_height){
 
1469
                const int chroma_qp= s->chroma_qscale_table[qp_lc];
 
1470
                s->dsp.h263_h_loop_filter(dest_y +8*  linesize,   linesize, qp_lc);
 
1471
                s->dsp.h263_h_loop_filter(dest_cb             , uvlinesize, chroma_qp);
 
1472
                s->dsp.h263_h_loop_filter(dest_cr             , uvlinesize, chroma_qp);
 
1473
            }
 
1474
        }
 
1475
    }
 
1476
}
 
1477
 
 
1478
static int h263_pred_dc(MpegEncContext * s, int n, uint16_t **dc_val_ptr)
 
1479
{
 
1480
    int x, y, wrap, a, c, pred_dc, scale;
 
1481
    int16_t *dc_val, *ac_val;
 
1482
 
 
1483
    /* find prediction */
 
1484
    if (n < 4) {
 
1485
        x = 2 * s->mb_x + (n & 1);
 
1486
        y = 2 * s->mb_y + ((n & 2) >> 1);
 
1487
        wrap = s->b8_stride;
 
1488
        dc_val = s->dc_val[0];
 
1489
        ac_val = s->ac_val[0][0];
 
1490
        scale = s->y_dc_scale;
 
1491
    } else {
 
1492
        x = s->mb_x;
 
1493
        y = s->mb_y;
 
1494
        wrap = s->mb_stride;
 
1495
        dc_val = s->dc_val[n - 4 + 1];
 
1496
        ac_val = s->ac_val[n - 4 + 1][0];
 
1497
        scale = s->c_dc_scale;
 
1498
    }
 
1499
    /* B C
 
1500
     * A X
 
1501
     */
 
1502
    a = dc_val[(x - 1) + (y) * wrap];
 
1503
    c = dc_val[(x) + (y - 1) * wrap];
 
1504
 
 
1505
    /* No prediction outside GOB boundary */
 
1506
    if(s->first_slice_line && n!=3){
 
1507
        if(n!=2) c= 1024;
 
1508
        if(n!=1 && s->mb_x == s->resync_mb_x) a= 1024;
 
1509
    }
 
1510
    pred_dc = 1024;
 
1511
    /* just DC prediction */
 
1512
    if (a != 1024 && c != 1024)
 
1513
        pred_dc = (a + c) >> 1;
 
1514
    else if (a != 1024)
 
1515
        pred_dc = a;
 
1516
    else
 
1517
        pred_dc = c;
 
1518
 
 
1519
    /* we assume pred is positive */
 
1520
    //pred_dc = (pred_dc + (scale >> 1)) / scale;
 
1521
    *dc_val_ptr = &dc_val[x + y * wrap];
 
1522
    return pred_dc;
 
1523
}
 
1524
 
 
1525
static void h263_pred_acdc(MpegEncContext * s, DCTELEM *block, int n)
 
1526
{
 
1527
    int x, y, wrap, a, c, pred_dc, scale, i;
 
1528
    int16_t *dc_val, *ac_val, *ac_val1;
 
1529
 
 
1530
    /* find prediction */
 
1531
    if (n < 4) {
 
1532
        x = 2 * s->mb_x + (n & 1);
 
1533
        y = 2 * s->mb_y + (n>> 1);
 
1534
        wrap = s->b8_stride;
 
1535
        dc_val = s->dc_val[0];
 
1536
        ac_val = s->ac_val[0][0];
 
1537
        scale = s->y_dc_scale;
 
1538
    } else {
 
1539
        x = s->mb_x;
 
1540
        y = s->mb_y;
 
1541
        wrap = s->mb_stride;
 
1542
        dc_val = s->dc_val[n - 4 + 1];
 
1543
        ac_val = s->ac_val[n - 4 + 1][0];
 
1544
        scale = s->c_dc_scale;
 
1545
    }
 
1546
 
 
1547
    ac_val += ((y) * wrap + (x)) * 16;
 
1548
    ac_val1 = ac_val;
 
1549
 
 
1550
    /* B C
 
1551
     * A X
 
1552
     */
 
1553
    a = dc_val[(x - 1) + (y) * wrap];
 
1554
    c = dc_val[(x) + (y - 1) * wrap];
 
1555
 
 
1556
    /* No prediction outside GOB boundary */
 
1557
    if(s->first_slice_line && n!=3){
 
1558
        if(n!=2) c= 1024;
 
1559
        if(n!=1 && s->mb_x == s->resync_mb_x) a= 1024;
 
1560
    }
 
1561
 
 
1562
    if (s->ac_pred) {
 
1563
        pred_dc = 1024;
 
1564
        if (s->h263_aic_dir) {
 
1565
            /* left prediction */
 
1566
            if (a != 1024) {
 
1567
                ac_val -= 16;
 
1568
                for(i=1;i<8;i++) {
 
1569
                    block[s->dsp.idct_permutation[i<<3]] += ac_val[i];
 
1570
                }
 
1571
                pred_dc = a;
 
1572
            }
 
1573
        } else {
 
1574
            /* top prediction */
 
1575
            if (c != 1024) {
 
1576
                ac_val -= 16 * wrap;
 
1577
                for(i=1;i<8;i++) {
 
1578
                    block[s->dsp.idct_permutation[i   ]] += ac_val[i + 8];
 
1579
                }
 
1580
                pred_dc = c;
 
1581
            }
 
1582
        }
 
1583
    } else {
 
1584
        /* just DC prediction */
 
1585
        if (a != 1024 && c != 1024)
 
1586
            pred_dc = (a + c) >> 1;
 
1587
        else if (a != 1024)
 
1588
            pred_dc = a;
 
1589
        else
 
1590
            pred_dc = c;
 
1591
    }
 
1592
 
 
1593
    /* we assume pred is positive */
 
1594
    block[0]=block[0]*scale + pred_dc;
 
1595
 
 
1596
    if (block[0] < 0)
 
1597
        block[0] = 0;
 
1598
    else
 
1599
        block[0] |= 1;
 
1600
 
 
1601
    /* Update AC/DC tables */
 
1602
    dc_val[(x) + (y) * wrap] = block[0];
 
1603
 
 
1604
    /* left copy */
 
1605
    for(i=1;i<8;i++)
 
1606
        ac_val1[i    ] = block[s->dsp.idct_permutation[i<<3]];
 
1607
    /* top copy */
 
1608
    for(i=1;i<8;i++)
 
1609
        ac_val1[8 + i] = block[s->dsp.idct_permutation[i   ]];
 
1610
}
 
1611
 
 
1612
int16_t *h263_pred_motion(MpegEncContext * s, int block, int dir,
 
1613
                        int *px, int *py)
 
1614
{
 
1615
    int wrap;
 
1616
    int16_t *A, *B, *C, (*mot_val)[2];
 
1617
    static const int off[4]= {2, 1, 1, -1};
 
1618
 
 
1619
    wrap = s->b8_stride;
 
1620
    mot_val = s->current_picture.motion_val[dir] + s->block_index[block];
 
1621
 
 
1622
    A = mot_val[ - 1];
 
1623
    /* special case for first (slice) line */
 
1624
    if (s->first_slice_line && block<3) {
 
1625
        // we can't just change some MVs to simulate that as we need them for the B frames (and ME)
 
1626
        // and if we ever support non rectangular objects than we need to do a few ifs here anyway :(
 
1627
        if(block==0){ //most common case
 
1628
            if(s->mb_x  == s->resync_mb_x){ //rare
 
1629
                *px= *py = 0;
 
1630
            }else if(s->mb_x + 1 == s->resync_mb_x && s->h263_pred){ //rare
 
1631
                C = mot_val[off[block] - wrap];
 
1632
                if(s->mb_x==0){
 
1633
                    *px = C[0];
 
1634
                    *py = C[1];
 
1635
                }else{
 
1636
                    *px = mid_pred(A[0], 0, C[0]);
 
1637
                    *py = mid_pred(A[1], 0, C[1]);
 
1638
                }
 
1639
            }else{
 
1640
                *px = A[0];
 
1641
                *py = A[1];
 
1642
            }
 
1643
        }else if(block==1){
 
1644
            if(s->mb_x + 1 == s->resync_mb_x && s->h263_pred){ //rare
 
1645
                C = mot_val[off[block] - wrap];
 
1646
                *px = mid_pred(A[0], 0, C[0]);
 
1647
                *py = mid_pred(A[1], 0, C[1]);
 
1648
            }else{
 
1649
                *px = A[0];
 
1650
                *py = A[1];
 
1651
            }
 
1652
        }else{ /* block==2*/
 
1653
            B = mot_val[ - wrap];
 
1654
            C = mot_val[off[block] - wrap];
 
1655
            if(s->mb_x == s->resync_mb_x) //rare
 
1656
                A[0]=A[1]=0;
 
1657
 
 
1658
            *px = mid_pred(A[0], B[0], C[0]);
 
1659
            *py = mid_pred(A[1], B[1], C[1]);
 
1660
        }
 
1661
    } else {
 
1662
        B = mot_val[ - wrap];
 
1663
        C = mot_val[off[block] - wrap];
 
1664
        *px = mid_pred(A[0], B[0], C[0]);
 
1665
        *py = mid_pred(A[1], B[1], C[1]);
 
1666
    }
 
1667
    return *mot_val;
 
1668
}
 
1669
 
 
1670
#ifdef CONFIG_ENCODERS
 
1671
void ff_h263_encode_motion(MpegEncContext * s, int val, int f_code)
 
1672
{
 
1673
    int range, l, bit_size, sign, code, bits;
 
1674
 
 
1675
    if (val == 0) {
 
1676
        /* zero vector */
 
1677
        code = 0;
 
1678
        put_bits(&s->pb, mvtab[code][1], mvtab[code][0]);
 
1679
    } else {
 
1680
        bit_size = f_code - 1;
 
1681
        range = 1 << bit_size;
 
1682
        /* modulo encoding */
 
1683
        l= INT_BIT - 6 - bit_size;
 
1684
        val = (val<<l)>>l;
 
1685
        sign = val>>31;
 
1686
        val= (val^sign)-sign;
 
1687
        sign&=1;
 
1688
 
 
1689
        val--;
 
1690
        code = (val >> bit_size) + 1;
 
1691
        bits = val & (range - 1);
 
1692
 
 
1693
        put_bits(&s->pb, mvtab[code][1] + 1, (mvtab[code][0] << 1) | sign);
 
1694
        if (bit_size > 0) {
 
1695
            put_bits(&s->pb, bit_size, bits);
 
1696
        }
 
1697
    }
 
1698
}
 
1699
 
 
1700
/* Encode MV differences on H.263+ with Unrestricted MV mode */
 
1701
static void h263p_encode_umotion(MpegEncContext * s, int val)
 
1702
{
 
1703
    short sval = 0;
 
1704
    short i = 0;
 
1705
    short n_bits = 0;
 
1706
    short temp_val;
 
1707
    int code = 0;
 
1708
    int tcode;
 
1709
 
 
1710
    if ( val == 0)
 
1711
        put_bits(&s->pb, 1, 1);
 
1712
    else if (val == 1)
 
1713
        put_bits(&s->pb, 3, 0);
 
1714
    else if (val == -1)
 
1715
        put_bits(&s->pb, 3, 2);
 
1716
    else {
 
1717
 
 
1718
        sval = ((val < 0) ? (short)(-val):(short)val);
 
1719
        temp_val = sval;
 
1720
 
 
1721
        while (temp_val != 0) {
 
1722
            temp_val = temp_val >> 1;
 
1723
            n_bits++;
 
1724
        }
 
1725
 
 
1726
        i = n_bits - 1;
 
1727
        while (i > 0) {
 
1728
            tcode = (sval & (1 << (i-1))) >> (i-1);
 
1729
            tcode = (tcode << 1) | 1;
 
1730
            code = (code << 2) | tcode;
 
1731
            i--;
 
1732
        }
 
1733
        code = ((code << 1) | (val < 0)) << 1;
 
1734
        put_bits(&s->pb, (2*n_bits)+1, code);
 
1735
        //printf("\nVal = %d\tCode = %d", sval, code);
 
1736
    }
 
1737
}
 
1738
 
 
1739
static void init_mv_penalty_and_fcode(MpegEncContext *s)
 
1740
{
 
1741
    int f_code;
 
1742
    int mv;
 
1743
 
 
1744
    if(mv_penalty==NULL)
 
1745
        mv_penalty= av_mallocz( sizeof(uint8_t)*(MAX_FCODE+1)*(2*MAX_MV+1) );
 
1746
 
 
1747
    for(f_code=1; f_code<=MAX_FCODE; f_code++){
 
1748
        for(mv=-MAX_MV; mv<=MAX_MV; mv++){
 
1749
            int len;
 
1750
 
 
1751
            if(mv==0) len= mvtab[0][1];
 
1752
            else{
 
1753
                int val, bit_size, range, code;
 
1754
 
 
1755
                bit_size = f_code - 1;
 
1756
                range = 1 << bit_size;
 
1757
 
 
1758
                val=mv;
 
1759
                if (val < 0)
 
1760
                    val = -val;
 
1761
                val--;
 
1762
                code = (val >> bit_size) + 1;
 
1763
                if(code<33){
 
1764
                    len= mvtab[code][1] + 1 + bit_size;
 
1765
                }else{
 
1766
                    len= mvtab[32][1] + av_log2(code>>5) + 2 + bit_size;
 
1767
                }
 
1768
            }
 
1769
 
 
1770
            mv_penalty[f_code][mv+MAX_MV]= len;
 
1771
        }
 
1772
    }
 
1773
 
 
1774
    for(f_code=MAX_FCODE; f_code>0; f_code--){
 
1775
        for(mv=-(16<<f_code); mv<(16<<f_code); mv++){
 
1776
            fcode_tab[mv+MAX_MV]= f_code;
 
1777
        }
 
1778
    }
 
1779
 
 
1780
    for(mv=0; mv<MAX_MV*2+1; mv++){
 
1781
        umv_fcode_tab[mv]= 1;
 
1782
    }
 
1783
}
 
1784
#endif
 
1785
 
 
1786
#ifdef CONFIG_ENCODERS
 
1787
 
 
1788
static void init_uni_dc_tab(void)
 
1789
{
 
1790
    int level, uni_code, uni_len;
 
1791
 
 
1792
    for(level=-256; level<256; level++){
 
1793
        int size, v, l;
 
1794
        /* find number of bits */
 
1795
        size = 0;
 
1796
        v = abs(level);
 
1797
        while (v) {
 
1798
            v >>= 1;
 
1799
            size++;
 
1800
        }
 
1801
 
 
1802
        if (level < 0)
 
1803
            l= (-level) ^ ((1 << size) - 1);
 
1804
        else
 
1805
            l= level;
 
1806
 
 
1807
        /* luminance */
 
1808
        uni_code= DCtab_lum[size][0];
 
1809
        uni_len = DCtab_lum[size][1];
 
1810
 
 
1811
        if (size > 0) {
 
1812
            uni_code<<=size; uni_code|=l;
 
1813
            uni_len+=size;
 
1814
            if (size > 8){
 
1815
                uni_code<<=1; uni_code|=1;
 
1816
                uni_len++;
 
1817
            }
 
1818
        }
 
1819
        uni_DCtab_lum_bits[level+256]= uni_code;
 
1820
        uni_DCtab_lum_len [level+256]= uni_len;
 
1821
 
 
1822
        /* chrominance */
 
1823
        uni_code= DCtab_chrom[size][0];
 
1824
        uni_len = DCtab_chrom[size][1];
 
1825
 
 
1826
        if (size > 0) {
 
1827
            uni_code<<=size; uni_code|=l;
 
1828
            uni_len+=size;
 
1829
            if (size > 8){
 
1830
                uni_code<<=1; uni_code|=1;
 
1831
                uni_len++;
 
1832
            }
 
1833
        }
 
1834
        uni_DCtab_chrom_bits[level+256]= uni_code;
 
1835
        uni_DCtab_chrom_len [level+256]= uni_len;
 
1836
 
 
1837
    }
 
1838
}
 
1839
 
 
1840
#endif //CONFIG_ENCODERS
 
1841
 
 
1842
#ifdef CONFIG_ENCODERS
 
1843
static void init_uni_mpeg4_rl_tab(RLTable *rl, uint32_t *bits_tab, uint8_t *len_tab){
 
1844
    int slevel, run, last;
 
1845
 
 
1846
    assert(MAX_LEVEL >= 64);
 
1847
    assert(MAX_RUN   >= 63);
 
1848
 
 
1849
    for(slevel=-64; slevel<64; slevel++){
 
1850
        if(slevel==0) continue;
 
1851
        for(run=0; run<64; run++){
 
1852
            for(last=0; last<=1; last++){
 
1853
                const int index= UNI_MPEG4_ENC_INDEX(last, run, slevel+64);
 
1854
                int level= slevel < 0 ? -slevel : slevel;
 
1855
                int sign= slevel < 0 ? 1 : 0;
 
1856
                int bits, len, code;
 
1857
                int level1, run1;
 
1858
 
 
1859
                len_tab[index]= 100;
 
1860
 
 
1861
                /* ESC0 */
 
1862
                code= get_rl_index(rl, last, run, level);
 
1863
                bits= rl->table_vlc[code][0];
 
1864
                len=  rl->table_vlc[code][1];
 
1865
                bits=bits*2+sign; len++;
 
1866
 
 
1867
                if(code!=rl->n && len < len_tab[index]){
 
1868
                    bits_tab[index]= bits;
 
1869
                    len_tab [index]= len;
 
1870
                }
 
1871
#if 1
 
1872
                /* ESC1 */
 
1873
                bits= rl->table_vlc[rl->n][0];
 
1874
                len=  rl->table_vlc[rl->n][1];
 
1875
                bits=bits*2;    len++; //esc1
 
1876
                level1= level - rl->max_level[last][run];
 
1877
                if(level1>0){
 
1878
                    code= get_rl_index(rl, last, run, level1);
 
1879
                    bits<<= rl->table_vlc[code][1];
 
1880
                    len  += rl->table_vlc[code][1];
 
1881
                    bits += rl->table_vlc[code][0];
 
1882
                    bits=bits*2+sign; len++;
 
1883
 
 
1884
                    if(code!=rl->n && len < len_tab[index]){
 
1885
                        bits_tab[index]= bits;
 
1886
                        len_tab [index]= len;
 
1887
                    }
 
1888
                }
 
1889
#endif
 
1890
#if 1
 
1891
                /* ESC2 */
 
1892
                bits= rl->table_vlc[rl->n][0];
 
1893
                len=  rl->table_vlc[rl->n][1];
 
1894
                bits=bits*4+2;    len+=2; //esc2
 
1895
                run1 = run - rl->max_run[last][level] - 1;
 
1896
                if(run1>=0){
 
1897
                    code= get_rl_index(rl, last, run1, level);
 
1898
                    bits<<= rl->table_vlc[code][1];
 
1899
                    len  += rl->table_vlc[code][1];
 
1900
                    bits += rl->table_vlc[code][0];
 
1901
                    bits=bits*2+sign; len++;
 
1902
 
 
1903
                    if(code!=rl->n && len < len_tab[index]){
 
1904
                        bits_tab[index]= bits;
 
1905
                        len_tab [index]= len;
 
1906
                    }
 
1907
                }
 
1908
#endif
 
1909
                /* ESC3 */
 
1910
                bits= rl->table_vlc[rl->n][0];
 
1911
                len = rl->table_vlc[rl->n][1];
 
1912
                bits=bits*4+3;    len+=2; //esc3
 
1913
                bits=bits*2+last; len++;
 
1914
                bits=bits*64+run; len+=6;
 
1915
                bits=bits*2+1;    len++;  //marker
 
1916
                bits=bits*4096+(slevel&0xfff); len+=12;
 
1917
                bits=bits*2+1;    len++;  //marker
 
1918
 
 
1919
                if(len < len_tab[index]){
 
1920
                    bits_tab[index]= bits;
 
1921
                    len_tab [index]= len;
 
1922
                }
 
1923
            }
 
1924
        }
 
1925
    }
 
1926
}
 
1927
 
 
1928
static void init_uni_h263_rl_tab(RLTable *rl, uint32_t *bits_tab, uint8_t *len_tab){
 
1929
    int slevel, run, last;
 
1930
 
 
1931
    assert(MAX_LEVEL >= 64);
 
1932
    assert(MAX_RUN   >= 63);
 
1933
 
 
1934
    for(slevel=-64; slevel<64; slevel++){
 
1935
        if(slevel==0) continue;
 
1936
        for(run=0; run<64; run++){
 
1937
            for(last=0; last<=1; last++){
 
1938
                const int index= UNI_MPEG4_ENC_INDEX(last, run, slevel+64);
 
1939
                int level= slevel < 0 ? -slevel : slevel;
 
1940
                int sign= slevel < 0 ? 1 : 0;
 
1941
                int bits, len, code;
 
1942
 
 
1943
                len_tab[index]= 100;
 
1944
 
 
1945
                /* ESC0 */
 
1946
                code= get_rl_index(rl, last, run, level);
 
1947
                bits= rl->table_vlc[code][0];
 
1948
                len=  rl->table_vlc[code][1];
 
1949
                bits=bits*2+sign; len++;
 
1950
 
 
1951
                if(code!=rl->n && len < len_tab[index]){
 
1952
                    if(bits_tab) bits_tab[index]= bits;
 
1953
                    len_tab [index]= len;
 
1954
                }
 
1955
                /* ESC */
 
1956
                bits= rl->table_vlc[rl->n][0];
 
1957
                len = rl->table_vlc[rl->n][1];
 
1958
                bits=bits*2+last; len++;
 
1959
                bits=bits*64+run; len+=6;
 
1960
                bits=bits*256+(level&0xff); len+=8;
 
1961
 
 
1962
                if(len < len_tab[index]){
 
1963
                    if(bits_tab) bits_tab[index]= bits;
 
1964
                    len_tab [index]= len;
 
1965
                }
 
1966
            }
 
1967
        }
 
1968
    }
 
1969
}
 
1970
 
 
1971
void h263_encode_init(MpegEncContext *s)
 
1972
{
 
1973
    static int done = 0;
 
1974
 
 
1975
    if (!done) {
 
1976
        done = 1;
 
1977
 
 
1978
        init_uni_dc_tab();
 
1979
 
 
1980
        init_rl(&rl_inter, 1);
 
1981
        init_rl(&rl_intra, 1);
 
1982
        init_rl(&rl_intra_aic, 1);
 
1983
 
 
1984
        init_uni_mpeg4_rl_tab(&rl_intra, uni_mpeg4_intra_rl_bits, uni_mpeg4_intra_rl_len);
 
1985
        init_uni_mpeg4_rl_tab(&rl_inter, uni_mpeg4_inter_rl_bits, uni_mpeg4_inter_rl_len);
 
1986
 
 
1987
        init_uni_h263_rl_tab(&rl_intra_aic, NULL, uni_h263_intra_aic_rl_len);
 
1988
        init_uni_h263_rl_tab(&rl_inter    , NULL, uni_h263_inter_rl_len);
 
1989
 
 
1990
        init_mv_penalty_and_fcode(s);
 
1991
    }
 
1992
    s->me.mv_penalty= mv_penalty; //FIXME exact table for msmpeg4 & h263p
 
1993
 
 
1994
    s->intra_ac_vlc_length     =s->inter_ac_vlc_length     = uni_h263_inter_rl_len;
 
1995
    s->intra_ac_vlc_last_length=s->inter_ac_vlc_last_length= uni_h263_inter_rl_len + 128*64;
 
1996
    if(s->h263_aic){
 
1997
        s->intra_ac_vlc_length     = uni_h263_intra_aic_rl_len;
 
1998
        s->intra_ac_vlc_last_length= uni_h263_intra_aic_rl_len + 128*64;
 
1999
    }
 
2000
    s->ac_esc_length= 7+1+6+8;
 
2001
 
 
2002
    // use fcodes >1 only for mpeg4 & h263 & h263p FIXME
 
2003
    switch(s->codec_id){
 
2004
    case CODEC_ID_MPEG4:
 
2005
        s->fcode_tab= fcode_tab;
 
2006
        s->min_qcoeff= -2048;
 
2007
        s->max_qcoeff=  2047;
 
2008
        s->intra_ac_vlc_length     = uni_mpeg4_intra_rl_len;
 
2009
        s->intra_ac_vlc_last_length= uni_mpeg4_intra_rl_len + 128*64;
 
2010
        s->inter_ac_vlc_length     = uni_mpeg4_inter_rl_len;
 
2011
        s->inter_ac_vlc_last_length= uni_mpeg4_inter_rl_len + 128*64;
 
2012
        s->luma_dc_vlc_length= uni_DCtab_lum_len;
 
2013
        s->chroma_dc_vlc_length= uni_DCtab_chrom_len;
 
2014
        s->ac_esc_length= 7+2+1+6+1+12+1;
 
2015
        s->y_dc_scale_table= ff_mpeg4_y_dc_scale_table;
 
2016
        s->c_dc_scale_table= ff_mpeg4_c_dc_scale_table;
 
2017
 
 
2018
        if(s->flags & CODEC_FLAG_GLOBAL_HEADER){
 
2019
 
 
2020
            s->avctx->extradata= av_malloc(1024);
 
2021
            init_put_bits(&s->pb, s->avctx->extradata, 1024);
 
2022
 
 
2023
            if(!(s->workaround_bugs & FF_BUG_MS))
 
2024
                mpeg4_encode_visual_object_header(s);
 
2025
            mpeg4_encode_vol_header(s, 0, 0);
 
2026
 
 
2027
//            ff_mpeg4_stuffing(&s->pb); ?
 
2028
            flush_put_bits(&s->pb);
 
2029
            s->avctx->extradata_size= (put_bits_count(&s->pb)+7)>>3;
 
2030
        }
 
2031
 
 
2032
        break;
 
2033
    case CODEC_ID_H263P:
 
2034
        if(s->umvplus)
 
2035
            s->fcode_tab= umv_fcode_tab;
 
2036
        if(s->modified_quant){
 
2037
            s->min_qcoeff= -2047;
 
2038
            s->max_qcoeff=  2047;
 
2039
        }else{
 
2040
            s->min_qcoeff= -127;
 
2041
            s->max_qcoeff=  127;
 
2042
        }
 
2043
        break;
 
2044
        //Note for mpeg4 & h263 the dc-scale table will be set per frame as needed later
 
2045
    case CODEC_ID_FLV1:
 
2046
        if (s->h263_flv > 1) {
 
2047
            s->min_qcoeff= -1023;
 
2048
            s->max_qcoeff=  1023;
 
2049
        } else {
 
2050
            s->min_qcoeff= -127;
 
2051
            s->max_qcoeff=  127;
 
2052
        }
 
2053
        s->y_dc_scale_table=
 
2054
        s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
 
2055
        break;
 
2056
    default: //nothing needed - default table already set in mpegvideo.c
 
2057
        s->min_qcoeff= -127;
 
2058
        s->max_qcoeff=  127;
 
2059
        s->y_dc_scale_table=
 
2060
        s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
 
2061
    }
 
2062
}
 
2063
 
 
2064
/**
 
2065
 * encodes a 8x8 block.
 
2066
 * @param block the 8x8 block
 
2067
 * @param n block index (0-3 are luma, 4-5 are chroma)
 
2068
 */
 
2069
static void h263_encode_block(MpegEncContext * s, DCTELEM * block, int n)
 
2070
{
 
2071
    int level, run, last, i, j, last_index, last_non_zero, sign, slevel, code;
 
2072
    RLTable *rl;
 
2073
 
 
2074
    rl = &rl_inter;
 
2075
    if (s->mb_intra && !s->h263_aic) {
 
2076
        /* DC coef */
 
2077
        level = block[0];
 
2078
        /* 255 cannot be represented, so we clamp */
 
2079
        if (level > 254) {
 
2080
            level = 254;
 
2081
            block[0] = 254;
 
2082
        }
 
2083
        /* 0 cannot be represented also */
 
2084
        else if (level < 1) {
 
2085
            level = 1;
 
2086
            block[0] = 1;
 
2087
        }
 
2088
        if (level == 128) //FIXME check rv10
 
2089
            put_bits(&s->pb, 8, 0xff);
 
2090
        else
 
2091
            put_bits(&s->pb, 8, level);
 
2092
        i = 1;
 
2093
    } else {
 
2094
        i = 0;
 
2095
        if (s->h263_aic && s->mb_intra)
 
2096
            rl = &rl_intra_aic;
 
2097
 
 
2098
        if(s->alt_inter_vlc && !s->mb_intra){
 
2099
            int aic_vlc_bits=0;
 
2100
            int inter_vlc_bits=0;
 
2101
            int wrong_pos=-1;
 
2102
            int aic_code;
 
2103
 
 
2104
            last_index = s->block_last_index[n];
 
2105
            last_non_zero = i - 1;
 
2106
            for (; i <= last_index; i++) {
 
2107
                j = s->intra_scantable.permutated[i];
 
2108
                level = block[j];
 
2109
                if (level) {
 
2110
                    run = i - last_non_zero - 1;
 
2111
                    last = (i == last_index);
 
2112
 
 
2113
                    if(level<0) level= -level;
 
2114
 
 
2115
                    code = get_rl_index(rl, last, run, level);
 
2116
                    aic_code = get_rl_index(&rl_intra_aic, last, run, level);
 
2117
                    inter_vlc_bits += rl->table_vlc[code][1]+1;
 
2118
                    aic_vlc_bits   += rl_intra_aic.table_vlc[aic_code][1]+1;
 
2119
 
 
2120
                    if (code == rl->n) {
 
2121
                        inter_vlc_bits += 1+6+8-1;
 
2122
                    }
 
2123
                    if (aic_code == rl_intra_aic.n) {
 
2124
                        aic_vlc_bits += 1+6+8-1;
 
2125
                        wrong_pos += run + 1;
 
2126
                    }else
 
2127
                        wrong_pos += wrong_run[aic_code];
 
2128
                    last_non_zero = i;
 
2129
                }
 
2130
            }
 
2131
            i = 0;
 
2132
            if(aic_vlc_bits < inter_vlc_bits && wrong_pos > 63)
 
2133
                rl = &rl_intra_aic;
 
2134
        }
 
2135
    }
 
2136
 
 
2137
    /* AC coefs */
 
2138
    last_index = s->block_last_index[n];
 
2139
    last_non_zero = i - 1;
 
2140
    for (; i <= last_index; i++) {
 
2141
        j = s->intra_scantable.permutated[i];
 
2142
        level = block[j];
 
2143
        if (level) {
 
2144
            run = i - last_non_zero - 1;
 
2145
            last = (i == last_index);
 
2146
            sign = 0;
 
2147
            slevel = level;
 
2148
            if (level < 0) {
 
2149
                sign = 1;
 
2150
                level = -level;
 
2151
            }
 
2152
            code = get_rl_index(rl, last, run, level);
 
2153
            put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
 
2154
            if (code == rl->n) {
 
2155
              if(s->h263_flv <= 1){
 
2156
                put_bits(&s->pb, 1, last);
 
2157
                put_bits(&s->pb, 6, run);
 
2158
 
 
2159
                assert(slevel != 0);
 
2160
 
 
2161
                if(level < 128)
 
2162
                    put_bits(&s->pb, 8, slevel & 0xff);
 
2163
                else{
 
2164
                    put_bits(&s->pb, 8, 128);
 
2165
                    put_bits(&s->pb, 5, slevel & 0x1f);
 
2166
                    put_bits(&s->pb, 6, (slevel>>5)&0x3f);
 
2167
                }
 
2168
              }else{
 
2169
                if(level < 64) { // 7-bit level
 
2170
                        put_bits(&s->pb, 1, 0);
 
2171
                        put_bits(&s->pb, 1, last);
 
2172
                        put_bits(&s->pb, 6, run);
 
2173
 
 
2174
                        put_bits(&s->pb, 7, slevel & 0x7f);
 
2175
                    } else {
 
2176
                        /* 11-bit level */
 
2177
                        put_bits(&s->pb, 1, 1);
 
2178
                        put_bits(&s->pb, 1, last);
 
2179
                        put_bits(&s->pb, 6, run);
 
2180
 
 
2181
                        put_bits(&s->pb, 11, slevel & 0x7ff);
 
2182
                    }
 
2183
              }
 
2184
            } else {
 
2185
                put_bits(&s->pb, 1, sign);
 
2186
            }
 
2187
            last_non_zero = i;
 
2188
        }
 
2189
    }
 
2190
}
 
2191
#endif
 
2192
 
 
2193
#ifdef CONFIG_ENCODERS
 
2194
 
 
2195
/***************************************************/
 
2196
/**
 
2197
 * add mpeg4 stuffing bits (01...1)
 
2198
 */
 
2199
void ff_mpeg4_stuffing(PutBitContext * pbc)
 
2200
{
 
2201
    int length;
 
2202
    put_bits(pbc, 1, 0);
 
2203
    length= (-put_bits_count(pbc))&7;
 
2204
    if(length) put_bits(pbc, length, (1<<length)-1);
 
2205
}
 
2206
 
 
2207
/* must be called before writing the header */
 
2208
void ff_set_mpeg4_time(MpegEncContext * s, int picture_number){
 
2209
    int time_div, time_mod;
 
2210
 
 
2211
    assert(s->current_picture_ptr->pts != AV_NOPTS_VALUE);
 
2212
    s->time= s->current_picture_ptr->pts*s->avctx->time_base.num;
 
2213
 
 
2214
    time_div= s->time/s->avctx->time_base.den;
 
2215
    time_mod= s->time%s->avctx->time_base.den;
 
2216
 
 
2217
    if(s->pict_type==B_TYPE){
 
2218
        s->pb_time= s->pp_time - (s->last_non_b_time - s->time);
 
2219
        assert(s->pb_time > 0 && s->pb_time < s->pp_time);
 
2220
    }else{
 
2221
        s->last_time_base= s->time_base;
 
2222
        s->time_base= time_div;
 
2223
        s->pp_time= s->time - s->last_non_b_time;
 
2224
        s->last_non_b_time= s->time;
 
2225
        assert(picture_number==0 || s->pp_time > 0);
 
2226
    }
 
2227
}
 
2228
 
 
2229
static void mpeg4_encode_gop_header(MpegEncContext * s){
 
2230
    int hours, minutes, seconds;
 
2231
    int64_t time;
 
2232
 
 
2233
    put_bits(&s->pb, 16, 0);
 
2234
    put_bits(&s->pb, 16, GOP_STARTCODE);
 
2235
 
 
2236
    time= s->current_picture_ptr->pts;
 
2237
    if(s->reordered_input_picture[1])
 
2238
        time= FFMIN(time, s->reordered_input_picture[1]->pts);
 
2239
    time= time*s->avctx->time_base.num;
 
2240
 
 
2241
    seconds= time/s->avctx->time_base.den;
 
2242
    minutes= seconds/60; seconds %= 60;
 
2243
    hours= minutes/60; minutes %= 60;
 
2244
    hours%=24;
 
2245
 
 
2246
    put_bits(&s->pb, 5, hours);
 
2247
    put_bits(&s->pb, 6, minutes);
 
2248
    put_bits(&s->pb, 1, 1);
 
2249
    put_bits(&s->pb, 6, seconds);
 
2250
 
 
2251
    put_bits(&s->pb, 1, !!(s->flags&CODEC_FLAG_CLOSED_GOP));
 
2252
    put_bits(&s->pb, 1, 0); //broken link == NO
 
2253
 
 
2254
    s->last_time_base= time / s->avctx->time_base.den;
 
2255
 
 
2256
    ff_mpeg4_stuffing(&s->pb);
 
2257
}
 
2258
 
 
2259
static void mpeg4_encode_visual_object_header(MpegEncContext * s){
 
2260
    int profile_and_level_indication;
 
2261
    int vo_ver_id;
 
2262
 
 
2263
    if(s->avctx->profile != FF_PROFILE_UNKNOWN){
 
2264
        profile_and_level_indication = s->avctx->profile << 4;
 
2265
    }else if(s->max_b_frames || s->quarter_sample){
 
2266
        profile_and_level_indication= 0xF0; // adv simple
 
2267
    }else{
 
2268
        profile_and_level_indication= 0x00; // simple
 
2269
    }
 
2270
 
 
2271
    if(s->avctx->level != FF_LEVEL_UNKNOWN){
 
2272
        profile_and_level_indication |= s->avctx->level;
 
2273
    }else{
 
2274
        profile_and_level_indication |= 1; //level 1
 
2275
    }
 
2276
 
 
2277
    if(profile_and_level_indication>>4 == 0xF){
 
2278
        vo_ver_id= 5;
 
2279
    }else{
 
2280
        vo_ver_id= 1;
 
2281
    }
 
2282
 
 
2283
    //FIXME levels
 
2284
 
 
2285
    put_bits(&s->pb, 16, 0);
 
2286
    put_bits(&s->pb, 16, VOS_STARTCODE);
 
2287
 
 
2288
    put_bits(&s->pb, 8, profile_and_level_indication);
 
2289
 
 
2290
    put_bits(&s->pb, 16, 0);
 
2291
    put_bits(&s->pb, 16, VISUAL_OBJ_STARTCODE);
 
2292
 
 
2293
    put_bits(&s->pb, 1, 1);
 
2294
        put_bits(&s->pb, 4, vo_ver_id);
 
2295
        put_bits(&s->pb, 3, 1); //priority
 
2296
 
 
2297
    put_bits(&s->pb, 4, 1); //visual obj type== video obj
 
2298
 
 
2299
    put_bits(&s->pb, 1, 0); //video signal type == no clue //FIXME
 
2300
 
 
2301
    ff_mpeg4_stuffing(&s->pb);
 
2302
}
 
2303
 
 
2304
static void mpeg4_encode_vol_header(MpegEncContext * s, int vo_number, int vol_number)
 
2305
{
 
2306
    int vo_ver_id;
 
2307
 
 
2308
    if(s->max_b_frames || s->quarter_sample){
 
2309
        vo_ver_id= 5;
 
2310
        s->vo_type= ADV_SIMPLE_VO_TYPE;
 
2311
    }else{
 
2312
        vo_ver_id= 1;
 
2313
        s->vo_type= SIMPLE_VO_TYPE;
 
2314
    }
 
2315
 
 
2316
    put_bits(&s->pb, 16, 0);
 
2317
    put_bits(&s->pb, 16, 0x100 + vo_number);        /* video obj */
 
2318
    put_bits(&s->pb, 16, 0);
 
2319
    put_bits(&s->pb, 16, 0x120 + vol_number);       /* video obj layer */
 
2320
 
 
2321
    put_bits(&s->pb, 1, 0);             /* random access vol */
 
2322
    put_bits(&s->pb, 8, s->vo_type);    /* video obj type indication */
 
2323
    if(s->workaround_bugs & FF_BUG_MS) {
 
2324
        put_bits(&s->pb, 1, 0);         /* is obj layer id= no */
 
2325
    } else {
 
2326
        put_bits(&s->pb, 1, 1);         /* is obj layer id= yes */
 
2327
        put_bits(&s->pb, 4, vo_ver_id); /* is obj layer ver id */
 
2328
        put_bits(&s->pb, 3, 1);         /* is obj layer priority */
 
2329
    }
 
2330
 
 
2331
    aspect_to_info(s, s->avctx->sample_aspect_ratio);
 
2332
 
 
2333
    put_bits(&s->pb, 4, s->aspect_ratio_info);/* aspect ratio info */
 
2334
    if (s->aspect_ratio_info == FF_ASPECT_EXTENDED){
 
2335
        put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.num);
 
2336
        put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.den);
 
2337
    }
 
2338
 
 
2339
    if(s->workaround_bugs & FF_BUG_MS) { //
 
2340
        put_bits(&s->pb, 1, 0);         /* vol control parameters= no @@@ */
 
2341
    } else {
 
2342
        put_bits(&s->pb, 1, 1);         /* vol control parameters= yes */
 
2343
        put_bits(&s->pb, 2, 1);         /* chroma format YUV 420/YV12 */
 
2344
        put_bits(&s->pb, 1, s->low_delay);
 
2345
        put_bits(&s->pb, 1, 0);         /* vbv parameters= no */
 
2346
    }
 
2347
 
 
2348
    put_bits(&s->pb, 2, RECT_SHAPE);    /* vol shape= rectangle */
 
2349
    put_bits(&s->pb, 1, 1);             /* marker bit */
 
2350
 
 
2351
    put_bits(&s->pb, 16, s->avctx->time_base.den);
 
2352
    if (s->time_increment_bits < 1)
 
2353
        s->time_increment_bits = 1;
 
2354
    put_bits(&s->pb, 1, 1);             /* marker bit */
 
2355
    put_bits(&s->pb, 1, 0);             /* fixed vop rate=no */
 
2356
    put_bits(&s->pb, 1, 1);             /* marker bit */
 
2357
    put_bits(&s->pb, 13, s->width);     /* vol width */
 
2358
    put_bits(&s->pb, 1, 1);             /* marker bit */
 
2359
    put_bits(&s->pb, 13, s->height);    /* vol height */
 
2360
    put_bits(&s->pb, 1, 1);             /* marker bit */
 
2361
    put_bits(&s->pb, 1, s->progressive_sequence ? 0 : 1);
 
2362
    put_bits(&s->pb, 1, 1);             /* obmc disable */
 
2363
    if (vo_ver_id == 1) {
 
2364
        put_bits(&s->pb, 1, s->vol_sprite_usage);       /* sprite enable */
 
2365
    }else{
 
2366
        put_bits(&s->pb, 2, s->vol_sprite_usage);       /* sprite enable */
 
2367
    }
 
2368
 
 
2369
    put_bits(&s->pb, 1, 0);             /* not 8 bit == false */
 
2370
    put_bits(&s->pb, 1, s->mpeg_quant); /* quant type= (0=h263 style)*/
 
2371
 
 
2372
    if(s->mpeg_quant){
 
2373
        ff_write_quant_matrix(&s->pb, s->avctx->intra_matrix);
 
2374
        ff_write_quant_matrix(&s->pb, s->avctx->inter_matrix);
 
2375
    }
 
2376
 
 
2377
    if (vo_ver_id != 1)
 
2378
        put_bits(&s->pb, 1, s->quarter_sample);
 
2379
    put_bits(&s->pb, 1, 1);             /* complexity estimation disable */
 
2380
    s->resync_marker= s->rtp_mode;
 
2381
    put_bits(&s->pb, 1, s->resync_marker ? 0 : 1);/* resync marker disable */
 
2382
    put_bits(&s->pb, 1, s->data_partitioning ? 1 : 0);
 
2383
    if(s->data_partitioning){
 
2384
        put_bits(&s->pb, 1, 0);         /* no rvlc */
 
2385
    }
 
2386
 
 
2387
    if (vo_ver_id != 1){
 
2388
        put_bits(&s->pb, 1, 0);         /* newpred */
 
2389
        put_bits(&s->pb, 1, 0);         /* reduced res vop */
 
2390
    }
 
2391
    put_bits(&s->pb, 1, 0);             /* scalability */
 
2392
 
 
2393
    ff_mpeg4_stuffing(&s->pb);
 
2394
 
 
2395
    /* user data */
 
2396
    if(!(s->flags & CODEC_FLAG_BITEXACT)){
 
2397
        put_bits(&s->pb, 16, 0);
 
2398
        put_bits(&s->pb, 16, 0x1B2);    /* user_data */
 
2399
        ff_put_string(&s->pb, LIBAVCODEC_IDENT, 0);
 
2400
    }
 
2401
}
 
2402
 
 
2403
/* write mpeg4 VOP header */
 
2404
void mpeg4_encode_picture_header(MpegEncContext * s, int picture_number)
 
2405
{
 
2406
    int time_incr;
 
2407
    int time_div, time_mod;
 
2408
 
 
2409
    if(s->pict_type==I_TYPE){
 
2410
        if(!(s->flags&CODEC_FLAG_GLOBAL_HEADER)){
 
2411
            if(s->strict_std_compliance < FF_COMPLIANCE_VERY_STRICT) //HACK, the reference sw is buggy
 
2412
                mpeg4_encode_visual_object_header(s);
 
2413
            if(s->strict_std_compliance < FF_COMPLIANCE_VERY_STRICT || picture_number==0) //HACK, the reference sw is buggy
 
2414
                mpeg4_encode_vol_header(s, 0, 0);
 
2415
        }
 
2416
        if(!(s->workaround_bugs & FF_BUG_MS))
 
2417
            mpeg4_encode_gop_header(s);
 
2418
    }
 
2419
 
 
2420
    s->partitioned_frame= s->data_partitioning && s->pict_type!=B_TYPE;
 
2421
 
 
2422
//printf("num:%d rate:%d base:%d\n", s->picture_number, s->time_base.den, FRAME_RATE_BASE);
 
2423
 
 
2424
    put_bits(&s->pb, 16, 0);                /* vop header */
 
2425
    put_bits(&s->pb, 16, VOP_STARTCODE);    /* vop header */
 
2426
    put_bits(&s->pb, 2, s->pict_type - 1);  /* pict type: I = 0 , P = 1 */
 
2427
 
 
2428
    assert(s->time>=0);
 
2429
    time_div= s->time/s->avctx->time_base.den;
 
2430
    time_mod= s->time%s->avctx->time_base.den;
 
2431
    time_incr= time_div - s->last_time_base;
 
2432
    assert(time_incr >= 0);
 
2433
    while(time_incr--)
 
2434
        put_bits(&s->pb, 1, 1);
 
2435
 
 
2436
    put_bits(&s->pb, 1, 0);
 
2437
 
 
2438
    put_bits(&s->pb, 1, 1);                             /* marker */
 
2439
    put_bits(&s->pb, s->time_increment_bits, time_mod); /* time increment */
 
2440
    put_bits(&s->pb, 1, 1);                             /* marker */
 
2441
    put_bits(&s->pb, 1, 1);                             /* vop coded */
 
2442
    if (    s->pict_type == P_TYPE
 
2443
        || (s->pict_type == S_TYPE && s->vol_sprite_usage==GMC_SPRITE)) {
 
2444
        put_bits(&s->pb, 1, s->no_rounding);    /* rounding type */
 
2445
    }
 
2446
    put_bits(&s->pb, 3, 0);     /* intra dc VLC threshold */
 
2447
    if(!s->progressive_sequence){
 
2448
         put_bits(&s->pb, 1, s->current_picture_ptr->top_field_first);
 
2449
         put_bits(&s->pb, 1, s->alternate_scan);
 
2450
    }
 
2451
    //FIXME sprite stuff
 
2452
 
 
2453
    put_bits(&s->pb, 5, s->qscale);
 
2454
 
 
2455
    if (s->pict_type != I_TYPE)
 
2456
        put_bits(&s->pb, 3, s->f_code); /* fcode_for */
 
2457
    if (s->pict_type == B_TYPE)
 
2458
        put_bits(&s->pb, 3, s->b_code); /* fcode_back */
 
2459
    //    printf("****frame %d\n", picture_number);
 
2460
}
 
2461
 
 
2462
#endif //CONFIG_ENCODERS
 
2463
 
 
2464
/**
 
2465
 * set qscale and update qscale dependant variables.
 
2466
 */
 
2467
void ff_set_qscale(MpegEncContext * s, int qscale)
 
2468
{
 
2469
    if (qscale < 1)
 
2470
        qscale = 1;
 
2471
    else if (qscale > 31)
 
2472
        qscale = 31;
 
2473
 
 
2474
    s->qscale = qscale;
 
2475
    s->chroma_qscale= s->chroma_qscale_table[qscale];
 
2476
 
 
2477
    s->y_dc_scale= s->y_dc_scale_table[ qscale ];
 
2478
    s->c_dc_scale= s->c_dc_scale_table[ s->chroma_qscale ];
 
2479
}
 
2480
 
 
2481
/**
 
2482
 * predicts the dc.
 
2483
 * encoding quantized level -> quantized diff
 
2484
 * decoding quantized diff -> quantized level
 
2485
 * @param n block index (0-3 are luma, 4-5 are chroma)
 
2486
 * @param dir_ptr pointer to an integer where the prediction direction will be stored
 
2487
 */
 
2488
static inline int ff_mpeg4_pred_dc(MpegEncContext * s, int n, int level, int *dir_ptr, int encoding)
 
2489
{
 
2490
    int a, b, c, wrap, pred, scale, ret;
 
2491
    uint16_t *dc_val;
 
2492
 
 
2493
    /* find prediction */
 
2494
    if (n < 4) {
 
2495
        scale = s->y_dc_scale;
 
2496
    } else {
 
2497
        scale = s->c_dc_scale;
 
2498
    }
 
2499
    if(IS_3IV1)
 
2500
        scale= 8;
 
2501
 
 
2502
    wrap= s->block_wrap[n];
 
2503
    dc_val = s->dc_val[0] + s->block_index[n];
 
2504
 
 
2505
    /* B C
 
2506
     * A X
 
2507
     */
 
2508
    a = dc_val[ - 1];
 
2509
    b = dc_val[ - 1 - wrap];
 
2510
    c = dc_val[ - wrap];
 
2511
 
 
2512
    /* outside slice handling (we can't do that by memset as we need the dc for error resilience) */
 
2513
    if(s->first_slice_line && n!=3){
 
2514
        if(n!=2) b=c= 1024;
 
2515
        if(n!=1 && s->mb_x == s->resync_mb_x) b=a= 1024;
 
2516
    }
 
2517
    if(s->mb_x == s->resync_mb_x && s->mb_y == s->resync_mb_y+1){
 
2518
        if(n==0 || n==4 || n==5)
 
2519
            b=1024;
 
2520
    }
 
2521
 
 
2522
    if (abs(a - b) < abs(b - c)) {
 
2523
        pred = c;
 
2524
        *dir_ptr = 1; /* top */
 
2525
    } else {
 
2526
        pred = a;
 
2527
        *dir_ptr = 0; /* left */
 
2528
    }
 
2529
    /* we assume pred is positive */
 
2530
    pred = FASTDIV((pred + (scale >> 1)), scale);
 
2531
 
 
2532
    if(encoding){
 
2533
        ret = level - pred;
 
2534
    }else{
 
2535
        level += pred;
 
2536
        ret= level;
 
2537
        if(s->error_resilience>=3){
 
2538
            if(level<0){
 
2539
                av_log(s->avctx, AV_LOG_ERROR, "dc<0 at %dx%d\n", s->mb_x, s->mb_y);
 
2540
                return -1;
 
2541
            }
 
2542
            if(level*scale > 2048 + scale){
 
2543
                av_log(s->avctx, AV_LOG_ERROR, "dc overflow at %dx%d\n", s->mb_x, s->mb_y);
 
2544
                return -1;
 
2545
            }
 
2546
        }
 
2547
    }
 
2548
    level *=scale;
 
2549
    if(level&(~2047)){
 
2550
        if(level<0)
 
2551
            level=0;
 
2552
        else if(!(s->workaround_bugs&FF_BUG_DC_CLIP))
 
2553
            level=2047;
 
2554
    }
 
2555
    dc_val[0]= level;
 
2556
 
 
2557
    return ret;
 
2558
}
 
2559
 
 
2560
/**
 
2561
 * predicts the ac.
 
2562
 * @param n block index (0-3 are luma, 4-5 are chroma)
 
2563
 * @param dir the ac prediction direction
 
2564
 */
 
2565
void mpeg4_pred_ac(MpegEncContext * s, DCTELEM *block, int n,
 
2566
                   int dir)
 
2567
{
 
2568
    int i;
 
2569
    int16_t *ac_val, *ac_val1;
 
2570
    int8_t * const qscale_table= s->current_picture.qscale_table;
 
2571
 
 
2572
    /* find prediction */
 
2573
    ac_val = s->ac_val[0][0] + s->block_index[n] * 16;
 
2574
    ac_val1 = ac_val;
 
2575
    if (s->ac_pred) {
 
2576
        if (dir == 0) {
 
2577
            const int xy= s->mb_x-1 + s->mb_y*s->mb_stride;
 
2578
            /* left prediction */
 
2579
            ac_val -= 16;
 
2580
 
 
2581
            if(s->mb_x==0 || s->qscale == qscale_table[xy] || n==1 || n==3){
 
2582
                /* same qscale */
 
2583
                for(i=1;i<8;i++) {
 
2584
                    block[s->dsp.idct_permutation[i<<3]] += ac_val[i];
 
2585
                }
 
2586
            }else{
 
2587
                /* different qscale, we must rescale */
 
2588
                for(i=1;i<8;i++) {
 
2589
                    block[s->dsp.idct_permutation[i<<3]] += ROUNDED_DIV(ac_val[i]*qscale_table[xy], s->qscale);
 
2590
                }
 
2591
            }
 
2592
        } else {
 
2593
            const int xy= s->mb_x + s->mb_y*s->mb_stride - s->mb_stride;
 
2594
            /* top prediction */
 
2595
            ac_val -= 16 * s->block_wrap[n];
 
2596
 
 
2597
            if(s->mb_y==0 || s->qscale == qscale_table[xy] || n==2 || n==3){
 
2598
                /* same qscale */
 
2599
                for(i=1;i<8;i++) {
 
2600
                    block[s->dsp.idct_permutation[i]] += ac_val[i + 8];
 
2601
                }
 
2602
            }else{
 
2603
                /* different qscale, we must rescale */
 
2604
                for(i=1;i<8;i++) {
 
2605
                    block[s->dsp.idct_permutation[i]] += ROUNDED_DIV(ac_val[i + 8]*qscale_table[xy], s->qscale);
 
2606
                }
 
2607
            }
 
2608
        }
 
2609
    }
 
2610
    /* left copy */
 
2611
    for(i=1;i<8;i++)
 
2612
        ac_val1[i    ] = block[s->dsp.idct_permutation[i<<3]];
 
2613
 
 
2614
    /* top copy */
 
2615
    for(i=1;i<8;i++)
 
2616
        ac_val1[8 + i] = block[s->dsp.idct_permutation[i   ]];
 
2617
 
 
2618
}
 
2619
 
 
2620
#ifdef CONFIG_ENCODERS
 
2621
 
 
2622
/**
 
2623
 * encodes the dc value.
 
2624
 * @param n block index (0-3 are luma, 4-5 are chroma)
 
2625
 */
 
2626
static inline void mpeg4_encode_dc(PutBitContext * s, int level, int n)
 
2627
{
 
2628
#if 1
 
2629
//    if(level<-255 || level>255) printf("dc overflow\n");
 
2630
    level+=256;
 
2631
    if (n < 4) {
 
2632
        /* luminance */
 
2633
        put_bits(s, uni_DCtab_lum_len[level], uni_DCtab_lum_bits[level]);
 
2634
    } else {
 
2635
        /* chrominance */
 
2636
        put_bits(s, uni_DCtab_chrom_len[level], uni_DCtab_chrom_bits[level]);
 
2637
    }
 
2638
#else
 
2639
    int size, v;
 
2640
    /* find number of bits */
 
2641
    size = 0;
 
2642
    v = abs(level);
 
2643
    while (v) {
 
2644
        v >>= 1;
 
2645
        size++;
 
2646
    }
 
2647
 
 
2648
    if (n < 4) {
 
2649
        /* luminance */
 
2650
        put_bits(&s->pb, DCtab_lum[size][1], DCtab_lum[size][0]);
 
2651
    } else {
 
2652
        /* chrominance */
 
2653
        put_bits(&s->pb, DCtab_chrom[size][1], DCtab_chrom[size][0]);
 
2654
    }
 
2655
 
 
2656
    /* encode remaining bits */
 
2657
    if (size > 0) {
 
2658
        if (level < 0)
 
2659
            level = (-level) ^ ((1 << size) - 1);
 
2660
        put_bits(&s->pb, size, level);
 
2661
        if (size > 8)
 
2662
            put_bits(&s->pb, 1, 1);
 
2663
    }
 
2664
#endif
 
2665
}
 
2666
 
 
2667
static inline int mpeg4_get_dc_length(int level, int n){
 
2668
    if (n < 4) {
 
2669
        return uni_DCtab_lum_len[level + 256];
 
2670
    } else {
 
2671
        return uni_DCtab_chrom_len[level + 256];
 
2672
    }
 
2673
}
 
2674
 
 
2675
/**
 
2676
 * encodes a 8x8 block
 
2677
 * @param n block index (0-3 are luma, 4-5 are chroma)
 
2678
 */
 
2679
static inline void mpeg4_encode_block(MpegEncContext * s, DCTELEM * block, int n, int intra_dc,
 
2680
                               uint8_t *scan_table, PutBitContext *dc_pb, PutBitContext *ac_pb)
 
2681
{
 
2682
    int i, last_non_zero;
 
2683
#if 0 //variables for the outcommented version
 
2684
    int code, sign, last;
 
2685
#endif
 
2686
    const RLTable *rl;
 
2687
    uint32_t *bits_tab;
 
2688
    uint8_t *len_tab;
 
2689
    const int last_index = s->block_last_index[n];
 
2690
 
 
2691
    if (s->mb_intra) { //Note gcc (3.2.1 at least) will optimize this away
 
2692
        /* mpeg4 based DC predictor */
 
2693
        mpeg4_encode_dc(dc_pb, intra_dc, n);
 
2694
        if(last_index<1) return;
 
2695
        i = 1;
 
2696
        rl = &rl_intra;
 
2697
        bits_tab= uni_mpeg4_intra_rl_bits;
 
2698
        len_tab = uni_mpeg4_intra_rl_len;
 
2699
    } else {
 
2700
        if(last_index<0) return;
 
2701
        i = 0;
 
2702
        rl = &rl_inter;
 
2703
        bits_tab= uni_mpeg4_inter_rl_bits;
 
2704
        len_tab = uni_mpeg4_inter_rl_len;
 
2705
    }
 
2706
 
 
2707
    /* AC coefs */
 
2708
    last_non_zero = i - 1;
 
2709
#if 1
 
2710
    for (; i < last_index; i++) {
 
2711
        int level = block[ scan_table[i] ];
 
2712
        if (level) {
 
2713
            int run = i - last_non_zero - 1;
 
2714
            level+=64;
 
2715
            if((level&(~127)) == 0){
 
2716
                const int index= UNI_MPEG4_ENC_INDEX(0, run, level);
 
2717
                put_bits(ac_pb, len_tab[index], bits_tab[index]);
 
2718
            }else{ //ESC3
 
2719
                put_bits(ac_pb, 7+2+1+6+1+12+1, (3<<23)+(3<<21)+(0<<20)+(run<<14)+(1<<13)+(((level-64)&0xfff)<<1)+1);
 
2720
            }
 
2721
            last_non_zero = i;
 
2722
        }
 
2723
    }
 
2724
    /*if(i<=last_index)*/{
 
2725
        int level = block[ scan_table[i] ];
 
2726
        int run = i - last_non_zero - 1;
 
2727
        level+=64;
 
2728
        if((level&(~127)) == 0){
 
2729
            const int index= UNI_MPEG4_ENC_INDEX(1, run, level);
 
2730
            put_bits(ac_pb, len_tab[index], bits_tab[index]);
 
2731
        }else{ //ESC3
 
2732
            put_bits(ac_pb, 7+2+1+6+1+12+1, (3<<23)+(3<<21)+(1<<20)+(run<<14)+(1<<13)+(((level-64)&0xfff)<<1)+1);
 
2733
        }
 
2734
    }
 
2735
#else
 
2736
    for (; i <= last_index; i++) {
 
2737
        const int slevel = block[ scan_table[i] ];
 
2738
        if (slevel) {
 
2739
            int level;
 
2740
            int run = i - last_non_zero - 1;
 
2741
            last = (i == last_index);
 
2742
            sign = 0;
 
2743
            level = slevel;
 
2744
            if (level < 0) {
 
2745
                sign = 1;
 
2746
                level = -level;
 
2747
            }
 
2748
            code = get_rl_index(rl, last, run, level);
 
2749
            put_bits(ac_pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
 
2750
            if (code == rl->n) {
 
2751
                int level1, run1;
 
2752
                level1 = level - rl->max_level[last][run];
 
2753
                if (level1 < 1)
 
2754
                    goto esc2;
 
2755
                code = get_rl_index(rl, last, run, level1);
 
2756
                if (code == rl->n) {
 
2757
                esc2:
 
2758
                    put_bits(ac_pb, 1, 1);
 
2759
                    if (level > MAX_LEVEL)
 
2760
                        goto esc3;
 
2761
                    run1 = run - rl->max_run[last][level] - 1;
 
2762
                    if (run1 < 0)
 
2763
                        goto esc3;
 
2764
                    code = get_rl_index(rl, last, run1, level);
 
2765
                    if (code == rl->n) {
 
2766
                    esc3:
 
2767
                        /* third escape */
 
2768
                        put_bits(ac_pb, 1, 1);
 
2769
                        put_bits(ac_pb, 1, last);
 
2770
                        put_bits(ac_pb, 6, run);
 
2771
                        put_bits(ac_pb, 1, 1);
 
2772
                        put_bits(ac_pb, 12, slevel & 0xfff);
 
2773
                        put_bits(ac_pb, 1, 1);
 
2774
                    } else {
 
2775
                        /* second escape */
 
2776
                        put_bits(ac_pb, 1, 0);
 
2777
                        put_bits(ac_pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
 
2778
                        put_bits(ac_pb, 1, sign);
 
2779
                    }
 
2780
                } else {
 
2781
                    /* first escape */
 
2782
                    put_bits(ac_pb, 1, 0);
 
2783
                    put_bits(ac_pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
 
2784
                    put_bits(ac_pb, 1, sign);
 
2785
                }
 
2786
            } else {
 
2787
                put_bits(ac_pb, 1, sign);
 
2788
            }
 
2789
            last_non_zero = i;
 
2790
        }
 
2791
    }
 
2792
#endif
 
2793
}
 
2794
 
 
2795
static int mpeg4_get_block_length(MpegEncContext * s, DCTELEM * block, int n, int intra_dc,
 
2796
                               uint8_t *scan_table)
 
2797
{
 
2798
    int i, last_non_zero;
 
2799
    const RLTable *rl;
 
2800
    uint8_t *len_tab;
 
2801
    const int last_index = s->block_last_index[n];
 
2802
    int len=0;
 
2803
 
 
2804
    if (s->mb_intra) { //Note gcc (3.2.1 at least) will optimize this away
 
2805
        /* mpeg4 based DC predictor */
 
2806
        len += mpeg4_get_dc_length(intra_dc, n);
 
2807
        if(last_index<1) return len;
 
2808
        i = 1;
 
2809
        rl = &rl_intra;
 
2810
        len_tab = uni_mpeg4_intra_rl_len;
 
2811
    } else {
 
2812
        if(last_index<0) return 0;
 
2813
        i = 0;
 
2814
        rl = &rl_inter;
 
2815
        len_tab = uni_mpeg4_inter_rl_len;
 
2816
    }
 
2817
 
 
2818
    /* AC coefs */
 
2819
    last_non_zero = i - 1;
 
2820
    for (; i < last_index; i++) {
 
2821
        int level = block[ scan_table[i] ];
 
2822
        if (level) {
 
2823
            int run = i - last_non_zero - 1;
 
2824
            level+=64;
 
2825
            if((level&(~127)) == 0){
 
2826
                const int index= UNI_MPEG4_ENC_INDEX(0, run, level);
 
2827
                len += len_tab[index];
 
2828
            }else{ //ESC3
 
2829
                len += 7+2+1+6+1+12+1;
 
2830
            }
 
2831
            last_non_zero = i;
 
2832
        }
 
2833
    }
 
2834
    /*if(i<=last_index)*/{
 
2835
        int level = block[ scan_table[i] ];
 
2836
        int run = i - last_non_zero - 1;
 
2837
        level+=64;
 
2838
        if((level&(~127)) == 0){
 
2839
            const int index= UNI_MPEG4_ENC_INDEX(1, run, level);
 
2840
            len += len_tab[index];
 
2841
        }else{ //ESC3
 
2842
            len += 7+2+1+6+1+12+1;
 
2843
        }
 
2844
    }
 
2845
 
 
2846
    return len;
 
2847
}
 
2848
 
 
2849
#endif
 
2850
 
 
2851
 
 
2852
/***********************************************/
 
2853
/* decoding */
 
2854
 
 
2855
static VLC intra_MCBPC_vlc;
 
2856
static VLC inter_MCBPC_vlc;
 
2857
static VLC cbpy_vlc;
 
2858
static VLC mv_vlc;
 
2859
static VLC dc_lum, dc_chrom;
 
2860
static VLC sprite_trajectory;
 
2861
static VLC mb_type_b_vlc;
 
2862
static VLC h263_mbtype_b_vlc;
 
2863
static VLC cbpc_b_vlc;
 
2864
 
 
2865
void init_vlc_rl(RLTable *rl, int use_static)
 
2866
{
 
2867
    int i, q;
 
2868
 
 
2869
    /* Return if static table is already initialized */
 
2870
    if(use_static && rl->rl_vlc[0])
 
2871
        return;
 
2872
 
 
2873
    init_vlc(&rl->vlc, 9, rl->n + 1,
 
2874
             &rl->table_vlc[0][1], 4, 2,
 
2875
             &rl->table_vlc[0][0], 4, 2, use_static);
 
2876
 
 
2877
 
 
2878
    for(q=0; q<32; q++){
 
2879
        int qmul= q*2;
 
2880
        int qadd= (q-1)|1;
 
2881
 
 
2882
        if(q==0){
 
2883
            qmul=1;
 
2884
            qadd=0;
 
2885
        }
 
2886
        if(use_static)
 
2887
            rl->rl_vlc[q]= av_mallocz_static(rl->vlc.table_size*sizeof(RL_VLC_ELEM));
 
2888
        else
 
2889
            rl->rl_vlc[q]= av_malloc(rl->vlc.table_size*sizeof(RL_VLC_ELEM));
 
2890
        for(i=0; i<rl->vlc.table_size; i++){
 
2891
            int code= rl->vlc.table[i][0];
 
2892
            int len = rl->vlc.table[i][1];
 
2893
            int level, run;
 
2894
 
 
2895
            if(len==0){ // illegal code
 
2896
                run= 66;
 
2897
                level= MAX_LEVEL;
 
2898
            }else if(len<0){ //more bits needed
 
2899
                run= 0;
 
2900
                level= code;
 
2901
            }else{
 
2902
                if(code==rl->n){ //esc
 
2903
                    run= 66;
 
2904
                    level= 0;
 
2905
                }else{
 
2906
                    run=   rl->table_run  [code] + 1;
 
2907
                    level= rl->table_level[code] * qmul + qadd;
 
2908
                    if(code >= rl->last) run+=192;
 
2909
                }
 
2910
            }
 
2911
            rl->rl_vlc[q][i].len= len;
 
2912
            rl->rl_vlc[q][i].level= level;
 
2913
            rl->rl_vlc[q][i].run= run;
 
2914
        }
 
2915
    }
 
2916
}
 
2917
 
 
2918
/* init vlcs */
 
2919
 
 
2920
/* XXX: find a better solution to handle static init */
 
2921
void h263_decode_init_vlc(MpegEncContext *s)
 
2922
{
 
2923
    static int done = 0;
 
2924
 
 
2925
    if (!done) {
 
2926
        done = 1;
 
2927
 
 
2928
        init_vlc(&intra_MCBPC_vlc, INTRA_MCBPC_VLC_BITS, 9,
 
2929
                 intra_MCBPC_bits, 1, 1,
 
2930
                 intra_MCBPC_code, 1, 1, 1);
 
2931
        init_vlc(&inter_MCBPC_vlc, INTER_MCBPC_VLC_BITS, 28,
 
2932
                 inter_MCBPC_bits, 1, 1,
 
2933
                 inter_MCBPC_code, 1, 1, 1);
 
2934
        init_vlc(&cbpy_vlc, CBPY_VLC_BITS, 16,
 
2935
                 &cbpy_tab[0][1], 2, 1,
 
2936
                 &cbpy_tab[0][0], 2, 1, 1);
 
2937
        init_vlc(&mv_vlc, MV_VLC_BITS, 33,
 
2938
                 &mvtab[0][1], 2, 1,
 
2939
                 &mvtab[0][0], 2, 1, 1);
 
2940
        init_rl(&rl_inter, 1);
 
2941
        init_rl(&rl_intra, 1);
 
2942
        init_rl(&rvlc_rl_inter, 1);
 
2943
        init_rl(&rvlc_rl_intra, 1);
 
2944
        init_rl(&rl_intra_aic, 1);
 
2945
        init_vlc_rl(&rl_inter, 1);
 
2946
        init_vlc_rl(&rl_intra, 1);
 
2947
        init_vlc_rl(&rvlc_rl_inter, 1);
 
2948
        init_vlc_rl(&rvlc_rl_intra, 1);
 
2949
        init_vlc_rl(&rl_intra_aic, 1);
 
2950
        init_vlc(&dc_lum, DC_VLC_BITS, 10 /* 13 */,
 
2951
                 &DCtab_lum[0][1], 2, 1,
 
2952
                 &DCtab_lum[0][0], 2, 1, 1);
 
2953
        init_vlc(&dc_chrom, DC_VLC_BITS, 10 /* 13 */,
 
2954
                 &DCtab_chrom[0][1], 2, 1,
 
2955
                 &DCtab_chrom[0][0], 2, 1, 1);
 
2956
        init_vlc(&sprite_trajectory, SPRITE_TRAJ_VLC_BITS, 15,
 
2957
                 &sprite_trajectory_tab[0][1], 4, 2,
 
2958
                 &sprite_trajectory_tab[0][0], 4, 2, 1);
 
2959
        init_vlc(&mb_type_b_vlc, MB_TYPE_B_VLC_BITS, 4,
 
2960
                 &mb_type_b_tab[0][1], 2, 1,
 
2961
                 &mb_type_b_tab[0][0], 2, 1, 1);
 
2962
        init_vlc(&h263_mbtype_b_vlc, H263_MBTYPE_B_VLC_BITS, 15,
 
2963
                 &h263_mbtype_b_tab[0][1], 2, 1,
 
2964
                 &h263_mbtype_b_tab[0][0], 2, 1, 1);
 
2965
        init_vlc(&cbpc_b_vlc, CBPC_B_VLC_BITS, 4,
 
2966
                 &cbpc_b_tab[0][1], 2, 1,
 
2967
                 &cbpc_b_tab[0][0], 2, 1, 1);
 
2968
    }
 
2969
}
 
2970
 
 
2971
/**
 
2972
 * Get the GOB height based on picture height.
 
2973
 */
 
2974
int ff_h263_get_gob_height(MpegEncContext *s){
 
2975
    if (s->height <= 400)
 
2976
        return 1;
 
2977
    else if (s->height <= 800)
 
2978
        return  2;
 
2979
    else
 
2980
        return 4;
 
2981
}
 
2982
 
 
2983
int ff_h263_decode_mba(MpegEncContext *s)
 
2984
{
 
2985
    int i, mb_pos;
 
2986
 
 
2987
    for(i=0; i<6; i++){
 
2988
        if(s->mb_num-1 <= ff_mba_max[i]) break;
 
2989
    }
 
2990
    mb_pos= get_bits(&s->gb, ff_mba_length[i]);
 
2991
    s->mb_x= mb_pos % s->mb_width;
 
2992
    s->mb_y= mb_pos / s->mb_width;
 
2993
 
 
2994
    return mb_pos;
 
2995
}
 
2996
 
 
2997
void ff_h263_encode_mba(MpegEncContext *s)
 
2998
{
 
2999
    int i, mb_pos;
 
3000
 
 
3001
    for(i=0; i<6; i++){
 
3002
        if(s->mb_num-1 <= ff_mba_max[i]) break;
 
3003
    }
 
3004
    mb_pos= s->mb_x + s->mb_width*s->mb_y;
 
3005
    put_bits(&s->pb, ff_mba_length[i], mb_pos);
 
3006
}
 
3007
 
 
3008
/**
 
3009
 * decodes the group of blocks header or slice header.
 
3010
 * @return <0 if an error occured
 
3011
 */
 
3012
static int h263_decode_gob_header(MpegEncContext *s)
 
3013
{
 
3014
    unsigned int val, gfid, gob_number;
 
3015
    int left;
 
3016
 
 
3017
    /* Check for GOB Start Code */
 
3018
    val = show_bits(&s->gb, 16);
 
3019
    if(val)
 
3020
        return -1;
 
3021
 
 
3022
        /* We have a GBSC probably with GSTUFF */
 
3023
    skip_bits(&s->gb, 16); /* Drop the zeros */
 
3024
    left= s->gb.size_in_bits - get_bits_count(&s->gb);
 
3025
    //MN: we must check the bits left or we might end in a infinite loop (or segfault)
 
3026
    for(;left>13; left--){
 
3027
        if(get_bits1(&s->gb)) break; /* Seek the '1' bit */
 
3028
    }
 
3029
    if(left<=13)
 
3030
        return -1;
 
3031
 
 
3032
    if(s->h263_slice_structured){
 
3033
        if(get_bits1(&s->gb)==0)
 
3034
            return -1;
 
3035
 
 
3036
        ff_h263_decode_mba(s);
 
3037
 
 
3038
        if(s->mb_num > 1583)
 
3039
            if(get_bits1(&s->gb)==0)
 
3040
                return -1;
 
3041
 
 
3042
        s->qscale = get_bits(&s->gb, 5); /* SQUANT */
 
3043
        if(get_bits1(&s->gb)==0)
 
3044
            return -1;
 
3045
        gfid = get_bits(&s->gb, 2); /* GFID */
 
3046
    }else{
 
3047
        gob_number = get_bits(&s->gb, 5); /* GN */
 
3048
        s->mb_x= 0;
 
3049
        s->mb_y= s->gob_index* gob_number;
 
3050
        gfid = get_bits(&s->gb, 2); /* GFID */
 
3051
        s->qscale = get_bits(&s->gb, 5); /* GQUANT */
 
3052
    }
 
3053
 
 
3054
    if(s->mb_y >= s->mb_height)
 
3055
        return -1;
 
3056
 
 
3057
    if(s->qscale==0)
 
3058
        return -1;
 
3059
 
 
3060
    return 0;
 
3061
}
 
3062
 
 
3063
static inline void memsetw(short *tab, int val, int n)
 
3064
{
 
3065
    int i;
 
3066
    for(i=0;i<n;i++)
 
3067
        tab[i] = val;
 
3068
}
 
3069
 
 
3070
#ifdef CONFIG_ENCODERS
 
3071
 
 
3072
void ff_mpeg4_init_partitions(MpegEncContext *s)
 
3073
{
 
3074
    uint8_t *start= pbBufPtr(&s->pb);
 
3075
    uint8_t *end= s->pb.buf_end;
 
3076
    int size= end - start;
 
3077
    int pb_size = (((long)start + size/3)&(~3)) - (long)start;
 
3078
    int tex_size= (size - 2*pb_size)&(~3);
 
3079
 
 
3080
    set_put_bits_buffer_size(&s->pb, pb_size);
 
3081
    init_put_bits(&s->tex_pb, start + pb_size           , tex_size);
 
3082
    init_put_bits(&s->pb2   , start + pb_size + tex_size, pb_size);
 
3083
}
 
3084
 
 
3085
void ff_mpeg4_merge_partitions(MpegEncContext *s)
 
3086
{
 
3087
    const int pb2_len   = put_bits_count(&s->pb2   );
 
3088
    const int tex_pb_len= put_bits_count(&s->tex_pb);
 
3089
    const int bits= put_bits_count(&s->pb);
 
3090
 
 
3091
    if(s->pict_type==I_TYPE){
 
3092
        put_bits(&s->pb, 19, DC_MARKER);
 
3093
        s->misc_bits+=19 + pb2_len + bits - s->last_bits;
 
3094
        s->i_tex_bits+= tex_pb_len;
 
3095
    }else{
 
3096
        put_bits(&s->pb, 17, MOTION_MARKER);
 
3097
        s->misc_bits+=17 + pb2_len;
 
3098
        s->mv_bits+= bits - s->last_bits;
 
3099
        s->p_tex_bits+= tex_pb_len;
 
3100
    }
 
3101
 
 
3102
    flush_put_bits(&s->pb2);
 
3103
    flush_put_bits(&s->tex_pb);
 
3104
 
 
3105
    set_put_bits_buffer_size(&s->pb, s->pb2.buf_end - s->pb.buf);
 
3106
    ff_copy_bits(&s->pb, s->pb2.buf   , pb2_len);
 
3107
    ff_copy_bits(&s->pb, s->tex_pb.buf, tex_pb_len);
 
3108
    s->last_bits= put_bits_count(&s->pb);
 
3109
}
 
3110
 
 
3111
#endif //CONFIG_ENCODERS
 
3112
 
 
3113
int ff_mpeg4_get_video_packet_prefix_length(MpegEncContext *s){
 
3114
    switch(s->pict_type){
 
3115
        case I_TYPE:
 
3116
            return 16;
 
3117
        case P_TYPE:
 
3118
        case S_TYPE:
 
3119
            return s->f_code+15;
 
3120
        case B_TYPE:
 
3121
            return FFMAX(FFMAX(s->f_code, s->b_code)+15, 17);
 
3122
        default:
 
3123
            return -1;
 
3124
    }
 
3125
}
 
3126
 
 
3127
#ifdef CONFIG_ENCODERS
 
3128
 
 
3129
void ff_mpeg4_encode_video_packet_header(MpegEncContext *s)
 
3130
{
 
3131
    int mb_num_bits= av_log2(s->mb_num - 1) + 1;
 
3132
 
 
3133
    put_bits(&s->pb, ff_mpeg4_get_video_packet_prefix_length(s), 0);
 
3134
    put_bits(&s->pb, 1, 1);
 
3135
 
 
3136
    put_bits(&s->pb, mb_num_bits, s->mb_x + s->mb_y*s->mb_width);
 
3137
    put_bits(&s->pb, s->quant_precision, s->qscale);
 
3138
    put_bits(&s->pb, 1, 0); /* no HEC */
 
3139
}
 
3140
 
 
3141
#endif //CONFIG_ENCODERS
 
3142
 
 
3143
/**
 
3144
 * check if the next stuff is a resync marker or the end.
 
3145
 * @return 0 if not
 
3146
 */
 
3147
static inline int mpeg4_is_resync(MpegEncContext *s){
 
3148
    const int bits_count= get_bits_count(&s->gb);
 
3149
 
 
3150
    if(s->workaround_bugs&FF_BUG_NO_PADDING){
 
3151
        return 0;
 
3152
    }
 
3153
 
 
3154
    if(bits_count + 8 >= s->gb.size_in_bits){
 
3155
        int v= show_bits(&s->gb, 8);
 
3156
        v|= 0x7F >> (7-(bits_count&7));
 
3157
 
 
3158
        if(v==0x7F)
 
3159
            return 1;
 
3160
    }else{
 
3161
        if(show_bits(&s->gb, 16) == ff_mpeg4_resync_prefix[bits_count&7]){
 
3162
            int len;
 
3163
            GetBitContext gb= s->gb;
 
3164
 
 
3165
            skip_bits(&s->gb, 1);
 
3166
            align_get_bits(&s->gb);
 
3167
 
 
3168
            for(len=0; len<32; len++){
 
3169
                if(get_bits1(&s->gb)) break;
 
3170
            }
 
3171
 
 
3172
            s->gb= gb;
 
3173
 
 
3174
            if(len>=ff_mpeg4_get_video_packet_prefix_length(s))
 
3175
                return 1;
 
3176
        }
 
3177
    }
 
3178
    return 0;
 
3179
}
 
3180
 
 
3181
/**
 
3182
 * decodes the next video packet.
 
3183
 * @return <0 if something went wrong
 
3184
 */
 
3185
static int mpeg4_decode_video_packet_header(MpegEncContext *s)
 
3186
{
 
3187
    int mb_num_bits= av_log2(s->mb_num - 1) + 1;
 
3188
    int header_extension=0, mb_num, len;
 
3189
 
 
3190
    /* is there enough space left for a video packet + header */
 
3191
    if( get_bits_count(&s->gb) > s->gb.size_in_bits-20) return -1;
 
3192
 
 
3193
    for(len=0; len<32; len++){
 
3194
        if(get_bits1(&s->gb)) break;
 
3195
    }
 
3196
 
 
3197
    if(len!=ff_mpeg4_get_video_packet_prefix_length(s)){
 
3198
        av_log(s->avctx, AV_LOG_ERROR, "marker does not match f_code\n");
 
3199
        return -1;
 
3200
    }
 
3201
 
 
3202
    if(s->shape != RECT_SHAPE){
 
3203
        header_extension= get_bits1(&s->gb);
 
3204
        //FIXME more stuff here
 
3205
    }
 
3206
 
 
3207
    mb_num= get_bits(&s->gb, mb_num_bits);
 
3208
    if(mb_num>=s->mb_num){
 
3209
        av_log(s->avctx, AV_LOG_ERROR, "illegal mb_num in video packet (%d %d) \n", mb_num, s->mb_num);
 
3210
        return -1;
 
3211
    }
 
3212
    if(s->pict_type == B_TYPE){
 
3213
        while(s->next_picture.mbskip_table[ s->mb_index2xy[ mb_num ] ]) mb_num++;
 
3214
        if(mb_num >= s->mb_num) return -1; // slice contains just skipped MBs which where allready decoded
 
3215
    }
 
3216
 
 
3217
    s->mb_x= mb_num % s->mb_width;
 
3218
    s->mb_y= mb_num / s->mb_width;
 
3219
 
 
3220
    if(s->shape != BIN_ONLY_SHAPE){
 
3221
        int qscale= get_bits(&s->gb, s->quant_precision);
 
3222
        if(qscale)
 
3223
            s->chroma_qscale=s->qscale= qscale;
 
3224
    }
 
3225
 
 
3226
    if(s->shape == RECT_SHAPE){
 
3227
        header_extension= get_bits1(&s->gb);
 
3228
    }
 
3229
    if(header_extension){
 
3230
        int time_increment;
 
3231
        int time_incr=0;
 
3232
 
 
3233
        while (get_bits1(&s->gb) != 0)
 
3234
            time_incr++;
 
3235
 
 
3236
        check_marker(&s->gb, "before time_increment in video packed header");
 
3237
        time_increment= get_bits(&s->gb, s->time_increment_bits);
 
3238
        check_marker(&s->gb, "before vop_coding_type in video packed header");
 
3239
 
 
3240
        skip_bits(&s->gb, 2); /* vop coding type */
 
3241
        //FIXME not rect stuff here
 
3242
 
 
3243
        if(s->shape != BIN_ONLY_SHAPE){
 
3244
            skip_bits(&s->gb, 3); /* intra dc vlc threshold */
 
3245
//FIXME don't just ignore everything
 
3246
            if(s->pict_type == S_TYPE && s->vol_sprite_usage==GMC_SPRITE){
 
3247
                mpeg4_decode_sprite_trajectory(s, &s->gb);
 
3248
                av_log(s->avctx, AV_LOG_ERROR, "untested\n");
 
3249
            }
 
3250
 
 
3251
            //FIXME reduced res stuff here
 
3252
 
 
3253
            if (s->pict_type != I_TYPE) {
 
3254
                int f_code = get_bits(&s->gb, 3);       /* fcode_for */
 
3255
                if(f_code==0){
 
3256
                    av_log(s->avctx, AV_LOG_ERROR, "Error, video packet header damaged (f_code=0)\n");
 
3257
                }
 
3258
            }
 
3259
            if (s->pict_type == B_TYPE) {
 
3260
                int b_code = get_bits(&s->gb, 3);
 
3261
                if(b_code==0){
 
3262
                    av_log(s->avctx, AV_LOG_ERROR, "Error, video packet header damaged (b_code=0)\n");
 
3263
                }
 
3264
            }
 
3265
        }
 
3266
    }
 
3267
    //FIXME new-pred stuff
 
3268
 
 
3269
//printf("parse ok %d %d %d %d\n", mb_num, s->mb_x + s->mb_y*s->mb_width, get_bits_count(gb), get_bits_count(&s->gb));
 
3270
 
 
3271
    return 0;
 
3272
}
 
3273
 
 
3274
void ff_mpeg4_clean_buffers(MpegEncContext *s)
 
3275
{
 
3276
    int c_wrap, c_xy, l_wrap, l_xy;
 
3277
 
 
3278
    l_wrap= s->b8_stride;
 
3279
    l_xy= (2*s->mb_y-1)*l_wrap + s->mb_x*2 - 1;
 
3280
    c_wrap= s->mb_stride;
 
3281
    c_xy= (s->mb_y-1)*c_wrap + s->mb_x - 1;
 
3282
 
 
3283
#if 0
 
3284
    /* clean DC */
 
3285
    memsetw(s->dc_val[0] + l_xy, 1024, l_wrap*2+1);
 
3286
    memsetw(s->dc_val[1] + c_xy, 1024, c_wrap+1);
 
3287
    memsetw(s->dc_val[2] + c_xy, 1024, c_wrap+1);
 
3288
#endif
 
3289
 
 
3290
    /* clean AC */
 
3291
    memset(s->ac_val[0] + l_xy, 0, (l_wrap*2+1)*16*sizeof(int16_t));
 
3292
    memset(s->ac_val[1] + c_xy, 0, (c_wrap  +1)*16*sizeof(int16_t));
 
3293
    memset(s->ac_val[2] + c_xy, 0, (c_wrap  +1)*16*sizeof(int16_t));
 
3294
 
 
3295
    /* clean MV */
 
3296
    // we can't clear the MVs as they might be needed by a b frame
 
3297
//    memset(s->motion_val + l_xy, 0, (l_wrap*2+1)*2*sizeof(int16_t));
 
3298
//    memset(s->motion_val, 0, 2*sizeof(int16_t)*(2 + s->mb_width*2)*(2 + s->mb_height*2));
 
3299
    s->last_mv[0][0][0]=
 
3300
    s->last_mv[0][0][1]=
 
3301
    s->last_mv[1][0][0]=
 
3302
    s->last_mv[1][0][1]= 0;
 
3303
}
 
3304
 
 
3305
/**
 
3306
 * decodes the group of blocks / video packet header.
 
3307
 * @return <0 if no resync found
 
3308
 */
 
3309
int ff_h263_resync(MpegEncContext *s){
 
3310
    int left, ret;
 
3311
 
 
3312
    if(s->codec_id==CODEC_ID_MPEG4){
 
3313
        skip_bits1(&s->gb);
 
3314
        align_get_bits(&s->gb);
 
3315
    }
 
3316
 
 
3317
    if(show_bits(&s->gb, 16)==0){
 
3318
        if(s->codec_id==CODEC_ID_MPEG4)
 
3319
            ret= mpeg4_decode_video_packet_header(s);
 
3320
        else
 
3321
            ret= h263_decode_gob_header(s);
 
3322
        if(ret>=0)
 
3323
            return 0;
 
3324
    }
 
3325
    //ok, it's not where its supposed to be ...
 
3326
    s->gb= s->last_resync_gb;
 
3327
    align_get_bits(&s->gb);
 
3328
    left= s->gb.size_in_bits - get_bits_count(&s->gb);
 
3329
 
 
3330
    for(;left>16+1+5+5; left-=8){
 
3331
        if(show_bits(&s->gb, 16)==0){
 
3332
            GetBitContext bak= s->gb;
 
3333
 
 
3334
            if(s->codec_id==CODEC_ID_MPEG4)
 
3335
                ret= mpeg4_decode_video_packet_header(s);
 
3336
            else
 
3337
                ret= h263_decode_gob_header(s);
 
3338
            if(ret>=0)
 
3339
                return 0;
 
3340
 
 
3341
            s->gb= bak;
 
3342
        }
 
3343
        skip_bits(&s->gb, 8);
 
3344
    }
 
3345
 
 
3346
    return -1;
 
3347
}
 
3348
 
 
3349
/**
 
3350
 * gets the average motion vector for a GMC MB.
 
3351
 * @param n either 0 for the x component or 1 for y
 
3352
 * @returns the average MV for a GMC MB
 
3353
 */
 
3354
static inline int get_amv(MpegEncContext *s, int n){
 
3355
    int x, y, mb_v, sum, dx, dy, shift;
 
3356
    int len = 1 << (s->f_code + 4);
 
3357
    const int a= s->sprite_warping_accuracy;
 
3358
 
 
3359
    if(s->workaround_bugs & FF_BUG_AMV)
 
3360
        len >>= s->quarter_sample;
 
3361
 
 
3362
    if(s->real_sprite_warping_points==1){
 
3363
        if(s->divx_version==500 && s->divx_build==413)
 
3364
            sum= s->sprite_offset[0][n] / (1<<(a - s->quarter_sample));
 
3365
        else
 
3366
            sum= RSHIFT(s->sprite_offset[0][n]<<s->quarter_sample, a);
 
3367
    }else{
 
3368
        dx= s->sprite_delta[n][0];
 
3369
        dy= s->sprite_delta[n][1];
 
3370
        shift= s->sprite_shift[0];
 
3371
        if(n) dy -= 1<<(shift + a + 1);
 
3372
        else  dx -= 1<<(shift + a + 1);
 
3373
        mb_v= s->sprite_offset[0][n] + dx*s->mb_x*16 + dy*s->mb_y*16;
 
3374
 
 
3375
        sum=0;
 
3376
        for(y=0; y<16; y++){
 
3377
            int v;
 
3378
 
 
3379
            v= mb_v + dy*y;
 
3380
            //XXX FIXME optimize
 
3381
            for(x=0; x<16; x++){
 
3382
                sum+= v>>shift;
 
3383
                v+= dx;
 
3384
            }
 
3385
        }
 
3386
        sum= RSHIFT(sum, a+8-s->quarter_sample);
 
3387
    }
 
3388
 
 
3389
    if      (sum < -len) sum= -len;
 
3390
    else if (sum >= len) sum= len-1;
 
3391
 
 
3392
    return sum;
 
3393
}
 
3394
 
 
3395
/**
 
3396
 * decodes first partition.
 
3397
 * @return number of MBs decoded or <0 if an error occured
 
3398
 */
 
3399
static int mpeg4_decode_partition_a(MpegEncContext *s){
 
3400
    int mb_num;
 
3401
    static const int8_t quant_tab[4] = { -1, -2, 1, 2 };
 
3402
 
 
3403
    /* decode first partition */
 
3404
    mb_num=0;
 
3405
    s->first_slice_line=1;
 
3406
    for(; s->mb_y<s->mb_height; s->mb_y++){
 
3407
        ff_init_block_index(s);
 
3408
        for(; s->mb_x<s->mb_width; s->mb_x++){
 
3409
            const int xy= s->mb_x + s->mb_y*s->mb_stride;
 
3410
            int cbpc;
 
3411
            int dir=0;
 
3412
 
 
3413
            mb_num++;
 
3414
            ff_update_block_index(s);
 
3415
            if(s->mb_x == s->resync_mb_x && s->mb_y == s->resync_mb_y+1)
 
3416
                s->first_slice_line=0;
 
3417
 
 
3418
            if(s->pict_type==I_TYPE){
 
3419
                int i;
 
3420
 
 
3421
                do{
 
3422
                    if(show_bits_long(&s->gb, 19)==DC_MARKER){
 
3423
                        return mb_num-1;
 
3424
                    }
 
3425
 
 
3426
                    cbpc = get_vlc2(&s->gb, intra_MCBPC_vlc.table, INTRA_MCBPC_VLC_BITS, 2);
 
3427
                    if (cbpc < 0){
 
3428
                        av_log(s->avctx, AV_LOG_ERROR, "cbpc corrupted at %d %d\n", s->mb_x, s->mb_y);
 
3429
                        return -1;
 
3430
                    }
 
3431
                }while(cbpc == 8);
 
3432
 
 
3433
                s->cbp_table[xy]= cbpc & 3;
 
3434
                s->current_picture.mb_type[xy]= MB_TYPE_INTRA;
 
3435
                s->mb_intra = 1;
 
3436
 
 
3437
                if(cbpc & 4) {
 
3438
                    ff_set_qscale(s, s->qscale + quant_tab[get_bits(&s->gb, 2)]);
 
3439
                }
 
3440
                s->current_picture.qscale_table[xy]= s->qscale;
 
3441
 
 
3442
                s->mbintra_table[xy]= 1;
 
3443
                for(i=0; i<6; i++){
 
3444
                    int dc_pred_dir;
 
3445
                    int dc= mpeg4_decode_dc(s, i, &dc_pred_dir);
 
3446
                    if(dc < 0){
 
3447
                        av_log(s->avctx, AV_LOG_ERROR, "DC corrupted at %d %d\n", s->mb_x, s->mb_y);
 
3448
                        return -1;
 
3449
                    }
 
3450
                    dir<<=1;
 
3451
                    if(dc_pred_dir) dir|=1;
 
3452
                }
 
3453
                s->pred_dir_table[xy]= dir;
 
3454
            }else{ /* P/S_TYPE */
 
3455
                int mx, my, pred_x, pred_y, bits;
 
3456
                int16_t * const mot_val= s->current_picture.motion_val[0][s->block_index[0]];
 
3457
                const int stride= s->b8_stride*2;
 
3458
 
 
3459
try_again:
 
3460
                bits= show_bits(&s->gb, 17);
 
3461
                if(bits==MOTION_MARKER){
 
3462
                    return mb_num-1;
 
3463
                }
 
3464
                skip_bits1(&s->gb);
 
3465
                if(bits&0x10000){
 
3466
                    /* skip mb */
 
3467
                    if(s->pict_type==S_TYPE && s->vol_sprite_usage==GMC_SPRITE){
 
3468
                        s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_GMC | MB_TYPE_L0;
 
3469
                        mx= get_amv(s, 0);
 
3470
                        my= get_amv(s, 1);
 
3471
                    }else{
 
3472
                        s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0;
 
3473
                        mx=my=0;
 
3474
                    }
 
3475
                    mot_val[0       ]= mot_val[2       ]=
 
3476
                    mot_val[0+stride]= mot_val[2+stride]= mx;
 
3477
                    mot_val[1       ]= mot_val[3       ]=
 
3478
                    mot_val[1+stride]= mot_val[3+stride]= my;
 
3479
 
 
3480
                    if(s->mbintra_table[xy])
 
3481
                        ff_clean_intra_table_entries(s);
 
3482
                    continue;
 
3483
                }
 
3484
 
 
3485
                cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
 
3486
                if (cbpc < 0){
 
3487
                    av_log(s->avctx, AV_LOG_ERROR, "cbpc corrupted at %d %d\n", s->mb_x, s->mb_y);
 
3488
                    return -1;
 
3489
                }
 
3490
                if(cbpc == 20)
 
3491
                    goto try_again;
 
3492
 
 
3493
                s->cbp_table[xy]= cbpc&(8+3); //8 is dquant
 
3494
 
 
3495
                s->mb_intra = ((cbpc & 4) != 0);
 
3496
 
 
3497
                if(s->mb_intra){
 
3498
                    s->current_picture.mb_type[xy]= MB_TYPE_INTRA;
 
3499
                    s->mbintra_table[xy]= 1;
 
3500
                    mot_val[0       ]= mot_val[2       ]=
 
3501
                    mot_val[0+stride]= mot_val[2+stride]= 0;
 
3502
                    mot_val[1       ]= mot_val[3       ]=
 
3503
                    mot_val[1+stride]= mot_val[3+stride]= 0;
 
3504
                }else{
 
3505
                    if(s->mbintra_table[xy])
 
3506
                        ff_clean_intra_table_entries(s);
 
3507
 
 
3508
                    if(s->pict_type==S_TYPE && s->vol_sprite_usage==GMC_SPRITE && (cbpc & 16) == 0)
 
3509
                        s->mcsel= get_bits1(&s->gb);
 
3510
                    else s->mcsel= 0;
 
3511
 
 
3512
                    if ((cbpc & 16) == 0) {
 
3513
                        /* 16x16 motion prediction */
 
3514
 
 
3515
                        h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
 
3516
                        if(!s->mcsel){
 
3517
                            mx = h263_decode_motion(s, pred_x, s->f_code);
 
3518
                            if (mx >= 0xffff)
 
3519
                                return -1;
 
3520
 
 
3521
                            my = h263_decode_motion(s, pred_y, s->f_code);
 
3522
                            if (my >= 0xffff)
 
3523
                                return -1;
 
3524
                            s->current_picture.mb_type[xy]= MB_TYPE_16x16 | MB_TYPE_L0;
 
3525
                        } else {
 
3526
                            mx = get_amv(s, 0);
 
3527
                            my = get_amv(s, 1);
 
3528
                            s->current_picture.mb_type[xy]= MB_TYPE_16x16 | MB_TYPE_GMC | MB_TYPE_L0;
 
3529
                        }
 
3530
 
 
3531
                        mot_val[0       ]= mot_val[2       ] =
 
3532
                        mot_val[0+stride]= mot_val[2+stride]= mx;
 
3533
                        mot_val[1       ]= mot_val[3       ]=
 
3534
                        mot_val[1+stride]= mot_val[3+stride]= my;
 
3535
                    } else {
 
3536
                        int i;
 
3537
                        s->current_picture.mb_type[xy]= MB_TYPE_8x8 | MB_TYPE_L0;
 
3538
                        for(i=0;i<4;i++) {
 
3539
                            int16_t *mot_val= h263_pred_motion(s, i, 0, &pred_x, &pred_y);
 
3540
                            mx = h263_decode_motion(s, pred_x, s->f_code);
 
3541
                            if (mx >= 0xffff)
 
3542
                                return -1;
 
3543
 
 
3544
                            my = h263_decode_motion(s, pred_y, s->f_code);
 
3545
                            if (my >= 0xffff)
 
3546
                                return -1;
 
3547
                            mot_val[0] = mx;
 
3548
                            mot_val[1] = my;
 
3549
                        }
 
3550
                    }
 
3551
                }
 
3552
            }
 
3553
        }
 
3554
        s->mb_x= 0;
 
3555
    }
 
3556
 
 
3557
    return mb_num;
 
3558
}
 
3559
 
 
3560
/**
 
3561
 * decode second partition.
 
3562
 * @return <0 if an error occured
 
3563
 */
 
3564
static int mpeg4_decode_partition_b(MpegEncContext *s, int mb_count){
 
3565
    int mb_num=0;
 
3566
    static const int8_t quant_tab[4] = { -1, -2, 1, 2 };
 
3567
 
 
3568
    s->mb_x= s->resync_mb_x;
 
3569
    s->first_slice_line=1;
 
3570
    for(s->mb_y= s->resync_mb_y; mb_num < mb_count; s->mb_y++){
 
3571
        ff_init_block_index(s);
 
3572
        for(; mb_num < mb_count && s->mb_x<s->mb_width; s->mb_x++){
 
3573
            const int xy= s->mb_x + s->mb_y*s->mb_stride;
 
3574
 
 
3575
            mb_num++;
 
3576
            ff_update_block_index(s);
 
3577
            if(s->mb_x == s->resync_mb_x && s->mb_y == s->resync_mb_y+1)
 
3578
                s->first_slice_line=0;
 
3579
 
 
3580
            if(s->pict_type==I_TYPE){
 
3581
                int ac_pred= get_bits1(&s->gb);
 
3582
                int cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
 
3583
                if(cbpy<0){
 
3584
                    av_log(s->avctx, AV_LOG_ERROR, "cbpy corrupted at %d %d\n", s->mb_x, s->mb_y);
 
3585
                    return -1;
 
3586
                }
 
3587
 
 
3588
                s->cbp_table[xy]|= cbpy<<2;
 
3589
                s->current_picture.mb_type[xy] |= ac_pred*MB_TYPE_ACPRED;
 
3590
            }else{ /* P || S_TYPE */
 
3591
                if(IS_INTRA(s->current_picture.mb_type[xy])){
 
3592
                    int dir=0,i;
 
3593
                    int ac_pred = get_bits1(&s->gb);
 
3594
                    int cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
 
3595
 
 
3596
                    if(cbpy<0){
 
3597
                        av_log(s->avctx, AV_LOG_ERROR, "I cbpy corrupted at %d %d\n", s->mb_x, s->mb_y);
 
3598
                        return -1;
 
3599
                    }
 
3600
 
 
3601
                    if(s->cbp_table[xy] & 8) {
 
3602
                        ff_set_qscale(s, s->qscale + quant_tab[get_bits(&s->gb, 2)]);
 
3603
                    }
 
3604
                    s->current_picture.qscale_table[xy]= s->qscale;
 
3605
 
 
3606
                    for(i=0; i<6; i++){
 
3607
                        int dc_pred_dir;
 
3608
                        int dc= mpeg4_decode_dc(s, i, &dc_pred_dir);
 
3609
                        if(dc < 0){
 
3610
                            av_log(s->avctx, AV_LOG_ERROR, "DC corrupted at %d %d\n", s->mb_x, s->mb_y);
 
3611
                            return -1;
 
3612
                        }
 
3613
                        dir<<=1;
 
3614
                        if(dc_pred_dir) dir|=1;
 
3615
                    }
 
3616
                    s->cbp_table[xy]&= 3; //remove dquant
 
3617
                    s->cbp_table[xy]|= cbpy<<2;
 
3618
                    s->current_picture.mb_type[xy] |= ac_pred*MB_TYPE_ACPRED;
 
3619
                    s->pred_dir_table[xy]= dir;
 
3620
                }else if(IS_SKIP(s->current_picture.mb_type[xy])){
 
3621
                    s->current_picture.qscale_table[xy]= s->qscale;
 
3622
                    s->cbp_table[xy]= 0;
 
3623
                }else{
 
3624
                    int cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
 
3625
 
 
3626
                    if(cbpy<0){
 
3627
                        av_log(s->avctx, AV_LOG_ERROR, "P cbpy corrupted at %d %d\n", s->mb_x, s->mb_y);
 
3628
                        return -1;
 
3629
                    }
 
3630
 
 
3631
                    if(s->cbp_table[xy] & 8) {
 
3632
                        ff_set_qscale(s, s->qscale + quant_tab[get_bits(&s->gb, 2)]);
 
3633
                    }
 
3634
                    s->current_picture.qscale_table[xy]= s->qscale;
 
3635
 
 
3636
                    s->cbp_table[xy]&= 3; //remove dquant
 
3637
                    s->cbp_table[xy]|= (cbpy^0xf)<<2;
 
3638
                }
 
3639
            }
 
3640
        }
 
3641
        if(mb_num >= mb_count) return 0;
 
3642
        s->mb_x= 0;
 
3643
    }
 
3644
    return 0;
 
3645
}
 
3646
 
 
3647
/**
 
3648
 * decodes the first & second partition
 
3649
 * @return <0 if error (and sets error type in the error_status_table)
 
3650
 */
 
3651
int ff_mpeg4_decode_partitions(MpegEncContext *s)
 
3652
{
 
3653
    int mb_num;
 
3654
    const int part_a_error= s->pict_type==I_TYPE ? (DC_ERROR|MV_ERROR) : MV_ERROR;
 
3655
    const int part_a_end  = s->pict_type==I_TYPE ? (DC_END  |MV_END)   : MV_END;
 
3656
 
 
3657
    mb_num= mpeg4_decode_partition_a(s);
 
3658
    if(mb_num<0){
 
3659
        ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, part_a_error);
 
3660
        return -1;
 
3661
    }
 
3662
 
 
3663
    if(s->resync_mb_x + s->resync_mb_y*s->mb_width + mb_num > s->mb_num){
 
3664
        av_log(s->avctx, AV_LOG_ERROR, "slice below monitor ...\n");
 
3665
        ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, part_a_error);
 
3666
        return -1;
 
3667
    }
 
3668
 
 
3669
    s->mb_num_left= mb_num;
 
3670
 
 
3671
    if(s->pict_type==I_TYPE){
 
3672
        while(show_bits(&s->gb, 9) == 1)
 
3673
            skip_bits(&s->gb, 9);
 
3674
        if(get_bits_long(&s->gb, 19)!=DC_MARKER){
 
3675
            av_log(s->avctx, AV_LOG_ERROR, "marker missing after first I partition at %d %d\n", s->mb_x, s->mb_y);
 
3676
            return -1;
 
3677
        }
 
3678
    }else{
 
3679
        while(show_bits(&s->gb, 10) == 1)
 
3680
            skip_bits(&s->gb, 10);
 
3681
        if(get_bits(&s->gb, 17)!=MOTION_MARKER){
 
3682
            av_log(s->avctx, AV_LOG_ERROR, "marker missing after first P partition at %d %d\n", s->mb_x, s->mb_y);
 
3683
            return -1;
 
3684
        }
 
3685
    }
 
3686
    ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, part_a_end);
 
3687
 
 
3688
    if( mpeg4_decode_partition_b(s, mb_num) < 0){
 
3689
        if(s->pict_type==P_TYPE)
 
3690
            ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, DC_ERROR);
 
3691
        return -1;
 
3692
    }else{
 
3693
        if(s->pict_type==P_TYPE)
 
3694
            ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, DC_END);
 
3695
    }
 
3696
 
 
3697
    return 0;
 
3698
}
 
3699
 
 
3700
/**
 
3701
 * decode partition C of one MB.
 
3702
 * @return <0 if an error occured
 
3703
 */
 
3704
static int mpeg4_decode_partitioned_mb(MpegEncContext *s, DCTELEM block[6][64])
 
3705
{
 
3706
    int cbp, mb_type;
 
3707
    const int xy= s->mb_x + s->mb_y*s->mb_stride;
 
3708
 
 
3709
    mb_type= s->current_picture.mb_type[xy];
 
3710
    cbp = s->cbp_table[xy];
 
3711
 
 
3712
    if(s->current_picture.qscale_table[xy] != s->qscale){
 
3713
        ff_set_qscale(s, s->current_picture.qscale_table[xy] );
 
3714
    }
 
3715
 
 
3716
    if (s->pict_type == P_TYPE || s->pict_type==S_TYPE) {
 
3717
        int i;
 
3718
        for(i=0; i<4; i++){
 
3719
            s->mv[0][i][0] = s->current_picture.motion_val[0][ s->block_index[i] ][0];
 
3720
            s->mv[0][i][1] = s->current_picture.motion_val[0][ s->block_index[i] ][1];
 
3721
        }
 
3722
        s->mb_intra = IS_INTRA(mb_type);
 
3723
 
 
3724
        if (IS_SKIP(mb_type)) {
 
3725
            /* skip mb */
 
3726
            for(i=0;i<6;i++)
 
3727
                s->block_last_index[i] = -1;
 
3728
            s->mv_dir = MV_DIR_FORWARD;
 
3729
            s->mv_type = MV_TYPE_16X16;
 
3730
            if(s->pict_type==S_TYPE && s->vol_sprite_usage==GMC_SPRITE){
 
3731
                s->mcsel=1;
 
3732
                s->mb_skipped = 0;
 
3733
            }else{
 
3734
                s->mcsel=0;
 
3735
                s->mb_skipped = 1;
 
3736
            }
 
3737
        }else if(s->mb_intra){
 
3738
            s->ac_pred = IS_ACPRED(s->current_picture.mb_type[xy]);
 
3739
        }else if(!s->mb_intra){
 
3740
//            s->mcsel= 0; //FIXME do we need to init that
 
3741
 
 
3742
            s->mv_dir = MV_DIR_FORWARD;
 
3743
            if (IS_8X8(mb_type)) {
 
3744
                s->mv_type = MV_TYPE_8X8;
 
3745
            } else {
 
3746
                s->mv_type = MV_TYPE_16X16;
 
3747
            }
 
3748
        }
 
3749
    } else { /* I-Frame */
 
3750
        s->mb_intra = 1;
 
3751
        s->ac_pred = IS_ACPRED(s->current_picture.mb_type[xy]);
 
3752
    }
 
3753
 
 
3754
    if (!IS_SKIP(mb_type)) {
 
3755
        int i;
 
3756
        s->dsp.clear_blocks(s->block[0]);
 
3757
        /* decode each block */
 
3758
        for (i = 0; i < 6; i++) {
 
3759
            if(mpeg4_decode_block(s, block[i], i, cbp&32, s->mb_intra, s->rvlc) < 0){
 
3760
                av_log(s->avctx, AV_LOG_ERROR, "texture corrupted at %d %d %d\n", s->mb_x, s->mb_y, s->mb_intra);
 
3761
                return -1;
 
3762
            }
 
3763
            cbp+=cbp;
 
3764
        }
 
3765
    }
 
3766
 
 
3767
    /* per-MB end of slice check */
 
3768
 
 
3769
    if(--s->mb_num_left <= 0){
 
3770
//printf("%06X %d\n", show_bits(&s->gb, 24), s->gb.size_in_bits - get_bits_count(&s->gb));
 
3771
        if(mpeg4_is_resync(s))
 
3772
            return SLICE_END;
 
3773
        else
 
3774
            return SLICE_NOEND;
 
3775
    }else{
 
3776
        if(mpeg4_is_resync(s)){
 
3777
            const int delta= s->mb_x + 1 == s->mb_width ? 2 : 1;
 
3778
            if(s->cbp_table[xy+delta])
 
3779
                return SLICE_END;
 
3780
        }
 
3781
        return SLICE_OK;
 
3782
    }
 
3783
}
 
3784
 
 
3785
/**
 
3786
 * read the next MVs for OBMC. yes this is a ugly hack, feel free to send a patch :)
 
3787
 */
 
3788
static void preview_obmc(MpegEncContext *s){
 
3789
    GetBitContext gb= s->gb;
 
3790
 
 
3791
    int cbpc, i, pred_x, pred_y, mx, my;
 
3792
    int16_t *mot_val;
 
3793
    const int xy= s->mb_x + 1 + s->mb_y * s->mb_stride;
 
3794
    const int stride= s->b8_stride*2;
 
3795
 
 
3796
    for(i=0; i<4; i++)
 
3797
        s->block_index[i]+= 2;
 
3798
    for(i=4; i<6; i++)
 
3799
        s->block_index[i]+= 1;
 
3800
    s->mb_x++;
 
3801
 
 
3802
    assert(s->pict_type == P_TYPE);
 
3803
 
 
3804
    do{
 
3805
        if (get_bits1(&s->gb)) {
 
3806
            /* skip mb */
 
3807
            mot_val = s->current_picture.motion_val[0][ s->block_index[0] ];
 
3808
            mot_val[0       ]= mot_val[2       ]=
 
3809
            mot_val[0+stride]= mot_val[2+stride]= 0;
 
3810
            mot_val[1       ]= mot_val[3       ]=
 
3811
            mot_val[1+stride]= mot_val[3+stride]= 0;
 
3812
 
 
3813
            s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0;
 
3814
            goto end;
 
3815
        }
 
3816
        cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
 
3817
    }while(cbpc == 20);
 
3818
 
 
3819
    if(cbpc & 4){
 
3820
        s->current_picture.mb_type[xy]= MB_TYPE_INTRA;
 
3821
    }else{
 
3822
        get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
 
3823
        if (cbpc & 8) {
 
3824
            if(s->modified_quant){
 
3825
                if(get_bits1(&s->gb)) skip_bits(&s->gb, 1);
 
3826
                else                  skip_bits(&s->gb, 5);
 
3827
            }else
 
3828
                skip_bits(&s->gb, 2);
 
3829
        }
 
3830
 
 
3831
        if ((cbpc & 16) == 0) {
 
3832
                s->current_picture.mb_type[xy]= MB_TYPE_16x16 | MB_TYPE_L0;
 
3833
                /* 16x16 motion prediction */
 
3834
                mot_val= h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
 
3835
                if (s->umvplus)
 
3836
                   mx = h263p_decode_umotion(s, pred_x);
 
3837
                else
 
3838
                   mx = h263_decode_motion(s, pred_x, 1);
 
3839
 
 
3840
                if (s->umvplus)
 
3841
                   my = h263p_decode_umotion(s, pred_y);
 
3842
                else
 
3843
                   my = h263_decode_motion(s, pred_y, 1);
 
3844
 
 
3845
                mot_val[0       ]= mot_val[2       ]=
 
3846
                mot_val[0+stride]= mot_val[2+stride]= mx;
 
3847
                mot_val[1       ]= mot_val[3       ]=
 
3848
                mot_val[1+stride]= mot_val[3+stride]= my;
 
3849
        } else {
 
3850
            s->current_picture.mb_type[xy]= MB_TYPE_8x8 | MB_TYPE_L0;
 
3851
            for(i=0;i<4;i++) {
 
3852
                mot_val = h263_pred_motion(s, i, 0, &pred_x, &pred_y);
 
3853
                if (s->umvplus)
 
3854
                  mx = h263p_decode_umotion(s, pred_x);
 
3855
                else
 
3856
                  mx = h263_decode_motion(s, pred_x, 1);
 
3857
 
 
3858
                if (s->umvplus)
 
3859
                  my = h263p_decode_umotion(s, pred_y);
 
3860
                else
 
3861
                  my = h263_decode_motion(s, pred_y, 1);
 
3862
                if (s->umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
 
3863
                  skip_bits1(&s->gb); /* Bit stuffing to prevent PSC */
 
3864
                mot_val[0] = mx;
 
3865
                mot_val[1] = my;
 
3866
            }
 
3867
        }
 
3868
    }
 
3869
end:
 
3870
 
 
3871
    for(i=0; i<4; i++)
 
3872
        s->block_index[i]-= 2;
 
3873
    for(i=4; i<6; i++)
 
3874
        s->block_index[i]-= 1;
 
3875
    s->mb_x--;
 
3876
 
 
3877
    s->gb= gb;
 
3878
}
 
3879
 
 
3880
static void h263_decode_dquant(MpegEncContext *s){
 
3881
    static const int8_t quant_tab[4] = { -1, -2, 1, 2 };
 
3882
 
 
3883
    if(s->modified_quant){
 
3884
        if(get_bits1(&s->gb))
 
3885
            s->qscale= modified_quant_tab[get_bits1(&s->gb)][ s->qscale ];
 
3886
        else
 
3887
            s->qscale= get_bits(&s->gb, 5);
 
3888
    }else
 
3889
        s->qscale += quant_tab[get_bits(&s->gb, 2)];
 
3890
    ff_set_qscale(s, s->qscale);
 
3891
}
 
3892
 
 
3893
int ff_h263_decode_mb(MpegEncContext *s,
 
3894
                      DCTELEM block[6][64])
 
3895
{
 
3896
    int cbpc, cbpy, i, cbp, pred_x, pred_y, mx, my, dquant;
 
3897
    int16_t *mot_val;
 
3898
    const int xy= s->mb_x + s->mb_y * s->mb_stride;
 
3899
 
 
3900
    assert(!s->h263_pred);
 
3901
 
 
3902
    if (s->pict_type == P_TYPE) {
 
3903
        do{
 
3904
            if (get_bits1(&s->gb)) {
 
3905
                /* skip mb */
 
3906
                s->mb_intra = 0;
 
3907
                for(i=0;i<6;i++)
 
3908
                    s->block_last_index[i] = -1;
 
3909
                s->mv_dir = MV_DIR_FORWARD;
 
3910
                s->mv_type = MV_TYPE_16X16;
 
3911
                s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0;
 
3912
                s->mv[0][0][0] = 0;
 
3913
                s->mv[0][0][1] = 0;
 
3914
                s->mb_skipped = !(s->obmc | s->loop_filter);
 
3915
                goto end;
 
3916
            }
 
3917
            cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
 
3918
            //fprintf(stderr, "\tCBPC: %d", cbpc);
 
3919
            if (cbpc < 0){
 
3920
                av_log(s->avctx, AV_LOG_ERROR, "cbpc damaged at %d %d\n", s->mb_x, s->mb_y);
 
3921
                return -1;
 
3922
            }
 
3923
        }while(cbpc == 20);
 
3924
 
 
3925
        s->dsp.clear_blocks(s->block[0]);
 
3926
 
 
3927
        dquant = cbpc & 8;
 
3928
        s->mb_intra = ((cbpc & 4) != 0);
 
3929
        if (s->mb_intra) goto intra;
 
3930
 
 
3931
        cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
 
3932
 
 
3933
        if(s->alt_inter_vlc==0 || (cbpc & 3)!=3)
 
3934
            cbpy ^= 0xF;
 
3935
 
 
3936
        cbp = (cbpc & 3) | (cbpy << 2);
 
3937
        if (dquant) {
 
3938
            h263_decode_dquant(s);
 
3939
        }
 
3940
 
 
3941
        s->mv_dir = MV_DIR_FORWARD;
 
3942
        if ((cbpc & 16) == 0) {
 
3943
            s->current_picture.mb_type[xy]= MB_TYPE_16x16 | MB_TYPE_L0;
 
3944
            /* 16x16 motion prediction */
 
3945
            s->mv_type = MV_TYPE_16X16;
 
3946
            h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
 
3947
            if (s->umvplus)
 
3948
               mx = h263p_decode_umotion(s, pred_x);
 
3949
            else
 
3950
               mx = h263_decode_motion(s, pred_x, 1);
 
3951
 
 
3952
            if (mx >= 0xffff)
 
3953
                return -1;
 
3954
 
 
3955
            if (s->umvplus)
 
3956
               my = h263p_decode_umotion(s, pred_y);
 
3957
            else
 
3958
               my = h263_decode_motion(s, pred_y, 1);
 
3959
 
 
3960
            if (my >= 0xffff)
 
3961
                return -1;
 
3962
            s->mv[0][0][0] = mx;
 
3963
            s->mv[0][0][1] = my;
 
3964
 
 
3965
            if (s->umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
 
3966
               skip_bits1(&s->gb); /* Bit stuffing to prevent PSC */
 
3967
        } else {
 
3968
            s->current_picture.mb_type[xy]= MB_TYPE_8x8 | MB_TYPE_L0;
 
3969
            s->mv_type = MV_TYPE_8X8;
 
3970
            for(i=0;i<4;i++) {
 
3971
                mot_val = h263_pred_motion(s, i, 0, &pred_x, &pred_y);
 
3972
                if (s->umvplus)
 
3973
                  mx = h263p_decode_umotion(s, pred_x);
 
3974
                else
 
3975
                  mx = h263_decode_motion(s, pred_x, 1);
 
3976
                if (mx >= 0xffff)
 
3977
                    return -1;
 
3978
 
 
3979
                if (s->umvplus)
 
3980
                  my = h263p_decode_umotion(s, pred_y);
 
3981
                else
 
3982
                  my = h263_decode_motion(s, pred_y, 1);
 
3983
                if (my >= 0xffff)
 
3984
                    return -1;
 
3985
                s->mv[0][i][0] = mx;
 
3986
                s->mv[0][i][1] = my;
 
3987
                if (s->umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
 
3988
                  skip_bits1(&s->gb); /* Bit stuffing to prevent PSC */
 
3989
                mot_val[0] = mx;
 
3990
                mot_val[1] = my;
 
3991
            }
 
3992
        }
 
3993
 
 
3994
        /* decode each block */
 
3995
        for (i = 0; i < 6; i++) {
 
3996
            if (h263_decode_block(s, block[i], i, cbp&32) < 0)
 
3997
                return -1;
 
3998
            cbp+=cbp;
 
3999
        }
 
4000
 
 
4001
        if(s->obmc){
 
4002
            if(s->pict_type == P_TYPE && s->mb_x+1<s->mb_width && s->mb_num_left != 1)
 
4003
                preview_obmc(s);
 
4004
        }
 
4005
    } else if(s->pict_type==B_TYPE) {
 
4006
        int mb_type;
 
4007
        const int stride= s->b8_stride;
 
4008
        int16_t *mot_val0 = s->current_picture.motion_val[0][ 2*(s->mb_x + s->mb_y*stride) ];
 
4009
        int16_t *mot_val1 = s->current_picture.motion_val[1][ 2*(s->mb_x + s->mb_y*stride) ];
 
4010
//        const int mv_xy= s->mb_x + 1 + s->mb_y * s->mb_stride;
 
4011
 
 
4012
        //FIXME ugly
 
4013
        mot_val0[0       ]= mot_val0[2       ]= mot_val0[0+2*stride]= mot_val0[2+2*stride]=
 
4014
        mot_val0[1       ]= mot_val0[3       ]= mot_val0[1+2*stride]= mot_val0[3+2*stride]=
 
4015
        mot_val1[0       ]= mot_val1[2       ]= mot_val1[0+2*stride]= mot_val1[2+2*stride]=
 
4016
        mot_val1[1       ]= mot_val1[3       ]= mot_val1[1+2*stride]= mot_val1[3+2*stride]= 0;
 
4017
 
 
4018
        do{
 
4019
            mb_type= get_vlc2(&s->gb, h263_mbtype_b_vlc.table, H263_MBTYPE_B_VLC_BITS, 2);
 
4020
            if (mb_type < 0){
 
4021
                av_log(s->avctx, AV_LOG_ERROR, "b mb_type damaged at %d %d\n", s->mb_x, s->mb_y);
 
4022
                return -1;
 
4023
            }
 
4024
 
 
4025
            mb_type= h263_mb_type_b_map[ mb_type ];
 
4026
        }while(!mb_type);
 
4027
 
 
4028
        s->mb_intra = IS_INTRA(mb_type);
 
4029
        if(HAS_CBP(mb_type)){
 
4030
            s->dsp.clear_blocks(s->block[0]);
 
4031
            cbpc = get_vlc2(&s->gb, cbpc_b_vlc.table, CBPC_B_VLC_BITS, 1);
 
4032
            if(s->mb_intra){
 
4033
                dquant = IS_QUANT(mb_type);
 
4034
                goto intra;
 
4035
            }
 
4036
 
 
4037
            cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
 
4038
 
 
4039
            if (cbpy < 0){
 
4040
                av_log(s->avctx, AV_LOG_ERROR, "b cbpy damaged at %d %d\n", s->mb_x, s->mb_y);
 
4041
                return -1;
 
4042
            }
 
4043
 
 
4044
            if(s->alt_inter_vlc==0 || (cbpc & 3)!=3)
 
4045
                cbpy ^= 0xF;
 
4046
 
 
4047
            cbp = (cbpc & 3) | (cbpy << 2);
 
4048
        }else
 
4049
            cbp=0;
 
4050
 
 
4051
        assert(!s->mb_intra);
 
4052
 
 
4053
        if(IS_QUANT(mb_type)){
 
4054
            h263_decode_dquant(s);
 
4055
        }
 
4056
 
 
4057
        if(IS_DIRECT(mb_type)){
 
4058
            s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD | MV_DIRECT;
 
4059
            mb_type |= ff_mpeg4_set_direct_mv(s, 0, 0);
 
4060
        }else{
 
4061
            s->mv_dir = 0;
 
4062
            s->mv_type= MV_TYPE_16X16;
 
4063
//FIXME UMV
 
4064
 
 
4065
            if(USES_LIST(mb_type, 0)){
 
4066
                int16_t *mot_val= h263_pred_motion(s, 0, 0, &mx, &my);
 
4067
                s->mv_dir = MV_DIR_FORWARD;
 
4068
 
 
4069
                mx = h263_decode_motion(s, mx, 1);
 
4070
                my = h263_decode_motion(s, my, 1);
 
4071
 
 
4072
                s->mv[0][0][0] = mx;
 
4073
                s->mv[0][0][1] = my;
 
4074
                mot_val[0       ]= mot_val[2       ]= mot_val[0+2*stride]= mot_val[2+2*stride]= mx;
 
4075
                mot_val[1       ]= mot_val[3       ]= mot_val[1+2*stride]= mot_val[3+2*stride]= my;
 
4076
            }
 
4077
 
 
4078
            if(USES_LIST(mb_type, 1)){
 
4079
                int16_t *mot_val= h263_pred_motion(s, 0, 1, &mx, &my);
 
4080
                s->mv_dir |= MV_DIR_BACKWARD;
 
4081
 
 
4082
                mx = h263_decode_motion(s, mx, 1);
 
4083
                my = h263_decode_motion(s, my, 1);
 
4084
 
 
4085
                s->mv[1][0][0] = mx;
 
4086
                s->mv[1][0][1] = my;
 
4087
                mot_val[0       ]= mot_val[2       ]= mot_val[0+2*stride]= mot_val[2+2*stride]= mx;
 
4088
                mot_val[1       ]= mot_val[3       ]= mot_val[1+2*stride]= mot_val[3+2*stride]= my;
 
4089
            }
 
4090
        }
 
4091
 
 
4092
        s->current_picture.mb_type[xy]= mb_type;
 
4093
 
 
4094
        /* decode each block */
 
4095
        for (i = 0; i < 6; i++) {
 
4096
            if (h263_decode_block(s, block[i], i, cbp&32) < 0)
 
4097
                return -1;
 
4098
            cbp+=cbp;
 
4099
        }
 
4100
    } else { /* I-Frame */
 
4101
        do{
 
4102
            cbpc = get_vlc2(&s->gb, intra_MCBPC_vlc.table, INTRA_MCBPC_VLC_BITS, 2);
 
4103
            if (cbpc < 0){
 
4104
                av_log(s->avctx, AV_LOG_ERROR, "I cbpc damaged at %d %d\n", s->mb_x, s->mb_y);
 
4105
                return -1;
 
4106
            }
 
4107
        }while(cbpc == 8);
 
4108
 
 
4109
        s->dsp.clear_blocks(s->block[0]);
 
4110
 
 
4111
        dquant = cbpc & 4;
 
4112
        s->mb_intra = 1;
 
4113
intra:
 
4114
        s->current_picture.mb_type[xy]= MB_TYPE_INTRA;
 
4115
        if (s->h263_aic) {
 
4116
            s->ac_pred = get_bits1(&s->gb);
 
4117
            if(s->ac_pred){
 
4118
                s->current_picture.mb_type[xy]= MB_TYPE_INTRA | MB_TYPE_ACPRED;
 
4119
 
 
4120
                s->h263_aic_dir = get_bits1(&s->gb);
 
4121
            }
 
4122
        }else
 
4123
            s->ac_pred = 0;
 
4124
 
 
4125
        cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
 
4126
        if(cbpy<0){
 
4127
            av_log(s->avctx, AV_LOG_ERROR, "I cbpy damaged at %d %d\n", s->mb_x, s->mb_y);
 
4128
            return -1;
 
4129
        }
 
4130
        cbp = (cbpc & 3) | (cbpy << 2);
 
4131
        if (dquant) {
 
4132
            h263_decode_dquant(s);
 
4133
        }
 
4134
 
 
4135
        /* decode each block */
 
4136
        for (i = 0; i < 6; i++) {
 
4137
            if (h263_decode_block(s, block[i], i, cbp&32) < 0)
 
4138
                return -1;
 
4139
            cbp+=cbp;
 
4140
        }
 
4141
    }
 
4142
end:
 
4143
 
 
4144
        /* per-MB end of slice check */
 
4145
    {
 
4146
        int v= show_bits(&s->gb, 16);
 
4147
 
 
4148
        if(get_bits_count(&s->gb) + 16 > s->gb.size_in_bits){
 
4149
            v>>= get_bits_count(&s->gb) + 16 - s->gb.size_in_bits;
 
4150
        }
 
4151
 
 
4152
        if(v==0)
 
4153
            return SLICE_END;
 
4154
    }
 
4155
 
 
4156
    return SLICE_OK;
 
4157
}
 
4158
 
 
4159
int ff_mpeg4_decode_mb(MpegEncContext *s,
 
4160
                      DCTELEM block[6][64])
 
4161
{
 
4162
    int cbpc, cbpy, i, cbp, pred_x, pred_y, mx, my, dquant;
 
4163
    int16_t *mot_val;
 
4164
    static int8_t quant_tab[4] = { -1, -2, 1, 2 };
 
4165
    const int xy= s->mb_x + s->mb_y * s->mb_stride;
 
4166
 
 
4167
    assert(s->h263_pred);
 
4168
 
 
4169
    if (s->pict_type == P_TYPE || s->pict_type==S_TYPE) {
 
4170
        do{
 
4171
            if (get_bits1(&s->gb)) {
 
4172
                /* skip mb */
 
4173
                s->mb_intra = 0;
 
4174
                for(i=0;i<6;i++)
 
4175
                    s->block_last_index[i] = -1;
 
4176
                s->mv_dir = MV_DIR_FORWARD;
 
4177
                s->mv_type = MV_TYPE_16X16;
 
4178
                if(s->pict_type==S_TYPE && s->vol_sprite_usage==GMC_SPRITE){
 
4179
                    s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_GMC | MB_TYPE_16x16 | MB_TYPE_L0;
 
4180
                    s->mcsel=1;
 
4181
                    s->mv[0][0][0]= get_amv(s, 0);
 
4182
                    s->mv[0][0][1]= get_amv(s, 1);
 
4183
 
 
4184
                    s->mb_skipped = 0;
 
4185
                }else{
 
4186
                    s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0;
 
4187
                    s->mcsel=0;
 
4188
                    s->mv[0][0][0] = 0;
 
4189
                    s->mv[0][0][1] = 0;
 
4190
                    s->mb_skipped = 1;
 
4191
                }
 
4192
                goto end;
 
4193
            }
 
4194
            cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
 
4195
            //fprintf(stderr, "\tCBPC: %d", cbpc);
 
4196
            if (cbpc < 0){
 
4197
                av_log(s->avctx, AV_LOG_ERROR, "cbpc damaged at %d %d\n", s->mb_x, s->mb_y);
 
4198
                return -1;
 
4199
            }
 
4200
        }while(cbpc == 20);
 
4201
 
 
4202
        s->dsp.clear_blocks(s->block[0]);
 
4203
        dquant = cbpc & 8;
 
4204
        s->mb_intra = ((cbpc & 4) != 0);
 
4205
        if (s->mb_intra) goto intra;
 
4206
 
 
4207
        if(s->pict_type==S_TYPE && s->vol_sprite_usage==GMC_SPRITE && (cbpc & 16) == 0)
 
4208
            s->mcsel= get_bits1(&s->gb);
 
4209
        else s->mcsel= 0;
 
4210
        cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1) ^ 0x0F;
 
4211
 
 
4212
        cbp = (cbpc & 3) | (cbpy << 2);
 
4213
        if (dquant) {
 
4214
            ff_set_qscale(s, s->qscale + quant_tab[get_bits(&s->gb, 2)]);
 
4215
        }
 
4216
        if((!s->progressive_sequence) && (cbp || (s->workaround_bugs&FF_BUG_XVID_ILACE)))
 
4217
            s->interlaced_dct= get_bits1(&s->gb);
 
4218
 
 
4219
        s->mv_dir = MV_DIR_FORWARD;
 
4220
        if ((cbpc & 16) == 0) {
 
4221
            if(s->mcsel){
 
4222
                s->current_picture.mb_type[xy]= MB_TYPE_GMC | MB_TYPE_16x16 | MB_TYPE_L0;
 
4223
                /* 16x16 global motion prediction */
 
4224
                s->mv_type = MV_TYPE_16X16;
 
4225
                mx= get_amv(s, 0);
 
4226
                my= get_amv(s, 1);
 
4227
                s->mv[0][0][0] = mx;
 
4228
                s->mv[0][0][1] = my;
 
4229
            }else if((!s->progressive_sequence) && get_bits1(&s->gb)){
 
4230
                s->current_picture.mb_type[xy]= MB_TYPE_16x8 | MB_TYPE_L0 | MB_TYPE_INTERLACED;
 
4231
                /* 16x8 field motion prediction */
 
4232
                s->mv_type= MV_TYPE_FIELD;
 
4233
 
 
4234
                s->field_select[0][0]= get_bits1(&s->gb);
 
4235
                s->field_select[0][1]= get_bits1(&s->gb);
 
4236
 
 
4237
                h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
 
4238
 
 
4239
                for(i=0; i<2; i++){
 
4240
                    mx = h263_decode_motion(s, pred_x, s->f_code);
 
4241
                    if (mx >= 0xffff)
 
4242
                        return -1;
 
4243
 
 
4244
                    my = h263_decode_motion(s, pred_y/2, s->f_code);
 
4245
                    if (my >= 0xffff)
 
4246
                        return -1;
 
4247
 
 
4248
                    s->mv[0][i][0] = mx;
 
4249
                    s->mv[0][i][1] = my;
 
4250
                }
 
4251
            }else{
 
4252
                s->current_picture.mb_type[xy]= MB_TYPE_16x16 | MB_TYPE_L0;
 
4253
                /* 16x16 motion prediction */
 
4254
                s->mv_type = MV_TYPE_16X16;
 
4255
                h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
 
4256
                mx = h263_decode_motion(s, pred_x, s->f_code);
 
4257
 
 
4258
                if (mx >= 0xffff)
 
4259
                    return -1;
 
4260
 
 
4261
                my = h263_decode_motion(s, pred_y, s->f_code);
 
4262
 
 
4263
                if (my >= 0xffff)
 
4264
                    return -1;
 
4265
                s->mv[0][0][0] = mx;
 
4266
                s->mv[0][0][1] = my;
 
4267
            }
 
4268
        } else {
 
4269
            s->current_picture.mb_type[xy]= MB_TYPE_8x8 | MB_TYPE_L0;
 
4270
            s->mv_type = MV_TYPE_8X8;
 
4271
            for(i=0;i<4;i++) {
 
4272
                mot_val = h263_pred_motion(s, i, 0, &pred_x, &pred_y);
 
4273
                mx = h263_decode_motion(s, pred_x, s->f_code);
 
4274
                if (mx >= 0xffff)
 
4275
                    return -1;
 
4276
 
 
4277
                my = h263_decode_motion(s, pred_y, s->f_code);
 
4278
                if (my >= 0xffff)
 
4279
                    return -1;
 
4280
                s->mv[0][i][0] = mx;
 
4281
                s->mv[0][i][1] = my;
 
4282
                mot_val[0] = mx;
 
4283
                mot_val[1] = my;
 
4284
            }
 
4285
        }
 
4286
    } else if(s->pict_type==B_TYPE) {
 
4287
        int modb1; // first bit of modb
 
4288
        int modb2; // second bit of modb
 
4289
        int mb_type;
 
4290
 
 
4291
        s->mb_intra = 0; //B-frames never contain intra blocks
 
4292
        s->mcsel=0;      //     ...               true gmc blocks
 
4293
 
 
4294
        if(s->mb_x==0){
 
4295
            for(i=0; i<2; i++){
 
4296
                s->last_mv[i][0][0]=
 
4297
                s->last_mv[i][0][1]=
 
4298
                s->last_mv[i][1][0]=
 
4299
                s->last_mv[i][1][1]= 0;
 
4300
            }
 
4301
        }
 
4302
 
 
4303
        /* if we skipped it in the future P Frame than skip it now too */
 
4304
        s->mb_skipped= s->next_picture.mbskip_table[s->mb_y * s->mb_stride + s->mb_x]; // Note, skiptab=0 if last was GMC
 
4305
 
 
4306
        if(s->mb_skipped){
 
4307
                /* skip mb */
 
4308
            for(i=0;i<6;i++)
 
4309
                s->block_last_index[i] = -1;
 
4310
 
 
4311
            s->mv_dir = MV_DIR_FORWARD;
 
4312
            s->mv_type = MV_TYPE_16X16;
 
4313
            s->mv[0][0][0] = 0;
 
4314
            s->mv[0][0][1] = 0;
 
4315
            s->mv[1][0][0] = 0;
 
4316
            s->mv[1][0][1] = 0;
 
4317
            s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0;
 
4318
            goto end;
 
4319
        }
 
4320
 
 
4321
        modb1= get_bits1(&s->gb);
 
4322
        if(modb1){
 
4323
            mb_type= MB_TYPE_DIRECT2 | MB_TYPE_SKIP | MB_TYPE_L0L1; //like MB_TYPE_B_DIRECT but no vectors coded
 
4324
            cbp=0;
 
4325
        }else{
 
4326
            modb2= get_bits1(&s->gb);
 
4327
            mb_type= get_vlc2(&s->gb, mb_type_b_vlc.table, MB_TYPE_B_VLC_BITS, 1);
 
4328
            if(mb_type<0){
 
4329
                av_log(s->avctx, AV_LOG_ERROR, "illegal MB_type\n");
 
4330
                return -1;
 
4331
            }
 
4332
            mb_type= mb_type_b_map[ mb_type ];
 
4333
            if(modb2) cbp= 0;
 
4334
            else{
 
4335
                s->dsp.clear_blocks(s->block[0]);
 
4336
                cbp= get_bits(&s->gb, 6);
 
4337
            }
 
4338
 
 
4339
            if ((!IS_DIRECT(mb_type)) && cbp) {
 
4340
                if(get_bits1(&s->gb)){
 
4341
                    ff_set_qscale(s, s->qscale + get_bits1(&s->gb)*4 - 2);
 
4342
                }
 
4343
            }
 
4344
 
 
4345
            if(!s->progressive_sequence){
 
4346
                if(cbp)
 
4347
                    s->interlaced_dct= get_bits1(&s->gb);
 
4348
 
 
4349
                if(!IS_DIRECT(mb_type) && get_bits1(&s->gb)){
 
4350
                    mb_type |= MB_TYPE_16x8 | MB_TYPE_INTERLACED;
 
4351
                    mb_type &= ~MB_TYPE_16x16;
 
4352
 
 
4353
                    if(USES_LIST(mb_type, 0)){
 
4354
                        s->field_select[0][0]= get_bits1(&s->gb);
 
4355
                        s->field_select[0][1]= get_bits1(&s->gb);
 
4356
                    }
 
4357
                    if(USES_LIST(mb_type, 1)){
 
4358
                        s->field_select[1][0]= get_bits1(&s->gb);
 
4359
                        s->field_select[1][1]= get_bits1(&s->gb);
 
4360
                    }
 
4361
                }
 
4362
            }
 
4363
 
 
4364
            s->mv_dir = 0;
 
4365
            if((mb_type & (MB_TYPE_DIRECT2|MB_TYPE_INTERLACED)) == 0){
 
4366
                s->mv_type= MV_TYPE_16X16;
 
4367
 
 
4368
                if(USES_LIST(mb_type, 0)){
 
4369
                    s->mv_dir = MV_DIR_FORWARD;
 
4370
 
 
4371
                    mx = h263_decode_motion(s, s->last_mv[0][0][0], s->f_code);
 
4372
                    my = h263_decode_motion(s, s->last_mv[0][0][1], s->f_code);
 
4373
                    s->last_mv[0][1][0]= s->last_mv[0][0][0]= s->mv[0][0][0] = mx;
 
4374
                    s->last_mv[0][1][1]= s->last_mv[0][0][1]= s->mv[0][0][1] = my;
 
4375
                }
 
4376
 
 
4377
                if(USES_LIST(mb_type, 1)){
 
4378
                    s->mv_dir |= MV_DIR_BACKWARD;
 
4379
 
 
4380
                    mx = h263_decode_motion(s, s->last_mv[1][0][0], s->b_code);
 
4381
                    my = h263_decode_motion(s, s->last_mv[1][0][1], s->b_code);
 
4382
                    s->last_mv[1][1][0]= s->last_mv[1][0][0]= s->mv[1][0][0] = mx;
 
4383
                    s->last_mv[1][1][1]= s->last_mv[1][0][1]= s->mv[1][0][1] = my;
 
4384
                }
 
4385
            }else if(!IS_DIRECT(mb_type)){
 
4386
                s->mv_type= MV_TYPE_FIELD;
 
4387
 
 
4388
                if(USES_LIST(mb_type, 0)){
 
4389
                    s->mv_dir = MV_DIR_FORWARD;
 
4390
 
 
4391
                    for(i=0; i<2; i++){
 
4392
                        mx = h263_decode_motion(s, s->last_mv[0][i][0]  , s->f_code);
 
4393
                        my = h263_decode_motion(s, s->last_mv[0][i][1]/2, s->f_code);
 
4394
                        s->last_mv[0][i][0]=  s->mv[0][i][0] = mx;
 
4395
                        s->last_mv[0][i][1]= (s->mv[0][i][1] = my)*2;
 
4396
                    }
 
4397
                }
 
4398
 
 
4399
                if(USES_LIST(mb_type, 1)){
 
4400
                    s->mv_dir |= MV_DIR_BACKWARD;
 
4401
 
 
4402
                    for(i=0; i<2; i++){
 
4403
                        mx = h263_decode_motion(s, s->last_mv[1][i][0]  , s->b_code);
 
4404
                        my = h263_decode_motion(s, s->last_mv[1][i][1]/2, s->b_code);
 
4405
                        s->last_mv[1][i][0]=  s->mv[1][i][0] = mx;
 
4406
                        s->last_mv[1][i][1]= (s->mv[1][i][1] = my)*2;
 
4407
                    }
 
4408
                }
 
4409
            }
 
4410
        }
 
4411
 
 
4412
        if(IS_DIRECT(mb_type)){
 
4413
            if(IS_SKIP(mb_type))
 
4414
                mx=my=0;
 
4415
            else{
 
4416
                mx = h263_decode_motion(s, 0, 1);
 
4417
                my = h263_decode_motion(s, 0, 1);
 
4418
            }
 
4419
 
 
4420
            s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD | MV_DIRECT;
 
4421
            mb_type |= ff_mpeg4_set_direct_mv(s, mx, my);
 
4422
        }
 
4423
        s->current_picture.mb_type[xy]= mb_type;
 
4424
    } else { /* I-Frame */
 
4425
        do{
 
4426
            cbpc = get_vlc2(&s->gb, intra_MCBPC_vlc.table, INTRA_MCBPC_VLC_BITS, 2);
 
4427
            if (cbpc < 0){
 
4428
                av_log(s->avctx, AV_LOG_ERROR, "I cbpc damaged at %d %d\n", s->mb_x, s->mb_y);
 
4429
                return -1;
 
4430
            }
 
4431
        }while(cbpc == 8);
 
4432
 
 
4433
        dquant = cbpc & 4;
 
4434
        s->mb_intra = 1;
 
4435
intra:
 
4436
        s->ac_pred = get_bits1(&s->gb);
 
4437
        if(s->ac_pred)
 
4438
            s->current_picture.mb_type[xy]= MB_TYPE_INTRA | MB_TYPE_ACPRED;
 
4439
        else
 
4440
            s->current_picture.mb_type[xy]= MB_TYPE_INTRA;
 
4441
 
 
4442
        cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
 
4443
        if(cbpy<0){
 
4444
            av_log(s->avctx, AV_LOG_ERROR, "I cbpy damaged at %d %d\n", s->mb_x, s->mb_y);
 
4445
            return -1;
 
4446
        }
 
4447
        cbp = (cbpc & 3) | (cbpy << 2);
 
4448
        if (dquant) {
 
4449
            ff_set_qscale(s, s->qscale + quant_tab[get_bits(&s->gb, 2)]);
 
4450
        }
 
4451
 
 
4452
        if(!s->progressive_sequence)
 
4453
            s->interlaced_dct= get_bits1(&s->gb);
 
4454
 
 
4455
        s->dsp.clear_blocks(s->block[0]);
 
4456
        /* decode each block */
 
4457
        for (i = 0; i < 6; i++) {
 
4458
            if (mpeg4_decode_block(s, block[i], i, cbp&32, 1, 0) < 0)
 
4459
                return -1;
 
4460
            cbp+=cbp;
 
4461
        }
 
4462
        goto end;
 
4463
    }
 
4464
 
 
4465
    /* decode each block */
 
4466
    for (i = 0; i < 6; i++) {
 
4467
        if (mpeg4_decode_block(s, block[i], i, cbp&32, 0, 0) < 0)
 
4468
            return -1;
 
4469
        cbp+=cbp;
 
4470
    }
 
4471
end:
 
4472
 
 
4473
        /* per-MB end of slice check */
 
4474
    if(s->codec_id==CODEC_ID_MPEG4){
 
4475
        if(mpeg4_is_resync(s)){
 
4476
            const int delta= s->mb_x + 1 == s->mb_width ? 2 : 1;
 
4477
            if(s->pict_type==B_TYPE && s->next_picture.mbskip_table[xy + delta])
 
4478
                return SLICE_OK;
 
4479
            return SLICE_END;
 
4480
        }
 
4481
    }
 
4482
 
 
4483
    return SLICE_OK;
 
4484
}
 
4485
 
 
4486
static int h263_decode_motion(MpegEncContext * s, int pred, int f_code)
 
4487
{
 
4488
    int code, val, sign, shift, l;
 
4489
    code = get_vlc2(&s->gb, mv_vlc.table, MV_VLC_BITS, 2);
 
4490
 
 
4491
    if (code == 0)
 
4492
        return pred;
 
4493
    if (code < 0)
 
4494
        return 0xffff;
 
4495
 
 
4496
    sign = get_bits1(&s->gb);
 
4497
    shift = f_code - 1;
 
4498
    val = code;
 
4499
    if (shift) {
 
4500
        val = (val - 1) << shift;
 
4501
        val |= get_bits(&s->gb, shift);
 
4502
        val++;
 
4503
    }
 
4504
    if (sign)
 
4505
        val = -val;
 
4506
    val += pred;
 
4507
 
 
4508
    /* modulo decoding */
 
4509
    if (!s->h263_long_vectors) {
 
4510
        l = INT_BIT - 5 - f_code;
 
4511
        val = (val<<l)>>l;
 
4512
    } else {
 
4513
        /* horrible h263 long vector mode */
 
4514
        if (pred < -31 && val < -63)
 
4515
            val += 64;
 
4516
        if (pred > 32 && val > 63)
 
4517
            val -= 64;
 
4518
 
 
4519
    }
 
4520
    return val;
 
4521
}
 
4522
 
 
4523
/* Decodes RVLC of H.263+ UMV */
 
4524
static int h263p_decode_umotion(MpegEncContext * s, int pred)
 
4525
{
 
4526
   int code = 0, sign;
 
4527
 
 
4528
   if (get_bits1(&s->gb)) /* Motion difference = 0 */
 
4529
      return pred;
 
4530
 
 
4531
   code = 2 + get_bits1(&s->gb);
 
4532
 
 
4533
   while (get_bits1(&s->gb))
 
4534
   {
 
4535
      code <<= 1;
 
4536
      code += get_bits1(&s->gb);
 
4537
   }
 
4538
   sign = code & 1;
 
4539
   code >>= 1;
 
4540
 
 
4541
   code = (sign) ? (pred - code) : (pred + code);
 
4542
#ifdef DEBUG
 
4543
   av_log( s->avctx, AV_LOG_DEBUG,"H.263+ UMV Motion = %d\n", code);
 
4544
#endif
 
4545
   return code;
 
4546
 
 
4547
}
 
4548
 
 
4549
static int h263_decode_block(MpegEncContext * s, DCTELEM * block,
 
4550
                             int n, int coded)
 
4551
{
 
4552
    int code, level, i, j, last, run;
 
4553
    RLTable *rl = &rl_inter;
 
4554
    const uint8_t *scan_table;
 
4555
    GetBitContext gb= s->gb;
 
4556
 
 
4557
    scan_table = s->intra_scantable.permutated;
 
4558
    if (s->h263_aic && s->mb_intra) {
 
4559
        rl = &rl_intra_aic;
 
4560
        i = 0;
 
4561
        if (s->ac_pred) {
 
4562
            if (s->h263_aic_dir)
 
4563
                scan_table = s->intra_v_scantable.permutated; /* left */
 
4564
            else
 
4565
                scan_table = s->intra_h_scantable.permutated; /* top */
 
4566
        }
 
4567
    } else if (s->mb_intra) {
 
4568
        /* DC coef */
 
4569
        if(s->codec_id == CODEC_ID_RV10){
 
4570
#ifdef CONFIG_RV10_DECODER
 
4571
          if (s->rv10_version == 3 && s->pict_type == I_TYPE) {
 
4572
            int component, diff;
 
4573
            component = (n <= 3 ? 0 : n - 4 + 1);
 
4574
            level = s->last_dc[component];
 
4575
            if (s->rv10_first_dc_coded[component]) {
 
4576
                diff = rv_decode_dc(s, n);
 
4577
                if (diff == 0xffff)
 
4578
                    return -1;
 
4579
                level += diff;
 
4580
                level = level & 0xff; /* handle wrap round */
 
4581
                s->last_dc[component] = level;
 
4582
            } else {
 
4583
                s->rv10_first_dc_coded[component] = 1;
 
4584
            }
 
4585
          } else {
 
4586
                level = get_bits(&s->gb, 8);
 
4587
                if (level == 255)
 
4588
                    level = 128;
 
4589
          }
 
4590
#endif
 
4591
        }else{
 
4592
            level = get_bits(&s->gb, 8);
 
4593
            if((level&0x7F) == 0){
 
4594
                av_log(s->avctx, AV_LOG_ERROR, "illegal dc %d at %d %d\n", level, s->mb_x, s->mb_y);
 
4595
                if(s->error_resilience >= FF_ER_COMPLIANT)
 
4596
                    return -1;
 
4597
            }
 
4598
            if (level == 255)
 
4599
                level = 128;
 
4600
        }
 
4601
        block[0] = level;
 
4602
        i = 1;
 
4603
    } else {
 
4604
        i = 0;
 
4605
    }
 
4606
    if (!coded) {
 
4607
        if (s->mb_intra && s->h263_aic)
 
4608
            goto not_coded;
 
4609
        s->block_last_index[n] = i - 1;
 
4610
        return 0;
 
4611
    }
 
4612
retry:
 
4613
    for(;;) {
 
4614
        code = get_vlc2(&s->gb, rl->vlc.table, TEX_VLC_BITS, 2);
 
4615
        if (code < 0){
 
4616
            av_log(s->avctx, AV_LOG_ERROR, "illegal ac vlc code at %dx%d\n", s->mb_x, s->mb_y);
 
4617
            return -1;
 
4618
        }
 
4619
        if (code == rl->n) {
 
4620
            /* escape */
 
4621
            if (s->h263_flv > 1) {
 
4622
                int is11 = get_bits1(&s->gb);
 
4623
                last = get_bits1(&s->gb);
 
4624
                run = get_bits(&s->gb, 6);
 
4625
                if(is11){
 
4626
                    level = get_sbits(&s->gb, 11);
 
4627
                } else {
 
4628
                    level = get_sbits(&s->gb, 7);
 
4629
                }
 
4630
            } else {
 
4631
                last = get_bits1(&s->gb);
 
4632
                run = get_bits(&s->gb, 6);
 
4633
                level = (int8_t)get_bits(&s->gb, 8);
 
4634
                if(level == -128){
 
4635
                    if (s->codec_id == CODEC_ID_RV10) {
 
4636
                        /* XXX: should patch encoder too */
 
4637
                        level = get_sbits(&s->gb, 12);
 
4638
                    }else{
 
4639
                        level = get_bits(&s->gb, 5);
 
4640
                        level |= get_sbits(&s->gb, 6)<<5;
 
4641
                    }
 
4642
                }
 
4643
            }
 
4644
        } else {
 
4645
            run = rl->table_run[code];
 
4646
            level = rl->table_level[code];
 
4647
            last = code >= rl->last;
 
4648
            if (get_bits1(&s->gb))
 
4649
                level = -level;
 
4650
        }
 
4651
        i += run;
 
4652
        if (i >= 64){
 
4653
            if(s->alt_inter_vlc && rl == &rl_inter && !s->mb_intra){
 
4654
                //looks like a hack but no, it's the way its supposed to work ...
 
4655
                rl = &rl_intra_aic;
 
4656
                i = 0;
 
4657
                s->gb= gb;
 
4658
                memset(block, 0, sizeof(DCTELEM)*64);
 
4659
                goto retry;
 
4660
            }
 
4661
            av_log(s->avctx, AV_LOG_ERROR, "run overflow at %dx%d i:%d\n", s->mb_x, s->mb_y, s->mb_intra);
 
4662
            return -1;
 
4663
        }
 
4664
        j = scan_table[i];
 
4665
        block[j] = level;
 
4666
        if (last)
 
4667
            break;
 
4668
        i++;
 
4669
    }
 
4670
not_coded:
 
4671
    if (s->mb_intra && s->h263_aic) {
 
4672
        h263_pred_acdc(s, block, n);
 
4673
        i = 63;
 
4674
    }
 
4675
    s->block_last_index[n] = i;
 
4676
    return 0;
 
4677
}
 
4678
 
 
4679
/**
 
4680
 * decodes the dc value.
 
4681
 * @param n block index (0-3 are luma, 4-5 are chroma)
 
4682
 * @param dir_ptr the prediction direction will be stored here
 
4683
 * @return the quantized dc
 
4684
 */
 
4685
static inline int mpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr)
 
4686
{
 
4687
    int level, code;
 
4688
 
 
4689
    if (n < 4)
 
4690
        code = get_vlc2(&s->gb, dc_lum.table, DC_VLC_BITS, 1);
 
4691
    else
 
4692
        code = get_vlc2(&s->gb, dc_chrom.table, DC_VLC_BITS, 1);
 
4693
    if (code < 0 || code > 9 /* && s->nbit<9 */){
 
4694
        av_log(s->avctx, AV_LOG_ERROR, "illegal dc vlc\n");
 
4695
        return -1;
 
4696
    }
 
4697
    if (code == 0) {
 
4698
        level = 0;
 
4699
    } else {
 
4700
        if(IS_3IV1){
 
4701
            if(code==1)
 
4702
                level= 2*get_bits1(&s->gb)-1;
 
4703
            else{
 
4704
                if(get_bits1(&s->gb))
 
4705
                    level = get_bits(&s->gb, code-1) + (1<<(code-1));
 
4706
                else
 
4707
                    level = -get_bits(&s->gb, code-1) - (1<<(code-1));
 
4708
            }
 
4709
        }else{
 
4710
            level = get_xbits(&s->gb, code);
 
4711
        }
 
4712
 
 
4713
        if (code > 8){
 
4714
            if(get_bits1(&s->gb)==0){ /* marker */
 
4715
                if(s->error_resilience>=2){
 
4716
                    av_log(s->avctx, AV_LOG_ERROR, "dc marker bit missing\n");
 
4717
                    return -1;
 
4718
                }
 
4719
            }
 
4720
        }
 
4721
    }
 
4722
 
 
4723
    return ff_mpeg4_pred_dc(s, n, level, dir_ptr, 0);
 
4724
}
 
4725
 
 
4726
/**
 
4727
 * decodes a block.
 
4728
 * @return <0 if an error occured
 
4729
 */
 
4730
static inline int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block,
 
4731
                              int n, int coded, int intra, int rvlc)
 
4732
{
 
4733
    int level, i, last, run;
 
4734
    int dc_pred_dir;
 
4735
    RLTable * rl;
 
4736
    RL_VLC_ELEM * rl_vlc;
 
4737
    const uint8_t * scan_table;
 
4738
    int qmul, qadd;
 
4739
 
 
4740
    //Note intra & rvlc should be optimized away if this is inlined
 
4741
 
 
4742
    if(intra) {
 
4743
      if(s->qscale < s->intra_dc_threshold){
 
4744
        /* DC coef */
 
4745
        if(s->partitioned_frame){
 
4746
            level = s->dc_val[0][ s->block_index[n] ];
 
4747
            if(n<4) level= FASTDIV((level + (s->y_dc_scale>>1)), s->y_dc_scale);
 
4748
            else    level= FASTDIV((level + (s->c_dc_scale>>1)), s->c_dc_scale);
 
4749
            dc_pred_dir= (s->pred_dir_table[s->mb_x + s->mb_y*s->mb_stride]<<n)&32;
 
4750
        }else{
 
4751
            level = mpeg4_decode_dc(s, n, &dc_pred_dir);
 
4752
            if (level < 0)
 
4753
                return -1;
 
4754
        }
 
4755
        block[0] = level;
 
4756
        i = 0;
 
4757
      }else{
 
4758
            i = -1;
 
4759
      }
 
4760
        if (!coded)
 
4761
            goto not_coded;
 
4762
 
 
4763
        if(rvlc){
 
4764
            rl = &rvlc_rl_intra;
 
4765
            rl_vlc = rvlc_rl_intra.rl_vlc[0];
 
4766
        }else{
 
4767
            rl = &rl_intra;
 
4768
            rl_vlc = rl_intra.rl_vlc[0];
 
4769
        }
 
4770
        if (s->ac_pred) {
 
4771
            if (dc_pred_dir == 0)
 
4772
                scan_table = s->intra_v_scantable.permutated; /* left */
 
4773
            else
 
4774
                scan_table = s->intra_h_scantable.permutated; /* top */
 
4775
        } else {
 
4776
            scan_table = s->intra_scantable.permutated;
 
4777
        }
 
4778
        qmul=1;
 
4779
        qadd=0;
 
4780
    } else {
 
4781
        i = -1;
 
4782
        if (!coded) {
 
4783
            s->block_last_index[n] = i;
 
4784
            return 0;
 
4785
        }
 
4786
        if(rvlc) rl = &rvlc_rl_inter;
 
4787
        else     rl = &rl_inter;
 
4788
 
 
4789
        scan_table = s->intra_scantable.permutated;
 
4790
 
 
4791
        if(s->mpeg_quant){
 
4792
            qmul=1;
 
4793
            qadd=0;
 
4794
            if(rvlc){
 
4795
                rl_vlc = rvlc_rl_inter.rl_vlc[0];
 
4796
            }else{
 
4797
                rl_vlc = rl_inter.rl_vlc[0];
 
4798
            }
 
4799
        }else{
 
4800
            qmul = s->qscale << 1;
 
4801
            qadd = (s->qscale - 1) | 1;
 
4802
            if(rvlc){
 
4803
                rl_vlc = rvlc_rl_inter.rl_vlc[s->qscale];
 
4804
            }else{
 
4805
                rl_vlc = rl_inter.rl_vlc[s->qscale];
 
4806
            }
 
4807
        }
 
4808
    }
 
4809
  {
 
4810
    OPEN_READER(re, &s->gb);
 
4811
    for(;;) {
 
4812
        UPDATE_CACHE(re, &s->gb);
 
4813
        GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 0);
 
4814
        if (level==0) {
 
4815
          /* escape */
 
4816
          if(rvlc){
 
4817
                if(SHOW_UBITS(re, &s->gb, 1)==0){
 
4818
                    av_log(s->avctx, AV_LOG_ERROR, "1. marker bit missing in rvlc esc\n");
 
4819
                    return -1;
 
4820
                }; SKIP_CACHE(re, &s->gb, 1);
 
4821
 
 
4822
                last=  SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1);
 
4823
                run=   SHOW_UBITS(re, &s->gb, 6); LAST_SKIP_CACHE(re, &s->gb, 6);
 
4824
                SKIP_COUNTER(re, &s->gb, 1+1+6);
 
4825
                UPDATE_CACHE(re, &s->gb);
 
4826
 
 
4827
                if(SHOW_UBITS(re, &s->gb, 1)==0){
 
4828
                    av_log(s->avctx, AV_LOG_ERROR, "2. marker bit missing in rvlc esc\n");
 
4829
                    return -1;
 
4830
                }; SKIP_CACHE(re, &s->gb, 1);
 
4831
 
 
4832
                level= SHOW_UBITS(re, &s->gb, 11); SKIP_CACHE(re, &s->gb, 11);
 
4833
 
 
4834
                if(SHOW_UBITS(re, &s->gb, 5)!=0x10){
 
4835
                    av_log(s->avctx, AV_LOG_ERROR, "reverse esc missing\n");
 
4836
                    return -1;
 
4837
                }; SKIP_CACHE(re, &s->gb, 5);
 
4838
 
 
4839
                level=  level * qmul + qadd;
 
4840
                level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1); LAST_SKIP_CACHE(re, &s->gb, 1);
 
4841
                SKIP_COUNTER(re, &s->gb, 1+11+5+1);
 
4842
 
 
4843
                i+= run + 1;
 
4844
                if(last) i+=192;
 
4845
          }else{
 
4846
            int cache;
 
4847
            cache= GET_CACHE(re, &s->gb);
 
4848
 
 
4849
            if(IS_3IV1)
 
4850
                cache ^= 0xC0000000;
 
4851
 
 
4852
            if (cache&0x80000000) {
 
4853
                if (cache&0x40000000) {
 
4854
                    /* third escape */
 
4855
                    SKIP_CACHE(re, &s->gb, 2);
 
4856
                    last=  SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1);
 
4857
                    run=   SHOW_UBITS(re, &s->gb, 6); LAST_SKIP_CACHE(re, &s->gb, 6);
 
4858
                    SKIP_COUNTER(re, &s->gb, 2+1+6);
 
4859
                    UPDATE_CACHE(re, &s->gb);
 
4860
 
 
4861
                    if(IS_3IV1){
 
4862
                        level= SHOW_SBITS(re, &s->gb, 12); LAST_SKIP_BITS(re, &s->gb, 12);
 
4863
                    }else{
 
4864
                        if(SHOW_UBITS(re, &s->gb, 1)==0){
 
4865
                            av_log(s->avctx, AV_LOG_ERROR, "1. marker bit missing in 3. esc\n");
 
4866
                            return -1;
 
4867
                        }; SKIP_CACHE(re, &s->gb, 1);
 
4868
 
 
4869
                        level= SHOW_SBITS(re, &s->gb, 12); SKIP_CACHE(re, &s->gb, 12);
 
4870
 
 
4871
                        if(SHOW_UBITS(re, &s->gb, 1)==0){
 
4872
                            av_log(s->avctx, AV_LOG_ERROR, "2. marker bit missing in 3. esc\n");
 
4873
                            return -1;
 
4874
                        }; LAST_SKIP_CACHE(re, &s->gb, 1);
 
4875
 
 
4876
                        SKIP_COUNTER(re, &s->gb, 1+12+1);
 
4877
                    }
 
4878
 
 
4879
#if 0
 
4880
                    if(s->error_resilience >= FF_ER_COMPLIANT){
 
4881
                        const int abs_level= ABS(level);
 
4882
                        if(abs_level<=MAX_LEVEL && run<=MAX_RUN){
 
4883
                            const int run1= run - rl->max_run[last][abs_level] - 1;
 
4884
                            if(abs_level <= rl->max_level[last][run]){
 
4885
                                av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, vlc encoding possible\n");
 
4886
                                return -1;
 
4887
                            }
 
4888
                            if(s->error_resilience > FF_ER_COMPLIANT){
 
4889
                                if(abs_level <= rl->max_level[last][run]*2){
 
4890
                                    av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, esc 1 encoding possible\n");
 
4891
                                    return -1;
 
4892
                                }
 
4893
                                if(run1 >= 0 && abs_level <= rl->max_level[last][run1]){
 
4894
                                    av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, esc 2 encoding possible\n");
 
4895
                                    return -1;
 
4896
                                }
 
4897
                            }
 
4898
                        }
 
4899
                    }
 
4900
#endif
 
4901
                    if (level>0) level= level * qmul + qadd;
 
4902
                    else         level= level * qmul - qadd;
 
4903
 
 
4904
                    if((unsigned)(level + 2048) > 4095){
 
4905
                        if(s->error_resilience > FF_ER_COMPLIANT){
 
4906
                            if(level > 2560 || level<-2560){
 
4907
                                av_log(s->avctx, AV_LOG_ERROR, "|level| overflow in 3. esc, qp=%d\n", s->qscale);
 
4908
                                return -1;
 
4909
                            }
 
4910
                        }
 
4911
                        level= level<0 ? -2048 : 2047;
 
4912
                    }
 
4913
 
 
4914
                    i+= run + 1;
 
4915
                    if(last) i+=192;
 
4916
                } else {
 
4917
                    /* second escape */
 
4918
#if MIN_CACHE_BITS < 20
 
4919
                    LAST_SKIP_BITS(re, &s->gb, 2);
 
4920
                    UPDATE_CACHE(re, &s->gb);
 
4921
#else
 
4922
                    SKIP_BITS(re, &s->gb, 2);
 
4923
#endif
 
4924
                    GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 1);
 
4925
                    i+= run + rl->max_run[run>>7][level/qmul] +1; //FIXME opt indexing
 
4926
                    level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
 
4927
                    LAST_SKIP_BITS(re, &s->gb, 1);
 
4928
                }
 
4929
            } else {
 
4930
                /* first escape */
 
4931
#if MIN_CACHE_BITS < 19
 
4932
                LAST_SKIP_BITS(re, &s->gb, 1);
 
4933
                UPDATE_CACHE(re, &s->gb);
 
4934
#else
 
4935
                SKIP_BITS(re, &s->gb, 1);
 
4936
#endif
 
4937
                GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 1);
 
4938
                i+= run;
 
4939
                level = level + rl->max_level[run>>7][(run-1)&63] * qmul;//FIXME opt indexing
 
4940
                level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
 
4941
                LAST_SKIP_BITS(re, &s->gb, 1);
 
4942
            }
 
4943
          }
 
4944
        } else {
 
4945
            i+= run;
 
4946
            level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
 
4947
            LAST_SKIP_BITS(re, &s->gb, 1);
 
4948
        }
 
4949
        if (i > 62){
 
4950
            i-= 192;
 
4951
            if(i&(~63)){
 
4952
                av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
 
4953
                return -1;
 
4954
            }
 
4955
 
 
4956
            block[scan_table[i]] = level;
 
4957
            break;
 
4958
        }
 
4959
 
 
4960
        block[scan_table[i]] = level;
 
4961
    }
 
4962
    CLOSE_READER(re, &s->gb);
 
4963
  }
 
4964
 not_coded:
 
4965
    if (intra) {
 
4966
        if(s->qscale >= s->intra_dc_threshold){
 
4967
            block[0] = ff_mpeg4_pred_dc(s, n, block[0], &dc_pred_dir, 0);
 
4968
 
 
4969
            if(i == -1) i=0;
 
4970
        }
 
4971
 
 
4972
        mpeg4_pred_ac(s, block, n, dc_pred_dir);
 
4973
        if (s->ac_pred) {
 
4974
            i = 63; /* XXX: not optimal */
 
4975
        }
 
4976
    }
 
4977
    s->block_last_index[n] = i;
 
4978
    return 0;
 
4979
}
 
4980
 
 
4981
/* most is hardcoded. should extend to handle all h263 streams */
 
4982
int h263_decode_picture_header(MpegEncContext *s)
 
4983
{
 
4984
    int format, width, height, i;
 
4985
    uint32_t startcode;
 
4986
 
 
4987
    align_get_bits(&s->gb);
 
4988
 
 
4989
    startcode= get_bits(&s->gb, 22-8);
 
4990
 
 
4991
    for(i= s->gb.size_in_bits - get_bits_count(&s->gb); i>24; i-=8) {
 
4992
        startcode = ((startcode << 8) | get_bits(&s->gb, 8)) & 0x003FFFFF;
 
4993
 
 
4994
        if(startcode == 0x20)
 
4995
            break;
 
4996
    }
 
4997
 
 
4998
    if (startcode != 0x20) {
 
4999
        av_log(s->avctx, AV_LOG_ERROR, "Bad picture start code\n");
 
5000
        return -1;
 
5001
    }
 
5002
    /* temporal reference */
 
5003
    i = get_bits(&s->gb, 8); /* picture timestamp */
 
5004
    if( (s->picture_number&~0xFF)+i < s->picture_number)
 
5005
        i+= 256;
 
5006
    s->current_picture_ptr->pts=
 
5007
    s->picture_number= (s->picture_number&~0xFF) + i;
 
5008
 
 
5009
    /* PTYPE starts here */
 
5010
    if (get_bits1(&s->gb) != 1) {
 
5011
        /* marker */
 
5012
        av_log(s->avctx, AV_LOG_ERROR, "Bad marker\n");
 
5013
        return -1;
 
5014
    }
 
5015
    if (get_bits1(&s->gb) != 0) {
 
5016
        av_log(s->avctx, AV_LOG_ERROR, "Bad H263 id\n");
 
5017
        return -1;      /* h263 id */
 
5018
    }
 
5019
    skip_bits1(&s->gb);         /* split screen off */
 
5020
    skip_bits1(&s->gb);         /* camera  off */
 
5021
    skip_bits1(&s->gb);         /* freeze picture release off */
 
5022
 
 
5023
    format = get_bits(&s->gb, 3);
 
5024
    /*
 
5025
        0    forbidden
 
5026
        1    sub-QCIF
 
5027
        10   QCIF
 
5028
        7       extended PTYPE (PLUSPTYPE)
 
5029
    */
 
5030
 
 
5031
    if (format != 7 && format != 6) {
 
5032
        s->h263_plus = 0;
 
5033
        /* H.263v1 */
 
5034
        width = h263_format[format][0];
 
5035
        height = h263_format[format][1];
 
5036
        if (!width)
 
5037
            return -1;
 
5038
 
 
5039
        s->pict_type = I_TYPE + get_bits1(&s->gb);
 
5040
 
 
5041
        s->h263_long_vectors = get_bits1(&s->gb);
 
5042
 
 
5043
        if (get_bits1(&s->gb) != 0) {
 
5044
            av_log(s->avctx, AV_LOG_ERROR, "H263 SAC not supported\n");
 
5045
            return -1; /* SAC: off */
 
5046
        }
 
5047
        s->obmc= get_bits1(&s->gb); /* Advanced prediction mode */
 
5048
        s->unrestricted_mv = s->h263_long_vectors || s->obmc;
 
5049
 
 
5050
        if (get_bits1(&s->gb) != 0) {
 
5051
            av_log(s->avctx, AV_LOG_ERROR, "H263 PB frame not supported\n");
 
5052
            return -1; /* not PB frame */
 
5053
        }
 
5054
        s->chroma_qscale= s->qscale = get_bits(&s->gb, 5);
 
5055
        skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
 
5056
 
 
5057
        s->width = width;
 
5058
        s->height = height;
 
5059
        s->avctx->sample_aspect_ratio= (AVRational){12,11};
 
5060
        s->avctx->time_base= (AVRational){1001, 30000};
 
5061
    } else {
 
5062
        int ufep;
 
5063
 
 
5064
        /* H.263v2 */
 
5065
        s->h263_plus = 1;
 
5066
        ufep = get_bits(&s->gb, 3); /* Update Full Extended PTYPE */
 
5067
 
 
5068
        /* ufep other than 0 and 1 are reserved */
 
5069
        if (ufep == 1) {
 
5070
            /* OPPTYPE */
 
5071
            format = get_bits(&s->gb, 3);
 
5072
            dprintf("ufep=1, format: %d\n", format);
 
5073
            s->custom_pcf= get_bits1(&s->gb);
 
5074
            s->umvplus = get_bits(&s->gb, 1); /* Unrestricted Motion Vector */
 
5075
            if (get_bits1(&s->gb) != 0) {
 
5076
                av_log(s->avctx, AV_LOG_ERROR, "Syntax-based Arithmetic Coding (SAC) not supported\n");
 
5077
            }
 
5078
            s->obmc= get_bits1(&s->gb); /* Advanced prediction mode */
 
5079
            s->h263_aic = get_bits1(&s->gb); /* Advanced Intra Coding (AIC) */
 
5080
            s->loop_filter= get_bits1(&s->gb);
 
5081
            s->unrestricted_mv = s->umvplus || s->obmc || s->loop_filter;
 
5082
 
 
5083
            s->h263_slice_structured= get_bits1(&s->gb);
 
5084
            if (get_bits1(&s->gb) != 0) {
 
5085
                av_log(s->avctx, AV_LOG_ERROR, "Reference Picture Selection not supported\n");
 
5086
            }
 
5087
            if (get_bits1(&s->gb) != 0) {
 
5088
                av_log(s->avctx, AV_LOG_ERROR, "Independent Segment Decoding not supported\n");
 
5089
            }
 
5090
            s->alt_inter_vlc= get_bits1(&s->gb);
 
5091
            s->modified_quant= get_bits1(&s->gb);
 
5092
            if(s->modified_quant)
 
5093
                s->chroma_qscale_table= ff_h263_chroma_qscale_table;
 
5094
 
 
5095
            skip_bits(&s->gb, 1); /* Prevent start code emulation */
 
5096
 
 
5097
            skip_bits(&s->gb, 3); /* Reserved */
 
5098
        } else if (ufep != 0) {
 
5099
            av_log(s->avctx, AV_LOG_ERROR, "Bad UFEP type (%d)\n", ufep);
 
5100
            return -1;
 
5101
        }
 
5102
 
 
5103
        /* MPPTYPE */
 
5104
        s->pict_type = get_bits(&s->gb, 3);
 
5105
        switch(s->pict_type){
 
5106
        case 0: s->pict_type= I_TYPE;break;
 
5107
        case 1: s->pict_type= P_TYPE;break;
 
5108
        case 3: s->pict_type= B_TYPE;break;
 
5109
        case 7: s->pict_type= I_TYPE;break; //ZYGO
 
5110
        default:
 
5111
            return -1;
 
5112
        }
 
5113
        skip_bits(&s->gb, 2);
 
5114
        s->no_rounding = get_bits1(&s->gb);
 
5115
        skip_bits(&s->gb, 4);
 
5116
 
 
5117
        /* Get the picture dimensions */
 
5118
        if (ufep) {
 
5119
            if (format == 6) {
 
5120
                /* Custom Picture Format (CPFMT) */
 
5121
                s->aspect_ratio_info = get_bits(&s->gb, 4);
 
5122
                dprintf("aspect: %d\n", s->aspect_ratio_info);
 
5123
                /* aspect ratios:
 
5124
                0 - forbidden
 
5125
                1 - 1:1
 
5126
                2 - 12:11 (CIF 4:3)
 
5127
                3 - 10:11 (525-type 4:3)
 
5128
                4 - 16:11 (CIF 16:9)
 
5129
                5 - 40:33 (525-type 16:9)
 
5130
                6-14 - reserved
 
5131
                */
 
5132
                width = (get_bits(&s->gb, 9) + 1) * 4;
 
5133
                skip_bits1(&s->gb);
 
5134
                height = get_bits(&s->gb, 9) * 4;
 
5135
                dprintf("\nH.263+ Custom picture: %dx%d\n",width,height);
 
5136
                if (s->aspect_ratio_info == FF_ASPECT_EXTENDED) {
 
5137
                    /* aspected dimensions */
 
5138
                    s->avctx->sample_aspect_ratio.num= get_bits(&s->gb, 8);
 
5139
                    s->avctx->sample_aspect_ratio.den= get_bits(&s->gb, 8);
 
5140
                }else{
 
5141
                    s->avctx->sample_aspect_ratio= pixel_aspect[s->aspect_ratio_info];
 
5142
                }
 
5143
            } else {
 
5144
                width = h263_format[format][0];
 
5145
                height = h263_format[format][1];
 
5146
                s->avctx->sample_aspect_ratio= (AVRational){12,11};
 
5147
            }
 
5148
            if ((width == 0) || (height == 0))
 
5149
                return -1;
 
5150
            s->width = width;
 
5151
            s->height = height;
 
5152
 
 
5153
            if(s->custom_pcf){
 
5154
                int gcd;
 
5155
                s->avctx->time_base.den= 1800000;
 
5156
                s->avctx->time_base.num= 1000 + get_bits1(&s->gb);
 
5157
                s->avctx->time_base.num*= get_bits(&s->gb, 7);
 
5158
                if(s->avctx->time_base.num == 0){
 
5159
                    av_log(s, AV_LOG_ERROR, "zero framerate\n");
 
5160
                    return -1;
 
5161
                }
 
5162
                gcd= ff_gcd(s->avctx->time_base.den, s->avctx->time_base.num);
 
5163
                s->avctx->time_base.den /= gcd;
 
5164
                s->avctx->time_base.num /= gcd;
 
5165
//                av_log(s->avctx, AV_LOG_DEBUG, "%d/%d\n", s->avctx->time_base.den, s->avctx->time_base.num);
 
5166
            }else{
 
5167
                s->avctx->time_base= (AVRational){1001, 30000};
 
5168
            }
 
5169
        }
 
5170
 
 
5171
        if(s->custom_pcf){
 
5172
            skip_bits(&s->gb, 2); //extended Temporal reference
 
5173
        }
 
5174
 
 
5175
        if (ufep) {
 
5176
            if (s->umvplus) {
 
5177
                if(get_bits1(&s->gb)==0) /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */
 
5178
                    skip_bits1(&s->gb);
 
5179
            }
 
5180
            if(s->h263_slice_structured){
 
5181
                if (get_bits1(&s->gb) != 0) {
 
5182
                    av_log(s->avctx, AV_LOG_ERROR, "rectangular slices not supported\n");
 
5183
                }
 
5184
                if (get_bits1(&s->gb) != 0) {
 
5185
                    av_log(s->avctx, AV_LOG_ERROR, "unordered slices not supported\n");
 
5186
                }
 
5187
            }
 
5188
        }
 
5189
 
 
5190
        s->qscale = get_bits(&s->gb, 5);
 
5191
    }
 
5192
 
 
5193
    s->mb_width = (s->width  + 15) / 16;
 
5194
    s->mb_height = (s->height  + 15) / 16;
 
5195
    s->mb_num = s->mb_width * s->mb_height;
 
5196
 
 
5197
    /* PEI */
 
5198
    while (get_bits1(&s->gb) != 0) {
 
5199
        skip_bits(&s->gb, 8);
 
5200
    }
 
5201
 
 
5202
    if(s->h263_slice_structured){
 
5203
        if (get_bits1(&s->gb) != 1) {
 
5204
            av_log(s->avctx, AV_LOG_ERROR, "SEPB1 marker missing\n");
 
5205
            return -1;
 
5206
        }
 
5207
 
 
5208
        ff_h263_decode_mba(s);
 
5209
 
 
5210
        if (get_bits1(&s->gb) != 1) {
 
5211
            av_log(s->avctx, AV_LOG_ERROR, "SEPB2 marker missing\n");
 
5212
            return -1;
 
5213
        }
 
5214
    }
 
5215
    s->f_code = 1;
 
5216
 
 
5217
    if(s->h263_aic){
 
5218
         s->y_dc_scale_table=
 
5219
         s->c_dc_scale_table= ff_aic_dc_scale_table;
 
5220
    }else{
 
5221
        s->y_dc_scale_table=
 
5222
        s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
 
5223
    }
 
5224
 
 
5225
     if(s->avctx->debug&FF_DEBUG_PICT_INFO){
 
5226
         av_log(s->avctx, AV_LOG_DEBUG, "qp:%d %c size:%d rnd:%d%s%s%s%s%s%s%s%s%s %d/%d\n",
 
5227
         s->qscale, av_get_pict_type_char(s->pict_type),
 
5228
         s->gb.size_in_bits, 1-s->no_rounding,
 
5229
         s->obmc ? " AP" : "",
 
5230
         s->umvplus ? " UMV" : "",
 
5231
         s->h263_long_vectors ? " LONG" : "",
 
5232
         s->h263_plus ? " +" : "",
 
5233
         s->h263_aic ? " AIC" : "",
 
5234
         s->alt_inter_vlc ? " AIV" : "",
 
5235
         s->modified_quant ? " MQ" : "",
 
5236
         s->loop_filter ? " LOOP" : "",
 
5237
         s->h263_slice_structured ? " SS" : "",
 
5238
         s->avctx->time_base.den, s->avctx->time_base.num
 
5239
         );
 
5240
     }
 
5241
#if 1
 
5242
    if (s->pict_type == I_TYPE && s->avctx->codec_tag == ff_get_fourcc("ZYGO")){
 
5243
        int i,j;
 
5244
        for(i=0; i<85; i++) av_log(s->avctx, AV_LOG_DEBUG, "%d", get_bits1(&s->gb));
 
5245
        av_log(s->avctx, AV_LOG_DEBUG, "\n");
 
5246
        for(i=0; i<13; i++){
 
5247
            for(j=0; j<3; j++){
 
5248
                int v= get_bits(&s->gb, 8);
 
5249
                v |= get_sbits(&s->gb, 8)<<8;
 
5250
                av_log(s->avctx, AV_LOG_DEBUG, " %5d", v);
 
5251
            }
 
5252
            av_log(s->avctx, AV_LOG_DEBUG, "\n");
 
5253
        }
 
5254
        for(i=0; i<50; i++) av_log(s->avctx, AV_LOG_DEBUG, "%d", get_bits1(&s->gb));
 
5255
    }
 
5256
#endif
 
5257
 
 
5258
    return 0;
 
5259
}
 
5260
 
 
5261
static void mpeg4_decode_sprite_trajectory(MpegEncContext * s, GetBitContext *gb)
 
5262
{
 
5263
    int i;
 
5264
    int a= 2<<s->sprite_warping_accuracy;
 
5265
    int rho= 3-s->sprite_warping_accuracy;
 
5266
    int r=16/a;
 
5267
    const int vop_ref[4][2]= {{0,0}, {s->width,0}, {0, s->height}, {s->width, s->height}}; // only true for rectangle shapes
 
5268
    int d[4][2]={{0,0}, {0,0}, {0,0}, {0,0}};
 
5269
    int sprite_ref[4][2];
 
5270
    int virtual_ref[2][2];
 
5271
    int w2, h2, w3, h3;
 
5272
    int alpha=0, beta=0;
 
5273
    int w= s->width;
 
5274
    int h= s->height;
 
5275
    int min_ab;
 
5276
 
 
5277
    for(i=0; i<s->num_sprite_warping_points; i++){
 
5278
        int length;
 
5279
        int x=0, y=0;
 
5280
 
 
5281
        length= get_vlc2(gb, sprite_trajectory.table, SPRITE_TRAJ_VLC_BITS, 3);
 
5282
        if(length){
 
5283
            x= get_xbits(gb, length);
 
5284
        }
 
5285
        if(!(s->divx_version==500 && s->divx_build==413)) skip_bits1(gb); /* marker bit */
 
5286
 
 
5287
        length= get_vlc2(gb, sprite_trajectory.table, SPRITE_TRAJ_VLC_BITS, 3);
 
5288
        if(length){
 
5289
            y=get_xbits(gb, length);
 
5290
        }
 
5291
        skip_bits1(gb); /* marker bit */
 
5292
//printf("%d %d %d %d\n", x, y, i, s->sprite_warping_accuracy);
 
5293
        d[i][0]= x;
 
5294
        d[i][1]= y;
 
5295
    }
 
5296
 
 
5297
    while((1<<alpha)<w) alpha++;
 
5298
    while((1<<beta )<h) beta++; // there seems to be a typo in the mpeg4 std for the definition of w' and h'
 
5299
    w2= 1<<alpha;
 
5300
    h2= 1<<beta;
 
5301
 
 
5302
// Note, the 4th point isn't used for GMC
 
5303
    if(s->divx_version==500 && s->divx_build==413){
 
5304
        sprite_ref[0][0]= a*vop_ref[0][0] + d[0][0];
 
5305
        sprite_ref[0][1]= a*vop_ref[0][1] + d[0][1];
 
5306
        sprite_ref[1][0]= a*vop_ref[1][0] + d[0][0] + d[1][0];
 
5307
        sprite_ref[1][1]= a*vop_ref[1][1] + d[0][1] + d[1][1];
 
5308
        sprite_ref[2][0]= a*vop_ref[2][0] + d[0][0] + d[2][0];
 
5309
        sprite_ref[2][1]= a*vop_ref[2][1] + d[0][1] + d[2][1];
 
5310
    } else {
 
5311
        sprite_ref[0][0]= (a>>1)*(2*vop_ref[0][0] + d[0][0]);
 
5312
        sprite_ref[0][1]= (a>>1)*(2*vop_ref[0][1] + d[0][1]);
 
5313
        sprite_ref[1][0]= (a>>1)*(2*vop_ref[1][0] + d[0][0] + d[1][0]);
 
5314
        sprite_ref[1][1]= (a>>1)*(2*vop_ref[1][1] + d[0][1] + d[1][1]);
 
5315
        sprite_ref[2][0]= (a>>1)*(2*vop_ref[2][0] + d[0][0] + d[2][0]);
 
5316
        sprite_ref[2][1]= (a>>1)*(2*vop_ref[2][1] + d[0][1] + d[2][1]);
 
5317
    }
 
5318
/*    sprite_ref[3][0]= (a>>1)*(2*vop_ref[3][0] + d[0][0] + d[1][0] + d[2][0] + d[3][0]);
 
5319
    sprite_ref[3][1]= (a>>1)*(2*vop_ref[3][1] + d[0][1] + d[1][1] + d[2][1] + d[3][1]); */
 
5320
 
 
5321
// this is mostly identical to the mpeg4 std (and is totally unreadable because of that ...)
 
5322
// perhaps it should be reordered to be more readable ...
 
5323
// the idea behind this virtual_ref mess is to be able to use shifts later per pixel instead of divides
 
5324
// so the distance between points is converted from w&h based to w2&h2 based which are of the 2^x form
 
5325
    virtual_ref[0][0]= 16*(vop_ref[0][0] + w2)
 
5326
        + ROUNDED_DIV(((w - w2)*(r*sprite_ref[0][0] - 16*vop_ref[0][0]) + w2*(r*sprite_ref[1][0] - 16*vop_ref[1][0])),w);
 
5327
    virtual_ref[0][1]= 16*vop_ref[0][1]
 
5328
        + ROUNDED_DIV(((w - w2)*(r*sprite_ref[0][1] - 16*vop_ref[0][1]) + w2*(r*sprite_ref[1][1] - 16*vop_ref[1][1])),w);
 
5329
    virtual_ref[1][0]= 16*vop_ref[0][0]
 
5330
        + ROUNDED_DIV(((h - h2)*(r*sprite_ref[0][0] - 16*vop_ref[0][0]) + h2*(r*sprite_ref[2][0] - 16*vop_ref[2][0])),h);
 
5331
    virtual_ref[1][1]= 16*(vop_ref[0][1] + h2)
 
5332
        + ROUNDED_DIV(((h - h2)*(r*sprite_ref[0][1] - 16*vop_ref[0][1]) + h2*(r*sprite_ref[2][1] - 16*vop_ref[2][1])),h);
 
5333
 
 
5334
    switch(s->num_sprite_warping_points)
 
5335
    {
 
5336
        case 0:
 
5337
            s->sprite_offset[0][0]= 0;
 
5338
            s->sprite_offset[0][1]= 0;
 
5339
            s->sprite_offset[1][0]= 0;
 
5340
            s->sprite_offset[1][1]= 0;
 
5341
            s->sprite_delta[0][0]= a;
 
5342
            s->sprite_delta[0][1]= 0;
 
5343
            s->sprite_delta[1][0]= 0;
 
5344
            s->sprite_delta[1][1]= a;
 
5345
            s->sprite_shift[0]= 0;
 
5346
            s->sprite_shift[1]= 0;
 
5347
            break;
 
5348
        case 1: //GMC only
 
5349
            s->sprite_offset[0][0]= sprite_ref[0][0] - a*vop_ref[0][0];
 
5350
            s->sprite_offset[0][1]= sprite_ref[0][1] - a*vop_ref[0][1];
 
5351
            s->sprite_offset[1][0]= ((sprite_ref[0][0]>>1)|(sprite_ref[0][0]&1)) - a*(vop_ref[0][0]/2);
 
5352
            s->sprite_offset[1][1]= ((sprite_ref[0][1]>>1)|(sprite_ref[0][1]&1)) - a*(vop_ref[0][1]/2);
 
5353
            s->sprite_delta[0][0]= a;
 
5354
            s->sprite_delta[0][1]= 0;
 
5355
            s->sprite_delta[1][0]= 0;
 
5356
            s->sprite_delta[1][1]= a;
 
5357
            s->sprite_shift[0]= 0;
 
5358
            s->sprite_shift[1]= 0;
 
5359
            break;
 
5360
        case 2:
 
5361
            s->sprite_offset[0][0]= (sprite_ref[0][0]<<(alpha+rho))
 
5362
                                                  + (-r*sprite_ref[0][0] + virtual_ref[0][0])*(-vop_ref[0][0])
 
5363
                                                  + ( r*sprite_ref[0][1] - virtual_ref[0][1])*(-vop_ref[0][1])
 
5364
                                                  + (1<<(alpha+rho-1));
 
5365
            s->sprite_offset[0][1]= (sprite_ref[0][1]<<(alpha+rho))
 
5366
                                                  + (-r*sprite_ref[0][1] + virtual_ref[0][1])*(-vop_ref[0][0])
 
5367
                                                  + (-r*sprite_ref[0][0] + virtual_ref[0][0])*(-vop_ref[0][1])
 
5368
                                                  + (1<<(alpha+rho-1));
 
5369
            s->sprite_offset[1][0]= ( (-r*sprite_ref[0][0] + virtual_ref[0][0])*(-2*vop_ref[0][0] + 1)
 
5370
                                     +( r*sprite_ref[0][1] - virtual_ref[0][1])*(-2*vop_ref[0][1] + 1)
 
5371
                                     +2*w2*r*sprite_ref[0][0]
 
5372
                                     - 16*w2
 
5373
                                     + (1<<(alpha+rho+1)));
 
5374
            s->sprite_offset[1][1]= ( (-r*sprite_ref[0][1] + virtual_ref[0][1])*(-2*vop_ref[0][0] + 1)
 
5375
                                     +(-r*sprite_ref[0][0] + virtual_ref[0][0])*(-2*vop_ref[0][1] + 1)
 
5376
                                     +2*w2*r*sprite_ref[0][1]
 
5377
                                     - 16*w2
 
5378
                                     + (1<<(alpha+rho+1)));
 
5379
            s->sprite_delta[0][0]=   (-r*sprite_ref[0][0] + virtual_ref[0][0]);
 
5380
            s->sprite_delta[0][1]=   (+r*sprite_ref[0][1] - virtual_ref[0][1]);
 
5381
            s->sprite_delta[1][0]=   (-r*sprite_ref[0][1] + virtual_ref[0][1]);
 
5382
            s->sprite_delta[1][1]=   (-r*sprite_ref[0][0] + virtual_ref[0][0]);
 
5383
 
 
5384
            s->sprite_shift[0]= alpha+rho;
 
5385
            s->sprite_shift[1]= alpha+rho+2;
 
5386
            break;
 
5387
        case 3:
 
5388
            min_ab= FFMIN(alpha, beta);
 
5389
            w3= w2>>min_ab;
 
5390
            h3= h2>>min_ab;
 
5391
            s->sprite_offset[0][0]=  (sprite_ref[0][0]<<(alpha+beta+rho-min_ab))
 
5392
                                   + (-r*sprite_ref[0][0] + virtual_ref[0][0])*h3*(-vop_ref[0][0])
 
5393
                                   + (-r*sprite_ref[0][0] + virtual_ref[1][0])*w3*(-vop_ref[0][1])
 
5394
                                   + (1<<(alpha+beta+rho-min_ab-1));
 
5395
            s->sprite_offset[0][1]=  (sprite_ref[0][1]<<(alpha+beta+rho-min_ab))
 
5396
                                   + (-r*sprite_ref[0][1] + virtual_ref[0][1])*h3*(-vop_ref[0][0])
 
5397
                                   + (-r*sprite_ref[0][1] + virtual_ref[1][1])*w3*(-vop_ref[0][1])
 
5398
                                   + (1<<(alpha+beta+rho-min_ab-1));
 
5399
            s->sprite_offset[1][0]=  (-r*sprite_ref[0][0] + virtual_ref[0][0])*h3*(-2*vop_ref[0][0] + 1)
 
5400
                                   + (-r*sprite_ref[0][0] + virtual_ref[1][0])*w3*(-2*vop_ref[0][1] + 1)
 
5401
                                   + 2*w2*h3*r*sprite_ref[0][0]
 
5402
                                   - 16*w2*h3
 
5403
                                   + (1<<(alpha+beta+rho-min_ab+1));
 
5404
            s->sprite_offset[1][1]=  (-r*sprite_ref[0][1] + virtual_ref[0][1])*h3*(-2*vop_ref[0][0] + 1)
 
5405
                                   + (-r*sprite_ref[0][1] + virtual_ref[1][1])*w3*(-2*vop_ref[0][1] + 1)
 
5406
                                   + 2*w2*h3*r*sprite_ref[0][1]
 
5407
                                   - 16*w2*h3
 
5408
                                   + (1<<(alpha+beta+rho-min_ab+1));
 
5409
            s->sprite_delta[0][0]=   (-r*sprite_ref[0][0] + virtual_ref[0][0])*h3;
 
5410
            s->sprite_delta[0][1]=   (-r*sprite_ref[0][0] + virtual_ref[1][0])*w3;
 
5411
            s->sprite_delta[1][0]=   (-r*sprite_ref[0][1] + virtual_ref[0][1])*h3;
 
5412
            s->sprite_delta[1][1]=   (-r*sprite_ref[0][1] + virtual_ref[1][1])*w3;
 
5413
 
 
5414
            s->sprite_shift[0]= alpha + beta + rho - min_ab;
 
5415
            s->sprite_shift[1]= alpha + beta + rho - min_ab + 2;
 
5416
            break;
 
5417
    }
 
5418
    /* try to simplify the situation */
 
5419
    if(   s->sprite_delta[0][0] == a<<s->sprite_shift[0]
 
5420
       && s->sprite_delta[0][1] == 0
 
5421
       && s->sprite_delta[1][0] == 0
 
5422
       && s->sprite_delta[1][1] == a<<s->sprite_shift[0])
 
5423
    {
 
5424
        s->sprite_offset[0][0]>>=s->sprite_shift[0];
 
5425
        s->sprite_offset[0][1]>>=s->sprite_shift[0];
 
5426
        s->sprite_offset[1][0]>>=s->sprite_shift[1];
 
5427
        s->sprite_offset[1][1]>>=s->sprite_shift[1];
 
5428
        s->sprite_delta[0][0]= a;
 
5429
        s->sprite_delta[0][1]= 0;
 
5430
        s->sprite_delta[1][0]= 0;
 
5431
        s->sprite_delta[1][1]= a;
 
5432
        s->sprite_shift[0]= 0;
 
5433
        s->sprite_shift[1]= 0;
 
5434
        s->real_sprite_warping_points=1;
 
5435
    }
 
5436
    else{
 
5437
        int shift_y= 16 - s->sprite_shift[0];
 
5438
        int shift_c= 16 - s->sprite_shift[1];
 
5439
//printf("shifts %d %d\n", shift_y, shift_c);
 
5440
        for(i=0; i<2; i++){
 
5441
            s->sprite_offset[0][i]<<= shift_y;
 
5442
            s->sprite_offset[1][i]<<= shift_c;
 
5443
            s->sprite_delta[0][i]<<= shift_y;
 
5444
            s->sprite_delta[1][i]<<= shift_y;
 
5445
            s->sprite_shift[i]= 16;
 
5446
        }
 
5447
        s->real_sprite_warping_points= s->num_sprite_warping_points;
 
5448
    }
 
5449
#if 0
 
5450
printf("vop:%d:%d %d:%d %d:%d, sprite:%d:%d %d:%d %d:%d, virtual: %d:%d %d:%d\n",
 
5451
    vop_ref[0][0], vop_ref[0][1],
 
5452
    vop_ref[1][0], vop_ref[1][1],
 
5453
    vop_ref[2][0], vop_ref[2][1],
 
5454
    sprite_ref[0][0], sprite_ref[0][1],
 
5455
    sprite_ref[1][0], sprite_ref[1][1],
 
5456
    sprite_ref[2][0], sprite_ref[2][1],
 
5457
    virtual_ref[0][0], virtual_ref[0][1],
 
5458
    virtual_ref[1][0], virtual_ref[1][1]
 
5459
    );
 
5460
 
 
5461
printf("offset: %d:%d , delta: %d %d %d %d, shift %d\n",
 
5462
    s->sprite_offset[0][0], s->sprite_offset[0][1],
 
5463
    s->sprite_delta[0][0], s->sprite_delta[0][1],
 
5464
    s->sprite_delta[1][0], s->sprite_delta[1][1],
 
5465
    s->sprite_shift[0]
 
5466
    );
 
5467
#endif
 
5468
}
 
5469
 
 
5470
static int mpeg4_decode_gop_header(MpegEncContext * s, GetBitContext *gb){
 
5471
    int hours, minutes, seconds;
 
5472
 
 
5473
    hours= get_bits(gb, 5);
 
5474
    minutes= get_bits(gb, 6);
 
5475
    skip_bits1(gb);
 
5476
    seconds= get_bits(gb, 6);
 
5477
 
 
5478
    s->time_base= seconds + 60*(minutes + 60*hours);
 
5479
 
 
5480
    skip_bits1(gb);
 
5481
    skip_bits1(gb);
 
5482
 
 
5483
    return 0;
 
5484
}
 
5485
 
 
5486
static int decode_vol_header(MpegEncContext *s, GetBitContext *gb){
 
5487
    int width, height, vo_ver_id;
 
5488
 
 
5489
    /* vol header */
 
5490
    skip_bits(gb, 1); /* random access */
 
5491
    s->vo_type= get_bits(gb, 8);
 
5492
    if (get_bits1(gb) != 0) { /* is_ol_id */
 
5493
        vo_ver_id = get_bits(gb, 4); /* vo_ver_id */
 
5494
        skip_bits(gb, 3); /* vo_priority */
 
5495
    } else {
 
5496
        vo_ver_id = 1;
 
5497
    }
 
5498
//printf("vo type:%d\n",s->vo_type);
 
5499
    s->aspect_ratio_info= get_bits(gb, 4);
 
5500
    if(s->aspect_ratio_info == FF_ASPECT_EXTENDED){
 
5501
        s->avctx->sample_aspect_ratio.num= get_bits(gb, 8); // par_width
 
5502
        s->avctx->sample_aspect_ratio.den= get_bits(gb, 8); // par_height
 
5503
    }else{
 
5504
        s->avctx->sample_aspect_ratio= pixel_aspect[s->aspect_ratio_info];
 
5505
    }
 
5506
 
 
5507
    if ((s->vol_control_parameters=get_bits1(gb))) { /* vol control parameter */
 
5508
        int chroma_format= get_bits(gb, 2);
 
5509
        if(chroma_format!=1){
 
5510
            av_log(s->avctx, AV_LOG_ERROR, "illegal chroma format\n");
 
5511
        }
 
5512
        s->low_delay= get_bits1(gb);
 
5513
        if(get_bits1(gb)){ /* vbv parameters */
 
5514
            get_bits(gb, 15);   /* first_half_bitrate */
 
5515
            skip_bits1(gb);     /* marker */
 
5516
            get_bits(gb, 15);   /* latter_half_bitrate */
 
5517
            skip_bits1(gb);     /* marker */
 
5518
            get_bits(gb, 15);   /* first_half_vbv_buffer_size */
 
5519
            skip_bits1(gb);     /* marker */
 
5520
            get_bits(gb, 3);    /* latter_half_vbv_buffer_size */
 
5521
            get_bits(gb, 11);   /* first_half_vbv_occupancy */
 
5522
            skip_bits1(gb);     /* marker */
 
5523
            get_bits(gb, 15);   /* latter_half_vbv_occupancy */
 
5524
            skip_bits1(gb);     /* marker */
 
5525
        }
 
5526
    }else{
 
5527
        // set low delay flag only once the smartest? low delay detection won't be overriden
 
5528
        if(s->picture_number==0)
 
5529
            s->low_delay=0;
 
5530
    }
 
5531
 
 
5532
    s->shape = get_bits(gb, 2); /* vol shape */
 
5533
    if(s->shape != RECT_SHAPE) av_log(s->avctx, AV_LOG_ERROR, "only rectangular vol supported\n");
 
5534
    if(s->shape == GRAY_SHAPE && vo_ver_id != 1){
 
5535
        av_log(s->avctx, AV_LOG_ERROR, "Gray shape not supported\n");
 
5536
        skip_bits(gb, 4);  //video_object_layer_shape_extension
 
5537
    }
 
5538
 
 
5539
    check_marker(gb, "before time_increment_resolution");
 
5540
 
 
5541
    s->avctx->time_base.den = get_bits(gb, 16);
 
5542
    if(!s->avctx->time_base.den){
 
5543
        av_log(s->avctx, AV_LOG_ERROR, "time_base.den==0\n");
 
5544
        return -1;
 
5545
    }
 
5546
 
 
5547
    s->time_increment_bits = av_log2(s->avctx->time_base.den - 1) + 1;
 
5548
    if (s->time_increment_bits < 1)
 
5549
        s->time_increment_bits = 1;
 
5550
 
 
5551
    check_marker(gb, "before fixed_vop_rate");
 
5552
 
 
5553
    if (get_bits1(gb) != 0) {   /* fixed_vop_rate  */
 
5554
        s->avctx->time_base.num = get_bits(gb, s->time_increment_bits);
 
5555
    }else
 
5556
        s->avctx->time_base.num = 1;
 
5557
 
 
5558
    s->t_frame=0;
 
5559
 
 
5560
    if (s->shape != BIN_ONLY_SHAPE) {
 
5561
        if (s->shape == RECT_SHAPE) {
 
5562
            skip_bits1(gb);   /* marker */
 
5563
            width = get_bits(gb, 13);
 
5564
            skip_bits1(gb);   /* marker */
 
5565
            height = get_bits(gb, 13);
 
5566
            skip_bits1(gb);   /* marker */
 
5567
            if(width && height && !(s->width && s->avctx->codec_tag == ff_get_fourcc("MP4S"))){ /* they should be non zero but who knows ... */
 
5568
                s->width = width;
 
5569
                s->height = height;
 
5570
//                printf("width/height: %d %d\n", width, height);
 
5571
            }
 
5572
        }
 
5573
 
 
5574
        s->progressive_sequence=
 
5575
        s->progressive_frame= get_bits1(gb)^1;
 
5576
        if(!get_bits1(gb) && (s->avctx->debug & FF_DEBUG_PICT_INFO))
 
5577
            av_log(s->avctx, AV_LOG_INFO, "MPEG4 OBMC not supported (very likely buggy encoder)\n");   /* OBMC Disable */
 
5578
        if (vo_ver_id == 1) {
 
5579
            s->vol_sprite_usage = get_bits1(gb); /* vol_sprite_usage */
 
5580
        } else {
 
5581
            s->vol_sprite_usage = get_bits(gb, 2); /* vol_sprite_usage */
 
5582
        }
 
5583
        if(s->vol_sprite_usage==STATIC_SPRITE) av_log(s->avctx, AV_LOG_ERROR, "Static Sprites not supported\n");
 
5584
        if(s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE){
 
5585
            if(s->vol_sprite_usage==STATIC_SPRITE){
 
5586
                s->sprite_width = get_bits(gb, 13);
 
5587
                skip_bits1(gb); /* marker */
 
5588
                s->sprite_height= get_bits(gb, 13);
 
5589
                skip_bits1(gb); /* marker */
 
5590
                s->sprite_left  = get_bits(gb, 13);
 
5591
                skip_bits1(gb); /* marker */
 
5592
                s->sprite_top   = get_bits(gb, 13);
 
5593
                skip_bits1(gb); /* marker */
 
5594
            }
 
5595
            s->num_sprite_warping_points= get_bits(gb, 6);
 
5596
            s->sprite_warping_accuracy = get_bits(gb, 2);
 
5597
            s->sprite_brightness_change= get_bits1(gb);
 
5598
            if(s->vol_sprite_usage==STATIC_SPRITE)
 
5599
                s->low_latency_sprite= get_bits1(gb);
 
5600
        }
 
5601
        // FIXME sadct disable bit if verid!=1 && shape not rect
 
5602
 
 
5603
        if (get_bits1(gb) == 1) {   /* not_8_bit */
 
5604
            s->quant_precision = get_bits(gb, 4); /* quant_precision */
 
5605
            if(get_bits(gb, 4)!=8) av_log(s->avctx, AV_LOG_ERROR, "N-bit not supported\n"); /* bits_per_pixel */
 
5606
            if(s->quant_precision!=5) av_log(s->avctx, AV_LOG_ERROR, "quant precision %d\n", s->quant_precision);
 
5607
        } else {
 
5608
            s->quant_precision = 5;
 
5609
        }
 
5610
 
 
5611
        // FIXME a bunch of grayscale shape things
 
5612
 
 
5613
        if((s->mpeg_quant=get_bits1(gb))){ /* vol_quant_type */
 
5614
            int i, v;
 
5615
 
 
5616
            /* load default matrixes */
 
5617
            for(i=0; i<64; i++){
 
5618
                int j= s->dsp.idct_permutation[i];
 
5619
                v= ff_mpeg4_default_intra_matrix[i];
 
5620
                s->intra_matrix[j]= v;
 
5621
                s->chroma_intra_matrix[j]= v;
 
5622
 
 
5623
                v= ff_mpeg4_default_non_intra_matrix[i];
 
5624
                s->inter_matrix[j]= v;
 
5625
                s->chroma_inter_matrix[j]= v;
 
5626
            }
 
5627
 
 
5628
            /* load custom intra matrix */
 
5629
            if(get_bits1(gb)){
 
5630
                int last=0;
 
5631
                for(i=0; i<64; i++){
 
5632
                    int j;
 
5633
                    v= get_bits(gb, 8);
 
5634
                    if(v==0) break;
 
5635
 
 
5636
                    last= v;
 
5637
                    j= s->dsp.idct_permutation[ ff_zigzag_direct[i] ];
 
5638
                    s->intra_matrix[j]= v;
 
5639
                    s->chroma_intra_matrix[j]= v;
 
5640
                }
 
5641
 
 
5642
                /* replicate last value */
 
5643
                for(; i<64; i++){
 
5644
                    int j= s->dsp.idct_permutation[ ff_zigzag_direct[i] ];
 
5645
                    s->intra_matrix[j]= last;
 
5646
                    s->chroma_intra_matrix[j]= last;
 
5647
                }
 
5648
            }
 
5649
 
 
5650
            /* load custom non intra matrix */
 
5651
            if(get_bits1(gb)){
 
5652
                int last=0;
 
5653
                for(i=0; i<64; i++){
 
5654
                    int j;
 
5655
                    v= get_bits(gb, 8);
 
5656
                    if(v==0) break;
 
5657
 
 
5658
                    last= v;
 
5659
                    j= s->dsp.idct_permutation[ ff_zigzag_direct[i] ];
 
5660
                    s->inter_matrix[j]= v;
 
5661
                    s->chroma_inter_matrix[j]= v;
 
5662
                }
 
5663
 
 
5664
                /* replicate last value */
 
5665
                for(; i<64; i++){
 
5666
                    int j= s->dsp.idct_permutation[ ff_zigzag_direct[i] ];
 
5667
                    s->inter_matrix[j]= last;
 
5668
                    s->chroma_inter_matrix[j]= last;
 
5669
                }
 
5670
            }
 
5671
 
 
5672
            // FIXME a bunch of grayscale shape things
 
5673
        }
 
5674
 
 
5675
        if(vo_ver_id != 1)
 
5676
             s->quarter_sample= get_bits1(gb);
 
5677
        else s->quarter_sample=0;
 
5678
 
 
5679
        if(!get_bits1(gb)) av_log(s->avctx, AV_LOG_ERROR, "Complexity estimation not supported\n");
 
5680
 
 
5681
        s->resync_marker= !get_bits1(gb); /* resync_marker_disabled */
 
5682
 
 
5683
        s->data_partitioning= get_bits1(gb);
 
5684
        if(s->data_partitioning){
 
5685
            s->rvlc= get_bits1(gb);
 
5686
        }
 
5687
 
 
5688
        if(vo_ver_id != 1) {
 
5689
            s->new_pred= get_bits1(gb);
 
5690
            if(s->new_pred){
 
5691
                av_log(s->avctx, AV_LOG_ERROR, "new pred not supported\n");
 
5692
                skip_bits(gb, 2); /* requested upstream message type */
 
5693
                skip_bits1(gb); /* newpred segment type */
 
5694
            }
 
5695
            s->reduced_res_vop= get_bits1(gb);
 
5696
            if(s->reduced_res_vop) av_log(s->avctx, AV_LOG_ERROR, "reduced resolution VOP not supported\n");
 
5697
        }
 
5698
        else{
 
5699
            s->new_pred=0;
 
5700
            s->reduced_res_vop= 0;
 
5701
        }
 
5702
 
 
5703
        s->scalability= get_bits1(gb);
 
5704
 
 
5705
        if (s->scalability) {
 
5706
            GetBitContext bak= *gb;
 
5707
            int ref_layer_id;
 
5708
            int ref_layer_sampling_dir;
 
5709
            int h_sampling_factor_n;
 
5710
            int h_sampling_factor_m;
 
5711
            int v_sampling_factor_n;
 
5712
            int v_sampling_factor_m;
 
5713
 
 
5714
            s->hierachy_type= get_bits1(gb);
 
5715
            ref_layer_id= get_bits(gb, 4);
 
5716
            ref_layer_sampling_dir= get_bits1(gb);
 
5717
            h_sampling_factor_n= get_bits(gb, 5);
 
5718
            h_sampling_factor_m= get_bits(gb, 5);
 
5719
            v_sampling_factor_n= get_bits(gb, 5);
 
5720
            v_sampling_factor_m= get_bits(gb, 5);
 
5721
            s->enhancement_type= get_bits1(gb);
 
5722
 
 
5723
            if(   h_sampling_factor_n==0 || h_sampling_factor_m==0
 
5724
               || v_sampling_factor_n==0 || v_sampling_factor_m==0){
 
5725
 
 
5726
//                fprintf(stderr, "illegal scalability header (VERY broken encoder), trying to workaround\n");
 
5727
                s->scalability=0;
 
5728
 
 
5729
                *gb= bak;
 
5730
            }else
 
5731
                av_log(s->avctx, AV_LOG_ERROR, "scalability not supported\n");
 
5732
 
 
5733
            // bin shape stuff FIXME
 
5734
        }
 
5735
    }
 
5736
    return 0;
 
5737
}
 
5738
 
 
5739
/**
 
5740
 * decodes the user data stuff in the header.
 
5741
 * allso inits divx/xvid/lavc_version/build
 
5742
 */
 
5743
static int decode_user_data(MpegEncContext *s, GetBitContext *gb){
 
5744
    char buf[256];
 
5745
    int i;
 
5746
    int e;
 
5747
    int ver = 0, build = 0, ver2 = 0, ver3 = 0;
 
5748
    char last;
 
5749
 
 
5750
    for(i=0; i<255 && gb->index < gb->size_in_bits; i++){
 
5751
        if(show_bits(gb, 23) == 0) break;
 
5752
        buf[i]= get_bits(gb, 8);
 
5753
    }
 
5754
    buf[i]=0;
 
5755
 
 
5756
    /* divx detection */
 
5757
    e=sscanf(buf, "DivX%dBuild%d%c", &ver, &build, &last);
 
5758
    if(e<2)
 
5759
        e=sscanf(buf, "DivX%db%d%c", &ver, &build, &last);
 
5760
    if(e>=2){
 
5761
        s->divx_version= ver;
 
5762
        s->divx_build= build;
 
5763
        s->divx_packed= e==3 && last=='p';
 
5764
    }
 
5765
 
 
5766
    /* ffmpeg detection */
 
5767
    e=sscanf(buf, "FFmpe%*[^b]b%d", &build)+3;
 
5768
    if(e!=4)
 
5769
        e=sscanf(buf, "FFmpeg v%d.%d.%d / libavcodec build: %d", &ver, &ver2, &ver3, &build);
 
5770
    if(e!=4){
 
5771
        e=sscanf(buf, "Lavc%d.%d.%d", &ver, &ver2, &ver3)+1;
 
5772
        if (e>1)
 
5773
            build= (ver<<16) + (ver2<<8) + ver3;
 
5774
    }
 
5775
    if(e!=4){
 
5776
        if(strcmp(buf, "ffmpeg")==0){
 
5777
            s->lavc_build= 4600;
 
5778
        }
 
5779
    }
 
5780
    if(e==4){
 
5781
        s->lavc_build= build;
 
5782
    }
 
5783
 
 
5784
    /* xvid detection */
 
5785
    e=sscanf(buf, "XviD%d", &build);
 
5786
    if(e==1){
 
5787
        s->xvid_build= build;
 
5788
    }
 
5789
 
 
5790
//printf("User Data: %s\n", buf);
 
5791
    return 0;
 
5792
}
 
5793
 
 
5794
static int decode_vop_header(MpegEncContext *s, GetBitContext *gb){
 
5795
    int time_incr, time_increment;
 
5796
 
 
5797
    s->pict_type = get_bits(gb, 2) + I_TYPE;        /* pict type: I = 0 , P = 1 */
 
5798
    if(s->pict_type==B_TYPE && s->low_delay && s->vol_control_parameters==0 && !(s->flags & CODEC_FLAG_LOW_DELAY)){
 
5799
        av_log(s->avctx, AV_LOG_ERROR, "low_delay flag incorrectly, clearing it\n");
 
5800
        s->low_delay=0;
 
5801
    }
 
5802
 
 
5803
    s->partitioned_frame= s->data_partitioning && s->pict_type!=B_TYPE;
 
5804
    if(s->partitioned_frame)
 
5805
        s->decode_mb= mpeg4_decode_partitioned_mb;
 
5806
    else
 
5807
        s->decode_mb= ff_mpeg4_decode_mb;
 
5808
 
 
5809
    time_incr=0;
 
5810
    while (get_bits1(gb) != 0)
 
5811
        time_incr++;
 
5812
 
 
5813
    check_marker(gb, "before time_increment");
 
5814
 
 
5815
    if(s->time_increment_bits==0 || !(show_bits(gb, s->time_increment_bits+1)&1)){
 
5816
        av_log(s->avctx, AV_LOG_ERROR, "hmm, seems the headers are not complete, trying to guess time_increment_bits\n");
 
5817
 
 
5818
        for(s->time_increment_bits=1 ;s->time_increment_bits<16; s->time_increment_bits++){
 
5819
            if(show_bits(gb, s->time_increment_bits+1)&1) break;
 
5820
        }
 
5821
 
 
5822
        av_log(s->avctx, AV_LOG_ERROR, "my guess is %d bits ;)\n",s->time_increment_bits);
 
5823
    }
 
5824
 
 
5825
    if(IS_3IV1) time_increment= get_bits1(gb); //FIXME investigate further
 
5826
    else time_increment= get_bits(gb, s->time_increment_bits);
 
5827
 
 
5828
//    printf("%d %X\n", s->time_increment_bits, time_increment);
 
5829
//av_log(s->avctx, AV_LOG_DEBUG, " type:%d modulo_time_base:%d increment:%d t_frame %d\n", s->pict_type, time_incr, time_increment, s->t_frame);
 
5830
    if(s->pict_type!=B_TYPE){
 
5831
        s->last_time_base= s->time_base;
 
5832
        s->time_base+= time_incr;
 
5833
        s->time= s->time_base*s->avctx->time_base.den + time_increment;
 
5834
        if(s->workaround_bugs&FF_BUG_UMP4){
 
5835
            if(s->time < s->last_non_b_time){
 
5836
//                fprintf(stderr, "header is not mpeg4 compatible, broken encoder, trying to workaround\n");
 
5837
                s->time_base++;
 
5838
                s->time+= s->avctx->time_base.den;
 
5839
            }
 
5840
        }
 
5841
        s->pp_time= s->time - s->last_non_b_time;
 
5842
        s->last_non_b_time= s->time;
 
5843
    }else{
 
5844
        s->time= (s->last_time_base + time_incr)*s->avctx->time_base.den + time_increment;
 
5845
        s->pb_time= s->pp_time - (s->last_non_b_time - s->time);
 
5846
        if(s->pp_time <=s->pb_time || s->pp_time <= s->pp_time - s->pb_time || s->pp_time<=0){
 
5847
//            printf("messed up order, maybe after seeking? skipping current b frame\n");
 
5848
            return FRAME_SKIPPED;
 
5849
        }
 
5850
 
 
5851
        if(s->t_frame==0) s->t_frame= s->pb_time;
 
5852
        if(s->t_frame==0) s->t_frame=1; // 1/0 protection
 
5853
        s->pp_field_time= (  ROUNDED_DIV(s->last_non_b_time, s->t_frame)
 
5854
                           - ROUNDED_DIV(s->last_non_b_time - s->pp_time, s->t_frame))*2;
 
5855
        s->pb_field_time= (  ROUNDED_DIV(s->time, s->t_frame)
 
5856
                           - ROUNDED_DIV(s->last_non_b_time - s->pp_time, s->t_frame))*2;
 
5857
    }
 
5858
//av_log(s->avctx, AV_LOG_DEBUG, "last nonb %Ld last_base %d time %Ld pp %d pb %d t %d ppf %d pbf %d\n", s->last_non_b_time, s->last_time_base, s->time, s->pp_time, s->pb_time, s->t_frame, s->pp_field_time, s->pb_field_time);
 
5859
 
 
5860
    if(s->avctx->time_base.num)
 
5861
        s->current_picture_ptr->pts= (s->time + s->avctx->time_base.num/2) / s->avctx->time_base.num;
 
5862
    else
 
5863
        s->current_picture_ptr->pts= AV_NOPTS_VALUE;
 
5864
    if(s->avctx->debug&FF_DEBUG_PTS)
 
5865
        av_log(s->avctx, AV_LOG_DEBUG, "MPEG4 PTS: %"PRId64"\n", s->current_picture_ptr->pts);
 
5866
 
 
5867
    check_marker(gb, "before vop_coded");
 
5868
 
 
5869
    /* vop coded */
 
5870
    if (get_bits1(gb) != 1){
 
5871
        if(s->avctx->debug&FF_DEBUG_PICT_INFO)
 
5872
            av_log(s->avctx, AV_LOG_ERROR, "vop not coded\n");
 
5873
        return FRAME_SKIPPED;
 
5874
    }
 
5875
//printf("time %d %d %d || %Ld %Ld %Ld\n", s->time_increment_bits, s->avctx->time_base.den, s->time_base,
 
5876
//s->time, s->last_non_b_time, s->last_non_b_time - s->pp_time);
 
5877
    if (s->shape != BIN_ONLY_SHAPE && ( s->pict_type == P_TYPE
 
5878
                          || (s->pict_type == S_TYPE && s->vol_sprite_usage==GMC_SPRITE))) {
 
5879
        /* rounding type for motion estimation */
 
5880
        s->no_rounding = get_bits1(gb);
 
5881
    } else {
 
5882
        s->no_rounding = 0;
 
5883
    }
 
5884
//FIXME reduced res stuff
 
5885
 
 
5886
     if (s->shape != RECT_SHAPE) {
 
5887
         if (s->vol_sprite_usage != 1 || s->pict_type != I_TYPE) {
 
5888
             int width, height, hor_spat_ref, ver_spat_ref;
 
5889
 
 
5890
             width = get_bits(gb, 13);
 
5891
             skip_bits1(gb);   /* marker */
 
5892
             height = get_bits(gb, 13);
 
5893
             skip_bits1(gb);   /* marker */
 
5894
             hor_spat_ref = get_bits(gb, 13); /* hor_spat_ref */
 
5895
             skip_bits1(gb);   /* marker */
 
5896
             ver_spat_ref = get_bits(gb, 13); /* ver_spat_ref */
 
5897
         }
 
5898
         skip_bits1(gb); /* change_CR_disable */
 
5899
 
 
5900
         if (get_bits1(gb) != 0) {
 
5901
             skip_bits(gb, 8); /* constant_alpha_value */
 
5902
         }
 
5903
     }
 
5904
//FIXME complexity estimation stuff
 
5905
 
 
5906
     if (s->shape != BIN_ONLY_SHAPE) {
 
5907
         s->intra_dc_threshold= mpeg4_dc_threshold[ get_bits(gb, 3) ];
 
5908
         if(!s->progressive_sequence){
 
5909
             s->top_field_first= get_bits1(gb);
 
5910
             s->alternate_scan= get_bits1(gb);
 
5911
         }else
 
5912
             s->alternate_scan= 0;
 
5913
     }
 
5914
 
 
5915
     if(s->alternate_scan){
 
5916
         ff_init_scantable(s->dsp.idct_permutation, &s->inter_scantable  , ff_alternate_vertical_scan);
 
5917
         ff_init_scantable(s->dsp.idct_permutation, &s->intra_scantable  , ff_alternate_vertical_scan);
 
5918
         ff_init_scantable(s->dsp.idct_permutation, &s->intra_h_scantable, ff_alternate_vertical_scan);
 
5919
         ff_init_scantable(s->dsp.idct_permutation, &s->intra_v_scantable, ff_alternate_vertical_scan);
 
5920
     } else{
 
5921
         ff_init_scantable(s->dsp.idct_permutation, &s->inter_scantable  , ff_zigzag_direct);
 
5922
         ff_init_scantable(s->dsp.idct_permutation, &s->intra_scantable  , ff_zigzag_direct);
 
5923
         ff_init_scantable(s->dsp.idct_permutation, &s->intra_h_scantable, ff_alternate_horizontal_scan);
 
5924
         ff_init_scantable(s->dsp.idct_permutation, &s->intra_v_scantable, ff_alternate_vertical_scan);
 
5925
     }
 
5926
 
 
5927
     if(s->pict_type == S_TYPE && (s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE)){
 
5928
         mpeg4_decode_sprite_trajectory(s, gb);
 
5929
         if(s->sprite_brightness_change) av_log(s->avctx, AV_LOG_ERROR, "sprite_brightness_change not supported\n");
 
5930
         if(s->vol_sprite_usage==STATIC_SPRITE) av_log(s->avctx, AV_LOG_ERROR, "static sprite not supported\n");
 
5931
     }
 
5932
 
 
5933
     if (s->shape != BIN_ONLY_SHAPE) {
 
5934
         s->chroma_qscale= s->qscale = get_bits(gb, s->quant_precision);
 
5935
         if(s->qscale==0){
 
5936
             av_log(s->avctx, AV_LOG_ERROR, "Error, header damaged or not MPEG4 header (qscale=0)\n");
 
5937
             return -1; // makes no sense to continue, as there is nothing left from the image then
 
5938
         }
 
5939
 
 
5940
         if (s->pict_type != I_TYPE) {
 
5941
             s->f_code = get_bits(gb, 3);       /* fcode_for */
 
5942
             if(s->f_code==0){
 
5943
                 av_log(s->avctx, AV_LOG_ERROR, "Error, header damaged or not MPEG4 header (f_code=0)\n");
 
5944
                 return -1; // makes no sense to continue, as the MV decoding will break very quickly
 
5945
             }
 
5946
         }else
 
5947
             s->f_code=1;
 
5948
 
 
5949
         if (s->pict_type == B_TYPE) {
 
5950
             s->b_code = get_bits(gb, 3);
 
5951
         }else
 
5952
             s->b_code=1;
 
5953
 
 
5954
         if(s->avctx->debug&FF_DEBUG_PICT_INFO){
 
5955
             av_log(s->avctx, AV_LOG_DEBUG, "qp:%d fc:%d,%d %s size:%d pro:%d alt:%d top:%d %spel part:%d resync:%d w:%d a:%d rnd:%d vot:%d%s dc:%d\n",
 
5956
                 s->qscale, s->f_code, s->b_code,
 
5957
                 s->pict_type == I_TYPE ? "I" : (s->pict_type == P_TYPE ? "P" : (s->pict_type == B_TYPE ? "B" : "S")),
 
5958
                 gb->size_in_bits,s->progressive_sequence, s->alternate_scan, s->top_field_first,
 
5959
                 s->quarter_sample ? "q" : "h", s->data_partitioning, s->resync_marker, s->num_sprite_warping_points,
 
5960
                 s->sprite_warping_accuracy, 1-s->no_rounding, s->vo_type, s->vol_control_parameters ? " VOLC" : " ", s->intra_dc_threshold);
 
5961
         }
 
5962
 
 
5963
         if(!s->scalability){
 
5964
             if (s->shape!=RECT_SHAPE && s->pict_type!=I_TYPE) {
 
5965
                 skip_bits1(gb); // vop shape coding type
 
5966
             }
 
5967
         }else{
 
5968
             if(s->enhancement_type){
 
5969
                 int load_backward_shape= get_bits1(gb);
 
5970
                 if(load_backward_shape){
 
5971
                     av_log(s->avctx, AV_LOG_ERROR, "load backward shape isn't supported\n");
 
5972
                 }
 
5973
             }
 
5974
             skip_bits(gb, 2); //ref_select_code
 
5975
         }
 
5976
     }
 
5977
     /* detect buggy encoders which don't set the low_delay flag (divx4/xvid/opendivx)*/
 
5978
     // note we cannot detect divx5 without b-frames easily (although it's buggy too)
 
5979
     if(s->vo_type==0 && s->vol_control_parameters==0 && s->divx_version==0 && s->picture_number==0){
 
5980
         av_log(s->avctx, AV_LOG_ERROR, "looks like this file was encoded with (divx4/(old)xvid/opendivx) -> forcing low_delay flag\n");
 
5981
         s->low_delay=1;
 
5982
     }
 
5983
 
 
5984
     s->picture_number++; // better than pic number==0 always ;)
 
5985
 
 
5986
     s->y_dc_scale_table= ff_mpeg4_y_dc_scale_table; //FIXME add short header support
 
5987
     s->c_dc_scale_table= ff_mpeg4_c_dc_scale_table;
 
5988
 
 
5989
     if(s->workaround_bugs&FF_BUG_EDGE){
 
5990
         s->h_edge_pos= s->width;
 
5991
         s->v_edge_pos= s->height;
 
5992
     }
 
5993
     return 0;
 
5994
}
 
5995
 
 
5996
/**
 
5997
 * decode mpeg4 headers
 
5998
 * @return <0 if no VOP found (or a damaged one)
 
5999
 *         FRAME_SKIPPED if a not coded VOP is found
 
6000
 *         0 if a VOP is found
 
6001
 */
 
6002
int ff_mpeg4_decode_picture_header(MpegEncContext * s, GetBitContext *gb)
 
6003
{
 
6004
    int startcode, v;
 
6005
 
 
6006
    /* search next start code */
 
6007
    align_get_bits(gb);
 
6008
 
 
6009
    if(s->avctx->codec_tag == ff_get_fourcc("WV1F") && show_bits(gb, 24) == 0x575630){
 
6010
        skip_bits(gb, 24);
 
6011
        if(get_bits(gb, 8) == 0xF0)
 
6012
            return decode_vop_header(s, gb);
 
6013
    }
 
6014
 
 
6015
    startcode = 0xff;
 
6016
    for(;;) {
 
6017
        if(get_bits_count(gb) >= gb->size_in_bits){
 
6018
            if(gb->size_in_bits==8 && (s->divx_version || s->xvid_build)){
 
6019
                av_log(s->avctx, AV_LOG_ERROR, "frame skip %d\n", gb->size_in_bits);
 
6020
                return FRAME_SKIPPED; //divx bug
 
6021
            }else
 
6022
                return -1; //end of stream
 
6023
        }
 
6024
 
 
6025
        /* use the bits after the test */
 
6026
        v = get_bits(gb, 8);
 
6027
        startcode = ((startcode << 8) | v) & 0xffffffff;
 
6028
 
 
6029
        if((startcode&0xFFFFFF00) != 0x100)
 
6030
            continue; //no startcode
 
6031
 
 
6032
        if(s->avctx->debug&FF_DEBUG_STARTCODE){
 
6033
            av_log(s->avctx, AV_LOG_DEBUG, "startcode: %3X ", startcode);
 
6034
            if     (startcode<=0x11F) av_log(s->avctx, AV_LOG_DEBUG, "Video Object Start");
 
6035
            else if(startcode<=0x12F) av_log(s->avctx, AV_LOG_DEBUG, "Video Object Layer Start");
 
6036
            else if(startcode<=0x13F) av_log(s->avctx, AV_LOG_DEBUG, "Reserved");
 
6037
            else if(startcode<=0x15F) av_log(s->avctx, AV_LOG_DEBUG, "FGS bp start");
 
6038
            else if(startcode<=0x1AF) av_log(s->avctx, AV_LOG_DEBUG, "Reserved");
 
6039
            else if(startcode==0x1B0) av_log(s->avctx, AV_LOG_DEBUG, "Visual Object Seq Start");
 
6040
            else if(startcode==0x1B1) av_log(s->avctx, AV_LOG_DEBUG, "Visual Object Seq End");
 
6041
            else if(startcode==0x1B2) av_log(s->avctx, AV_LOG_DEBUG, "User Data");
 
6042
            else if(startcode==0x1B3) av_log(s->avctx, AV_LOG_DEBUG, "Group of VOP start");
 
6043
            else if(startcode==0x1B4) av_log(s->avctx, AV_LOG_DEBUG, "Video Session Error");
 
6044
            else if(startcode==0x1B5) av_log(s->avctx, AV_LOG_DEBUG, "Visual Object Start");
 
6045
            else if(startcode==0x1B6) av_log(s->avctx, AV_LOG_DEBUG, "Video Object Plane start");
 
6046
            else if(startcode==0x1B7) av_log(s->avctx, AV_LOG_DEBUG, "slice start");
 
6047
            else if(startcode==0x1B8) av_log(s->avctx, AV_LOG_DEBUG, "extension start");
 
6048
            else if(startcode==0x1B9) av_log(s->avctx, AV_LOG_DEBUG, "fgs start");
 
6049
            else if(startcode==0x1BA) av_log(s->avctx, AV_LOG_DEBUG, "FBA Object start");
 
6050
            else if(startcode==0x1BB) av_log(s->avctx, AV_LOG_DEBUG, "FBA Object Plane start");
 
6051
            else if(startcode==0x1BC) av_log(s->avctx, AV_LOG_DEBUG, "Mesh Object start");
 
6052
            else if(startcode==0x1BD) av_log(s->avctx, AV_LOG_DEBUG, "Mesh Object Plane start");
 
6053
            else if(startcode==0x1BE) av_log(s->avctx, AV_LOG_DEBUG, "Still Texture Object start");
 
6054
            else if(startcode==0x1BF) av_log(s->avctx, AV_LOG_DEBUG, "Texture Spatial Layer start");
 
6055
            else if(startcode==0x1C0) av_log(s->avctx, AV_LOG_DEBUG, "Texture SNR Layer start");
 
6056
            else if(startcode==0x1C1) av_log(s->avctx, AV_LOG_DEBUG, "Texture Tile start");
 
6057
            else if(startcode==0x1C2) av_log(s->avctx, AV_LOG_DEBUG, "Texture Shape Layer start");
 
6058
            else if(startcode==0x1C3) av_log(s->avctx, AV_LOG_DEBUG, "stuffing start");
 
6059
            else if(startcode<=0x1C5) av_log(s->avctx, AV_LOG_DEBUG, "reserved");
 
6060
            else if(startcode<=0x1FF) av_log(s->avctx, AV_LOG_DEBUG, "System start");
 
6061
            av_log(s->avctx, AV_LOG_DEBUG, " at %d\n", get_bits_count(gb));
 
6062
        }
 
6063
 
 
6064
        if(startcode >= 0x120 && startcode <= 0x12F){
 
6065
            if(decode_vol_header(s, gb) < 0)
 
6066
                return -1;
 
6067
        }
 
6068
        else if(startcode == USER_DATA_STARTCODE){
 
6069
            decode_user_data(s, gb);
 
6070
        }
 
6071
        else if(startcode == GOP_STARTCODE){
 
6072
            mpeg4_decode_gop_header(s, gb);
 
6073
        }
 
6074
        else if(startcode == VOP_STARTCODE){
 
6075
            return decode_vop_header(s, gb);
 
6076
        }
 
6077
 
 
6078
        align_get_bits(gb);
 
6079
        startcode = 0xff;
 
6080
    }
 
6081
}
 
6082
 
 
6083
/* don't understand why they choose a different header ! */
 
6084
int intel_h263_decode_picture_header(MpegEncContext *s)
 
6085
{
 
6086
    int format;
 
6087
 
 
6088
    /* picture header */
 
6089
    if (get_bits_long(&s->gb, 22) != 0x20) {
 
6090
        av_log(s->avctx, AV_LOG_ERROR, "Bad picture start code\n");
 
6091
        return -1;
 
6092
    }
 
6093
    s->picture_number = get_bits(&s->gb, 8); /* picture timestamp */
 
6094
 
 
6095
    if (get_bits1(&s->gb) != 1) {
 
6096
        av_log(s->avctx, AV_LOG_ERROR, "Bad marker\n");
 
6097
        return -1;      /* marker */
 
6098
    }
 
6099
    if (get_bits1(&s->gb) != 0) {
 
6100
        av_log(s->avctx, AV_LOG_ERROR, "Bad H263 id\n");
 
6101
        return -1;      /* h263 id */
 
6102
    }
 
6103
    skip_bits1(&s->gb);         /* split screen off */
 
6104
    skip_bits1(&s->gb);         /* camera  off */
 
6105
    skip_bits1(&s->gb);         /* freeze picture release off */
 
6106
 
 
6107
    format = get_bits(&s->gb, 3);
 
6108
    if (format != 7) {
 
6109
        av_log(s->avctx, AV_LOG_ERROR, "Intel H263 free format not supported\n");
 
6110
        return -1;
 
6111
    }
 
6112
    s->h263_plus = 0;
 
6113
 
 
6114
    s->pict_type = I_TYPE + get_bits1(&s->gb);
 
6115
 
 
6116
    s->unrestricted_mv = get_bits1(&s->gb);
 
6117
    s->h263_long_vectors = s->unrestricted_mv;
 
6118
 
 
6119
    if (get_bits1(&s->gb) != 0) {
 
6120
        av_log(s->avctx, AV_LOG_ERROR, "SAC not supported\n");
 
6121
        return -1;      /* SAC: off */
 
6122
    }
 
6123
    if (get_bits1(&s->gb) != 0) {
 
6124
        s->obmc= 1;
 
6125
        av_log(s->avctx, AV_LOG_ERROR, "Advanced Prediction Mode not supported\n");
 
6126
//        return -1;      /* advanced prediction mode: off */
 
6127
    }
 
6128
    if (get_bits1(&s->gb) != 0) {
 
6129
        av_log(s->avctx, AV_LOG_ERROR, "PB frame mode no supported\n");
 
6130
        return -1;      /* PB frame mode */
 
6131
    }
 
6132
 
 
6133
    /* skip unknown header garbage */
 
6134
    skip_bits(&s->gb, 41);
 
6135
 
 
6136
    s->chroma_qscale= s->qscale = get_bits(&s->gb, 5);
 
6137
    skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
 
6138
 
 
6139
    /* PEI */
 
6140
    while (get_bits1(&s->gb) != 0) {
 
6141
        skip_bits(&s->gb, 8);
 
6142
    }
 
6143
    s->f_code = 1;
 
6144
 
 
6145
    s->y_dc_scale_table=
 
6146
    s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
 
6147
 
 
6148
    return 0;
 
6149
}
 
6150
 
 
6151
int flv_h263_decode_picture_header(MpegEncContext *s)
 
6152
{
 
6153
    int format, width, height;
 
6154
 
 
6155
    /* picture header */
 
6156
    if (get_bits_long(&s->gb, 17) != 1) {
 
6157
        av_log(s->avctx, AV_LOG_ERROR, "Bad picture start code\n");
 
6158
        return -1;
 
6159
    }
 
6160
    format = get_bits(&s->gb, 5);
 
6161
    if (format != 0 && format != 1) {
 
6162
        av_log(s->avctx, AV_LOG_ERROR, "Bad picture format\n");
 
6163
        return -1;
 
6164
    }
 
6165
    s->h263_flv = format+1;
 
6166
    s->picture_number = get_bits(&s->gb, 8); /* picture timestamp */
 
6167
    format = get_bits(&s->gb, 3);
 
6168
    switch (format) {
 
6169
    case 0:
 
6170
        width = get_bits(&s->gb, 8);
 
6171
        height = get_bits(&s->gb, 8);
 
6172
        break;
 
6173
    case 1:
 
6174
        width = get_bits(&s->gb, 16);
 
6175
        height = get_bits(&s->gb, 16);
 
6176
        break;
 
6177
    case 2:
 
6178
        width = 352;
 
6179
        height = 288;
 
6180
        break;
 
6181
    case 3:
 
6182
        width = 176;
 
6183
        height = 144;
 
6184
        break;
 
6185
    case 4:
 
6186
        width = 128;
 
6187
        height = 96;
 
6188
        break;
 
6189
    case 5:
 
6190
        width = 320;
 
6191
        height = 240;
 
6192
        break;
 
6193
    case 6:
 
6194
        width = 160;
 
6195
        height = 120;
 
6196
        break;
 
6197
    default:
 
6198
        width = height = 0;
 
6199
        break;
 
6200
    }
 
6201
    if(avcodec_check_dimensions(s->avctx, width, height))
 
6202
        return -1;
 
6203
    s->width = width;
 
6204
    s->height = height;
 
6205
 
 
6206
    s->pict_type = I_TYPE + get_bits(&s->gb, 2);
 
6207
    s->dropable= s->pict_type > P_TYPE;
 
6208
    if (s->dropable)
 
6209
        s->pict_type = P_TYPE;
 
6210
 
 
6211
    skip_bits1(&s->gb); /* deblocking flag */
 
6212
    s->chroma_qscale= s->qscale = get_bits(&s->gb, 5);
 
6213
 
 
6214
    s->h263_plus = 0;
 
6215
 
 
6216
    s->unrestricted_mv = 1;
 
6217
    s->h263_long_vectors = 0;
 
6218
 
 
6219
    /* PEI */
 
6220
    while (get_bits1(&s->gb) != 0) {
 
6221
        skip_bits(&s->gb, 8);
 
6222
    }
 
6223
    s->f_code = 1;
 
6224
 
 
6225
    if(s->avctx->debug & FF_DEBUG_PICT_INFO){
 
6226
        av_log(s->avctx, AV_LOG_DEBUG, "%c esc_type:%d, qp:%d num:%d\n",
 
6227
               s->dropable ? 'D' : av_get_pict_type_char(s->pict_type), s->h263_flv-1, s->qscale, s->picture_number);
 
6228
    }
 
6229
 
 
6230
    s->y_dc_scale_table=
 
6231
    s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
 
6232
 
 
6233
    return 0;
 
6234
}