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