]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/blob - libavcodec/mpeg12.c
simplify s->mv_dir init
[frescor/ffmpeg.git] / libavcodec / mpeg12.c
1 /*
2  * MPEG1/2 decoder
3  * Copyright (c) 2000,2001 Fabrice Bellard.
4  * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg 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.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg 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 FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22
23 /**
24  * @file mpeg12.c
25  * MPEG1/2 decoder
26  */
27
28 //#define DEBUG
29 #include "avcodec.h"
30 #include "dsputil.h"
31 #include "mpegvideo.h"
32
33 #include "mpeg12.h"
34 #include "mpeg12data.h"
35 #include "mpeg12decdata.h"
36 #include "bytestream.h"
37
38 //#undef NDEBUG
39 //#include <assert.h>
40
41
42 #define DC_VLC_BITS 9
43 #define MV_VLC_BITS 9
44 #define MBINCR_VLC_BITS 9
45 #define MB_PAT_VLC_BITS 9
46 #define MB_PTYPE_VLC_BITS 6
47 #define MB_BTYPE_VLC_BITS 6
48 #define TEX_VLC_BITS 9
49
50 static inline int mpeg1_decode_block_inter(MpegEncContext *s,
51                               DCTELEM *block,
52                               int n);
53 static inline int mpeg1_decode_block_intra(MpegEncContext *s,
54                               DCTELEM *block,
55                               int n);
56 static inline int mpeg1_fast_decode_block_inter(MpegEncContext *s, DCTELEM *block, int n);
57 static inline int mpeg2_decode_block_non_intra(MpegEncContext *s,
58                                         DCTELEM *block,
59                                         int n);
60 static inline int mpeg2_decode_block_intra(MpegEncContext *s,
61                                     DCTELEM *block,
62                                     int n);
63 static inline int mpeg2_fast_decode_block_non_intra(MpegEncContext *s, DCTELEM *block, int n);
64 static inline int mpeg2_fast_decode_block_intra(MpegEncContext *s, DCTELEM *block, int n);
65 static int mpeg_decode_motion(MpegEncContext *s, int fcode, int pred);
66 static void exchange_uv(MpegEncContext *s);
67
68 extern int XVMC_field_start(MpegEncContext *s, AVCodecContext *avctx);
69 extern int XVMC_field_end(MpegEncContext *s);
70 extern void XVMC_pack_pblocks(MpegEncContext *s,int cbp);
71 extern void XVMC_init_block(MpegEncContext *s);//set s->block
72
73 static const enum PixelFormat pixfmt_yuv_420[]= {PIX_FMT_YUV420P,-1};
74 static const enum PixelFormat pixfmt_yuv_422[]= {PIX_FMT_YUV422P,-1};
75 static const enum PixelFormat pixfmt_yuv_444[]= {PIX_FMT_YUV444P,-1};
76 static const enum PixelFormat pixfmt_xvmc_mpg2_420[] = {
77                                            PIX_FMT_XVMC_MPEG2_IDCT,
78                                            PIX_FMT_XVMC_MPEG2_MC,
79                                            -1};
80
81 uint8_t ff_mpeg12_static_rl_table_store[2][2][2*MAX_RUN + MAX_LEVEL + 3];
82
83 static void init_2d_vlc_rl(RLTable *rl, int use_static)
84 {
85     int i;
86
87     init_vlc(&rl->vlc, TEX_VLC_BITS, rl->n + 2,
88              &rl->table_vlc[0][1], 4, 2,
89              &rl->table_vlc[0][0], 4, 2, use_static);
90
91     if(use_static)
92         rl->rl_vlc[0]= av_mallocz_static(rl->vlc.table_size*sizeof(RL_VLC_ELEM));
93     else
94         rl->rl_vlc[0]= av_malloc(rl->vlc.table_size*sizeof(RL_VLC_ELEM));
95
96     for(i=0; i<rl->vlc.table_size; i++){
97         int code= rl->vlc.table[i][0];
98         int len = rl->vlc.table[i][1];
99         int level, run;
100
101         if(len==0){ // illegal code
102             run= 65;
103             level= MAX_LEVEL;
104         }else if(len<0){ //more bits needed
105             run= 0;
106             level= code;
107         }else{
108             if(code==rl->n){ //esc
109                 run= 65;
110                 level= 0;
111             }else if(code==rl->n+1){ //eob
112                 run= 0;
113                 level= 127;
114             }else{
115                 run=   rl->table_run  [code] + 1;
116                 level= rl->table_level[code];
117             }
118         }
119         rl->rl_vlc[0][i].len= len;
120         rl->rl_vlc[0][i].level= level;
121         rl->rl_vlc[0][i].run= run;
122     }
123 }
124
125 void ff_mpeg12_common_init(MpegEncContext *s)
126 {
127
128     s->y_dc_scale_table=
129     s->c_dc_scale_table= mpeg2_dc_scale_table[s->intra_dc_precision];
130
131 }
132
133 void ff_mpeg1_clean_buffers(MpegEncContext *s){
134     s->last_dc[0] = 1 << (7 + s->intra_dc_precision);
135     s->last_dc[1] = s->last_dc[0];
136     s->last_dc[2] = s->last_dc[0];
137     memset(s->last_mv, 0, sizeof(s->last_mv));
138 }
139
140
141 /******************************************/
142 /* decoding */
143
144 static VLC dc_lum_vlc;
145 static VLC dc_chroma_vlc;
146 static VLC mv_vlc;
147 static VLC mbincr_vlc;
148 static VLC mb_ptype_vlc;
149 static VLC mb_btype_vlc;
150 static VLC mb_pat_vlc;
151
152 static void init_vlcs(void)
153 {
154     static int done = 0;
155
156     if (!done) {
157         done = 1;
158
159         init_vlc(&dc_lum_vlc, DC_VLC_BITS, 12,
160                  ff_mpeg12_vlc_dc_lum_bits, 1, 1,
161                  ff_mpeg12_vlc_dc_lum_code, 2, 2, 1);
162         init_vlc(&dc_chroma_vlc,  DC_VLC_BITS, 12,
163                  ff_mpeg12_vlc_dc_chroma_bits, 1, 1,
164                  ff_mpeg12_vlc_dc_chroma_code, 2, 2, 1);
165         init_vlc(&mv_vlc, MV_VLC_BITS, 17,
166                  &ff_mpeg12_mbMotionVectorTable[0][1], 2, 1,
167                  &ff_mpeg12_mbMotionVectorTable[0][0], 2, 1, 1);
168         init_vlc(&mbincr_vlc, MBINCR_VLC_BITS, 36,
169                  &ff_mpeg12_mbAddrIncrTable[0][1], 2, 1,
170                  &ff_mpeg12_mbAddrIncrTable[0][0], 2, 1, 1);
171         init_vlc(&mb_pat_vlc, MB_PAT_VLC_BITS, 64,
172                  &ff_mpeg12_mbPatTable[0][1], 2, 1,
173                  &ff_mpeg12_mbPatTable[0][0], 2, 1, 1);
174
175         init_vlc(&mb_ptype_vlc, MB_PTYPE_VLC_BITS, 7,
176                  &table_mb_ptype[0][1], 2, 1,
177                  &table_mb_ptype[0][0], 2, 1, 1);
178         init_vlc(&mb_btype_vlc, MB_BTYPE_VLC_BITS, 11,
179                  &table_mb_btype[0][1], 2, 1,
180                  &table_mb_btype[0][0], 2, 1, 1);
181         init_rl(&ff_rl_mpeg1, ff_mpeg12_static_rl_table_store[0]);
182         init_rl(&ff_rl_mpeg2, ff_mpeg12_static_rl_table_store[1]);
183
184         init_2d_vlc_rl(&ff_rl_mpeg1, 1);
185         init_2d_vlc_rl(&ff_rl_mpeg2, 1);
186     }
187 }
188
189 static inline int get_dmv(MpegEncContext *s)
190 {
191     if(get_bits1(&s->gb))
192         return 1 - (get_bits1(&s->gb) << 1);
193     else
194         return 0;
195 }
196
197 static inline int get_qscale(MpegEncContext *s)
198 {
199     int qscale = get_bits(&s->gb, 5);
200     if (s->q_scale_type) {
201         return non_linear_qscale[qscale];
202     } else {
203         return qscale << 1;
204     }
205 }
206
207 /* motion type (for mpeg2) */
208 #define MT_FIELD 1
209 #define MT_FRAME 2
210 #define MT_16X8  2
211 #define MT_DMV   3
212
213 static int mpeg_decode_mb(MpegEncContext *s,
214                           DCTELEM block[12][64])
215 {
216     int i, j, k, cbp, val, mb_type, motion_type;
217     const int mb_block_count = 4 + (1<< s->chroma_format);
218
219     dprintf(s->avctx, "decode_mb: x=%d y=%d\n", s->mb_x, s->mb_y);
220
221     assert(s->mb_skipped==0);
222
223     if (s->mb_skip_run-- != 0) {
224         if (s->pict_type == P_TYPE) {
225             s->mb_skipped = 1;
226             s->current_picture.mb_type[ s->mb_x + s->mb_y*s->mb_stride ]= MB_TYPE_SKIP | MB_TYPE_L0 | MB_TYPE_16x16;
227         } else {
228             int mb_type;
229
230             if(s->mb_x)
231                 mb_type= s->current_picture.mb_type[ s->mb_x + s->mb_y*s->mb_stride - 1];
232             else
233                 mb_type= s->current_picture.mb_type[ s->mb_width + (s->mb_y-1)*s->mb_stride - 1]; // FIXME not sure if this is allowed in mpeg at all,
234             if(IS_INTRA(mb_type))
235                 return -1;
236
237             s->current_picture.mb_type[ s->mb_x + s->mb_y*s->mb_stride ]=
238                 mb_type | MB_TYPE_SKIP;
239 //            assert(s->current_picture.mb_type[ s->mb_x + s->mb_y*s->mb_stride - 1]&(MB_TYPE_16x16|MB_TYPE_16x8));
240
241             if((s->mv[0][0][0]|s->mv[0][0][1]|s->mv[1][0][0]|s->mv[1][0][1])==0)
242                 s->mb_skipped = 1;
243         }
244
245         return 0;
246     }
247
248     switch(s->pict_type) {
249     default:
250     case I_TYPE:
251         if (get_bits1(&s->gb) == 0) {
252             if (get_bits1(&s->gb) == 0){
253                 av_log(s->avctx, AV_LOG_ERROR, "invalid mb type in I Frame at %d %d\n", s->mb_x, s->mb_y);
254                 return -1;
255             }
256             mb_type = MB_TYPE_QUANT | MB_TYPE_INTRA;
257         } else {
258             mb_type = MB_TYPE_INTRA;
259         }
260         break;
261     case P_TYPE:
262         mb_type = get_vlc2(&s->gb, mb_ptype_vlc.table, MB_PTYPE_VLC_BITS, 1);
263         if (mb_type < 0){
264             av_log(s->avctx, AV_LOG_ERROR, "invalid mb type in P Frame at %d %d\n", s->mb_x, s->mb_y);
265             return -1;
266         }
267         mb_type = ptype2mb_type[ mb_type ];
268         break;
269     case B_TYPE:
270         mb_type = get_vlc2(&s->gb, mb_btype_vlc.table, MB_BTYPE_VLC_BITS, 1);
271         if (mb_type < 0){
272             av_log(s->avctx, AV_LOG_ERROR, "invalid mb type in B Frame at %d %d\n", s->mb_x, s->mb_y);
273             return -1;
274         }
275         mb_type = btype2mb_type[ mb_type ];
276         break;
277     }
278     dprintf(s->avctx, "mb_type=%x\n", mb_type);
279 //    motion_type = 0; /* avoid warning */
280     if (IS_INTRA(mb_type)) {
281         s->dsp.clear_blocks(s->block[0]);
282
283         if(!s->chroma_y_shift){
284             s->dsp.clear_blocks(s->block[6]);
285         }
286
287         /* compute dct type */
288         if (s->picture_structure == PICT_FRAME && //FIXME add a interlaced_dct coded var?
289             !s->frame_pred_frame_dct) {
290             s->interlaced_dct = get_bits1(&s->gb);
291         }
292
293         if (IS_QUANT(mb_type))
294             s->qscale = get_qscale(s);
295
296         if (s->concealment_motion_vectors) {
297             /* just parse them */
298             if (s->picture_structure != PICT_FRAME)
299                 skip_bits1(&s->gb); /* field select */
300
301             s->mv[0][0][0]= s->last_mv[0][0][0]= s->last_mv[0][1][0] =
302                 mpeg_decode_motion(s, s->mpeg_f_code[0][0], s->last_mv[0][0][0]);
303             s->mv[0][0][1]= s->last_mv[0][0][1]= s->last_mv[0][1][1] =
304                 mpeg_decode_motion(s, s->mpeg_f_code[0][1], s->last_mv[0][0][1]);
305
306             skip_bits1(&s->gb); /* marker */
307         }else
308             memset(s->last_mv, 0, sizeof(s->last_mv)); /* reset mv prediction */
309         s->mb_intra = 1;
310 #ifdef HAVE_XVMC
311         //one 1 we memcpy blocks in xvmcvideo
312         if(s->avctx->xvmc_acceleration > 1){
313             XVMC_pack_pblocks(s,-1);//inter are always full blocks
314             if(s->swap_uv){
315                 exchange_uv(s);
316             }
317         }
318 #endif
319
320         if (s->codec_id == CODEC_ID_MPEG2VIDEO) {
321             if(s->flags2 & CODEC_FLAG2_FAST){
322                 for(i=0;i<6;i++) {
323                     mpeg2_fast_decode_block_intra(s, s->pblocks[i], i);
324                 }
325             }else{
326                 for(i=0;i<mb_block_count;i++) {
327                     if (mpeg2_decode_block_intra(s, s->pblocks[i], i) < 0)
328                         return -1;
329                 }
330             }
331         } else {
332             for(i=0;i<6;i++) {
333                 if (mpeg1_decode_block_intra(s, s->pblocks[i], i) < 0)
334                     return -1;
335             }
336         }
337     } else {
338         if (mb_type & MB_TYPE_ZERO_MV){
339             assert(mb_type & MB_TYPE_CBP);
340
341             s->mv_dir = MV_DIR_FORWARD;
342             if(s->picture_structure == PICT_FRAME){
343                 if(!s->frame_pred_frame_dct)
344                     s->interlaced_dct = get_bits1(&s->gb);
345                 s->mv_type = MV_TYPE_16X16;
346             }else{
347                 s->mv_type = MV_TYPE_FIELD;
348                 mb_type |= MB_TYPE_INTERLACED;
349                 s->field_select[0][0]= s->picture_structure - 1;
350             }
351
352             if (IS_QUANT(mb_type))
353                 s->qscale = get_qscale(s);
354
355             s->last_mv[0][0][0] = 0;
356             s->last_mv[0][0][1] = 0;
357             s->last_mv[0][1][0] = 0;
358             s->last_mv[0][1][1] = 0;
359             s->mv[0][0][0] = 0;
360             s->mv[0][0][1] = 0;
361         }else{
362             assert(mb_type & MB_TYPE_L0L1);
363 //FIXME decide if MBs in field pictures are MB_TYPE_INTERLACED
364             /* get additional motion vector type */
365             if (s->frame_pred_frame_dct)
366                 motion_type = MT_FRAME;
367             else{
368                 motion_type = get_bits(&s->gb, 2);
369                 if (s->picture_structure == PICT_FRAME && HAS_CBP(mb_type))
370                     s->interlaced_dct = get_bits1(&s->gb);
371             }
372
373             if (IS_QUANT(mb_type))
374                 s->qscale = get_qscale(s);
375
376             /* motion vectors */
377             s->mv_dir= (mb_type>>13)&3;
378             dprintf(s->avctx, "motion_type=%d\n", motion_type);
379             switch(motion_type) {
380             case MT_FRAME: /* or MT_16X8 */
381                 if (s->picture_structure == PICT_FRAME) {
382                     mb_type |= MB_TYPE_16x16;
383                     s->mv_type = MV_TYPE_16X16;
384                     for(i=0;i<2;i++) {
385                         if (USES_LIST(mb_type, i)) {
386                             /* MT_FRAME */
387                             s->mv[i][0][0]= s->last_mv[i][0][0]= s->last_mv[i][1][0] =
388                                 mpeg_decode_motion(s, s->mpeg_f_code[i][0], s->last_mv[i][0][0]);
389                             s->mv[i][0][1]= s->last_mv[i][0][1]= s->last_mv[i][1][1] =
390                                 mpeg_decode_motion(s, s->mpeg_f_code[i][1], s->last_mv[i][0][1]);
391                             /* full_pel: only for mpeg1 */
392                             if (s->full_pel[i]){
393                                 s->mv[i][0][0] <<= 1;
394                                 s->mv[i][0][1] <<= 1;
395                             }
396                         }
397                     }
398                 } else {
399                     mb_type |= MB_TYPE_16x8 | MB_TYPE_INTERLACED;
400                     s->mv_type = MV_TYPE_16X8;
401                     for(i=0;i<2;i++) {
402                         if (USES_LIST(mb_type, i)) {
403                             /* MT_16X8 */
404                             for(j=0;j<2;j++) {
405                                 s->field_select[i][j] = get_bits1(&s->gb);
406                                 for(k=0;k<2;k++) {
407                                     val = mpeg_decode_motion(s, s->mpeg_f_code[i][k],
408                                                              s->last_mv[i][j][k]);
409                                     s->last_mv[i][j][k] = val;
410                                     s->mv[i][j][k] = val;
411                                 }
412                             }
413                         }
414                     }
415                 }
416                 break;
417             case MT_FIELD:
418                 s->mv_type = MV_TYPE_FIELD;
419                 if (s->picture_structure == PICT_FRAME) {
420                     mb_type |= MB_TYPE_16x8 | MB_TYPE_INTERLACED;
421                     for(i=0;i<2;i++) {
422                         if (USES_LIST(mb_type, i)) {
423                             for(j=0;j<2;j++) {
424                                 s->field_select[i][j] = get_bits1(&s->gb);
425                                 val = mpeg_decode_motion(s, s->mpeg_f_code[i][0],
426                                                          s->last_mv[i][j][0]);
427                                 s->last_mv[i][j][0] = val;
428                                 s->mv[i][j][0] = val;
429                                 dprintf(s->avctx, "fmx=%d\n", val);
430                                 val = mpeg_decode_motion(s, s->mpeg_f_code[i][1],
431                                                          s->last_mv[i][j][1] >> 1);
432                                 s->last_mv[i][j][1] = val << 1;
433                                 s->mv[i][j][1] = val;
434                                 dprintf(s->avctx, "fmy=%d\n", val);
435                             }
436                         }
437                     }
438                 } else {
439                     mb_type |= MB_TYPE_16x16 | MB_TYPE_INTERLACED;
440                     for(i=0;i<2;i++) {
441                         if (USES_LIST(mb_type, i)) {
442                             s->field_select[i][0] = get_bits1(&s->gb);
443                             for(k=0;k<2;k++) {
444                                 val = mpeg_decode_motion(s, s->mpeg_f_code[i][k],
445                                                          s->last_mv[i][0][k]);
446                                 s->last_mv[i][0][k] = val;
447                                 s->last_mv[i][1][k] = val;
448                                 s->mv[i][0][k] = val;
449                             }
450                         }
451                     }
452                 }
453                 break;
454             case MT_DMV:
455                 s->mv_type = MV_TYPE_DMV;
456                 for(i=0;i<2;i++) {
457                     if (USES_LIST(mb_type, i)) {
458                         int dmx, dmy, mx, my, m;
459                         mx = mpeg_decode_motion(s, s->mpeg_f_code[i][0],
460                                                 s->last_mv[i][0][0]);
461                         s->last_mv[i][0][0] = mx;
462                         s->last_mv[i][1][0] = mx;
463                         dmx = get_dmv(s);
464                         my = mpeg_decode_motion(s, s->mpeg_f_code[i][1],
465                                                 s->last_mv[i][0][1] >> 1);
466                         dmy = get_dmv(s);
467
468
469                         s->last_mv[i][0][1] = my<<1;
470                         s->last_mv[i][1][1] = my<<1;
471
472                         s->mv[i][0][0] = mx;
473                         s->mv[i][0][1] = my;
474                         s->mv[i][1][0] = mx;//not used
475                         s->mv[i][1][1] = my;//not used
476
477                         if (s->picture_structure == PICT_FRAME) {
478                             mb_type |= MB_TYPE_16x16 | MB_TYPE_INTERLACED;
479
480                             //m = 1 + 2 * s->top_field_first;
481                             m = s->top_field_first ? 1 : 3;
482
483                             /* top -> top pred */
484                             s->mv[i][2][0] = ((mx * m + (mx > 0)) >> 1) + dmx;
485                             s->mv[i][2][1] = ((my * m + (my > 0)) >> 1) + dmy - 1;
486                             m = 4 - m;
487                             s->mv[i][3][0] = ((mx * m + (mx > 0)) >> 1) + dmx;
488                             s->mv[i][3][1] = ((my * m + (my > 0)) >> 1) + dmy + 1;
489                         } else {
490                             mb_type |= MB_TYPE_16x16;
491
492                             s->mv[i][2][0] = ((mx + (mx > 0)) >> 1) + dmx;
493                             s->mv[i][2][1] = ((my + (my > 0)) >> 1) + dmy;
494                             if(s->picture_structure == PICT_TOP_FIELD)
495                                 s->mv[i][2][1]--;
496                             else
497                                 s->mv[i][2][1]++;
498                         }
499                     }
500                 }
501                 break;
502             default:
503                 av_log(s->avctx, AV_LOG_ERROR, "00 motion_type at %d %d\n", s->mb_x, s->mb_y);
504                 return -1;
505             }
506         }
507
508         s->mb_intra = 0;
509         if (HAS_CBP(mb_type)) {
510             s->dsp.clear_blocks(s->block[0]);
511
512             cbp = get_vlc2(&s->gb, mb_pat_vlc.table, MB_PAT_VLC_BITS, 1);
513             if(mb_block_count > 6){
514                  cbp<<= mb_block_count-6;
515                  cbp |= get_bits(&s->gb, mb_block_count-6);
516                  s->dsp.clear_blocks(s->block[6]);
517             }
518             if (cbp <= 0){
519                 av_log(s->avctx, AV_LOG_ERROR, "invalid cbp at %d %d\n", s->mb_x, s->mb_y);
520                 return -1;
521             }
522
523 #ifdef HAVE_XVMC
524             //on 1 we memcpy blocks in xvmcvideo
525             if(s->avctx->xvmc_acceleration > 1){
526                 XVMC_pack_pblocks(s,cbp);
527                 if(s->swap_uv){
528                     exchange_uv(s);
529                 }
530             }
531 #endif
532
533             if (s->codec_id == CODEC_ID_MPEG2VIDEO) {
534                 if(s->flags2 & CODEC_FLAG2_FAST){
535                     for(i=0;i<6;i++) {
536                         if(cbp & 32) {
537                             mpeg2_fast_decode_block_non_intra(s, s->pblocks[i], i);
538                         } else {
539                             s->block_last_index[i] = -1;
540                         }
541                         cbp+=cbp;
542                     }
543                 }else{
544                     cbp<<= 12-mb_block_count;
545
546                     for(i=0;i<mb_block_count;i++) {
547                         if ( cbp & (1<<11) ) {
548                             if (mpeg2_decode_block_non_intra(s, s->pblocks[i], i) < 0)
549                                 return -1;
550                         } else {
551                             s->block_last_index[i] = -1;
552                         }
553                         cbp+=cbp;
554                     }
555                 }
556             } else {
557                 if(s->flags2 & CODEC_FLAG2_FAST){
558                     for(i=0;i<6;i++) {
559                         if (cbp & 32) {
560                             mpeg1_fast_decode_block_inter(s, s->pblocks[i], i);
561                         } else {
562                             s->block_last_index[i] = -1;
563                         }
564                         cbp+=cbp;
565                     }
566                 }else{
567                     for(i=0;i<6;i++) {
568                         if (cbp & 32) {
569                             if (mpeg1_decode_block_inter(s, s->pblocks[i], i) < 0)
570                                 return -1;
571                         } else {
572                             s->block_last_index[i] = -1;
573                         }
574                         cbp+=cbp;
575                     }
576                 }
577             }
578         }else{
579             for(i=0;i<12;i++)
580                 s->block_last_index[i] = -1;
581         }
582     }
583
584     s->current_picture.mb_type[ s->mb_x + s->mb_y*s->mb_stride ]= mb_type;
585
586     return 0;
587 }
588
589 /* as h263, but only 17 codes */
590 static int mpeg_decode_motion(MpegEncContext *s, int fcode, int pred)
591 {
592     int code, sign, val, l, shift;
593
594     code = get_vlc2(&s->gb, mv_vlc.table, MV_VLC_BITS, 2);
595     if (code == 0) {
596         return pred;
597     }
598     if (code < 0) {
599         return 0xffff;
600     }
601
602     sign = get_bits1(&s->gb);
603     shift = fcode - 1;
604     val = code;
605     if (shift) {
606         val = (val - 1) << shift;
607         val |= get_bits(&s->gb, shift);
608         val++;
609     }
610     if (sign)
611         val = -val;
612     val += pred;
613
614     /* modulo decoding */
615     l= INT_BIT - 5 - shift;
616     val = (val<<l)>>l;
617     return val;
618 }
619
620 static inline int decode_dc(GetBitContext *gb, int component)
621 {
622     int code, diff;
623
624     if (component == 0) {
625         code = get_vlc2(gb, dc_lum_vlc.table, DC_VLC_BITS, 2);
626     } else {
627         code = get_vlc2(gb, dc_chroma_vlc.table, DC_VLC_BITS, 2);
628     }
629     if (code < 0){
630         av_log(NULL, AV_LOG_ERROR, "invalid dc code at\n");
631         return 0xffff;
632     }
633     if (code == 0) {
634         diff = 0;
635     } else {
636         diff = get_xbits(gb, code);
637     }
638     return diff;
639 }
640
641 static inline int mpeg1_decode_block_intra(MpegEncContext *s,
642                                DCTELEM *block,
643                                int n)
644 {
645     int level, dc, diff, i, j, run;
646     int component;
647     RLTable *rl = &ff_rl_mpeg1;
648     uint8_t * const scantable= s->intra_scantable.permutated;
649     const uint16_t *quant_matrix= s->intra_matrix;
650     const int qscale= s->qscale;
651
652     /* DC coef */
653     component = (n <= 3 ? 0 : n - 4 + 1);
654     diff = decode_dc(&s->gb, component);
655     if (diff >= 0xffff)
656         return -1;
657     dc = s->last_dc[component];
658     dc += diff;
659     s->last_dc[component] = dc;
660     block[0] = dc<<3;
661     dprintf(s->avctx, "dc=%d diff=%d\n", dc, diff);
662     i = 0;
663     {
664         OPEN_READER(re, &s->gb);
665         /* now quantify & encode AC coefs */
666         for(;;) {
667             UPDATE_CACHE(re, &s->gb);
668             GET_RL_VLC(level, run, re, &s->gb, rl->rl_vlc[0], TEX_VLC_BITS, 2, 0);
669
670             if(level == 127){
671                 break;
672             } else if(level != 0) {
673                 i += run;
674                 j = scantable[i];
675                 level= (level*qscale*quant_matrix[j])>>4;
676                 level= (level-1)|1;
677                 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
678                 LAST_SKIP_BITS(re, &s->gb, 1);
679             } else {
680                 /* escape */
681                 run = SHOW_UBITS(re, &s->gb, 6)+1; LAST_SKIP_BITS(re, &s->gb, 6);
682                 UPDATE_CACHE(re, &s->gb);
683                 level = SHOW_SBITS(re, &s->gb, 8); SKIP_BITS(re, &s->gb, 8);
684                 if (level == -128) {
685                     level = SHOW_UBITS(re, &s->gb, 8) - 256; LAST_SKIP_BITS(re, &s->gb, 8);
686                 } else if (level == 0) {
687                     level = SHOW_UBITS(re, &s->gb, 8)      ; LAST_SKIP_BITS(re, &s->gb, 8);
688                 }
689                 i += run;
690                 j = scantable[i];
691                 if(level<0){
692                     level= -level;
693                     level= (level*qscale*quant_matrix[j])>>4;
694                     level= (level-1)|1;
695                     level= -level;
696                 }else{
697                     level= (level*qscale*quant_matrix[j])>>4;
698                     level= (level-1)|1;
699                 }
700             }
701             if (i > 63){
702                 av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
703                 return -1;
704             }
705
706             block[j] = level;
707         }
708         CLOSE_READER(re, &s->gb);
709     }
710     s->block_last_index[n] = i;
711    return 0;
712 }
713
714 static inline int mpeg1_decode_block_inter(MpegEncContext *s,
715                                DCTELEM *block,
716                                int n)
717 {
718     int level, i, j, run;
719     RLTable *rl = &ff_rl_mpeg1;
720     uint8_t * const scantable= s->intra_scantable.permutated;
721     const uint16_t *quant_matrix= s->inter_matrix;
722     const int qscale= s->qscale;
723
724     {
725         OPEN_READER(re, &s->gb);
726         i = -1;
727         /* special case for the first coef. no need to add a second vlc table */
728         UPDATE_CACHE(re, &s->gb);
729         if (((int32_t)GET_CACHE(re, &s->gb)) < 0) {
730             level= (3*qscale*quant_matrix[0])>>5;
731             level= (level-1)|1;
732             if(GET_CACHE(re, &s->gb)&0x40000000)
733                 level= -level;
734             block[0] = level;
735             i++;
736             SKIP_BITS(re, &s->gb, 2);
737             if(((int32_t)GET_CACHE(re, &s->gb)) <= (int32_t)0xBFFFFFFF)
738                 goto end;
739         }
740
741         /* now quantify & encode AC coefs */
742         for(;;) {
743             GET_RL_VLC(level, run, re, &s->gb, rl->rl_vlc[0], TEX_VLC_BITS, 2, 0);
744
745             if(level != 0) {
746                 i += run;
747                 j = scantable[i];
748                 level= ((level*2+1)*qscale*quant_matrix[j])>>5;
749                 level= (level-1)|1;
750                 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
751                 SKIP_BITS(re, &s->gb, 1);
752             } else {
753                 /* escape */
754                 run = SHOW_UBITS(re, &s->gb, 6)+1; LAST_SKIP_BITS(re, &s->gb, 6);
755                 UPDATE_CACHE(re, &s->gb);
756                 level = SHOW_SBITS(re, &s->gb, 8); SKIP_BITS(re, &s->gb, 8);
757                 if (level == -128) {
758                     level = SHOW_UBITS(re, &s->gb, 8) - 256; SKIP_BITS(re, &s->gb, 8);
759                 } else if (level == 0) {
760                     level = SHOW_UBITS(re, &s->gb, 8)      ; SKIP_BITS(re, &s->gb, 8);
761                 }
762                 i += run;
763                 j = scantable[i];
764                 if(level<0){
765                     level= -level;
766                     level= ((level*2+1)*qscale*quant_matrix[j])>>5;
767                     level= (level-1)|1;
768                     level= -level;
769                 }else{
770                     level= ((level*2+1)*qscale*quant_matrix[j])>>5;
771                     level= (level-1)|1;
772                 }
773             }
774             if (i > 63){
775                 av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
776                 return -1;
777             }
778
779             block[j] = level;
780             if(((int32_t)GET_CACHE(re, &s->gb)) <= (int32_t)0xBFFFFFFF)
781                 break;
782             UPDATE_CACHE(re, &s->gb);
783         }
784 end:
785         LAST_SKIP_BITS(re, &s->gb, 2);
786         CLOSE_READER(re, &s->gb);
787     }
788     s->block_last_index[n] = i;
789     return 0;
790 }
791
792 static inline int mpeg1_fast_decode_block_inter(MpegEncContext *s, DCTELEM *block, int n)
793 {
794     int level, i, j, run;
795     RLTable *rl = &ff_rl_mpeg1;
796     uint8_t * const scantable= s->intra_scantable.permutated;
797     const int qscale= s->qscale;
798
799     {
800         OPEN_READER(re, &s->gb);
801         i = -1;
802         /* special case for the first coef. no need to add a second vlc table */
803         UPDATE_CACHE(re, &s->gb);
804         if (((int32_t)GET_CACHE(re, &s->gb)) < 0) {
805             level= (3*qscale)>>1;
806             level= (level-1)|1;
807             if(GET_CACHE(re, &s->gb)&0x40000000)
808                 level= -level;
809             block[0] = level;
810             i++;
811             SKIP_BITS(re, &s->gb, 2);
812             if(((int32_t)GET_CACHE(re, &s->gb)) <= (int32_t)0xBFFFFFFF)
813                 goto end;
814         }
815
816         /* now quantify & encode AC coefs */
817         for(;;) {
818             GET_RL_VLC(level, run, re, &s->gb, rl->rl_vlc[0], TEX_VLC_BITS, 2, 0);
819
820             if(level != 0) {
821                 i += run;
822                 j = scantable[i];
823                 level= ((level*2+1)*qscale)>>1;
824                 level= (level-1)|1;
825                 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
826                 SKIP_BITS(re, &s->gb, 1);
827             } else {
828                 /* escape */
829                 run = SHOW_UBITS(re, &s->gb, 6)+1; LAST_SKIP_BITS(re, &s->gb, 6);
830                 UPDATE_CACHE(re, &s->gb);
831                 level = SHOW_SBITS(re, &s->gb, 8); SKIP_BITS(re, &s->gb, 8);
832                 if (level == -128) {
833                     level = SHOW_UBITS(re, &s->gb, 8) - 256; SKIP_BITS(re, &s->gb, 8);
834                 } else if (level == 0) {
835                     level = SHOW_UBITS(re, &s->gb, 8)      ; SKIP_BITS(re, &s->gb, 8);
836                 }
837                 i += run;
838                 j = scantable[i];
839                 if(level<0){
840                     level= -level;
841                     level= ((level*2+1)*qscale)>>1;
842                     level= (level-1)|1;
843                     level= -level;
844                 }else{
845                     level= ((level*2+1)*qscale)>>1;
846                     level= (level-1)|1;
847                 }
848             }
849
850             block[j] = level;
851             if(((int32_t)GET_CACHE(re, &s->gb)) <= (int32_t)0xBFFFFFFF)
852                 break;
853             UPDATE_CACHE(re, &s->gb);
854         }
855 end:
856         LAST_SKIP_BITS(re, &s->gb, 2);
857         CLOSE_READER(re, &s->gb);
858     }
859     s->block_last_index[n] = i;
860     return 0;
861 }
862
863
864 static inline int mpeg2_decode_block_non_intra(MpegEncContext *s,
865                                DCTELEM *block,
866                                int n)
867 {
868     int level, i, j, run;
869     RLTable *rl = &ff_rl_mpeg1;
870     uint8_t * const scantable= s->intra_scantable.permutated;
871     const uint16_t *quant_matrix;
872     const int qscale= s->qscale;
873     int mismatch;
874
875     mismatch = 1;
876
877     {
878         OPEN_READER(re, &s->gb);
879         i = -1;
880         if (n < 4)
881             quant_matrix = s->inter_matrix;
882         else
883             quant_matrix = s->chroma_inter_matrix;
884
885         /* special case for the first coef. no need to add a second vlc table */
886         UPDATE_CACHE(re, &s->gb);
887         if (((int32_t)GET_CACHE(re, &s->gb)) < 0) {
888             level= (3*qscale*quant_matrix[0])>>5;
889             if(GET_CACHE(re, &s->gb)&0x40000000)
890                 level= -level;
891             block[0] = level;
892             mismatch ^= level;
893             i++;
894             SKIP_BITS(re, &s->gb, 2);
895             if(((int32_t)GET_CACHE(re, &s->gb)) <= (int32_t)0xBFFFFFFF)
896                 goto end;
897         }
898
899         /* now quantify & encode AC coefs */
900         for(;;) {
901             GET_RL_VLC(level, run, re, &s->gb, rl->rl_vlc[0], TEX_VLC_BITS, 2, 0);
902
903             if(level != 0) {
904                 i += run;
905                 j = scantable[i];
906                 level= ((level*2+1)*qscale*quant_matrix[j])>>5;
907                 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
908                 SKIP_BITS(re, &s->gb, 1);
909             } else {
910                 /* escape */
911                 run = SHOW_UBITS(re, &s->gb, 6)+1; LAST_SKIP_BITS(re, &s->gb, 6);
912                 UPDATE_CACHE(re, &s->gb);
913                 level = SHOW_SBITS(re, &s->gb, 12); SKIP_BITS(re, &s->gb, 12);
914
915                 i += run;
916                 j = scantable[i];
917                 if(level<0){
918                     level= ((-level*2+1)*qscale*quant_matrix[j])>>5;
919                     level= -level;
920                 }else{
921                     level= ((level*2+1)*qscale*quant_matrix[j])>>5;
922                 }
923             }
924             if (i > 63){
925                 av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
926                 return -1;
927             }
928
929             mismatch ^= level;
930             block[j] = level;
931             if(((int32_t)GET_CACHE(re, &s->gb)) <= (int32_t)0xBFFFFFFF)
932                 break;
933             UPDATE_CACHE(re, &s->gb);
934         }
935 end:
936         LAST_SKIP_BITS(re, &s->gb, 2);
937         CLOSE_READER(re, &s->gb);
938     }
939     block[63] ^= (mismatch & 1);
940
941     s->block_last_index[n] = i;
942     return 0;
943 }
944
945 static inline int mpeg2_fast_decode_block_non_intra(MpegEncContext *s,
946                                DCTELEM *block,
947                                int n)
948 {
949     int level, i, j, run;
950     RLTable *rl = &ff_rl_mpeg1;
951     uint8_t * const scantable= s->intra_scantable.permutated;
952     const int qscale= s->qscale;
953     OPEN_READER(re, &s->gb);
954     i = -1;
955
956     /* special case for the first coef. no need to add a second vlc table */
957     UPDATE_CACHE(re, &s->gb);
958     if (((int32_t)GET_CACHE(re, &s->gb)) < 0) {
959         level= (3*qscale)>>1;
960         if(GET_CACHE(re, &s->gb)&0x40000000)
961             level= -level;
962         block[0] = level;
963         i++;
964         SKIP_BITS(re, &s->gb, 2);
965         if(((int32_t)GET_CACHE(re, &s->gb)) <= (int32_t)0xBFFFFFFF)
966             goto end;
967     }
968
969     /* now quantify & encode AC coefs */
970     for(;;) {
971         GET_RL_VLC(level, run, re, &s->gb, rl->rl_vlc[0], TEX_VLC_BITS, 2, 0);
972
973         if(level != 0) {
974             i += run;
975             j = scantable[i];
976             level= ((level*2+1)*qscale)>>1;
977             level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
978             SKIP_BITS(re, &s->gb, 1);
979         } else {
980             /* escape */
981             run = SHOW_UBITS(re, &s->gb, 6)+1; LAST_SKIP_BITS(re, &s->gb, 6);
982             UPDATE_CACHE(re, &s->gb);
983             level = SHOW_SBITS(re, &s->gb, 12); SKIP_BITS(re, &s->gb, 12);
984
985             i += run;
986             j = scantable[i];
987             if(level<0){
988                 level= ((-level*2+1)*qscale)>>1;
989                 level= -level;
990             }else{
991                 level= ((level*2+1)*qscale)>>1;
992             }
993         }
994
995         block[j] = level;
996         if(((int32_t)GET_CACHE(re, &s->gb)) <= (int32_t)0xBFFFFFFF)
997             break;
998         UPDATE_CACHE(re, &s->gb);
999     }
1000 end:
1001     LAST_SKIP_BITS(re, &s->gb, 2);
1002     CLOSE_READER(re, &s->gb);
1003     s->block_last_index[n] = i;
1004     return 0;
1005 }
1006
1007
1008 static inline int mpeg2_decode_block_intra(MpegEncContext *s,
1009                                DCTELEM *block,
1010                                int n)
1011 {
1012     int level, dc, diff, i, j, run;
1013     int component;
1014     RLTable *rl;
1015     uint8_t * const scantable= s->intra_scantable.permutated;
1016     const uint16_t *quant_matrix;
1017     const int qscale= s->qscale;
1018     int mismatch;
1019
1020     /* DC coef */
1021     if (n < 4){
1022         quant_matrix = s->intra_matrix;
1023         component = 0;
1024     }else{
1025         quant_matrix = s->chroma_intra_matrix;
1026         component = (n&1) + 1;
1027     }
1028     diff = decode_dc(&s->gb, component);
1029     if (diff >= 0xffff)
1030         return -1;
1031     dc = s->last_dc[component];
1032     dc += diff;
1033     s->last_dc[component] = dc;
1034     block[0] = dc << (3 - s->intra_dc_precision);
1035     dprintf(s->avctx, "dc=%d\n", block[0]);
1036     mismatch = block[0] ^ 1;
1037     i = 0;
1038     if (s->intra_vlc_format)
1039         rl = &ff_rl_mpeg2;
1040     else
1041         rl = &ff_rl_mpeg1;
1042
1043     {
1044         OPEN_READER(re, &s->gb);
1045         /* now quantify & encode AC coefs */
1046         for(;;) {
1047             UPDATE_CACHE(re, &s->gb);
1048             GET_RL_VLC(level, run, re, &s->gb, rl->rl_vlc[0], TEX_VLC_BITS, 2, 0);
1049
1050             if(level == 127){
1051                 break;
1052             } else if(level != 0) {
1053                 i += run;
1054                 j = scantable[i];
1055                 level= (level*qscale*quant_matrix[j])>>4;
1056                 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
1057                 LAST_SKIP_BITS(re, &s->gb, 1);
1058             } else {
1059                 /* escape */
1060                 run = SHOW_UBITS(re, &s->gb, 6)+1; LAST_SKIP_BITS(re, &s->gb, 6);
1061                 UPDATE_CACHE(re, &s->gb);
1062                 level = SHOW_SBITS(re, &s->gb, 12); SKIP_BITS(re, &s->gb, 12);
1063                 i += run;
1064                 j = scantable[i];
1065                 if(level<0){
1066                     level= (-level*qscale*quant_matrix[j])>>4;
1067                     level= -level;
1068                 }else{
1069                     level= (level*qscale*quant_matrix[j])>>4;
1070                 }
1071             }
1072             if (i > 63){
1073                 av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
1074                 return -1;
1075             }
1076
1077             mismatch^= level;
1078             block[j] = level;
1079         }
1080         CLOSE_READER(re, &s->gb);
1081     }
1082     block[63]^= mismatch&1;
1083
1084     s->block_last_index[n] = i;
1085     return 0;
1086 }
1087
1088 static inline int mpeg2_fast_decode_block_intra(MpegEncContext *s,
1089                                DCTELEM *block,
1090                                int n)
1091 {
1092     int level, dc, diff, j, run;
1093     int component;
1094     RLTable *rl;
1095     uint8_t * scantable= s->intra_scantable.permutated;
1096     const uint16_t *quant_matrix;
1097     const int qscale= s->qscale;
1098
1099     /* DC coef */
1100     if (n < 4){
1101         quant_matrix = s->intra_matrix;
1102         component = 0;
1103     }else{
1104         quant_matrix = s->chroma_intra_matrix;
1105         component = (n&1) + 1;
1106     }
1107     diff = decode_dc(&s->gb, component);
1108     if (diff >= 0xffff)
1109         return -1;
1110     dc = s->last_dc[component];
1111     dc += diff;
1112     s->last_dc[component] = dc;
1113     block[0] = dc << (3 - s->intra_dc_precision);
1114     if (s->intra_vlc_format)
1115         rl = &ff_rl_mpeg2;
1116     else
1117         rl = &ff_rl_mpeg1;
1118
1119     {
1120         OPEN_READER(re, &s->gb);
1121         /* now quantify & encode AC coefs */
1122         for(;;) {
1123             UPDATE_CACHE(re, &s->gb);
1124             GET_RL_VLC(level, run, re, &s->gb, rl->rl_vlc[0], TEX_VLC_BITS, 2, 0);
1125
1126             if(level == 127){
1127                 break;
1128             } else if(level != 0) {
1129                 scantable += run;
1130                 j = *scantable;
1131                 level= (level*qscale*quant_matrix[j])>>4;
1132                 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
1133                 LAST_SKIP_BITS(re, &s->gb, 1);
1134             } else {
1135                 /* escape */
1136                 run = SHOW_UBITS(re, &s->gb, 6)+1; LAST_SKIP_BITS(re, &s->gb, 6);
1137                 UPDATE_CACHE(re, &s->gb);
1138                 level = SHOW_SBITS(re, &s->gb, 12); SKIP_BITS(re, &s->gb, 12);
1139                 scantable += run;
1140                 j = *scantable;
1141                 if(level<0){
1142                     level= (-level*qscale*quant_matrix[j])>>4;
1143                     level= -level;
1144                 }else{
1145                     level= (level*qscale*quant_matrix[j])>>4;
1146                 }
1147             }
1148
1149             block[j] = level;
1150         }
1151         CLOSE_READER(re, &s->gb);
1152     }
1153
1154     s->block_last_index[n] = scantable - s->intra_scantable.permutated;
1155     return 0;
1156 }
1157
1158 typedef struct Mpeg1Context {
1159     MpegEncContext mpeg_enc_ctx;
1160     int mpeg_enc_ctx_allocated; /* true if decoding context allocated */
1161     int repeat_field; /* true if we must repeat the field */
1162     AVPanScan pan_scan; /** some temporary storage for the panscan */
1163     int slice_count;
1164     int swap_uv;//indicate VCR2
1165     int save_aspect_info;
1166     int save_width, save_height;
1167     AVRational frame_rate_ext;       ///< MPEG-2 specific framerate modificator
1168
1169 } Mpeg1Context;
1170
1171 static int mpeg_decode_init(AVCodecContext *avctx)
1172 {
1173     Mpeg1Context *s = avctx->priv_data;
1174     MpegEncContext *s2 = &s->mpeg_enc_ctx;
1175     int i;
1176
1177     //we need some parmutation to store
1178     //matrixes, until MPV_common_init()
1179     //set the real permutatuon
1180     for(i=0;i<64;i++)
1181        s2->dsp.idct_permutation[i]=i;
1182
1183     MPV_decode_defaults(s2);
1184
1185     s->mpeg_enc_ctx.avctx= avctx;
1186     s->mpeg_enc_ctx.flags= avctx->flags;
1187     s->mpeg_enc_ctx.flags2= avctx->flags2;
1188     ff_mpeg12_common_init(&s->mpeg_enc_ctx);
1189     init_vlcs();
1190
1191     s->mpeg_enc_ctx_allocated = 0;
1192     s->mpeg_enc_ctx.picture_number = 0;
1193     s->repeat_field = 0;
1194     s->mpeg_enc_ctx.codec_id= avctx->codec->id;
1195     return 0;
1196 }
1197
1198 static void quant_matrix_rebuild(uint16_t *matrix, const uint8_t *old_perm,
1199                                      const uint8_t *new_perm){
1200     uint16_t temp_matrix[64];
1201     int i;
1202
1203     memcpy(temp_matrix,matrix,64*sizeof(uint16_t));
1204
1205     for(i=0;i<64;i++){
1206         matrix[new_perm[i]] = temp_matrix[old_perm[i]];
1207     }
1208 }
1209
1210 //Call this function when we know all parameters
1211 //it may be called in different places for mpeg1 and mpeg2
1212 static int mpeg_decode_postinit(AVCodecContext *avctx){
1213     Mpeg1Context *s1 = avctx->priv_data;
1214     MpegEncContext *s = &s1->mpeg_enc_ctx;
1215     uint8_t old_permutation[64];
1216
1217     if (
1218         (s1->mpeg_enc_ctx_allocated == 0)||
1219         avctx->coded_width  != s->width ||
1220         avctx->coded_height != s->height||
1221         s1->save_width != s->width ||
1222         s1->save_height != s->height ||
1223         s1->save_aspect_info != s->aspect_ratio_info||
1224         0)
1225     {
1226
1227         if (s1->mpeg_enc_ctx_allocated) {
1228             ParseContext pc= s->parse_context;
1229             s->parse_context.buffer=0;
1230             MPV_common_end(s);
1231             s->parse_context= pc;
1232         }
1233
1234         if( (s->width == 0 )||(s->height == 0))
1235             return -2;
1236
1237         avcodec_set_dimensions(avctx, s->width, s->height);
1238         avctx->bit_rate = s->bit_rate;
1239         s1->save_aspect_info = s->aspect_ratio_info;
1240         s1->save_width = s->width;
1241         s1->save_height = s->height;
1242
1243      //low_delay may be forced, in this case we will have B frames
1244      //that behave like P frames
1245         avctx->has_b_frames = !(s->low_delay);
1246
1247         if(avctx->sub_id==1){//s->codec_id==avctx->codec_id==CODEC_ID
1248             //mpeg1 fps
1249             avctx->time_base.den= ff_frame_rate_tab[s->frame_rate_index].num;
1250             avctx->time_base.num= ff_frame_rate_tab[s->frame_rate_index].den;
1251             //mpeg1 aspect
1252             avctx->sample_aspect_ratio= av_d2q(
1253                     1.0/ff_mpeg1_aspect[s->aspect_ratio_info], 255);
1254
1255         }else{//mpeg2
1256         //mpeg2 fps
1257             av_reduce(
1258                 &s->avctx->time_base.den,
1259                 &s->avctx->time_base.num,
1260                 ff_frame_rate_tab[s->frame_rate_index].num * s1->frame_rate_ext.num,
1261                 ff_frame_rate_tab[s->frame_rate_index].den * s1->frame_rate_ext.den,
1262                 1<<30);
1263         //mpeg2 aspect
1264             if(s->aspect_ratio_info > 1){
1265                 if( (s1->pan_scan.width == 0 )||(s1->pan_scan.height == 0) ){
1266                     s->avctx->sample_aspect_ratio=
1267                         av_div_q(
1268                          ff_mpeg2_aspect[s->aspect_ratio_info],
1269                          (AVRational){s->width, s->height}
1270                          );
1271                 }else{
1272                     s->avctx->sample_aspect_ratio=
1273                         av_div_q(
1274                          ff_mpeg2_aspect[s->aspect_ratio_info],
1275                          (AVRational){s1->pan_scan.width, s1->pan_scan.height}
1276                         );
1277                 }
1278             }else{
1279                 s->avctx->sample_aspect_ratio=
1280                     ff_mpeg2_aspect[s->aspect_ratio_info];
1281             }
1282         }//mpeg2
1283
1284         if(avctx->xvmc_acceleration){
1285             avctx->pix_fmt = avctx->get_format(avctx,pixfmt_xvmc_mpg2_420);
1286         }else{
1287             if(s->chroma_format <  2){
1288                 avctx->pix_fmt = avctx->get_format(avctx,pixfmt_yuv_420);
1289             }else
1290             if(s->chroma_format == 2){
1291                 avctx->pix_fmt = avctx->get_format(avctx,pixfmt_yuv_422);
1292             }else
1293             if(s->chroma_format >  2){
1294                 avctx->pix_fmt = avctx->get_format(avctx,pixfmt_yuv_444);
1295             }
1296         }
1297         //until then pix_fmt may be changed right after codec init
1298         if( avctx->pix_fmt == PIX_FMT_XVMC_MPEG2_IDCT )
1299             if( avctx->idct_algo == FF_IDCT_AUTO )
1300                 avctx->idct_algo = FF_IDCT_SIMPLE;
1301
1302         //quantization matrixes may need reordering
1303         //if dct permutation is changed
1304         memcpy(old_permutation,s->dsp.idct_permutation,64*sizeof(uint8_t));
1305
1306         if (MPV_common_init(s) < 0)
1307             return -2;
1308
1309         quant_matrix_rebuild(s->intra_matrix,       old_permutation,s->dsp.idct_permutation);
1310         quant_matrix_rebuild(s->inter_matrix,       old_permutation,s->dsp.idct_permutation);
1311         quant_matrix_rebuild(s->chroma_intra_matrix,old_permutation,s->dsp.idct_permutation);
1312         quant_matrix_rebuild(s->chroma_inter_matrix,old_permutation,s->dsp.idct_permutation);
1313
1314         s1->mpeg_enc_ctx_allocated = 1;
1315     }
1316     return 0;
1317 }
1318
1319 static int mpeg1_decode_picture(AVCodecContext *avctx,
1320                                 const uint8_t *buf, int buf_size)
1321 {
1322     Mpeg1Context *s1 = avctx->priv_data;
1323     MpegEncContext *s = &s1->mpeg_enc_ctx;
1324     int ref, f_code, vbv_delay;
1325
1326     if(mpeg_decode_postinit(s->avctx) < 0)
1327        return -2;
1328
1329     init_get_bits(&s->gb, buf, buf_size*8);
1330
1331     ref = get_bits(&s->gb, 10); /* temporal ref */
1332     s->pict_type = get_bits(&s->gb, 3);
1333     if(s->pict_type == 0 || s->pict_type > 3)
1334         return -1;
1335
1336     vbv_delay= get_bits(&s->gb, 16);
1337     if (s->pict_type == P_TYPE || s->pict_type == B_TYPE) {
1338         s->full_pel[0] = get_bits1(&s->gb);
1339         f_code = get_bits(&s->gb, 3);
1340         if (f_code == 0 && avctx->error_resilience >= FF_ER_COMPLIANT)
1341             return -1;
1342         s->mpeg_f_code[0][0] = f_code;
1343         s->mpeg_f_code[0][1] = f_code;
1344     }
1345     if (s->pict_type == B_TYPE) {
1346         s->full_pel[1] = get_bits1(&s->gb);
1347         f_code = get_bits(&s->gb, 3);
1348         if (f_code == 0 && avctx->error_resilience >= FF_ER_COMPLIANT)
1349             return -1;
1350         s->mpeg_f_code[1][0] = f_code;
1351         s->mpeg_f_code[1][1] = f_code;
1352     }
1353     s->current_picture.pict_type= s->pict_type;
1354     s->current_picture.key_frame= s->pict_type == I_TYPE;
1355
1356     if(avctx->debug & FF_DEBUG_PICT_INFO)
1357         av_log(avctx, AV_LOG_DEBUG, "vbv_delay %d, ref %d type:%d\n", vbv_delay, ref, s->pict_type);
1358
1359     s->y_dc_scale = 8;
1360     s->c_dc_scale = 8;
1361     s->first_slice = 1;
1362     return 0;
1363 }
1364
1365 static void mpeg_decode_sequence_extension(Mpeg1Context *s1)
1366 {
1367     MpegEncContext *s= &s1->mpeg_enc_ctx;
1368     int horiz_size_ext, vert_size_ext;
1369     int bit_rate_ext;
1370
1371     skip_bits(&s->gb, 1); /* profil and level esc*/
1372     s->avctx->profile= get_bits(&s->gb, 3);
1373     s->avctx->level= get_bits(&s->gb, 4);
1374     s->progressive_sequence = get_bits1(&s->gb); /* progressive_sequence */
1375     s->chroma_format = get_bits(&s->gb, 2); /* chroma_format 1=420, 2=422, 3=444 */
1376     horiz_size_ext = get_bits(&s->gb, 2);
1377     vert_size_ext = get_bits(&s->gb, 2);
1378     s->width |= (horiz_size_ext << 12);
1379     s->height |= (vert_size_ext << 12);
1380     bit_rate_ext = get_bits(&s->gb, 12);  /* XXX: handle it */
1381     s->bit_rate += (bit_rate_ext << 18) * 400;
1382     skip_bits1(&s->gb); /* marker */
1383     s->avctx->rc_buffer_size += get_bits(&s->gb, 8)*1024*16<<10;
1384
1385     s->low_delay = get_bits1(&s->gb);
1386     if(s->flags & CODEC_FLAG_LOW_DELAY) s->low_delay=1;
1387
1388     s1->frame_rate_ext.num = get_bits(&s->gb, 2)+1;
1389     s1->frame_rate_ext.den = get_bits(&s->gb, 5)+1;
1390
1391     dprintf(s->avctx, "sequence extension\n");
1392     s->codec_id= s->avctx->codec_id= CODEC_ID_MPEG2VIDEO;
1393     s->avctx->sub_id = 2; /* indicates mpeg2 found */
1394
1395     if(s->avctx->debug & FF_DEBUG_PICT_INFO)
1396         av_log(s->avctx, AV_LOG_DEBUG, "profile: %d, level: %d vbv buffer: %d, bitrate:%d\n",
1397                s->avctx->profile, s->avctx->level, s->avctx->rc_buffer_size, s->bit_rate);
1398
1399 }
1400
1401 static void mpeg_decode_sequence_display_extension(Mpeg1Context *s1)
1402 {
1403     MpegEncContext *s= &s1->mpeg_enc_ctx;
1404     int color_description, w, h;
1405
1406     skip_bits(&s->gb, 3); /* video format */
1407     color_description= get_bits1(&s->gb);
1408     if(color_description){
1409         skip_bits(&s->gb, 8); /* color primaries */
1410         skip_bits(&s->gb, 8); /* transfer_characteristics */
1411         skip_bits(&s->gb, 8); /* matrix_coefficients */
1412     }
1413     w= get_bits(&s->gb, 14);
1414     skip_bits(&s->gb, 1); //marker
1415     h= get_bits(&s->gb, 14);
1416     skip_bits(&s->gb, 1); //marker
1417
1418     s1->pan_scan.width= 16*w;
1419     s1->pan_scan.height=16*h;
1420
1421     if(s->avctx->debug & FF_DEBUG_PICT_INFO)
1422         av_log(s->avctx, AV_LOG_DEBUG, "sde w:%d, h:%d\n", w, h);
1423 }
1424
1425 static void mpeg_decode_picture_display_extension(Mpeg1Context *s1)
1426 {
1427     MpegEncContext *s= &s1->mpeg_enc_ctx;
1428     int i,nofco;
1429
1430     nofco = 1;
1431     if(s->progressive_sequence){
1432         if(s->repeat_first_field){
1433             nofco++;
1434             if(s->top_field_first)
1435                 nofco++;
1436         }
1437     }else{
1438         if(s->picture_structure == PICT_FRAME){
1439             nofco++;
1440             if(s->repeat_first_field)
1441                 nofco++;
1442         }
1443     }
1444     for(i=0; i<nofco; i++){
1445         s1->pan_scan.position[i][0]= get_sbits(&s->gb, 16);
1446         skip_bits(&s->gb, 1); //marker
1447         s1->pan_scan.position[i][1]= get_sbits(&s->gb, 16);
1448         skip_bits(&s->gb, 1); //marker
1449     }
1450
1451     if(s->avctx->debug & FF_DEBUG_PICT_INFO)
1452         av_log(s->avctx, AV_LOG_DEBUG, "pde (%d,%d) (%d,%d) (%d,%d)\n",
1453             s1->pan_scan.position[0][0], s1->pan_scan.position[0][1],
1454             s1->pan_scan.position[1][0], s1->pan_scan.position[1][1],
1455             s1->pan_scan.position[2][0], s1->pan_scan.position[2][1]
1456         );
1457 }
1458
1459 static void mpeg_decode_quant_matrix_extension(MpegEncContext *s)
1460 {
1461     int i, v, j;
1462
1463     dprintf(s->avctx, "matrix extension\n");
1464
1465     if (get_bits1(&s->gb)) {
1466         for(i=0;i<64;i++) {
1467             v = get_bits(&s->gb, 8);
1468             j= s->dsp.idct_permutation[ ff_zigzag_direct[i] ];
1469             s->intra_matrix[j] = v;
1470             s->chroma_intra_matrix[j] = v;
1471         }
1472     }
1473     if (get_bits1(&s->gb)) {
1474         for(i=0;i<64;i++) {
1475             v = get_bits(&s->gb, 8);
1476             j= s->dsp.idct_permutation[ ff_zigzag_direct[i] ];
1477             s->inter_matrix[j] = v;
1478             s->chroma_inter_matrix[j] = v;
1479         }
1480     }
1481     if (get_bits1(&s->gb)) {
1482         for(i=0;i<64;i++) {
1483             v = get_bits(&s->gb, 8);
1484             j= s->dsp.idct_permutation[ ff_zigzag_direct[i] ];
1485             s->chroma_intra_matrix[j] = v;
1486         }
1487     }
1488     if (get_bits1(&s->gb)) {
1489         for(i=0;i<64;i++) {
1490             v = get_bits(&s->gb, 8);
1491             j= s->dsp.idct_permutation[ ff_zigzag_direct[i] ];
1492             s->chroma_inter_matrix[j] = v;
1493         }
1494     }
1495 }
1496
1497 static void mpeg_decode_picture_coding_extension(MpegEncContext *s)
1498 {
1499     s->full_pel[0] = s->full_pel[1] = 0;
1500     s->mpeg_f_code[0][0] = get_bits(&s->gb, 4);
1501     s->mpeg_f_code[0][1] = get_bits(&s->gb, 4);
1502     s->mpeg_f_code[1][0] = get_bits(&s->gb, 4);
1503     s->mpeg_f_code[1][1] = get_bits(&s->gb, 4);
1504     s->intra_dc_precision = get_bits(&s->gb, 2);
1505     s->picture_structure = get_bits(&s->gb, 2);
1506     s->top_field_first = get_bits1(&s->gb);
1507     s->frame_pred_frame_dct = get_bits1(&s->gb);
1508     s->concealment_motion_vectors = get_bits1(&s->gb);
1509     s->q_scale_type = get_bits1(&s->gb);
1510     s->intra_vlc_format = get_bits1(&s->gb);
1511     s->alternate_scan = get_bits1(&s->gb);
1512     s->repeat_first_field = get_bits1(&s->gb);
1513     s->chroma_420_type = get_bits1(&s->gb);
1514     s->progressive_frame = get_bits1(&s->gb);
1515
1516     if(s->picture_structure == PICT_FRAME){
1517         s->first_field=0;
1518         s->v_edge_pos= 16*s->mb_height;
1519     }else{
1520         s->first_field ^= 1;
1521         s->v_edge_pos=  8*s->mb_height;
1522         memset(s->mbskip_table, 0, s->mb_stride*s->mb_height);
1523     }
1524
1525     if(s->alternate_scan){
1526         ff_init_scantable(s->dsp.idct_permutation, &s->inter_scantable  , ff_alternate_vertical_scan);
1527         ff_init_scantable(s->dsp.idct_permutation, &s->intra_scantable  , ff_alternate_vertical_scan);
1528     }else{
1529         ff_init_scantable(s->dsp.idct_permutation, &s->inter_scantable  , ff_zigzag_direct);
1530         ff_init_scantable(s->dsp.idct_permutation, &s->intra_scantable  , ff_zigzag_direct);
1531     }
1532
1533     /* composite display not parsed */
1534     dprintf(s->avctx, "intra_dc_precision=%d\n", s->intra_dc_precision);
1535     dprintf(s->avctx, "picture_structure=%d\n", s->picture_structure);
1536     dprintf(s->avctx, "top field first=%d\n", s->top_field_first);
1537     dprintf(s->avctx, "repeat first field=%d\n", s->repeat_first_field);
1538     dprintf(s->avctx, "conceal=%d\n", s->concealment_motion_vectors);
1539     dprintf(s->avctx, "intra_vlc_format=%d\n", s->intra_vlc_format);
1540     dprintf(s->avctx, "alternate_scan=%d\n", s->alternate_scan);
1541     dprintf(s->avctx, "frame_pred_frame_dct=%d\n", s->frame_pred_frame_dct);
1542     dprintf(s->avctx, "progressive_frame=%d\n", s->progressive_frame);
1543 }
1544
1545 static void mpeg_decode_extension(AVCodecContext *avctx,
1546                                   const uint8_t *buf, int buf_size)
1547 {
1548     Mpeg1Context *s1 = avctx->priv_data;
1549     MpegEncContext *s = &s1->mpeg_enc_ctx;
1550     int ext_type;
1551
1552     init_get_bits(&s->gb, buf, buf_size*8);
1553
1554     ext_type = get_bits(&s->gb, 4);
1555     switch(ext_type) {
1556     case 0x1:
1557         mpeg_decode_sequence_extension(s1);
1558         break;
1559     case 0x2:
1560         mpeg_decode_sequence_display_extension(s1);
1561         break;
1562     case 0x3:
1563         mpeg_decode_quant_matrix_extension(s);
1564         break;
1565     case 0x7:
1566         mpeg_decode_picture_display_extension(s1);
1567         break;
1568     case 0x8:
1569         mpeg_decode_picture_coding_extension(s);
1570         break;
1571     }
1572 }
1573
1574 static void exchange_uv(MpegEncContext *s){
1575     short * tmp = s->pblocks[4];
1576     s->pblocks[4] = s->pblocks[5];
1577     s->pblocks[5] = tmp;
1578 }
1579
1580 static int mpeg_field_start(MpegEncContext *s){
1581     AVCodecContext *avctx= s->avctx;
1582     Mpeg1Context *s1 = (Mpeg1Context*)s;
1583
1584     /* start frame decoding */
1585     if(s->first_field || s->picture_structure==PICT_FRAME){
1586         if(MPV_frame_start(s, avctx) < 0)
1587             return -1;
1588
1589         ff_er_frame_start(s);
1590
1591         /* first check if we must repeat the frame */
1592         s->current_picture_ptr->repeat_pict = 0;
1593         if (s->repeat_first_field) {
1594             if (s->progressive_sequence) {
1595                 if (s->top_field_first)
1596                     s->current_picture_ptr->repeat_pict = 4;
1597                 else
1598                     s->current_picture_ptr->repeat_pict = 2;
1599             } else if (s->progressive_frame) {
1600                 s->current_picture_ptr->repeat_pict = 1;
1601             }
1602         }
1603
1604         *s->current_picture_ptr->pan_scan= s1->pan_scan;
1605     }else{ //second field
1606             int i;
1607
1608             if(!s->current_picture_ptr){
1609                 av_log(s->avctx, AV_LOG_ERROR, "first field missing\n");
1610                 return -1;
1611             }
1612
1613             for(i=0; i<4; i++){
1614                 s->current_picture.data[i] = s->current_picture_ptr->data[i];
1615                 if(s->picture_structure == PICT_BOTTOM_FIELD){
1616                     s->current_picture.data[i] += s->current_picture_ptr->linesize[i];
1617                 }
1618             }
1619     }
1620 #ifdef HAVE_XVMC
1621 // MPV_frame_start will call this function too,
1622 // but we need to call it on every field
1623     if(s->avctx->xvmc_acceleration)
1624          XVMC_field_start(s,avctx);
1625 #endif
1626
1627     return 0;
1628 }
1629
1630 #define DECODE_SLICE_ERROR -1
1631 #define DECODE_SLICE_OK 0
1632
1633 /**
1634  * decodes a slice. MpegEncContext.mb_y must be set to the MB row from the startcode
1635  * @return DECODE_SLICE_ERROR if the slice is damaged<br>
1636  *         DECODE_SLICE_OK if this slice is ok<br>
1637  */
1638 static int mpeg_decode_slice(Mpeg1Context *s1, int mb_y,
1639                              const uint8_t **buf, int buf_size)
1640 {
1641     MpegEncContext *s = &s1->mpeg_enc_ctx;
1642     AVCodecContext *avctx= s->avctx;
1643     const int field_pic= s->picture_structure != PICT_FRAME;
1644     const int lowres= s->avctx->lowres;
1645
1646     s->resync_mb_x=
1647     s->resync_mb_y= -1;
1648
1649     if (mb_y<<field_pic >= s->mb_height){
1650         av_log(s->avctx, AV_LOG_ERROR, "slice below image (%d >= %d)\n", mb_y, s->mb_height);
1651         return -1;
1652     }
1653
1654     init_get_bits(&s->gb, *buf, buf_size*8);
1655
1656     ff_mpeg1_clean_buffers(s);
1657     s->interlaced_dct = 0;
1658
1659     s->qscale = get_qscale(s);
1660
1661     if(s->qscale == 0){
1662         av_log(s->avctx, AV_LOG_ERROR, "qscale == 0\n");
1663         return -1;
1664     }
1665
1666     /* extra slice info */
1667     while (get_bits1(&s->gb) != 0) {
1668         skip_bits(&s->gb, 8);
1669     }
1670
1671     s->mb_x=0;
1672
1673     for(;;) {
1674         int code = get_vlc2(&s->gb, mbincr_vlc.table, MBINCR_VLC_BITS, 2);
1675         if (code < 0){
1676             av_log(s->avctx, AV_LOG_ERROR, "first mb_incr damaged\n");
1677             return -1;
1678         }
1679         if (code >= 33) {
1680             if (code == 33) {
1681                 s->mb_x += 33;
1682             }
1683             /* otherwise, stuffing, nothing to do */
1684         } else {
1685             s->mb_x += code;
1686             break;
1687         }
1688     }
1689     if(s->mb_x >= (unsigned)s->mb_width){
1690         av_log(s->avctx, AV_LOG_ERROR, "initial skip overflow\n");
1691         return -1;
1692     }
1693
1694     s->resync_mb_x= s->mb_x;
1695     s->resync_mb_y= s->mb_y= mb_y;
1696     s->mb_skip_run= 0;
1697     ff_init_block_index(s);
1698
1699     if (s->mb_y==0 && s->mb_x==0 && (s->first_field || s->picture_structure==PICT_FRAME)) {
1700         if(s->avctx->debug&FF_DEBUG_PICT_INFO){
1701              av_log(s->avctx, AV_LOG_DEBUG, "qp:%d fc:%2d%2d%2d%2d %s %s %s %s %s dc:%d pstruct:%d fdct:%d cmv:%d qtype:%d ivlc:%d rff:%d %s\n",
1702                  s->qscale, s->mpeg_f_code[0][0],s->mpeg_f_code[0][1],s->mpeg_f_code[1][0],s->mpeg_f_code[1][1],
1703                  s->pict_type == I_TYPE ? "I" : (s->pict_type == P_TYPE ? "P" : (s->pict_type == B_TYPE ? "B" : "S")),
1704                  s->progressive_sequence ? "ps" :"", s->progressive_frame ? "pf" : "", s->alternate_scan ? "alt" :"", s->top_field_first ? "top" :"",
1705                  s->intra_dc_precision, s->picture_structure, s->frame_pred_frame_dct, s->concealment_motion_vectors,
1706                  s->q_scale_type, s->intra_vlc_format, s->repeat_first_field, s->chroma_420_type ? "420" :"");
1707         }
1708     }
1709
1710     for(;;) {
1711 #ifdef HAVE_XVMC
1712         //one 1 we memcpy blocks in xvmcvideo
1713         if(s->avctx->xvmc_acceleration > 1)
1714             XVMC_init_block(s);//set s->block
1715 #endif
1716
1717         if(mpeg_decode_mb(s, s->block) < 0)
1718             return -1;
1719
1720         if(s->current_picture.motion_val[0] && !s->encoding){ //note motion_val is normally NULL unless we want to extract the MVs
1721             const int wrap = field_pic ? 2*s->b8_stride : s->b8_stride;
1722             int xy = s->mb_x*2 + s->mb_y*2*wrap;
1723             int motion_x, motion_y, dir, i;
1724             if(field_pic && !s->first_field)
1725                 xy += wrap/2;
1726
1727             for(i=0; i<2; i++){
1728                 for(dir=0; dir<2; dir++){
1729                     if (s->mb_intra || (dir==1 && s->pict_type != B_TYPE)) {
1730                         motion_x = motion_y = 0;
1731                     }else if (s->mv_type == MV_TYPE_16X16 || (s->mv_type == MV_TYPE_FIELD && field_pic)){
1732                         motion_x = s->mv[dir][0][0];
1733                         motion_y = s->mv[dir][0][1];
1734                     } else /*if ((s->mv_type == MV_TYPE_FIELD) || (s->mv_type == MV_TYPE_16X8))*/ {
1735                         motion_x = s->mv[dir][i][0];
1736                         motion_y = s->mv[dir][i][1];
1737                     }
1738
1739                     s->current_picture.motion_val[dir][xy    ][0] = motion_x;
1740                     s->current_picture.motion_val[dir][xy    ][1] = motion_y;
1741                     s->current_picture.motion_val[dir][xy + 1][0] = motion_x;
1742                     s->current_picture.motion_val[dir][xy + 1][1] = motion_y;
1743                     s->current_picture.ref_index [dir][xy    ]=
1744                     s->current_picture.ref_index [dir][xy + 1]= s->field_select[dir][i];
1745                     assert(s->field_select[dir][i]==0 || s->field_select[dir][i]==1);
1746                 }
1747                 xy += wrap;
1748             }
1749         }
1750
1751         s->dest[0] += 16 >> lowres;
1752         s->dest[1] +=(16 >> lowres) >> s->chroma_x_shift;
1753         s->dest[2] +=(16 >> lowres) >> s->chroma_x_shift;
1754
1755         MPV_decode_mb(s, s->block);
1756
1757         if (++s->mb_x >= s->mb_width) {
1758             const int mb_size= 16>>s->avctx->lowres;
1759
1760             ff_draw_horiz_band(s, mb_size*s->mb_y, mb_size);
1761
1762             s->mb_x = 0;
1763             s->mb_y++;
1764
1765             if(s->mb_y<<field_pic >= s->mb_height){
1766                 int left= s->gb.size_in_bits - get_bits_count(&s->gb);
1767                 int is_d10= s->chroma_format==2 && s->pict_type==I_TYPE && avctx->profile==0 && avctx->level==5
1768                             && s->intra_dc_precision == 2 && s->q_scale_type == 1 && s->alternate_scan == 0
1769                             && s->progressive_frame == 0 /* vbv_delay == 0xBBB || 0xE10*/;
1770
1771                 if(left < 0 || (left && show_bits(&s->gb, FFMIN(left, 23)) && !is_d10)
1772                    || (avctx->error_resilience >= FF_ER_AGGRESSIVE && left>8)){
1773                     av_log(avctx, AV_LOG_ERROR, "end mismatch left=%d %0X\n", left, show_bits(&s->gb, FFMIN(left, 23)));
1774                     return -1;
1775                 }else
1776                     goto eos;
1777             }
1778
1779             ff_init_block_index(s);
1780         }
1781
1782         /* skip mb handling */
1783         if (s->mb_skip_run == -1) {
1784             /* read again increment */
1785             s->mb_skip_run = 0;
1786             for(;;) {
1787                 int code = get_vlc2(&s->gb, mbincr_vlc.table, MBINCR_VLC_BITS, 2);
1788                 if (code < 0){
1789                     av_log(s->avctx, AV_LOG_ERROR, "mb incr damaged\n");
1790                     return -1;
1791                 }
1792                 if (code >= 33) {
1793                     if (code == 33) {
1794                         s->mb_skip_run += 33;
1795                     }else if(code == 35){
1796                         if(s->mb_skip_run != 0 || show_bits(&s->gb, 15) != 0){
1797                             av_log(s->avctx, AV_LOG_ERROR, "slice mismatch\n");
1798                             return -1;
1799                         }
1800                         goto eos; /* end of slice */
1801                     }
1802                     /* otherwise, stuffing, nothing to do */
1803                 } else {
1804                     s->mb_skip_run += code;
1805                     break;
1806                 }
1807             }
1808             if(s->mb_skip_run){
1809                 int i;
1810                 if(s->pict_type == I_TYPE){
1811                     av_log(s->avctx, AV_LOG_ERROR, "skipped MB in I frame at %d %d\n", s->mb_x, s->mb_y);
1812                     return -1;
1813                 }
1814
1815                 /* skip mb */
1816                 s->mb_intra = 0;
1817                 for(i=0;i<12;i++)
1818                     s->block_last_index[i] = -1;
1819                 if(s->picture_structure == PICT_FRAME)
1820                     s->mv_type = MV_TYPE_16X16;
1821                 else
1822                     s->mv_type = MV_TYPE_FIELD;
1823                 if (s->pict_type == P_TYPE) {
1824                     /* if P type, zero motion vector is implied */
1825                     s->mv_dir = MV_DIR_FORWARD;
1826                     s->mv[0][0][0] = s->mv[0][0][1] = 0;
1827                     s->last_mv[0][0][0] = s->last_mv[0][0][1] = 0;
1828                     s->last_mv[0][1][0] = s->last_mv[0][1][1] = 0;
1829                     s->field_select[0][0]= s->picture_structure - 1;
1830                 } else {
1831                     /* if B type, reuse previous vectors and directions */
1832                     s->mv[0][0][0] = s->last_mv[0][0][0];
1833                     s->mv[0][0][1] = s->last_mv[0][0][1];
1834                     s->mv[1][0][0] = s->last_mv[1][0][0];
1835                     s->mv[1][0][1] = s->last_mv[1][0][1];
1836                 }
1837             }
1838         }
1839     }
1840 eos: // end of slice
1841     *buf += get_bits_count(&s->gb)/8 - 1;
1842 //printf("y %d %d %d %d\n", s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y);
1843     return 0;
1844 }
1845
1846 static int slice_decode_thread(AVCodecContext *c, void *arg){
1847     MpegEncContext *s= arg;
1848     const uint8_t *buf= s->gb.buffer;
1849     int mb_y= s->start_mb_y;
1850
1851     s->error_count= 3*(s->end_mb_y - s->start_mb_y)*s->mb_width;
1852
1853     for(;;){
1854         uint32_t start_code;
1855         int ret;
1856
1857         ret= mpeg_decode_slice((Mpeg1Context*)s, mb_y, &buf, s->gb.buffer_end - buf);
1858         emms_c();
1859 //av_log(c, AV_LOG_DEBUG, "ret:%d resync:%d/%d mb:%d/%d ts:%d/%d ec:%d\n",
1860 //ret, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, s->start_mb_y, s->end_mb_y, s->error_count);
1861         if(ret < 0){
1862             if(s->resync_mb_x>=0 && s->resync_mb_y>=0)
1863                 ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, AC_ERROR|DC_ERROR|MV_ERROR);
1864         }else{
1865             ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, AC_END|DC_END|MV_END);
1866         }
1867
1868         if(s->mb_y == s->end_mb_y)
1869             return 0;
1870
1871         start_code= -1;
1872         buf = ff_find_start_code(buf, s->gb.buffer_end, &start_code);
1873         mb_y= start_code - SLICE_MIN_START_CODE;
1874         if(mb_y < 0 || mb_y >= s->end_mb_y)
1875             return -1;
1876     }
1877
1878     return 0; //not reached
1879 }
1880
1881 /**
1882  * handles slice ends.
1883  * @return 1 if it seems to be the last slice of
1884  */
1885 static int slice_end(AVCodecContext *avctx, AVFrame *pict)
1886 {
1887     Mpeg1Context *s1 = avctx->priv_data;
1888     MpegEncContext *s = &s1->mpeg_enc_ctx;
1889
1890     if (!s1->mpeg_enc_ctx_allocated || !s->current_picture_ptr)
1891         return 0;
1892
1893 #ifdef HAVE_XVMC
1894     if(s->avctx->xvmc_acceleration)
1895         XVMC_field_end(s);
1896 #endif
1897     /* end of slice reached */
1898     if (/*s->mb_y<<field_pic == s->mb_height &&*/ !s->first_field) {
1899         /* end of image */
1900
1901         s->current_picture_ptr->qscale_type= FF_QSCALE_TYPE_MPEG2;
1902
1903         ff_er_frame_end(s);
1904
1905         MPV_frame_end(s);
1906
1907         if (s->pict_type == B_TYPE || s->low_delay) {
1908             *pict= *(AVFrame*)s->current_picture_ptr;
1909             ff_print_debug_info(s, pict);
1910         } else {
1911             s->picture_number++;
1912             /* latency of 1 frame for I and P frames */
1913             /* XXX: use another variable than picture_number */
1914             if (s->last_picture_ptr != NULL) {
1915                 *pict= *(AVFrame*)s->last_picture_ptr;
1916                  ff_print_debug_info(s, pict);
1917             }
1918         }
1919
1920         return 1;
1921     } else {
1922         return 0;
1923     }
1924 }
1925
1926 static int mpeg1_decode_sequence(AVCodecContext *avctx,
1927                                  const uint8_t *buf, int buf_size)
1928 {
1929     Mpeg1Context *s1 = avctx->priv_data;
1930     MpegEncContext *s = &s1->mpeg_enc_ctx;
1931     int width,height;
1932     int i, v, j;
1933
1934     init_get_bits(&s->gb, buf, buf_size*8);
1935
1936     width = get_bits(&s->gb, 12);
1937     height = get_bits(&s->gb, 12);
1938     if (width <= 0 || height <= 0 ||
1939         (width % 2) != 0 || (height % 2) != 0)
1940         return -1;
1941     s->aspect_ratio_info= get_bits(&s->gb, 4);
1942     if (s->aspect_ratio_info == 0)
1943         return -1;
1944     s->frame_rate_index = get_bits(&s->gb, 4);
1945     if (s->frame_rate_index == 0 || s->frame_rate_index > 13)
1946         return -1;
1947     s->bit_rate = get_bits(&s->gb, 18) * 400;
1948     if (get_bits1(&s->gb) == 0) /* marker */
1949         return -1;
1950     s->width = width;
1951     s->height = height;
1952
1953     s->avctx->rc_buffer_size= get_bits(&s->gb, 10) * 1024*16;
1954     skip_bits(&s->gb, 1);
1955
1956     /* get matrix */
1957     if (get_bits1(&s->gb)) {
1958         for(i=0;i<64;i++) {
1959             v = get_bits(&s->gb, 8);
1960             if(v==0){
1961                 av_log(s->avctx, AV_LOG_ERROR, "intra matrix damaged\n");
1962                 return -1;
1963             }
1964             j = s->dsp.idct_permutation[ ff_zigzag_direct[i] ];
1965             s->intra_matrix[j] = v;
1966             s->chroma_intra_matrix[j] = v;
1967         }
1968 #ifdef DEBUG
1969         dprintf(s->avctx, "intra matrix present\n");
1970         for(i=0;i<64;i++)
1971             dprintf(s->avctx, " %d", s->intra_matrix[s->dsp.idct_permutation[i]]);
1972         dprintf(s->avctx, "\n");
1973 #endif
1974     } else {
1975         for(i=0;i<64;i++) {
1976             j = s->dsp.idct_permutation[i];
1977             v = ff_mpeg1_default_intra_matrix[i];
1978             s->intra_matrix[j] = v;
1979             s->chroma_intra_matrix[j] = v;
1980         }
1981     }
1982     if (get_bits1(&s->gb)) {
1983         for(i=0;i<64;i++) {
1984             v = get_bits(&s->gb, 8);
1985             if(v==0){
1986                 av_log(s->avctx, AV_LOG_ERROR, "inter matrix damaged\n");
1987                 return -1;
1988             }
1989             j = s->dsp.idct_permutation[ ff_zigzag_direct[i] ];
1990             s->inter_matrix[j] = v;
1991             s->chroma_inter_matrix[j] = v;
1992         }
1993 #ifdef DEBUG
1994         dprintf(s->avctx, "non intra matrix present\n");
1995         for(i=0;i<64;i++)
1996             dprintf(s->avctx, " %d", s->inter_matrix[s->dsp.idct_permutation[i]]);
1997         dprintf(s->avctx, "\n");
1998 #endif
1999     } else {
2000         for(i=0;i<64;i++) {
2001             int j= s->dsp.idct_permutation[i];
2002             v = ff_mpeg1_default_non_intra_matrix[i];
2003             s->inter_matrix[j] = v;
2004             s->chroma_inter_matrix[j] = v;
2005         }
2006     }
2007
2008     if(show_bits(&s->gb, 23) != 0){
2009         av_log(s->avctx, AV_LOG_ERROR, "sequence header damaged\n");
2010         return -1;
2011     }
2012
2013     /* we set mpeg2 parameters so that it emulates mpeg1 */
2014     s->progressive_sequence = 1;
2015     s->progressive_frame = 1;
2016     s->picture_structure = PICT_FRAME;
2017     s->frame_pred_frame_dct = 1;
2018     s->chroma_format = 1;
2019     s->codec_id= s->avctx->codec_id= CODEC_ID_MPEG1VIDEO;
2020     avctx->sub_id = 1; /* indicates mpeg1 */
2021     s->out_format = FMT_MPEG1;
2022     s->swap_uv = 0;//AFAIK VCR2 don't have SEQ_HEADER
2023     if(s->flags & CODEC_FLAG_LOW_DELAY) s->low_delay=1;
2024
2025     if(s->avctx->debug & FF_DEBUG_PICT_INFO)
2026         av_log(s->avctx, AV_LOG_DEBUG, "vbv buffer: %d, bitrate:%d\n",
2027                s->avctx->rc_buffer_size, s->bit_rate);
2028
2029     return 0;
2030 }
2031
2032 static int vcr2_init_sequence(AVCodecContext *avctx)
2033 {
2034     Mpeg1Context *s1 = avctx->priv_data;
2035     MpegEncContext *s = &s1->mpeg_enc_ctx;
2036     int i, v;
2037
2038     /* start new mpeg1 context decoding */
2039     s->out_format = FMT_MPEG1;
2040     if (s1->mpeg_enc_ctx_allocated) {
2041         MPV_common_end(s);
2042     }
2043     s->width  = avctx->coded_width;
2044     s->height = avctx->coded_height;
2045     avctx->has_b_frames= 0; //true?
2046     s->low_delay= 1;
2047
2048     if(avctx->xvmc_acceleration){
2049         avctx->pix_fmt = avctx->get_format(avctx,pixfmt_xvmc_mpg2_420);
2050     }else{
2051         avctx->pix_fmt = avctx->get_format(avctx,pixfmt_yuv_420);
2052     }
2053
2054     if( avctx->pix_fmt == PIX_FMT_XVMC_MPEG2_IDCT )
2055         if( avctx->idct_algo == FF_IDCT_AUTO )
2056             avctx->idct_algo = FF_IDCT_SIMPLE;
2057
2058     if (MPV_common_init(s) < 0)
2059         return -1;
2060     exchange_uv(s);//common init reset pblocks, so we swap them here
2061     s->swap_uv = 1;// in case of xvmc we need to swap uv for each MB
2062     s1->mpeg_enc_ctx_allocated = 1;
2063
2064     for(i=0;i<64;i++) {
2065         int j= s->dsp.idct_permutation[i];
2066         v = ff_mpeg1_default_intra_matrix[i];
2067         s->intra_matrix[j] = v;
2068         s->chroma_intra_matrix[j] = v;
2069
2070         v = ff_mpeg1_default_non_intra_matrix[i];
2071         s->inter_matrix[j] = v;
2072         s->chroma_inter_matrix[j] = v;
2073     }
2074
2075     s->progressive_sequence = 1;
2076     s->progressive_frame = 1;
2077     s->picture_structure = PICT_FRAME;
2078     s->frame_pred_frame_dct = 1;
2079     s->chroma_format = 1;
2080     s->codec_id= s->avctx->codec_id= CODEC_ID_MPEG2VIDEO;
2081     avctx->sub_id = 2; /* indicates mpeg2 */
2082     return 0;
2083 }
2084
2085
2086 static void mpeg_decode_user_data(AVCodecContext *avctx,
2087                                   const uint8_t *buf, int buf_size)
2088 {
2089     const uint8_t *p;
2090     int len, flags;
2091     p = buf;
2092     len = buf_size;
2093
2094     /* we parse the DTG active format information */
2095     if (len >= 5 &&
2096         p[0] == 'D' && p[1] == 'T' && p[2] == 'G' && p[3] == '1') {
2097         flags = p[4];
2098         p += 5;
2099         len -= 5;
2100         if (flags & 0x80) {
2101             /* skip event id */
2102             if (len < 2)
2103                 return;
2104             p += 2;
2105             len -= 2;
2106         }
2107         if (flags & 0x40) {
2108             if (len < 1)
2109                 return;
2110             avctx->dtg_active_format = p[0] & 0x0f;
2111         }
2112     }
2113 }
2114
2115 static void mpeg_decode_gop(AVCodecContext *avctx,
2116                             const uint8_t *buf, int buf_size){
2117     Mpeg1Context *s1 = avctx->priv_data;
2118     MpegEncContext *s = &s1->mpeg_enc_ctx;
2119
2120     int drop_frame_flag;
2121     int time_code_hours, time_code_minutes;
2122     int time_code_seconds, time_code_pictures;
2123     int broken_link;
2124
2125     init_get_bits(&s->gb, buf, buf_size*8);
2126
2127     drop_frame_flag = get_bits1(&s->gb);
2128
2129     time_code_hours=get_bits(&s->gb,5);
2130     time_code_minutes = get_bits(&s->gb,6);
2131     skip_bits1(&s->gb);//marker bit
2132     time_code_seconds = get_bits(&s->gb,6);
2133     time_code_pictures = get_bits(&s->gb,6);
2134
2135     /*broken_link indicate that after editing the
2136       reference frames of the first B-Frames after GOP I-Frame
2137       are missing (open gop)*/
2138     broken_link = get_bits1(&s->gb);
2139
2140     if(s->avctx->debug & FF_DEBUG_PICT_INFO)
2141         av_log(s->avctx, AV_LOG_DEBUG, "GOP (%2d:%02d:%02d.[%02d]) broken_link=%d\n",
2142             time_code_hours, time_code_minutes, time_code_seconds,
2143             time_code_pictures, broken_link);
2144 }
2145 /**
2146  * finds the end of the current frame in the bitstream.
2147  * @return the position of the first byte of the next frame, or -1
2148  */
2149 int ff_mpeg1_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size)
2150 {
2151     int i;
2152     uint32_t state= pc->state;
2153
2154     i=0;
2155     if(!pc->frame_start_found){
2156         for(i=0; i<buf_size; i++){
2157             i= ff_find_start_code(buf+i, buf+buf_size, &state) - buf - 1;
2158             if(state >= SLICE_MIN_START_CODE && state <= SLICE_MAX_START_CODE){
2159                 i++;
2160                 pc->frame_start_found=1;
2161                 break;
2162             }
2163         }
2164     }
2165
2166     if(pc->frame_start_found){
2167         /* EOF considered as end of frame */
2168         if (buf_size == 0)
2169             return 0;
2170         for(; i<buf_size; i++){
2171             i= ff_find_start_code(buf+i, buf+buf_size, &state) - buf - 1;
2172             if((state&0xFFFFFF00) == 0x100){
2173                 if(state < SLICE_MIN_START_CODE || state > SLICE_MAX_START_CODE){
2174                     pc->frame_start_found=0;
2175                     pc->state=-1;
2176                     return i-3;
2177                 }
2178             }
2179         }
2180     }
2181     pc->state= state;
2182     return END_NOT_FOUND;
2183 }
2184
2185 /* handle buffering and image synchronisation */
2186 static int mpeg_decode_frame(AVCodecContext *avctx,
2187                              void *data, int *data_size,
2188                              uint8_t *buf, int buf_size)
2189 {
2190     Mpeg1Context *s = avctx->priv_data;
2191     const uint8_t *buf_end;
2192     const uint8_t *buf_ptr;
2193     uint32_t start_code;
2194     int ret, input_size;
2195     AVFrame *picture = data;
2196     MpegEncContext *s2 = &s->mpeg_enc_ctx;
2197     dprintf(avctx, "fill_buffer\n");
2198
2199     if (buf_size == 0) {
2200         /* special case for last picture */
2201         if (s2->low_delay==0 && s2->next_picture_ptr) {
2202             *picture= *(AVFrame*)s2->next_picture_ptr;
2203             s2->next_picture_ptr= NULL;
2204
2205             *data_size = sizeof(AVFrame);
2206         }
2207         return 0;
2208     }
2209
2210     if(s2->flags&CODEC_FLAG_TRUNCATED){
2211         int next= ff_mpeg1_find_frame_end(&s2->parse_context, buf, buf_size);
2212
2213         if( ff_combine_frame(&s2->parse_context, next, (const uint8_t **)&buf, &buf_size) < 0 )
2214             return buf_size;
2215     }
2216
2217     buf_ptr = buf;
2218     buf_end = buf + buf_size;
2219
2220 #if 0
2221     if (s->repeat_field % 2 == 1) {
2222         s->repeat_field++;
2223         //fprintf(stderr,"\nRepeating last frame: %d -> %d! pict: %d %d", avctx->frame_number-1, avctx->frame_number,
2224         //        s2->picture_number, s->repeat_field);
2225         if (avctx->flags & CODEC_FLAG_REPEAT_FIELD) {
2226             *data_size = sizeof(AVPicture);
2227             goto the_end;
2228         }
2229     }
2230 #endif
2231
2232     if(s->mpeg_enc_ctx_allocated==0 && avctx->codec_tag == ff_get_fourcc("VCR2"))
2233         vcr2_init_sequence(avctx);
2234
2235     s->slice_count= 0;
2236
2237     for(;;) {
2238         /* find start next code */
2239         start_code = -1;
2240         buf_ptr = ff_find_start_code(buf_ptr,buf_end, &start_code);
2241         if (start_code > 0x1ff){
2242             if(s2->pict_type != B_TYPE || avctx->skip_frame <= AVDISCARD_DEFAULT){
2243                 if(avctx->thread_count > 1){
2244                     int i;
2245
2246                     avctx->execute(avctx, slice_decode_thread,  (void**)&(s2->thread_context[0]), NULL, s->slice_count);
2247                     for(i=0; i<s->slice_count; i++)
2248                         s2->error_count += s2->thread_context[i]->error_count;
2249                 }
2250                 if (slice_end(avctx, picture)) {
2251                     if(s2->last_picture_ptr || s2->low_delay) //FIXME merge with the stuff in mpeg_decode_slice
2252                         *data_size = sizeof(AVPicture);
2253                 }
2254             }
2255             return FFMAX(0, buf_ptr - buf - s2->parse_context.last_index);
2256         }
2257
2258         input_size = buf_end - buf_ptr;
2259
2260         if(avctx->debug & FF_DEBUG_STARTCODE){
2261             av_log(avctx, AV_LOG_DEBUG, "%3X at %zd left %d\n", start_code, buf_ptr-buf, input_size);
2262         }
2263
2264         /* prepare data for next start code */
2265         switch(start_code) {
2266         case SEQ_START_CODE:
2267             mpeg1_decode_sequence(avctx, buf_ptr,
2268                                     input_size);
2269             break;
2270
2271         case PICTURE_START_CODE:
2272             /* we have a complete image : we try to decompress it */
2273             mpeg1_decode_picture(avctx,
2274                                     buf_ptr, input_size);
2275             break;
2276         case EXT_START_CODE:
2277             mpeg_decode_extension(avctx,
2278                                     buf_ptr, input_size);
2279             break;
2280         case USER_START_CODE:
2281             mpeg_decode_user_data(avctx,
2282                                     buf_ptr, input_size);
2283             break;
2284         case GOP_START_CODE:
2285             s2->first_field=0;
2286             mpeg_decode_gop(avctx,
2287                                     buf_ptr, input_size);
2288             break;
2289         default:
2290             if (start_code >= SLICE_MIN_START_CODE &&
2291                 start_code <= SLICE_MAX_START_CODE) {
2292                 int mb_y= start_code - SLICE_MIN_START_CODE;
2293
2294                 if(s2->last_picture_ptr==NULL){
2295                 /* Skip B-frames if we do not have reference frames. */
2296                     if(s2->pict_type==B_TYPE) break;
2297                 /* Skip P-frames if we do not have reference frame no valid header. */
2298 //                    if(s2->pict_type==P_TYPE && s2->first_field && !s2->first_slice) break;
2299                 }
2300                 /* Skip B-frames if we are in a hurry. */
2301                 if(avctx->hurry_up && s2->pict_type==B_TYPE) break;
2302                 if(  (avctx->skip_frame >= AVDISCARD_NONREF && s2->pict_type==B_TYPE)
2303                     ||(avctx->skip_frame >= AVDISCARD_NONKEY && s2->pict_type!=I_TYPE)
2304                     || avctx->skip_frame >= AVDISCARD_ALL)
2305                     break;
2306                 /* Skip everything if we are in a hurry>=5. */
2307                 if(avctx->hurry_up>=5) break;
2308
2309                 if (!s->mpeg_enc_ctx_allocated) break;
2310
2311                 if(s2->codec_id == CODEC_ID_MPEG2VIDEO){
2312                     if(mb_y < avctx->skip_top || mb_y >= s2->mb_height - avctx->skip_bottom)
2313                         break;
2314                 }
2315
2316                 if(s2->first_slice){
2317                     s2->first_slice=0;
2318                             if(mpeg_field_start(s2) < 0)
2319                         return -1;
2320                     }
2321                 if(!s2->current_picture_ptr){
2322                     av_log(avctx, AV_LOG_ERROR, "current_picture not initialized\n");
2323                     return -1;
2324                 }
2325
2326                 if(avctx->thread_count > 1){
2327                     int threshold= (s2->mb_height*s->slice_count + avctx->thread_count/2) / avctx->thread_count;
2328                     if(threshold <= mb_y){
2329                         MpegEncContext *thread_context= s2->thread_context[s->slice_count];
2330
2331                         thread_context->start_mb_y= mb_y;
2332                         thread_context->end_mb_y  = s2->mb_height;
2333                         if(s->slice_count){
2334                             s2->thread_context[s->slice_count-1]->end_mb_y= mb_y;
2335                             ff_update_duplicate_context(thread_context, s2);
2336                         }
2337                         init_get_bits(&thread_context->gb, buf_ptr, input_size*8);
2338                         s->slice_count++;
2339                     }
2340                     buf_ptr += 2; //FIXME add minimum num of bytes per slice
2341                 }else{
2342                     ret = mpeg_decode_slice(s, mb_y, &buf_ptr, input_size);
2343                     emms_c();
2344
2345                     if(ret < 0){
2346                         if(s2->resync_mb_x>=0 && s2->resync_mb_y>=0)
2347                             ff_er_add_slice(s2, s2->resync_mb_x, s2->resync_mb_y, s2->mb_x, s2->mb_y, AC_ERROR|DC_ERROR|MV_ERROR);
2348                     }else{
2349                         ff_er_add_slice(s2, s2->resync_mb_x, s2->resync_mb_y, s2->mb_x-1, s2->mb_y, AC_END|DC_END|MV_END);
2350                     }
2351                 }
2352             }
2353             break;
2354         }
2355     }
2356 }
2357
2358 static int mpeg_decode_end(AVCodecContext *avctx)
2359 {
2360     Mpeg1Context *s = avctx->priv_data;
2361
2362     if (s->mpeg_enc_ctx_allocated)
2363         MPV_common_end(&s->mpeg_enc_ctx);
2364     return 0;
2365 }
2366
2367 AVCodec mpeg1video_decoder = {
2368     "mpeg1video",
2369     CODEC_TYPE_VIDEO,
2370     CODEC_ID_MPEG1VIDEO,
2371     sizeof(Mpeg1Context),
2372     mpeg_decode_init,
2373     NULL,
2374     mpeg_decode_end,
2375     mpeg_decode_frame,
2376     CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY,
2377     .flush= ff_mpeg_flush,
2378 };
2379
2380 AVCodec mpeg2video_decoder = {
2381     "mpeg2video",
2382     CODEC_TYPE_VIDEO,
2383     CODEC_ID_MPEG2VIDEO,
2384     sizeof(Mpeg1Context),
2385     mpeg_decode_init,
2386     NULL,
2387     mpeg_decode_end,
2388     mpeg_decode_frame,
2389     CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY,
2390     .flush= ff_mpeg_flush,
2391 };
2392
2393 //legacy decoder
2394 AVCodec mpegvideo_decoder = {
2395     "mpegvideo",
2396     CODEC_TYPE_VIDEO,
2397     CODEC_ID_MPEG2VIDEO,
2398     sizeof(Mpeg1Context),
2399     mpeg_decode_init,
2400     NULL,
2401     mpeg_decode_end,
2402     mpeg_decode_frame,
2403     CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY,
2404     .flush= ff_mpeg_flush,
2405 };
2406
2407 #ifdef HAVE_XVMC
2408 static int mpeg_mc_decode_init(AVCodecContext *avctx){
2409     Mpeg1Context *s;
2410
2411     if( avctx->thread_count > 1)
2412         return -1;
2413     if( !(avctx->slice_flags & SLICE_FLAG_CODED_ORDER) )
2414         return -1;
2415     if( !(avctx->slice_flags & SLICE_FLAG_ALLOW_FIELD) ){
2416         dprintf(avctx, "mpeg12.c: XvMC decoder will work better if SLICE_FLAG_ALLOW_FIELD is set\n");
2417     }
2418     mpeg_decode_init(avctx);
2419     s = avctx->priv_data;
2420
2421     avctx->pix_fmt = PIX_FMT_XVMC_MPEG2_IDCT;
2422     avctx->xvmc_acceleration = 2;//2 - the blocks are packed!
2423
2424     return 0;
2425 }
2426
2427 AVCodec mpeg_xvmc_decoder = {
2428     "mpegvideo_xvmc",
2429     CODEC_TYPE_VIDEO,
2430     CODEC_ID_MPEG2VIDEO_XVMC,
2431     sizeof(Mpeg1Context),
2432     mpeg_mc_decode_init,
2433     NULL,
2434     mpeg_decode_end,
2435     mpeg_decode_frame,
2436     CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED| CODEC_CAP_HWACCEL | CODEC_CAP_DELAY,
2437     .flush= ff_mpeg_flush,
2438 };
2439
2440 #endif
2441
2442 /* this is ugly i know, but the alternative is too make
2443    hundreds of vars global and prefix them with ff_mpeg1_
2444    which is far uglier. */
2445 #include "mdec.c"