]> git.sesse.net Git - ffmpeg/blob - libavcodec/mpeg12.c
init cleanup
[ffmpeg] / libavcodec / mpeg12.c
1 /*
2  * MPEG1 codec / MPEG2 decoder
3  * Copyright (c) 2000,2001 Fabrice Bellard.
4  * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at> 
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20  
21 /**
22  * @file mpeg12.c
23  * MPEG1/2 codec
24  */
25  
26 //#define DEBUG
27 #include "avcodec.h"
28 #include "dsputil.h"
29 #include "mpegvideo.h"
30
31 #include "mpeg12data.h"
32
33 //#undef NDEBUG
34 //#include <assert.h>
35
36
37 /* Start codes. */
38 #define SEQ_END_CODE            0x000001b7
39 #define SEQ_START_CODE          0x000001b3
40 #define GOP_START_CODE          0x000001b8
41 #define PICTURE_START_CODE      0x00000100
42 #define SLICE_MIN_START_CODE    0x00000101
43 #define SLICE_MAX_START_CODE    0x000001af
44 #define EXT_START_CODE          0x000001b5
45 #define USER_START_CODE         0x000001b2
46
47 #define DC_VLC_BITS 9
48 #define MV_VLC_BITS 9
49 #define MBINCR_VLC_BITS 9
50 #define MB_PAT_VLC_BITS 9
51 #define MB_PTYPE_VLC_BITS 6
52 #define MB_BTYPE_VLC_BITS 6
53 #define TEX_VLC_BITS 9
54
55 #ifdef CONFIG_ENCODERS
56 static void mpeg1_encode_block(MpegEncContext *s, 
57                          DCTELEM *block, 
58                          int component);
59 static void mpeg1_encode_motion(MpegEncContext *s, int val, int f_or_b_code);    // RAL: f_code parameter added
60 #endif //CONFIG_ENCODERS
61 static inline int mpeg1_decode_block_inter(MpegEncContext *s, 
62                               DCTELEM *block, 
63                               int n);
64 static inline int mpeg1_decode_block_intra(MpegEncContext *s, 
65                               DCTELEM *block, 
66                               int n);
67 static inline int mpeg2_decode_block_non_intra(MpegEncContext *s, 
68                                         DCTELEM *block, 
69                                         int n);
70 static inline int mpeg2_decode_block_intra(MpegEncContext *s, 
71                                     DCTELEM *block, 
72                                     int n);
73 static int mpeg_decode_motion(MpegEncContext *s, int fcode, int pred);
74 static void exchange_uv(MpegEncContext *s);
75
76 #ifdef HAVE_XVMC
77 extern int XVMC_field_start(MpegEncContext *s, AVCodecContext *avctx);
78 extern int XVMC_field_end(MpegEncContext *s);
79 extern void XVMC_pack_pblocks(MpegEncContext *s,int cbp);
80 extern void XVMC_init_block(MpegEncContext *s);//set s->block
81 #endif
82
83 const enum PixelFormat pixfmt_yuv_420[]= {PIX_FMT_YUV420P,-1};
84 const enum PixelFormat pixfmt_yuv_422[]= {PIX_FMT_YUV422P,-1};
85 const enum PixelFormat pixfmt_yuv_444[]= {PIX_FMT_YUV444P,-1};
86 const enum PixelFormat pixfmt_xvmc_mpg2_420[] = {
87                                            PIX_FMT_XVMC_MPEG2_IDCT,
88                                            PIX_FMT_XVMC_MPEG2_MC,
89                                            -1};
90 #ifdef CONFIG_ENCODERS
91 static uint8_t (*mv_penalty)[MAX_MV*2+1]= NULL;
92 static uint8_t fcode_tab[MAX_MV*2+1];
93
94 static uint32_t uni_mpeg1_ac_vlc_bits[64*64*2];
95 static uint8_t  uni_mpeg1_ac_vlc_len [64*64*2];
96
97 /* simple include everything table for dc, first byte is bits number next 3 are code*/
98 static uint32_t mpeg1_lum_dc_uni[512];
99 static uint32_t mpeg1_chr_dc_uni[512];
100
101 static uint8_t mpeg1_index_run[2][64];
102 static int8_t mpeg1_max_level[2][64];
103 #endif //CONFIG_ENCODERS
104
105 static void init_2d_vlc_rl(RLTable *rl)
106 {
107     int i;
108     
109     init_vlc(&rl->vlc, TEX_VLC_BITS, rl->n + 2, 
110              &rl->table_vlc[0][1], 4, 2,
111              &rl->table_vlc[0][0], 4, 2);
112
113     
114     rl->rl_vlc[0]= av_malloc(rl->vlc.table_size*sizeof(RL_VLC_ELEM));
115     for(i=0; i<rl->vlc.table_size; i++){
116         int code= rl->vlc.table[i][0];
117         int len = rl->vlc.table[i][1];
118         int level, run;
119     
120         if(len==0){ // illegal code
121             run= 65;
122             level= MAX_LEVEL;
123         }else if(len<0){ //more bits needed
124             run= 0;
125             level= code;
126         }else{
127             if(code==rl->n){ //esc
128                 run= 65;
129                 level= 0;
130             }else if(code==rl->n+1){ //eob
131                 run= 0;
132                 level= 127;
133             }else{
134                 run=   rl->table_run  [code] + 1;
135                 level= rl->table_level[code];
136             }
137         }
138         rl->rl_vlc[0][i].len= len;
139         rl->rl_vlc[0][i].level= level;
140         rl->rl_vlc[0][i].run= run;
141     }
142 }
143
144 #ifdef CONFIG_ENCODERS
145 static void init_uni_ac_vlc(RLTable *rl, uint32_t *uni_ac_vlc_bits, uint8_t *uni_ac_vlc_len){
146     int i;
147
148     for(i=0; i<128; i++){
149         int level= i-64;
150         int run;
151         for(run=0; run<64; run++){
152             int len, bits, code;
153             
154             int alevel= ABS(level);
155             int sign= (level>>31)&1;
156
157             if (alevel > rl->max_level[0][run])
158                 code= 111; /*rl->n*/
159             else
160                 code= rl->index_run[0][run] + alevel - 1;
161
162             if (code < 111 /* rl->n */) {
163                 /* store the vlc & sign at once */
164                 len=   mpeg1_vlc[code][1]+1;
165                 bits= (mpeg1_vlc[code][0]<<1) + sign;
166             } else {
167                 len=  mpeg1_vlc[111/*rl->n*/][1]+6;
168                 bits= mpeg1_vlc[111/*rl->n*/][0]<<6;
169
170                 bits|= run;
171                 if (alevel < 128) {
172                     bits<<=8; len+=8;
173                     bits|= level & 0xff;
174                 } else {
175                     bits<<=16; len+=16;
176                     bits|= level & 0xff;
177                     if (level < 0) {
178                         bits|= 0x8001 + level + 255;
179                     } else {
180                         bits|= level & 0xffff;
181                     }
182                 }
183             }
184
185             uni_ac_vlc_bits[UNI_AC_ENC_INDEX(run, i)]= bits;
186             uni_ac_vlc_len [UNI_AC_ENC_INDEX(run, i)]= len;
187         }
188     }
189 }
190
191
192 static int find_frame_rate_index(MpegEncContext *s){
193     int i;
194     int64_t dmin= INT64_MAX;
195     int64_t d;
196
197     for(i=1;i<14;i++) {
198         int64_t n0= 1001LL/frame_rate_tab[i].den*frame_rate_tab[i].num*s->avctx->frame_rate_base;
199         int64_t n1= 1001LL*s->avctx->frame_rate;
200         if(s->avctx->strict_std_compliance >= 0 && i>=9) break;
201
202         d = ABS(n0 - n1);
203         if(d < dmin){
204             dmin=d;
205             s->frame_rate_index= i;
206         }
207     }
208     if(dmin)
209         return -1;
210     else
211         return 0;
212 }
213
214 static int encode_init(AVCodecContext *avctx)
215 {
216     MpegEncContext *s = avctx->priv_data;
217
218     if(MPV_encode_init(avctx) < 0)
219         return -1;
220
221     if(find_frame_rate_index(s) < 0){
222         if(s->strict_std_compliance >=0){
223             av_log(avctx, AV_LOG_ERROR, "MPEG1/2 doesnt support %d/%d fps\n", avctx->frame_rate, avctx->frame_rate_base);
224             return -1;
225         }else{
226             av_log(avctx, AV_LOG_INFO, "MPEG1/2 doesnt support %d/%d fps, there may be AV sync issues\n", avctx->frame_rate, avctx->frame_rate_base);
227         }
228     }
229     
230     return 0;
231 }
232
233 static void put_header(MpegEncContext *s, int header)
234 {
235     align_put_bits(&s->pb);
236     put_bits(&s->pb, 16, header>>16);
237     put_bits(&s->pb, 16, header&0xFFFF);
238 }
239
240 /* put sequence header if needed */
241 static void mpeg1_encode_sequence_header(MpegEncContext *s)
242 {
243         unsigned int vbv_buffer_size;
244         unsigned int fps, v;
245         int n, i;
246         uint64_t time_code;
247         float best_aspect_error= 1E10;
248         float aspect_ratio= av_q2d(s->avctx->sample_aspect_ratio);
249         int constraint_parameter_flag;
250         
251         if(aspect_ratio==0.0) aspect_ratio= 1.0; //pixel aspect 1:1 (VGA)
252         
253         if (s->current_picture.key_frame) {
254             AVRational framerate= frame_rate_tab[s->frame_rate_index];
255
256             /* mpeg1 header repeated every gop */
257             put_header(s, SEQ_START_CODE);
258  
259             put_bits(&s->pb, 12, s->width);
260             put_bits(&s->pb, 12, s->height);
261             
262             for(i=1; i<15; i++){
263                 float error= aspect_ratio;
264                 if(s->codec_id == CODEC_ID_MPEG1VIDEO || i <=1)
265                     error-= 1.0/mpeg1_aspect[i];
266                 else
267                     error-= av_q2d(mpeg2_aspect[i])*s->height/s->width;
268              
269                 error= ABS(error);
270                 
271                 if(error < best_aspect_error){
272                     best_aspect_error= error;
273                     s->aspect_ratio_info= i;
274                 }
275             }
276             
277             put_bits(&s->pb, 4, s->aspect_ratio_info);
278             put_bits(&s->pb, 4, s->frame_rate_index);
279             
280             if(s->avctx->rc_max_rate){
281                 v = (s->avctx->rc_max_rate + 399) / 400;
282                 if (v > 0x3ffff && s->codec_id == CODEC_ID_MPEG1VIDEO)
283                     v = 0x3ffff;
284             }else{
285                 v= 0x3FFFF;
286             }
287
288             if(s->avctx->rc_buffer_size)
289                 vbv_buffer_size = s->avctx->rc_buffer_size;
290             else
291                 /* VBV calculation: Scaled so that a VCD has the proper VBV size of 40 kilobytes */
292                 vbv_buffer_size = (( 20 * s->bit_rate) / (1151929 / 2)) * 8 * 1024;
293             vbv_buffer_size= (vbv_buffer_size + 16383) / 16384;
294
295             put_bits(&s->pb, 18, v & 0x3FFFF);
296             put_bits(&s->pb, 1, 1); /* marker */
297             put_bits(&s->pb, 10, vbv_buffer_size & 0x3FF);
298
299             constraint_parameter_flag= 
300                 s->width <= 768 && s->height <= 576 && 
301                 s->mb_width * s->mb_height <= 396 &&
302                 s->mb_width * s->mb_height * framerate.num <= framerate.den*396*25 &&
303                 framerate.num <= framerate.den*30 &&
304                 vbv_buffer_size <= 20 &&
305                 v <= 1856000/400 &&
306                 s->codec_id == CODEC_ID_MPEG1VIDEO;
307                 
308             put_bits(&s->pb, 1, constraint_parameter_flag);
309             
310             ff_write_quant_matrix(&s->pb, s->avctx->intra_matrix);
311             ff_write_quant_matrix(&s->pb, s->avctx->inter_matrix);
312
313             if(s->codec_id == CODEC_ID_MPEG2VIDEO){
314                 put_header(s, EXT_START_CODE);
315                 put_bits(&s->pb, 4, 1); //seq ext
316                 put_bits(&s->pb, 1, 0); //esc
317                 put_bits(&s->pb, 3, 4); //profile
318                 put_bits(&s->pb, 4, 8); //level
319                 put_bits(&s->pb, 1, s->progressive_sequence);
320                 put_bits(&s->pb, 2, 1); //chroma format 4:2:0
321                 put_bits(&s->pb, 2, 0); //horizontal size ext
322                 put_bits(&s->pb, 2, 0); //vertical size ext
323                 put_bits(&s->pb, 12, v>>18); //bitrate ext
324                 put_bits(&s->pb, 1, 1); //marker
325                 put_bits(&s->pb, 8, vbv_buffer_size >>10); //vbv buffer ext
326                 put_bits(&s->pb, 1, s->low_delay);
327                 put_bits(&s->pb, 2, 0); // frame_rate_ext_n
328                 put_bits(&s->pb, 5, 0); // frame_rate_ext_d
329             }
330             
331             put_header(s, GOP_START_CODE);
332             put_bits(&s->pb, 1, 0); /* do drop frame */
333             /* time code : we must convert from the real frame rate to a
334                fake mpeg frame rate in case of low frame rate */
335             fps = (framerate.num + framerate.den/2)/ framerate.den;
336             time_code = s->current_picture_ptr->coded_picture_number;
337
338             s->gop_picture_number = time_code;
339             put_bits(&s->pb, 5, (uint32_t)((time_code / (fps * 3600)) % 24));
340             put_bits(&s->pb, 6, (uint32_t)((time_code / (fps * 60)) % 60));
341             put_bits(&s->pb, 1, 1);
342             put_bits(&s->pb, 6, (uint32_t)((time_code / fps) % 60));
343             put_bits(&s->pb, 6, (uint32_t)((time_code % fps)));
344             put_bits(&s->pb, 1, !!(s->flags & CODEC_FLAG_CLOSED_GOP));
345             put_bits(&s->pb, 1, 0); /* broken link */
346         }
347 }
348
349 static inline void encode_mb_skip_run(MpegEncContext *s, int run){
350     while (run >= 33) {
351         put_bits(&s->pb, 11, 0x008);
352         run -= 33;
353     }
354     put_bits(&s->pb, mbAddrIncrTable[run][1], 
355              mbAddrIncrTable[run][0]);
356 }
357 #endif //CONFIG_ENCODERS
358
359 static void common_init(MpegEncContext *s)
360 {
361 int i;
362
363     s->y_dc_scale_table=
364     s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
365     
366     for(i=0;i<64;i++)
367        s->dsp.idct_permutation[i]=i;
368 }
369
370 void ff_mpeg1_clean_buffers(MpegEncContext *s){
371     s->last_dc[0] = 1 << (7 + s->intra_dc_precision);
372     s->last_dc[1] = s->last_dc[0];
373     s->last_dc[2] = s->last_dc[0];
374     memset(s->last_mv, 0, sizeof(s->last_mv));
375 }
376
377 #ifdef CONFIG_ENCODERS
378
379 void ff_mpeg1_encode_slice_header(MpegEncContext *s){
380     put_header(s, SLICE_MIN_START_CODE + s->mb_y);
381     put_bits(&s->pb, 5, s->qscale); /* quantizer scale */
382     put_bits(&s->pb, 1, 0); /* slice extra information */
383 }
384
385 void mpeg1_encode_picture_header(MpegEncContext *s, int picture_number)
386 {
387     mpeg1_encode_sequence_header(s);
388
389     /* mpeg1 picture header */
390     put_header(s, PICTURE_START_CODE);
391     /* temporal reference */
392
393     // RAL: s->picture_number instead of s->fake_picture_number
394     put_bits(&s->pb, 10, (s->picture_number - 
395                           s->gop_picture_number) & 0x3ff); 
396     put_bits(&s->pb, 3, s->pict_type);
397
398     s->vbv_delay_ptr= s->pb.buf + put_bits_count(&s->pb)/8;
399     put_bits(&s->pb, 16, 0xFFFF); /* vbv_delay */
400     
401     // RAL: Forward f_code also needed for B frames
402     if (s->pict_type == P_TYPE || s->pict_type == B_TYPE) {
403         put_bits(&s->pb, 1, 0); /* half pel coordinates */
404         if(s->codec_id == CODEC_ID_MPEG1VIDEO)
405             put_bits(&s->pb, 3, s->f_code); /* forward_f_code */
406         else
407             put_bits(&s->pb, 3, 7); /* forward_f_code */
408     }
409     
410     // RAL: Backward f_code necessary for B frames
411     if (s->pict_type == B_TYPE) {
412         put_bits(&s->pb, 1, 0); /* half pel coordinates */
413         if(s->codec_id == CODEC_ID_MPEG1VIDEO)
414             put_bits(&s->pb, 3, s->b_code); /* backward_f_code */
415         else
416             put_bits(&s->pb, 3, 7); /* backward_f_code */
417     }
418
419     put_bits(&s->pb, 1, 0); /* extra bit picture */
420
421     s->frame_pred_frame_dct = 1;
422     if(s->codec_id == CODEC_ID_MPEG2VIDEO){
423         put_header(s, EXT_START_CODE);
424         put_bits(&s->pb, 4, 8); //pic ext
425         if (s->pict_type == P_TYPE || s->pict_type == B_TYPE) {
426             put_bits(&s->pb, 4, s->f_code);
427             put_bits(&s->pb, 4, s->f_code);
428         }else{
429             put_bits(&s->pb, 8, 255);
430         }
431         if (s->pict_type == B_TYPE) {
432             put_bits(&s->pb, 4, s->b_code);
433             put_bits(&s->pb, 4, s->b_code);
434         }else{
435             put_bits(&s->pb, 8, 255);
436         }
437         put_bits(&s->pb, 2, s->intra_dc_precision);
438         
439         assert(s->picture_structure == PICT_FRAME);
440         put_bits(&s->pb, 2, s->picture_structure);
441         if (s->progressive_sequence) {
442             put_bits(&s->pb, 1, 0); /* no repeat */
443         } else {
444             put_bits(&s->pb, 1, s->current_picture_ptr->top_field_first);
445         }
446         /* XXX: optimize the generation of this flag with entropy
447            measures */
448         s->frame_pred_frame_dct = s->progressive_sequence;
449         
450         put_bits(&s->pb, 1, s->frame_pred_frame_dct);
451         put_bits(&s->pb, 1, s->concealment_motion_vectors);
452         put_bits(&s->pb, 1, s->q_scale_type);
453         put_bits(&s->pb, 1, s->intra_vlc_format);
454         put_bits(&s->pb, 1, s->alternate_scan);
455         put_bits(&s->pb, 1, s->repeat_first_field);
456         put_bits(&s->pb, 1, s->chroma_420_type=1);
457         s->progressive_frame = s->progressive_sequence;
458         put_bits(&s->pb, 1, s->progressive_frame);
459         put_bits(&s->pb, 1, 0); //composite_display_flag
460     }
461     if(s->flags & CODEC_FLAG_SVCD_SCAN_OFFSET){
462         int i;
463
464         put_header(s, USER_START_CODE);
465         for(i=0; i<sizeof(svcd_scan_offset_placeholder); i++){
466             put_bits(&s->pb, 8, svcd_scan_offset_placeholder[i]);
467         }
468     }
469     
470     s->mb_y=0;
471     ff_mpeg1_encode_slice_header(s);
472 }
473
474 static inline void put_mb_modes(MpegEncContext *s, int n, int bits, 
475                                 int has_mv, int field_motion)
476 {
477     put_bits(&s->pb, n, bits);
478     if (!s->frame_pred_frame_dct) {
479         if (has_mv) 
480             put_bits(&s->pb, 2, 2 - field_motion); /* motion_type: frame/field */
481         put_bits(&s->pb, 1, s->interlaced_dct);
482     }
483 }
484
485 void mpeg1_encode_mb(MpegEncContext *s,
486                      DCTELEM block[6][64],
487                      int motion_x, int motion_y)
488 {
489     int i, cbp;
490     const int mb_x = s->mb_x;
491     const int mb_y = s->mb_y;
492     const int first_mb= mb_x == s->resync_mb_x && mb_y == s->resync_mb_y;
493
494     /* compute cbp */
495     cbp = 0;
496     for(i=0;i<6;i++) {
497         if (s->block_last_index[i] >= 0)
498             cbp |= 1 << (5 - i);
499     }
500     
501     if (cbp == 0 && !first_mb && (mb_x != s->mb_width - 1 || (mb_y != s->mb_height - 1 && s->codec_id == CODEC_ID_MPEG1VIDEO)) && 
502         ((s->pict_type == P_TYPE && s->mv_type == MV_TYPE_16X16 && (motion_x | motion_y) == 0) ||
503         (s->pict_type == B_TYPE && s->mv_dir == s->last_mv_dir && (((s->mv_dir & MV_DIR_FORWARD) ? ((s->mv[0][0][0] - s->last_mv[0][0][0])|(s->mv[0][0][1] - s->last_mv[0][0][1])) : 0) |
504         ((s->mv_dir & MV_DIR_BACKWARD) ? ((s->mv[1][0][0] - s->last_mv[1][0][0])|(s->mv[1][0][1] - s->last_mv[1][0][1])) : 0)) == 0))) {
505         s->mb_skip_run++;
506         s->qscale -= s->dquant;
507         s->skip_count++;
508         s->misc_bits++;
509         s->last_bits++;
510         if(s->pict_type == P_TYPE){
511             s->last_mv[0][1][0]= s->last_mv[0][0][0]= 
512             s->last_mv[0][1][1]= s->last_mv[0][0][1]= 0;
513         }
514     } else {
515         if(first_mb){
516             assert(s->mb_skip_run == 0);
517             encode_mb_skip_run(s, s->mb_x);
518         }else{
519             encode_mb_skip_run(s, s->mb_skip_run);
520         }
521         
522         if (s->pict_type == I_TYPE) {
523             if(s->dquant && cbp){
524                 put_mb_modes(s, 2, 1, 0, 0); /* macroblock_type : macroblock_quant = 1 */
525                 put_bits(&s->pb, 5, s->qscale);
526             }else{
527                 put_mb_modes(s, 1, 1, 0, 0); /* macroblock_type : macroblock_quant = 0 */
528                 s->qscale -= s->dquant;
529             }
530             s->misc_bits+= get_bits_diff(s);
531             s->i_count++;
532         } else if (s->mb_intra) {
533             if(s->dquant && cbp){
534                 put_mb_modes(s, 6, 0x01, 0, 0);
535                 put_bits(&s->pb, 5, s->qscale);
536             }else{
537                 put_mb_modes(s, 5, 0x03, 0, 0);
538                 s->qscale -= s->dquant;
539             }
540             s->misc_bits+= get_bits_diff(s);
541             s->i_count++;
542             memset(s->last_mv, 0, sizeof(s->last_mv));
543         } else if (s->pict_type == P_TYPE) { 
544             if(s->mv_type == MV_TYPE_16X16){
545                 if (cbp != 0) {
546                     if ((motion_x|motion_y) == 0) {
547                         if(s->dquant){
548                             put_mb_modes(s, 5, 1, 0, 0); /* macroblock_pattern & quant */
549                             put_bits(&s->pb, 5, s->qscale);
550                         }else{
551                             put_mb_modes(s, 2, 1, 0, 0); /* macroblock_pattern only */
552                         }
553                         s->misc_bits+= get_bits_diff(s);
554                     } else {
555                         if(s->dquant){
556                             put_mb_modes(s, 5, 2, 1, 0); /* motion + cbp */
557                             put_bits(&s->pb, 5, s->qscale);
558                         }else{
559                             put_mb_modes(s, 1, 1, 1, 0); /* motion + cbp */
560                         }
561                         s->misc_bits+= get_bits_diff(s);
562                         mpeg1_encode_motion(s, motion_x - s->last_mv[0][0][0], s->f_code);    // RAL: f_code parameter added
563                         mpeg1_encode_motion(s, motion_y - s->last_mv[0][0][1], s->f_code);    // RAL: f_code parameter added
564                         s->mv_bits+= get_bits_diff(s);
565                     }
566                 } else {
567                     put_bits(&s->pb, 3, 1); /* motion only */
568                     if (!s->frame_pred_frame_dct)
569                         put_bits(&s->pb, 2, 2); /* motion_type: frame */
570                     s->misc_bits+= get_bits_diff(s);
571                     mpeg1_encode_motion(s, motion_x - s->last_mv[0][0][0], s->f_code);    // RAL: f_code parameter added
572                     mpeg1_encode_motion(s, motion_y - s->last_mv[0][0][1], s->f_code);    // RAL: f_code parameter added
573                     s->qscale -= s->dquant;
574                     s->mv_bits+= get_bits_diff(s);
575                 }
576                 s->last_mv[0][1][0]= s->last_mv[0][0][0]= motion_x;
577                 s->last_mv[0][1][1]= s->last_mv[0][0][1]= motion_y;
578             }else{
579                 assert(!s->frame_pred_frame_dct && s->mv_type == MV_TYPE_FIELD);
580
581                 if (cbp) {
582                     if(s->dquant){
583                         put_mb_modes(s, 5, 2, 1, 1); /* motion + cbp */
584                         put_bits(&s->pb, 5, s->qscale);
585                     }else{
586                         put_mb_modes(s, 1, 1, 1, 1); /* motion + cbp */
587                     }
588                 } else {
589                     put_bits(&s->pb, 3, 1); /* motion only */
590                     put_bits(&s->pb, 2, 1); /* motion_type: field */
591                     s->qscale -= s->dquant;
592                 }
593                 s->misc_bits+= get_bits_diff(s);
594                 for(i=0; i<2; i++){
595                     put_bits(&s->pb, 1, s->field_select[0][i]);
596                     mpeg1_encode_motion(s, s->mv[0][i][0] -  s->last_mv[0][i][0]    , s->f_code);
597                     mpeg1_encode_motion(s, s->mv[0][i][1] - (s->last_mv[0][i][1]>>1), s->f_code);
598                     s->last_mv[0][i][0]=   s->mv[0][i][0];
599                     s->last_mv[0][i][1]= 2*s->mv[0][i][1];
600                 }
601                 s->mv_bits+= get_bits_diff(s);
602             }
603             if(cbp)
604                 put_bits(&s->pb, mbPatTable[cbp][1], mbPatTable[cbp][0]);
605             s->f_count++;
606         } else{  
607             static const int mb_type_len[4]={0,3,4,2}; //bak,for,bi
608
609             if(s->mv_type == MV_TYPE_16X16){
610                 if (cbp){    // With coded bloc pattern
611                     if (s->dquant) {
612                         if(s->mv_dir == MV_DIR_FORWARD)
613                             put_mb_modes(s, 6, 3, 1, 0);
614                         else
615                             put_mb_modes(s, mb_type_len[s->mv_dir]+3, 2, 1, 0);
616                         put_bits(&s->pb, 5, s->qscale);
617                     } else {
618                         put_mb_modes(s, mb_type_len[s->mv_dir], 3, 1, 0);
619                     }
620                 }else{    // No coded bloc pattern
621                     put_bits(&s->pb, mb_type_len[s->mv_dir], 2);
622                     if (!s->frame_pred_frame_dct)
623                         put_bits(&s->pb, 2, 2); /* motion_type: frame */
624                     s->qscale -= s->dquant;
625                 }
626                 s->misc_bits += get_bits_diff(s);
627                 if (s->mv_dir&MV_DIR_FORWARD){
628                     mpeg1_encode_motion(s, s->mv[0][0][0] - s->last_mv[0][0][0], s->f_code); 
629                     mpeg1_encode_motion(s, s->mv[0][0][1] - s->last_mv[0][0][1], s->f_code); 
630                     s->last_mv[0][0][0]=s->last_mv[0][1][0]= s->mv[0][0][0];
631                     s->last_mv[0][0][1]=s->last_mv[0][1][1]= s->mv[0][0][1];
632                     s->f_count++;
633                 }
634                 if (s->mv_dir&MV_DIR_BACKWARD){
635                     mpeg1_encode_motion(s, s->mv[1][0][0] - s->last_mv[1][0][0], s->b_code); 
636                     mpeg1_encode_motion(s, s->mv[1][0][1] - s->last_mv[1][0][1], s->b_code); 
637                     s->last_mv[1][0][0]=s->last_mv[1][1][0]= s->mv[1][0][0];
638                     s->last_mv[1][0][1]=s->last_mv[1][1][1]= s->mv[1][0][1];
639                     s->b_count++;
640                 }
641             }else{
642                 assert(s->mv_type == MV_TYPE_FIELD);
643                 assert(!s->frame_pred_frame_dct);
644                 if (cbp){    // With coded bloc pattern
645                     if (s->dquant) {
646                         if(s->mv_dir == MV_DIR_FORWARD)
647                             put_mb_modes(s, 6, 3, 1, 1);
648                         else
649                             put_mb_modes(s, mb_type_len[s->mv_dir]+3, 2, 1, 1);
650                         put_bits(&s->pb, 5, s->qscale);
651                     } else {
652                         put_mb_modes(s, mb_type_len[s->mv_dir], 3, 1, 1);
653                     }
654                 }else{    // No coded bloc pattern
655                     put_bits(&s->pb, mb_type_len[s->mv_dir], 2);
656                     put_bits(&s->pb, 2, 1); /* motion_type: field */
657                     s->qscale -= s->dquant;
658                 }
659                 s->misc_bits += get_bits_diff(s);
660                 if (s->mv_dir&MV_DIR_FORWARD){
661                     for(i=0; i<2; i++){
662                         put_bits(&s->pb, 1, s->field_select[0][i]);
663                         mpeg1_encode_motion(s, s->mv[0][i][0] -  s->last_mv[0][i][0]    , s->f_code);
664                         mpeg1_encode_motion(s, s->mv[0][i][1] - (s->last_mv[0][i][1]>>1), s->f_code);
665                         s->last_mv[0][i][0]=   s->mv[0][i][0];
666                         s->last_mv[0][i][1]= 2*s->mv[0][i][1];
667                     }
668                     s->f_count++;
669                 }
670                 if (s->mv_dir&MV_DIR_BACKWARD){
671                     for(i=0; i<2; i++){
672                         put_bits(&s->pb, 1, s->field_select[1][i]);
673                         mpeg1_encode_motion(s, s->mv[1][i][0] -  s->last_mv[1][i][0]    , s->b_code);
674                         mpeg1_encode_motion(s, s->mv[1][i][1] - (s->last_mv[1][i][1]>>1), s->b_code);
675                         s->last_mv[1][i][0]=   s->mv[1][i][0];
676                         s->last_mv[1][i][1]= 2*s->mv[1][i][1];
677                     }
678                     s->b_count++;
679                 }
680             }
681             s->mv_bits += get_bits_diff(s);
682             if(cbp)
683                 put_bits(&s->pb, mbPatTable[cbp][1], mbPatTable[cbp][0]);
684         }
685         for(i=0;i<6;i++) {
686             if (cbp & (1 << (5 - i))) {
687                 mpeg1_encode_block(s, block[i], i);
688             }
689         }
690         s->mb_skip_run = 0;
691         if(s->mb_intra)
692             s->i_tex_bits+= get_bits_diff(s);
693         else
694             s->p_tex_bits+= get_bits_diff(s);
695     }
696 }
697
698 // RAL: Parameter added: f_or_b_code
699 static void mpeg1_encode_motion(MpegEncContext *s, int val, int f_or_b_code)
700 {
701     int code, bit_size, l, m, bits, range, sign;
702
703     if (val == 0) {
704         /* zero vector */
705         code = 0;
706         put_bits(&s->pb,
707                  mbMotionVectorTable[0][1], 
708                  mbMotionVectorTable[0][0]); 
709     } else {
710         bit_size = f_or_b_code - 1;
711         range = 1 << bit_size;
712         /* modulo encoding */
713         l = 16 * range;
714         m = 2 * l;
715         if (val < -l) {
716             val += m;
717         } else if (val >= l) {
718             val -= m;
719         }
720
721         if (val >= 0) {
722             val--;
723             code = (val >> bit_size) + 1;
724             bits = val & (range - 1);
725             sign = 0;
726         } else {
727             val = -val;
728             val--;
729             code = (val >> bit_size) + 1;
730             bits = val & (range - 1);
731             sign = 1;
732         }
733
734         assert(code > 0 && code <= 16);
735
736         put_bits(&s->pb,
737                  mbMotionVectorTable[code][1], 
738                  mbMotionVectorTable[code][0]); 
739
740         put_bits(&s->pb, 1, sign);
741         if (bit_size > 0) {
742             put_bits(&s->pb, bit_size, bits);
743         }
744     }
745 }
746
747 void ff_mpeg1_encode_init(MpegEncContext *s)
748 {
749     static int done=0;
750
751     common_init(s);
752
753     if(!done){
754         int f_code;
755         int mv;
756         int i;
757
758         done=1;
759         init_rl(&rl_mpeg1);
760
761         for(i=0; i<64; i++)
762         {
763                 mpeg1_max_level[0][i]= rl_mpeg1.max_level[0][i];
764                 mpeg1_index_run[0][i]= rl_mpeg1.index_run[0][i];
765         }
766         
767         init_uni_ac_vlc(&rl_mpeg1, uni_mpeg1_ac_vlc_bits, uni_mpeg1_ac_vlc_len);
768
769         /* build unified dc encoding tables */
770         for(i=-255; i<256; i++)
771         {
772                 int adiff, index;
773                 int bits, code;
774                 int diff=i;
775
776                 adiff = ABS(diff);
777                 if(diff<0) diff--;
778                 index = vlc_dc_table[adiff];
779
780                 bits= vlc_dc_lum_bits[index] + index;
781                 code= (vlc_dc_lum_code[index]<<index) + (diff & ((1 << index) - 1));
782                 mpeg1_lum_dc_uni[i+255]= bits + (code<<8);
783                 
784                 bits= vlc_dc_chroma_bits[index] + index;
785                 code= (vlc_dc_chroma_code[index]<<index) + (diff & ((1 << index) - 1));
786                 mpeg1_chr_dc_uni[i+255]= bits + (code<<8);
787         }
788
789         mv_penalty= av_mallocz( sizeof(uint8_t)*(MAX_FCODE+1)*(2*MAX_MV+1) );
790
791         for(f_code=1; f_code<=MAX_FCODE; f_code++){
792             for(mv=-MAX_MV; mv<=MAX_MV; mv++){
793                 int len;
794
795                 if(mv==0) len= mbMotionVectorTable[0][1];
796                 else{
797                     int val, bit_size, range, code;
798
799                     bit_size = s->f_code - 1;
800                     range = 1 << bit_size;
801
802                     val=mv;
803                     if (val < 0) 
804                         val = -val;
805                     val--;
806                     code = (val >> bit_size) + 1;
807                     if(code<17){
808                         len= mbMotionVectorTable[code][1] + 1 + bit_size;
809                     }else{
810                         len= mbMotionVectorTable[16][1] + 2 + bit_size;
811                     }
812                 }
813
814                 mv_penalty[f_code][mv+MAX_MV]= len;
815             }
816         }
817         
818
819         for(f_code=MAX_FCODE; f_code>0; f_code--){
820             for(mv=-(8<<f_code); mv<(8<<f_code); mv++){
821                 fcode_tab[mv+MAX_MV]= f_code;
822             }
823         }
824     }
825     s->me.mv_penalty= mv_penalty;
826     s->fcode_tab= fcode_tab;
827     if(s->codec_id == CODEC_ID_MPEG1VIDEO){
828         s->min_qcoeff=-255;
829         s->max_qcoeff= 255;
830     }else{
831         s->min_qcoeff=-2047;
832         s->max_qcoeff= 2047;
833     }
834     s->intra_ac_vlc_length=
835     s->inter_ac_vlc_length=
836     s->intra_ac_vlc_last_length=
837     s->inter_ac_vlc_last_length= uni_mpeg1_ac_vlc_len;
838 }
839
840 static inline void encode_dc(MpegEncContext *s, int diff, int component)
841 {
842     if (component == 0) {
843         put_bits(
844             &s->pb, 
845             mpeg1_lum_dc_uni[diff+255]&0xFF,
846             mpeg1_lum_dc_uni[diff+255]>>8);
847     } else {
848         put_bits(
849             &s->pb, 
850             mpeg1_chr_dc_uni[diff+255]&0xFF,
851             mpeg1_chr_dc_uni[diff+255]>>8);
852     }
853 }
854
855 static void mpeg1_encode_block(MpegEncContext *s, 
856                                DCTELEM *block, 
857                                int n)
858 {
859     int alevel, level, last_non_zero, dc, diff, i, j, run, last_index, sign;
860     int code, component;
861 //    RLTable *rl = &rl_mpeg1;
862
863     last_index = s->block_last_index[n];
864
865     /* DC coef */
866     if (s->mb_intra) {
867         component = (n <= 3 ? 0 : n - 4 + 1);
868         dc = block[0]; /* overflow is impossible */
869         diff = dc - s->last_dc[component];
870         encode_dc(s, diff, component);
871         s->last_dc[component] = dc;
872         i = 1;
873 /*
874         if (s->intra_vlc_format)
875             rl = &rl_mpeg2;
876         else
877             rl = &rl_mpeg1;
878 */
879     } else {
880         /* encode the first coefficient : needs to be done here because
881            it is handled slightly differently */
882         level = block[0];
883         if (abs(level) == 1) {
884                 code = ((uint32_t)level >> 31); /* the sign bit */
885                 put_bits(&s->pb, 2, code | 0x02);
886                 i = 1;
887         } else {
888             i = 0;
889             last_non_zero = -1;
890             goto next_coef;
891         }
892     }
893
894     /* now quantify & encode AC coefs */
895     last_non_zero = i - 1;
896
897     for(;i<=last_index;i++) {
898         j = s->intra_scantable.permutated[i];
899         level = block[j];
900     next_coef:
901 #if 0
902         if (level != 0)
903             dprintf("level[%d]=%d\n", i, level);
904 #endif            
905         /* encode using VLC */
906         if (level != 0) {
907             run = i - last_non_zero - 1;
908             
909             alevel= level;
910             MASK_ABS(sign, alevel)
911             sign&=1;
912
913 //            code = get_rl_index(rl, 0, run, alevel);
914             if (alevel <= mpeg1_max_level[0][run]){
915                 code= mpeg1_index_run[0][run] + alevel - 1;
916                 /* store the vlc & sign at once */
917                 put_bits(&s->pb, mpeg1_vlc[code][1]+1, (mpeg1_vlc[code][0]<<1) + sign);
918             } else {
919                 /* escape seems to be pretty rare <5% so i dont optimize it */
920                 put_bits(&s->pb, mpeg1_vlc[111/*rl->n*/][1], mpeg1_vlc[111/*rl->n*/][0]);
921                 /* escape: only clip in this case */
922                 put_bits(&s->pb, 6, run);
923                 if(s->codec_id == CODEC_ID_MPEG1VIDEO){
924                     if (alevel < 128) {
925                         put_bits(&s->pb, 8, level & 0xff);
926                     } else {
927                         if (level < 0) {
928                             put_bits(&s->pb, 16, 0x8001 + level + 255);
929                         } else {
930                             put_bits(&s->pb, 16, level & 0xffff);
931                         }
932                     }
933                 }else{
934                     put_bits(&s->pb, 12, level & 0xfff);
935                 }
936             }
937             last_non_zero = i;
938         }
939     }
940     /* end of block */
941     put_bits(&s->pb, 2, 0x2);
942 }
943 #endif //CONFIG_ENCODERS
944
945 /******************************************/
946 /* decoding */
947
948 static VLC dc_lum_vlc;
949 static VLC dc_chroma_vlc;
950 static VLC mv_vlc;
951 static VLC mbincr_vlc;
952 static VLC mb_ptype_vlc;
953 static VLC mb_btype_vlc;
954 static VLC mb_pat_vlc;
955
956 static void init_vlcs()
957 {
958     static int done = 0;
959
960     if (!done) {
961         done = 1;
962
963         init_vlc(&dc_lum_vlc, DC_VLC_BITS, 12, 
964                  vlc_dc_lum_bits, 1, 1,
965                  vlc_dc_lum_code, 2, 2);
966         init_vlc(&dc_chroma_vlc,  DC_VLC_BITS, 12, 
967                  vlc_dc_chroma_bits, 1, 1,
968                  vlc_dc_chroma_code, 2, 2);
969         init_vlc(&mv_vlc, MV_VLC_BITS, 17, 
970                  &mbMotionVectorTable[0][1], 2, 1,
971                  &mbMotionVectorTable[0][0], 2, 1);
972         init_vlc(&mbincr_vlc, MBINCR_VLC_BITS, 36, 
973                  &mbAddrIncrTable[0][1], 2, 1,
974                  &mbAddrIncrTable[0][0], 2, 1);
975         init_vlc(&mb_pat_vlc, MB_PAT_VLC_BITS, 64,
976                  &mbPatTable[0][1], 2, 1,
977                  &mbPatTable[0][0], 2, 1);
978         
979         init_vlc(&mb_ptype_vlc, MB_PTYPE_VLC_BITS, 7, 
980                  &table_mb_ptype[0][1], 2, 1,
981                  &table_mb_ptype[0][0], 2, 1);
982         init_vlc(&mb_btype_vlc, MB_BTYPE_VLC_BITS, 11, 
983                  &table_mb_btype[0][1], 2, 1,
984                  &table_mb_btype[0][0], 2, 1);
985         init_rl(&rl_mpeg1);
986         init_rl(&rl_mpeg2);
987
988         init_2d_vlc_rl(&rl_mpeg1);
989         init_2d_vlc_rl(&rl_mpeg2);
990     }
991 }
992
993 static inline int get_dmv(MpegEncContext *s)
994 {
995     if(get_bits1(&s->gb)) 
996         return 1 - (get_bits1(&s->gb) << 1);
997     else
998         return 0;
999 }
1000
1001 static inline int get_qscale(MpegEncContext *s)
1002 {
1003     int qscale = get_bits(&s->gb, 5);
1004     if (s->q_scale_type) {
1005         return non_linear_qscale[qscale];
1006     } else {
1007         return qscale << 1;
1008     }
1009 }
1010
1011 /* motion type (for mpeg2) */
1012 #define MT_FIELD 1
1013 #define MT_FRAME 2
1014 #define MT_16X8  2
1015 #define MT_DMV   3
1016
1017 static int mpeg_decode_mb(MpegEncContext *s,
1018                           DCTELEM block[12][64])
1019 {
1020     int i, j, k, cbp, val, mb_type, motion_type;
1021     
1022     dprintf("decode_mb: x=%d y=%d\n", s->mb_x, s->mb_y);
1023
1024     assert(s->mb_skiped==0);
1025
1026     if (s->mb_skip_run-- != 0) {
1027         if(s->pict_type == I_TYPE){
1028             av_log(s->avctx, AV_LOG_ERROR, "skiped MB in I frame at %d %d\n", s->mb_x, s->mb_y);
1029             return -1;
1030         }
1031     
1032         /* skip mb */
1033         s->mb_intra = 0;
1034         for(i=0;i<12;i++)
1035             s->block_last_index[i] = -1;
1036         if(s->picture_structure == PICT_FRAME)
1037             s->mv_type = MV_TYPE_16X16;
1038         else
1039             s->mv_type = MV_TYPE_FIELD;
1040         if (s->pict_type == P_TYPE) {
1041             /* if P type, zero motion vector is implied */
1042             s->mv_dir = MV_DIR_FORWARD;
1043             s->mv[0][0][0] = s->mv[0][0][1] = 0;
1044             s->last_mv[0][0][0] = s->last_mv[0][0][1] = 0;
1045             s->last_mv[0][1][0] = s->last_mv[0][1][1] = 0;
1046             s->field_select[0][0]= s->picture_structure - 1;
1047             s->mb_skiped = 1;
1048             s->current_picture.mb_type[ s->mb_x + s->mb_y*s->mb_stride ]= MB_TYPE_SKIP | MB_TYPE_L0 | MB_TYPE_16x16;
1049         } else {
1050             /* if B type, reuse previous vectors and directions */
1051             s->mv[0][0][0] = s->last_mv[0][0][0];
1052             s->mv[0][0][1] = s->last_mv[0][0][1];
1053             s->mv[1][0][0] = s->last_mv[1][0][0];
1054             s->mv[1][0][1] = s->last_mv[1][0][1];
1055
1056             s->current_picture.mb_type[ s->mb_x + s->mb_y*s->mb_stride ]= 
1057                 s->current_picture.mb_type[ s->mb_x + s->mb_y*s->mb_stride - 1] | MB_TYPE_SKIP;
1058 //            assert(s->current_picture.mb_type[ s->mb_x + s->mb_y*s->mb_stride - 1]&(MB_TYPE_16x16|MB_TYPE_16x8));
1059
1060             if((s->mv[0][0][0]|s->mv[0][0][1]|s->mv[1][0][0]|s->mv[1][0][1])==0) 
1061                 s->mb_skiped = 1;
1062         }
1063
1064         return 0;
1065     }
1066
1067     switch(s->pict_type) {
1068     default:
1069     case I_TYPE:
1070         if (get_bits1(&s->gb) == 0) {
1071             if (get_bits1(&s->gb) == 0){
1072                 av_log(s->avctx, AV_LOG_ERROR, "invalid mb type in I Frame at %d %d\n", s->mb_x, s->mb_y);
1073                 return -1;
1074             }
1075             mb_type = MB_TYPE_QUANT | MB_TYPE_INTRA;
1076         } else {
1077             mb_type = MB_TYPE_INTRA;
1078         }
1079         break;
1080     case P_TYPE:
1081         mb_type = get_vlc2(&s->gb, mb_ptype_vlc.table, MB_PTYPE_VLC_BITS, 1);
1082         if (mb_type < 0){
1083             av_log(s->avctx, AV_LOG_ERROR, "invalid mb type in P Frame at %d %d\n", s->mb_x, s->mb_y);
1084             return -1;
1085         }
1086         mb_type = ptype2mb_type[ mb_type ];
1087         break;
1088     case B_TYPE:
1089         mb_type = get_vlc2(&s->gb, mb_btype_vlc.table, MB_BTYPE_VLC_BITS, 1);
1090         if (mb_type < 0){
1091             av_log(s->avctx, AV_LOG_ERROR, "invalid mb type in B Frame at %d %d\n", s->mb_x, s->mb_y);
1092             return -1;
1093         }
1094         mb_type = btype2mb_type[ mb_type ];
1095         break;
1096     }
1097     dprintf("mb_type=%x\n", mb_type);
1098 //    motion_type = 0; /* avoid warning */
1099     if (IS_INTRA(mb_type)) {
1100         /* compute dct type */
1101         if (s->picture_structure == PICT_FRAME && //FIXME add a interlaced_dct coded var?
1102             !s->frame_pred_frame_dct) {
1103             s->interlaced_dct = get_bits1(&s->gb);
1104         }
1105
1106         if (IS_QUANT(mb_type))
1107             s->qscale = get_qscale(s);
1108         
1109         if (s->concealment_motion_vectors) {
1110             /* just parse them */
1111             if (s->picture_structure != PICT_FRAME) 
1112                 skip_bits1(&s->gb); /* field select */
1113             
1114             s->mv[0][0][0]= s->last_mv[0][0][0]= s->last_mv[0][1][0] = 
1115                 mpeg_decode_motion(s, s->mpeg_f_code[0][0], s->last_mv[0][0][0]);
1116             s->mv[0][0][1]= s->last_mv[0][0][1]= s->last_mv[0][1][1] = 
1117                 mpeg_decode_motion(s, s->mpeg_f_code[0][1], s->last_mv[0][0][1]);
1118
1119             skip_bits1(&s->gb); /* marker */
1120         }else
1121             memset(s->last_mv, 0, sizeof(s->last_mv)); /* reset mv prediction */
1122         s->mb_intra = 1;
1123 #ifdef HAVE_XVMC
1124         //one 1 we memcpy blocks in xvmcvideo
1125         if(s->avctx->xvmc_acceleration > 1){
1126             XVMC_pack_pblocks(s,-1);//inter are always full blocks
1127             if(s->swap_uv){
1128                 exchange_uv(s);
1129             }
1130         }
1131 #endif
1132
1133         if (s->codec_id == CODEC_ID_MPEG2VIDEO) {
1134             for(i=0;i<4+(1<<s->chroma_format);i++) {
1135                 if (mpeg2_decode_block_intra(s, s->pblocks[i], i) < 0)
1136                     return -1;
1137             }
1138         } else {
1139             for(i=0;i<6;i++) {
1140                 if (mpeg1_decode_block_intra(s, s->pblocks[i], i) < 0)
1141                     return -1;
1142             }
1143         }
1144     } else {
1145         if (mb_type & MB_TYPE_ZERO_MV){
1146             assert(mb_type & MB_TYPE_CBP);
1147
1148             /* compute dct type */
1149             if (s->picture_structure == PICT_FRAME && //FIXME add a interlaced_dct coded var?
1150                 !s->frame_pred_frame_dct) {
1151                 s->interlaced_dct = get_bits1(&s->gb);
1152             }
1153
1154             if (IS_QUANT(mb_type))
1155                 s->qscale = get_qscale(s);
1156
1157             s->mv_dir = MV_DIR_FORWARD;
1158             if(s->picture_structure == PICT_FRAME)
1159                 s->mv_type = MV_TYPE_16X16;
1160             else{
1161                 s->mv_type = MV_TYPE_FIELD;
1162                 mb_type |= MB_TYPE_INTERLACED;
1163                 s->field_select[0][0]= s->picture_structure - 1;
1164             }
1165             s->last_mv[0][0][0] = 0;
1166             s->last_mv[0][0][1] = 0;
1167             s->last_mv[0][1][0] = 0;
1168             s->last_mv[0][1][1] = 0;
1169             s->mv[0][0][0] = 0;
1170             s->mv[0][0][1] = 0;
1171         }else{
1172             assert(mb_type & MB_TYPE_L0L1);
1173 //FIXME decide if MBs in field pictures are MB_TYPE_INTERLACED
1174             /* get additionnal motion vector type */
1175             if (s->frame_pred_frame_dct) 
1176                 motion_type = MT_FRAME;
1177             else{
1178                 motion_type = get_bits(&s->gb, 2);
1179             }
1180
1181             /* compute dct type */
1182             if (s->picture_structure == PICT_FRAME && //FIXME add a interlaced_dct coded var?
1183                 !s->frame_pred_frame_dct && HAS_CBP(mb_type)) {
1184                 s->interlaced_dct = get_bits1(&s->gb);
1185             }
1186
1187             if (IS_QUANT(mb_type))
1188                 s->qscale = get_qscale(s);
1189
1190             /* motion vectors */
1191             s->mv_dir = 0;
1192             for(i=0;i<2;i++) {
1193                 if (USES_LIST(mb_type, i)) {
1194                     s->mv_dir |= (MV_DIR_FORWARD >> i);
1195                     dprintf("motion_type=%d\n", motion_type);
1196                     switch(motion_type) {
1197                     case MT_FRAME: /* or MT_16X8 */
1198                         if (s->picture_structure == PICT_FRAME) {
1199                             /* MT_FRAME */
1200                             mb_type |= MB_TYPE_16x16; 
1201                             s->mv_type = MV_TYPE_16X16;
1202                             s->mv[i][0][0]= s->last_mv[i][0][0]= s->last_mv[i][1][0] = 
1203                                 mpeg_decode_motion(s, s->mpeg_f_code[i][0], s->last_mv[i][0][0]);
1204                             s->mv[i][0][1]= s->last_mv[i][0][1]= s->last_mv[i][1][1] = 
1205                                 mpeg_decode_motion(s, s->mpeg_f_code[i][1], s->last_mv[i][0][1]);
1206                             /* full_pel: only for mpeg1 */
1207                             if (s->full_pel[i]){
1208                                 s->mv[i][0][0] <<= 1;
1209                                 s->mv[i][0][1] <<= 1;
1210                             }
1211                         } else {
1212                             /* MT_16X8 */
1213                             mb_type |= MB_TYPE_16x8 | MB_TYPE_INTERLACED; 
1214                             s->mv_type = MV_TYPE_16X8;
1215                             for(j=0;j<2;j++) {
1216                                 s->field_select[i][j] = get_bits1(&s->gb);
1217                                 for(k=0;k<2;k++) {
1218                                     val = mpeg_decode_motion(s, s->mpeg_f_code[i][k],
1219                                                              s->last_mv[i][j][k]);
1220                                     s->last_mv[i][j][k] = val;
1221                                     s->mv[i][j][k] = val;
1222                                 }
1223                             }
1224                         }
1225                         break;
1226                     case MT_FIELD:
1227                         s->mv_type = MV_TYPE_FIELD;
1228                         if (s->picture_structure == PICT_FRAME) {
1229                             mb_type |= MB_TYPE_16x8 | MB_TYPE_INTERLACED; 
1230                             for(j=0;j<2;j++) {
1231                                 s->field_select[i][j] = get_bits1(&s->gb);
1232                                 val = mpeg_decode_motion(s, s->mpeg_f_code[i][0],
1233                                                          s->last_mv[i][j][0]);
1234                                 s->last_mv[i][j][0] = val;
1235                                 s->mv[i][j][0] = val;
1236                                 dprintf("fmx=%d\n", val);
1237                                 val = mpeg_decode_motion(s, s->mpeg_f_code[i][1],
1238                                                          s->last_mv[i][j][1] >> 1);
1239                                 s->last_mv[i][j][1] = val << 1;
1240                                 s->mv[i][j][1] = val;
1241                                 dprintf("fmy=%d\n", val);
1242                             }
1243                         } else {
1244                             mb_type |= MB_TYPE_16x16 | MB_TYPE_INTERLACED; 
1245                             s->field_select[i][0] = get_bits1(&s->gb);
1246                             for(k=0;k<2;k++) {
1247                                 val = mpeg_decode_motion(s, s->mpeg_f_code[i][k],
1248                                                          s->last_mv[i][0][k]);
1249                                 s->last_mv[i][0][k] = val;
1250                                 s->last_mv[i][1][k] = val;
1251                                 s->mv[i][0][k] = val;
1252                             }
1253                         }
1254                         break;
1255                     case MT_DMV:
1256                         {
1257                             int dmx, dmy, mx, my, m;
1258
1259                             mx = mpeg_decode_motion(s, s->mpeg_f_code[i][0], 
1260                                                     s->last_mv[i][0][0]);
1261                             s->last_mv[i][0][0] = mx;
1262                             s->last_mv[i][1][0] = mx;
1263                             dmx = get_dmv(s);
1264                             my = mpeg_decode_motion(s, s->mpeg_f_code[i][1], 
1265                                                     s->last_mv[i][0][1] >> 1);
1266                             dmy = get_dmv(s);
1267                             s->mv_type = MV_TYPE_DMV;
1268
1269
1270                             s->last_mv[i][0][1] = my<<1;
1271                             s->last_mv[i][1][1] = my<<1;
1272
1273                             s->mv[i][0][0] = mx;
1274                             s->mv[i][0][1] = my;
1275                             s->mv[i][1][0] = mx;//not used
1276                             s->mv[i][1][1] = my;//not used
1277
1278                             if (s->picture_structure == PICT_FRAME) {
1279                                 mb_type |= MB_TYPE_16x16 | MB_TYPE_INTERLACED; 
1280
1281                                 //m = 1 + 2 * s->top_field_first;
1282                                 m = s->top_field_first ? 1 : 3;
1283
1284                                 /* top -> top pred */
1285                                 s->mv[i][2][0] = ((mx * m + (mx > 0)) >> 1) + dmx;
1286                                 s->mv[i][2][1] = ((my * m + (my > 0)) >> 1) + dmy - 1;
1287                                 m = 4 - m;
1288                                 s->mv[i][3][0] = ((mx * m + (mx > 0)) >> 1) + dmx;
1289                                 s->mv[i][3][1] = ((my * m + (my > 0)) >> 1) + dmy + 1;
1290                             } else {
1291                                 mb_type |= MB_TYPE_16x16;
1292
1293                                 s->mv[i][2][0] = ((mx + (mx > 0)) >> 1) + dmx;
1294                                 s->mv[i][2][1] = ((my + (my > 0)) >> 1) + dmy;
1295                                 if(s->picture_structure == PICT_TOP_FIELD)
1296                                     s->mv[i][2][1]--;
1297                                 else 
1298                                     s->mv[i][2][1]++;
1299                             }
1300                         }
1301                         break;
1302                     default:
1303                         av_log(s->avctx, AV_LOG_ERROR, "00 motion_type at %d %d\n", s->mb_x, s->mb_y);
1304                         return -1;
1305                     }
1306                 }
1307             }
1308         }
1309         
1310         s->mb_intra = 0;
1311
1312         if (HAS_CBP(mb_type)) {
1313             cbp = get_vlc2(&s->gb, mb_pat_vlc.table, MB_PAT_VLC_BITS, 1);
1314             if (cbp < 0 || ((cbp == 0) && (s->chroma_format < 2)) ){
1315                 av_log(s->avctx, AV_LOG_ERROR, "invalid cbp at %d %d\n", s->mb_x, s->mb_y);
1316                 return -1;
1317             }
1318             if(s->chroma_format == 2){//CHROMA422
1319                  cbp|= ( get_bits(&s->gb,2) ) << 6;
1320             }else
1321             if(s->chroma_format >  2){//CHROMA444
1322                  cbp|= ( get_bits(&s->gb,6) ) << 6;
1323             }
1324
1325 #ifdef HAVE_XVMC
1326             //on 1 we memcpy blocks in xvmcvideo
1327             if(s->avctx->xvmc_acceleration > 1){
1328                 XVMC_pack_pblocks(s,cbp);
1329                 if(s->swap_uv){
1330                     exchange_uv(s);
1331                 }
1332             }    
1333 #endif
1334
1335             if (s->codec_id == CODEC_ID_MPEG2VIDEO) {
1336                 for(i=0;i<6;i++) {
1337                     if (cbp & (1<<(5-i)) ) {
1338                         if (mpeg2_decode_block_non_intra(s, s->pblocks[i], i) < 0)
1339                             return -1;
1340                     } else {
1341                         s->block_last_index[i] = -1;
1342                     }
1343                 }
1344                 if (s->chroma_format >= 2) {
1345                     if (s->chroma_format == 2) {//CHROMA_422)
1346                         for(i=6;i<8;i++) {
1347                             if (cbp & (1<<(6+7-i)) ) {
1348                                 if (mpeg2_decode_block_non_intra(s, s->pblocks[i], i) < 0)
1349                                     return -1;
1350                             } else {
1351                                 s->block_last_index[i] = -1;
1352                             }
1353                         }
1354                     }else{ /*CHROMA_444*/
1355                         for(i=6;i<12;i++) {
1356                             if (cbp & (1<<(6+11-i)) ) {
1357                                 if (mpeg2_decode_block_non_intra(s, s->pblocks[i], i) < 0)
1358                                     return -1;
1359                             } else {
1360                                 s->block_last_index[i] = -1;
1361                             }
1362                         }
1363                     }
1364                 }
1365             } else {
1366                 for(i=0;i<6;i++) {
1367                     if (cbp & 32) {
1368                         if (mpeg1_decode_block_inter(s, s->pblocks[i], i) < 0)
1369                             return -1;
1370                     } else {
1371                         s->block_last_index[i] = -1;
1372                     }
1373                     cbp+=cbp;
1374                 }
1375             }
1376         }else{
1377             for(i=0;i<6;i++)
1378                 s->block_last_index[i] = -1;
1379         }
1380     }
1381
1382     s->current_picture.mb_type[ s->mb_x + s->mb_y*s->mb_stride ]= mb_type;
1383
1384     return 0;
1385 }
1386
1387 /* as h263, but only 17 codes */
1388 static int mpeg_decode_motion(MpegEncContext *s, int fcode, int pred)
1389 {
1390     int code, sign, val, l, shift;
1391
1392     code = get_vlc2(&s->gb, mv_vlc.table, MV_VLC_BITS, 2);
1393     if (code == 0) {
1394         return pred;
1395     }
1396     if (code < 0) {
1397         return 0xffff;
1398     }
1399
1400     sign = get_bits1(&s->gb);
1401     shift = fcode - 1;
1402     val = code;
1403     if (shift) {
1404         val = (val - 1) << shift;
1405         val |= get_bits(&s->gb, shift);
1406         val++;
1407     }
1408     if (sign)
1409         val = -val;
1410     val += pred;
1411     
1412     /* modulo decoding */
1413     l = 1 << (shift+4);
1414     val = ((val + l)&(l*2-1)) - l;
1415     return val;
1416 }
1417
1418 static inline int decode_dc(GetBitContext *gb, int component)
1419 {
1420     int code, diff;
1421
1422     if (component == 0) {
1423         code = get_vlc2(gb, dc_lum_vlc.table, DC_VLC_BITS, 2);
1424     } else {
1425         code = get_vlc2(gb, dc_chroma_vlc.table, DC_VLC_BITS, 2);
1426     }
1427     if (code < 0){
1428         av_log(NULL, AV_LOG_ERROR, "invalid dc code at\n");
1429         return 0xffff;
1430     }
1431     if (code == 0) {
1432         diff = 0;
1433     } else {
1434         diff = get_xbits(gb, code);
1435     }
1436     return diff;
1437 }
1438
1439 static inline int mpeg1_decode_block_intra(MpegEncContext *s, 
1440                                DCTELEM *block, 
1441                                int n)
1442 {
1443     int level, dc, diff, i, j, run;
1444     int component;
1445     RLTable *rl = &rl_mpeg1;
1446     uint8_t * const scantable= s->intra_scantable.permutated;
1447     const uint16_t *quant_matrix= s->intra_matrix;
1448     const int qscale= s->qscale;
1449
1450     /* DC coef */
1451     component = (n <= 3 ? 0 : n - 4 + 1);
1452     diff = decode_dc(&s->gb, component);
1453     if (diff >= 0xffff)
1454         return -1;
1455     dc = s->last_dc[component];
1456     dc += diff;
1457     s->last_dc[component] = dc;
1458     block[0] = dc<<3;
1459     dprintf("dc=%d diff=%d\n", dc, diff);
1460     i = 0;
1461     {
1462         OPEN_READER(re, &s->gb);    
1463         /* now quantify & encode AC coefs */
1464         for(;;) {
1465             UPDATE_CACHE(re, &s->gb);
1466             GET_RL_VLC(level, run, re, &s->gb, rl->rl_vlc[0], TEX_VLC_BITS, 2);
1467             
1468             if(level == 127){
1469                 break;
1470             } else if(level != 0) {
1471                 i += run;
1472                 j = scantable[i];
1473                 level= (level*qscale*quant_matrix[j])>>4;
1474                 level= (level-1)|1;
1475                 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
1476                 LAST_SKIP_BITS(re, &s->gb, 1);
1477             } else {
1478                 /* escape */
1479                 run = SHOW_UBITS(re, &s->gb, 6)+1; LAST_SKIP_BITS(re, &s->gb, 6);
1480                 UPDATE_CACHE(re, &s->gb);
1481                 level = SHOW_SBITS(re, &s->gb, 8); SKIP_BITS(re, &s->gb, 8);
1482                 if (level == -128) {
1483                     level = SHOW_UBITS(re, &s->gb, 8) - 256; LAST_SKIP_BITS(re, &s->gb, 8);
1484                 } else if (level == 0) {
1485                     level = SHOW_UBITS(re, &s->gb, 8)      ; LAST_SKIP_BITS(re, &s->gb, 8);
1486                 }
1487                 i += run;
1488                 j = scantable[i];
1489                 if(level<0){
1490                     level= -level;
1491                     level= (level*qscale*quant_matrix[j])>>4;
1492                     level= (level-1)|1;
1493                     level= -level;
1494                 }else{
1495                     level= (level*qscale*quant_matrix[j])>>4;
1496                     level= (level-1)|1;
1497                 }
1498             }
1499             if (i > 63){
1500                 av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
1501                 return -1;
1502             }
1503
1504             block[j] = level;
1505         }
1506         CLOSE_READER(re, &s->gb);
1507     }
1508     s->block_last_index[n] = i;
1509    return 0;
1510 }
1511
1512 static inline int mpeg1_decode_block_inter(MpegEncContext *s, 
1513                                DCTELEM *block, 
1514                                int n)
1515 {
1516     int level, i, j, run;
1517     RLTable *rl = &rl_mpeg1;
1518     uint8_t * const scantable= s->intra_scantable.permutated;
1519     const uint16_t *quant_matrix= s->inter_matrix;
1520     const int qscale= s->qscale;
1521
1522     {
1523         int v;
1524         OPEN_READER(re, &s->gb);
1525         i = -1;
1526         /* special case for the first coef. no need to add a second vlc table */
1527         UPDATE_CACHE(re, &s->gb);
1528         v= SHOW_UBITS(re, &s->gb, 2);
1529         if (v & 2) {
1530             LAST_SKIP_BITS(re, &s->gb, 2);
1531             level= (3*qscale*quant_matrix[0])>>5;
1532             level= (level-1)|1;
1533             if(v&1)
1534                 level= -level;
1535             block[0] = level;
1536             i++;
1537         }
1538
1539         /* now quantify & encode AC coefs */
1540         for(;;) {
1541             UPDATE_CACHE(re, &s->gb);
1542             GET_RL_VLC(level, run, re, &s->gb, rl->rl_vlc[0], TEX_VLC_BITS, 2);
1543             
1544             if(level == 127){
1545                 break;
1546             } else if(level != 0) {
1547                 i += run;
1548                 j = scantable[i];
1549                 level= ((level*2+1)*qscale*quant_matrix[j])>>5;
1550                 level= (level-1)|1;
1551                 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
1552                 LAST_SKIP_BITS(re, &s->gb, 1);
1553             } else {
1554                 /* escape */
1555                 run = SHOW_UBITS(re, &s->gb, 6)+1; LAST_SKIP_BITS(re, &s->gb, 6);
1556                 UPDATE_CACHE(re, &s->gb);
1557                 level = SHOW_SBITS(re, &s->gb, 8); SKIP_BITS(re, &s->gb, 8);
1558                 if (level == -128) {
1559                     level = SHOW_UBITS(re, &s->gb, 8) - 256; LAST_SKIP_BITS(re, &s->gb, 8);
1560                 } else if (level == 0) {
1561                     level = SHOW_UBITS(re, &s->gb, 8)      ; LAST_SKIP_BITS(re, &s->gb, 8);
1562                 }
1563                 i += run;
1564                 j = scantable[i];
1565                 if(level<0){
1566                     level= -level;
1567                     level= ((level*2+1)*qscale*quant_matrix[j])>>5;
1568                     level= (level-1)|1;
1569                     level= -level;
1570                 }else{
1571                     level= ((level*2+1)*qscale*quant_matrix[j])>>5;
1572                     level= (level-1)|1;
1573                 }
1574             }
1575             if (i > 63){
1576                 av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
1577                 return -1;
1578             }
1579
1580             block[j] = level;
1581         }
1582         CLOSE_READER(re, &s->gb);
1583     }
1584     s->block_last_index[n] = i;
1585     return 0;
1586 }
1587
1588 /* Also does unquantization here, since I will never support mpeg2
1589    encoding */
1590 static inline int mpeg2_decode_block_non_intra(MpegEncContext *s, 
1591                                DCTELEM *block, 
1592                                int n)
1593 {
1594     int level, i, j, run;
1595     RLTable *rl = &rl_mpeg1;
1596     uint8_t * const scantable= s->intra_scantable.permutated;
1597     const uint16_t *quant_matrix;
1598     const int qscale= s->qscale;
1599     int mismatch;
1600
1601     mismatch = 1;
1602
1603     {
1604         int v;
1605         OPEN_READER(re, &s->gb);
1606         i = -1;
1607         if (n < 4)
1608             quant_matrix = s->inter_matrix;
1609         else
1610             quant_matrix = s->chroma_inter_matrix;
1611
1612         /* special case for the first coef. no need to add a second vlc table */
1613         UPDATE_CACHE(re, &s->gb);
1614         v= SHOW_UBITS(re, &s->gb, 2);
1615         if (v & 2) {
1616             LAST_SKIP_BITS(re, &s->gb, 2);
1617             level= (3*qscale*quant_matrix[0])>>5;
1618             if(v&1)
1619                 level= -level;
1620             block[0] = level;
1621             mismatch ^= level;
1622             i++;
1623         }
1624
1625         /* now quantify & encode AC coefs */
1626         for(;;) {
1627             UPDATE_CACHE(re, &s->gb);
1628             GET_RL_VLC(level, run, re, &s->gb, rl->rl_vlc[0], TEX_VLC_BITS, 2);
1629             
1630             if(level == 127){
1631                 break;
1632             } else if(level != 0) {
1633                 i += run;
1634                 j = scantable[i];
1635                 level= ((level*2+1)*qscale*quant_matrix[j])>>5;
1636                 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
1637                 LAST_SKIP_BITS(re, &s->gb, 1);
1638             } else {
1639                 /* escape */
1640                 run = SHOW_UBITS(re, &s->gb, 6)+1; LAST_SKIP_BITS(re, &s->gb, 6);
1641                 UPDATE_CACHE(re, &s->gb);
1642                 level = SHOW_SBITS(re, &s->gb, 12); SKIP_BITS(re, &s->gb, 12);
1643
1644                 i += run;
1645                 j = scantable[i];
1646                 if(level<0){
1647                     level= ((-level*2+1)*qscale*quant_matrix[j])>>5;
1648                     level= -level;
1649                 }else{
1650                     level= ((level*2+1)*qscale*quant_matrix[j])>>5;
1651                 }
1652             }
1653             if (i > 63){
1654                 av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
1655                 return -1;
1656             }
1657             
1658             mismatch ^= level;
1659             block[j] = level;
1660         }
1661         CLOSE_READER(re, &s->gb);
1662     }
1663     block[63] ^= (mismatch & 1);
1664     
1665     s->block_last_index[n] = i;
1666     return 0;
1667 }
1668
1669 static inline int mpeg2_decode_block_intra(MpegEncContext *s, 
1670                                DCTELEM *block, 
1671                                int n)
1672 {
1673     int level, dc, diff, i, j, run;
1674     int component;
1675     RLTable *rl;
1676     uint8_t * const scantable= s->intra_scantable.permutated;
1677     const uint16_t *quant_matrix;
1678     const int qscale= s->qscale;
1679     int mismatch;
1680
1681     /* DC coef */
1682     if (n < 4){
1683         quant_matrix = s->intra_matrix;
1684         component = 0; 
1685     }else{
1686         quant_matrix = s->chroma_intra_matrix;
1687         component = (n&1) + 1;
1688     }
1689     diff = decode_dc(&s->gb, component);
1690     if (diff >= 0xffff)
1691         return -1;
1692     dc = s->last_dc[component];
1693     dc += diff;
1694     s->last_dc[component] = dc;
1695     block[0] = dc << (3 - s->intra_dc_precision);
1696     dprintf("dc=%d\n", block[0]);
1697     mismatch = block[0] ^ 1;
1698     i = 0;
1699     if (s->intra_vlc_format)
1700         rl = &rl_mpeg2;
1701     else
1702         rl = &rl_mpeg1;
1703
1704     {
1705         OPEN_READER(re, &s->gb);    
1706         /* now quantify & encode AC coefs */
1707         for(;;) {
1708             UPDATE_CACHE(re, &s->gb);
1709             GET_RL_VLC(level, run, re, &s->gb, rl->rl_vlc[0], TEX_VLC_BITS, 2);
1710             
1711             if(level == 127){
1712                 break;
1713             } else if(level != 0) {
1714                 i += run;
1715                 j = scantable[i];
1716                 level= (level*qscale*quant_matrix[j])>>4;
1717                 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
1718                 LAST_SKIP_BITS(re, &s->gb, 1);
1719             } else {
1720                 /* escape */
1721                 run = SHOW_UBITS(re, &s->gb, 6)+1; LAST_SKIP_BITS(re, &s->gb, 6);
1722                 UPDATE_CACHE(re, &s->gb);
1723                 level = SHOW_SBITS(re, &s->gb, 12); SKIP_BITS(re, &s->gb, 12);
1724                 i += run;
1725                 j = scantable[i];
1726                 if(level<0){
1727                     level= (-level*qscale*quant_matrix[j])>>4;
1728                     level= -level;
1729                 }else{
1730                     level= (level*qscale*quant_matrix[j])>>4;
1731                 }
1732             }
1733             if (i > 63){
1734                 av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
1735                 return -1;
1736             }
1737             
1738             mismatch^= level;
1739             block[j] = level;
1740         }
1741         CLOSE_READER(re, &s->gb);
1742     }
1743     block[63]^= mismatch&1;
1744     
1745     s->block_last_index[n] = i;
1746     return 0;
1747 }
1748
1749 typedef struct Mpeg1Context {
1750     MpegEncContext mpeg_enc_ctx;
1751     int mpeg_enc_ctx_allocated; /* true if decoding context allocated */
1752     int repeat_field; /* true if we must repeat the field */
1753     AVPanScan pan_scan; /** some temporary storage for the panscan */
1754     int slice_count;
1755     int swap_uv;//indicate VCR2
1756     int save_aspect_info;
1757
1758 } Mpeg1Context;
1759
1760 static int mpeg_decode_init(AVCodecContext *avctx)
1761 {
1762     Mpeg1Context *s = avctx->priv_data;
1763     MpegEncContext *s2 = &s->mpeg_enc_ctx;
1764     
1765     MPV_decode_defaults(s2);
1766     
1767     s->mpeg_enc_ctx.avctx= avctx;
1768     s->mpeg_enc_ctx.flags= avctx->flags;
1769     s->mpeg_enc_ctx.flags2= avctx->flags2;
1770     common_init(&s->mpeg_enc_ctx);
1771     init_vlcs();
1772
1773     s->mpeg_enc_ctx_allocated = 0;
1774     s->mpeg_enc_ctx.picture_number = 0;
1775     s->repeat_field = 0;
1776     s->mpeg_enc_ctx.codec_id= avctx->codec->id;
1777     return 0;
1778 }
1779
1780 static void quant_matrix_rebuild(uint16_t *matrix, const uint8_t *old_perm, 
1781                                      const uint8_t *new_perm){
1782 uint16_t temp_matrix[64];
1783 int i;
1784
1785     memcpy(temp_matrix,matrix,64*sizeof(uint16_t));
1786     
1787     for(i=0;i<64;i++){
1788         matrix[new_perm[i]] = temp_matrix[old_perm[i]];
1789     }      
1790 }
1791
1792 //Call this function when we know all parameters
1793 //it may be called in different places for mpeg1 and mpeg2
1794 static int mpeg_decode_postinit(AVCodecContext *avctx){
1795 Mpeg1Context *s1 = avctx->priv_data;
1796 MpegEncContext *s = &s1->mpeg_enc_ctx;
1797 uint8_t old_permutation[64];
1798
1799
1800     if (
1801         (s1->mpeg_enc_ctx_allocated == 0)|| 
1802         avctx->width  != s->width ||
1803         avctx->height != s->height||
1804 //      s1->save_aspect_info != avctx->aspect_ratio_info||
1805         0)
1806     {
1807     
1808         if (s1->mpeg_enc_ctx_allocated) {
1809             MPV_common_end(s);
1810         }
1811
1812         if( (s->width == 0 )||(s->height == 0))
1813             return -2;
1814
1815         avctx->width = s->width;
1816         avctx->height = s->height;
1817         avctx->bit_rate = s->bit_rate;
1818         s1->save_aspect_info = s->aspect_ratio_info;
1819
1820      //low_delay may be forced, in this case we will have B frames
1821      //that behave like P frames
1822         avctx->has_b_frames = !(s->low_delay);
1823
1824         if(avctx->sub_id==1){//s->codec_id==avctx->codec_id==CODEC_ID
1825             //mpeg1 fps
1826             avctx->frame_rate     = frame_rate_tab[s->frame_rate_index].num;
1827             avctx->frame_rate_base= frame_rate_tab[s->frame_rate_index].den;
1828             //mpeg1 aspect
1829             avctx->sample_aspect_ratio= av_d2q(
1830                     1.0/mpeg1_aspect[s->aspect_ratio_info], 255);
1831
1832         }else{//mpeg2
1833         //mpeg2 fps
1834             av_reduce(
1835                 &s->avctx->frame_rate, 
1836                 &s->avctx->frame_rate_base, 
1837                 frame_rate_tab[s->frame_rate_index].num * (s->frame_rate_ext_n+1),
1838                 frame_rate_tab[s->frame_rate_index].den * (s->frame_rate_ext_d+1),
1839                 1<<30);
1840         //mpeg2 aspect
1841             if(s->aspect_ratio_info > 1){
1842                 if( (s1->pan_scan.width == 0 )||(s1->pan_scan.height == 0) ){
1843                     s->avctx->sample_aspect_ratio= 
1844                         av_div_q(
1845                          mpeg2_aspect[s->aspect_ratio_info], 
1846                          (AVRational){s->width, s->height}
1847                          );
1848                 }else{
1849                     s->avctx->sample_aspect_ratio= 
1850                         av_div_q(
1851                          mpeg2_aspect[s->aspect_ratio_info], 
1852                          (AVRational){s1->pan_scan.width, s1->pan_scan.height}
1853                         );
1854                 }
1855             }else{
1856                 s->avctx->sample_aspect_ratio= 
1857                     mpeg2_aspect[s->aspect_ratio_info];
1858             }
1859         }//mpeg2
1860
1861         if(avctx->xvmc_acceleration){
1862             avctx->pix_fmt = avctx->get_format(avctx,pixfmt_xvmc_mpg2_420);
1863         }else{
1864             if(s->chroma_format <  2){
1865                 avctx->pix_fmt = avctx->get_format(avctx,pixfmt_yuv_420);
1866             }else
1867             if(s->chroma_format == 2){
1868                 avctx->pix_fmt = avctx->get_format(avctx,pixfmt_yuv_422);
1869             }else
1870             if(s->chroma_format >  2){
1871                 avctx->pix_fmt = avctx->get_format(avctx,pixfmt_yuv_444);
1872             }
1873         }
1874         //until then pix_fmt may be changed right after codec init
1875         if( avctx->pix_fmt == PIX_FMT_XVMC_MPEG2_IDCT )
1876             if( avctx->idct_algo == FF_IDCT_AUTO )
1877                 avctx->idct_algo = FF_IDCT_SIMPLE;
1878
1879         //quantization matrixes may need reordering 
1880         //if dct permutation is changed
1881         memcpy(old_permutation,s->dsp.idct_permutation,64*sizeof(uint8_t));
1882
1883         if (MPV_common_init(s) < 0)
1884             return -2;
1885
1886         quant_matrix_rebuild(s->intra_matrix,       old_permutation,s->dsp.idct_permutation);
1887         quant_matrix_rebuild(s->inter_matrix,       old_permutation,s->dsp.idct_permutation);
1888         quant_matrix_rebuild(s->chroma_intra_matrix,old_permutation,s->dsp.idct_permutation);
1889         quant_matrix_rebuild(s->chroma_inter_matrix,old_permutation,s->dsp.idct_permutation);
1890
1891         s1->mpeg_enc_ctx_allocated = 1;
1892     }
1893     return 0;
1894 }
1895
1896 /* return the 8 bit start code value and update the search
1897    state. Return -1 if no start code found */
1898 static int find_start_code(const uint8_t **pbuf_ptr, const uint8_t *buf_end)
1899 {
1900     const uint8_t *buf_ptr= *pbuf_ptr;
1901
1902     buf_ptr++; //gurantees that -1 is within the array
1903     buf_end -= 2; // gurantees that +2 is within the array
1904
1905     while (buf_ptr < buf_end) {
1906         if(*buf_ptr==0){
1907             while(buf_ptr < buf_end && buf_ptr[1]==0)
1908                 buf_ptr++;
1909
1910             if(buf_ptr[-1] == 0 && buf_ptr[1] == 1){
1911                 *pbuf_ptr = buf_ptr+3;
1912                 return buf_ptr[2] + 0x100;
1913             }
1914         }
1915         buf_ptr += 2;
1916     }
1917     buf_end += 2; //undo the hack above
1918     
1919     *pbuf_ptr = buf_end;
1920     return -1;
1921 }
1922
1923 static int mpeg1_decode_picture(AVCodecContext *avctx, 
1924                                 const uint8_t *buf, int buf_size)
1925 {
1926     Mpeg1Context *s1 = avctx->priv_data;
1927     MpegEncContext *s = &s1->mpeg_enc_ctx;
1928     int ref, f_code, vbv_delay;
1929
1930     if(mpeg_decode_postinit(s->avctx) < 0) 
1931        return -2;
1932
1933     init_get_bits(&s->gb, buf, buf_size*8);
1934
1935     ref = get_bits(&s->gb, 10); /* temporal ref */
1936     s->pict_type = get_bits(&s->gb, 3);
1937
1938     vbv_delay= get_bits(&s->gb, 16);
1939     if (s->pict_type == P_TYPE || s->pict_type == B_TYPE) {
1940         s->full_pel[0] = get_bits1(&s->gb);
1941         f_code = get_bits(&s->gb, 3);
1942         if (f_code == 0)
1943             return -1;
1944         s->mpeg_f_code[0][0] = f_code;
1945         s->mpeg_f_code[0][1] = f_code;
1946     }
1947     if (s->pict_type == B_TYPE) {
1948         s->full_pel[1] = get_bits1(&s->gb);
1949         f_code = get_bits(&s->gb, 3);
1950         if (f_code == 0)
1951             return -1;
1952         s->mpeg_f_code[1][0] = f_code;
1953         s->mpeg_f_code[1][1] = f_code;
1954     }
1955     s->current_picture.pict_type= s->pict_type;
1956     s->current_picture.key_frame= s->pict_type == I_TYPE;
1957     
1958 //    if(avctx->debug & FF_DEBUG_PICT_INFO)
1959 //        av_log(avctx, AV_LOG_DEBUG, "vbv_delay %d, ref %d\n", vbv_delay, ref);
1960     
1961     s->y_dc_scale = 8;
1962     s->c_dc_scale = 8;
1963     s->first_slice = 1;
1964     return 0;
1965 }
1966
1967 static void mpeg_decode_sequence_extension(MpegEncContext *s)
1968 {
1969     int horiz_size_ext, vert_size_ext;
1970     int bit_rate_ext;
1971     int level, profile;
1972
1973     skip_bits(&s->gb, 1); /* profil and level esc*/
1974     profile= get_bits(&s->gb, 3);
1975     level= get_bits(&s->gb, 4);
1976     s->progressive_sequence = get_bits1(&s->gb); /* progressive_sequence */
1977     s->chroma_format = get_bits(&s->gb, 2); /* chroma_format 1=420, 2=422, 3=444 */
1978     horiz_size_ext = get_bits(&s->gb, 2);
1979     vert_size_ext = get_bits(&s->gb, 2);
1980     s->width |= (horiz_size_ext << 12);
1981     s->height |= (vert_size_ext << 12);
1982     bit_rate_ext = get_bits(&s->gb, 12);  /* XXX: handle it */
1983     s->bit_rate += (bit_rate_ext << 12) * 400;
1984     skip_bits1(&s->gb); /* marker */
1985     s->avctx->rc_buffer_size += get_bits(&s->gb, 8)*1024*16<<10;
1986
1987     s->low_delay = get_bits1(&s->gb);
1988     if(s->flags & CODEC_FLAG_LOW_DELAY) s->low_delay=1;
1989
1990     s->frame_rate_ext_n = get_bits(&s->gb, 2);
1991     s->frame_rate_ext_d = get_bits(&s->gb, 5);
1992
1993     dprintf("sequence extension\n");
1994     s->codec_id= s->avctx->codec_id= CODEC_ID_MPEG2VIDEO;
1995     s->avctx->sub_id = 2; /* indicates mpeg2 found */
1996
1997     if(s->avctx->debug & FF_DEBUG_PICT_INFO)
1998         av_log(s->avctx, AV_LOG_DEBUG, "profile: %d, level: %d vbv buffer: %d, bitrate:%d\n", 
1999                profile, level, s->avctx->rc_buffer_size, s->bit_rate);
2000
2001 }
2002
2003 static void mpeg_decode_sequence_display_extension(Mpeg1Context *s1)
2004 {
2005     MpegEncContext *s= &s1->mpeg_enc_ctx;
2006     int color_description, w, h;
2007
2008     skip_bits(&s->gb, 3); /* video format */
2009     color_description= get_bits1(&s->gb);
2010     if(color_description){
2011         skip_bits(&s->gb, 8); /* color primaries */
2012         skip_bits(&s->gb, 8); /* transfer_characteristics */
2013         skip_bits(&s->gb, 8); /* matrix_coefficients */
2014     }
2015     w= get_bits(&s->gb, 14);
2016     skip_bits(&s->gb, 1); //marker
2017     h= get_bits(&s->gb, 14);
2018     skip_bits(&s->gb, 1); //marker
2019     
2020     s1->pan_scan.width= 16*w;
2021     s1->pan_scan.height=16*h;
2022         
2023     if(s->avctx->debug & FF_DEBUG_PICT_INFO)
2024         av_log(s->avctx, AV_LOG_DEBUG, "sde w:%d, h:%d\n", w, h);
2025 }
2026
2027 static void mpeg_decode_picture_display_extension(Mpeg1Context *s1)
2028 {
2029     MpegEncContext *s= &s1->mpeg_enc_ctx;
2030     int i,nofco;
2031
2032     nofco = 1;
2033     if(s->progressive_sequence){
2034         if(s->repeat_first_field){
2035             nofco++;
2036             if(s->top_field_first)
2037                 nofco++;        
2038         }
2039     }else{
2040         if(s->picture_structure == PICT_FRAME){
2041             nofco++;
2042             if(s->repeat_first_field)
2043                 nofco++;
2044         }
2045     }
2046     for(i=0; i<nofco; i++){
2047         s1->pan_scan.position[i][0]= get_sbits(&s->gb, 16);
2048         skip_bits(&s->gb, 1); //marker
2049         s1->pan_scan.position[i][1]= get_sbits(&s->gb, 16);
2050         skip_bits(&s->gb, 1); //marker
2051     }
2052    
2053     if(s->avctx->debug & FF_DEBUG_PICT_INFO)
2054         av_log(s->avctx, AV_LOG_DEBUG, "pde (%d,%d) (%d,%d) (%d,%d)\n", 
2055             s1->pan_scan.position[0][0], s1->pan_scan.position[0][1], 
2056             s1->pan_scan.position[1][0], s1->pan_scan.position[1][1], 
2057             s1->pan_scan.position[2][0], s1->pan_scan.position[2][1]
2058         );
2059 }
2060
2061 static void mpeg_decode_quant_matrix_extension(MpegEncContext *s)
2062 {
2063     int i, v, j;
2064
2065     dprintf("matrix extension\n");
2066
2067     if (get_bits1(&s->gb)) {
2068         for(i=0;i<64;i++) {
2069             v = get_bits(&s->gb, 8);
2070             j= s->dsp.idct_permutation[ ff_zigzag_direct[i] ];
2071             s->intra_matrix[j] = v;
2072             s->chroma_intra_matrix[j] = v;
2073         }
2074     }
2075     if (get_bits1(&s->gb)) {
2076         for(i=0;i<64;i++) {
2077             v = get_bits(&s->gb, 8);
2078             j= s->dsp.idct_permutation[ ff_zigzag_direct[i] ];
2079             s->inter_matrix[j] = v;
2080             s->chroma_inter_matrix[j] = v;
2081         }
2082     }
2083     if (get_bits1(&s->gb)) {
2084         for(i=0;i<64;i++) {
2085             v = get_bits(&s->gb, 8);
2086             j= s->dsp.idct_permutation[ ff_zigzag_direct[i] ];
2087             s->chroma_intra_matrix[j] = v;
2088         }
2089     }
2090     if (get_bits1(&s->gb)) {
2091         for(i=0;i<64;i++) {
2092             v = get_bits(&s->gb, 8);
2093             j= s->dsp.idct_permutation[ ff_zigzag_direct[i] ];
2094             s->chroma_inter_matrix[j] = v;
2095         }
2096     }
2097 }
2098
2099 static void mpeg_decode_picture_coding_extension(MpegEncContext *s)
2100 {
2101     s->full_pel[0] = s->full_pel[1] = 0;
2102     s->mpeg_f_code[0][0] = get_bits(&s->gb, 4);
2103     s->mpeg_f_code[0][1] = get_bits(&s->gb, 4);
2104     s->mpeg_f_code[1][0] = get_bits(&s->gb, 4);
2105     s->mpeg_f_code[1][1] = get_bits(&s->gb, 4);
2106     s->intra_dc_precision = get_bits(&s->gb, 2);
2107     s->picture_structure = get_bits(&s->gb, 2);
2108     s->top_field_first = get_bits1(&s->gb);
2109     s->frame_pred_frame_dct = get_bits1(&s->gb);
2110     s->concealment_motion_vectors = get_bits1(&s->gb);
2111     s->q_scale_type = get_bits1(&s->gb);
2112     s->intra_vlc_format = get_bits1(&s->gb);
2113     s->alternate_scan = get_bits1(&s->gb);
2114     s->repeat_first_field = get_bits1(&s->gb);
2115     s->chroma_420_type = get_bits1(&s->gb);
2116     s->progressive_frame = get_bits1(&s->gb);
2117
2118     if(s->picture_structure == PICT_FRAME)
2119         s->first_field=0;
2120     else{
2121         s->first_field ^= 1;
2122         memset(s->mbskip_table, 0, s->mb_stride*s->mb_height);
2123     }
2124     
2125     if(s->alternate_scan){
2126         ff_init_scantable(s->dsp.idct_permutation, &s->inter_scantable  , ff_alternate_vertical_scan);
2127         ff_init_scantable(s->dsp.idct_permutation, &s->intra_scantable  , ff_alternate_vertical_scan);
2128     }else{
2129         ff_init_scantable(s->dsp.idct_permutation, &s->inter_scantable  , ff_zigzag_direct);
2130         ff_init_scantable(s->dsp.idct_permutation, &s->intra_scantable  , ff_zigzag_direct);
2131     }
2132     
2133     /* composite display not parsed */
2134     dprintf("intra_dc_precision=%d\n", s->intra_dc_precision);
2135     dprintf("picture_structure=%d\n", s->picture_structure);
2136     dprintf("top field first=%d\n", s->top_field_first);
2137     dprintf("repeat first field=%d\n", s->repeat_first_field);
2138     dprintf("conceal=%d\n", s->concealment_motion_vectors);
2139     dprintf("intra_vlc_format=%d\n", s->intra_vlc_format);
2140     dprintf("alternate_scan=%d\n", s->alternate_scan);
2141     dprintf("frame_pred_frame_dct=%d\n", s->frame_pred_frame_dct);
2142     dprintf("progressive_frame=%d\n", s->progressive_frame);
2143 }
2144
2145 static void mpeg_decode_extension(AVCodecContext *avctx, 
2146                                   const uint8_t *buf, int buf_size)
2147 {
2148     Mpeg1Context *s1 = avctx->priv_data;
2149     MpegEncContext *s = &s1->mpeg_enc_ctx;
2150     int ext_type;
2151
2152     init_get_bits(&s->gb, buf, buf_size*8);
2153     
2154     ext_type = get_bits(&s->gb, 4);
2155     switch(ext_type) {
2156     case 0x1:
2157         mpeg_decode_sequence_extension(s);
2158         break;
2159     case 0x2:
2160         mpeg_decode_sequence_display_extension(s1);
2161         break;
2162     case 0x3:
2163         mpeg_decode_quant_matrix_extension(s);
2164         break;
2165     case 0x7:
2166         mpeg_decode_picture_display_extension(s1);
2167         break;
2168     case 0x8:
2169         mpeg_decode_picture_coding_extension(s);
2170         break;
2171     }
2172 }
2173
2174 static void exchange_uv(MpegEncContext *s){
2175 short * tmp;
2176
2177     tmp = s->pblocks[4];
2178     s->pblocks[4] = s->pblocks[5];
2179     s->pblocks[5] = tmp;
2180 }
2181
2182 static int mpeg_field_start(MpegEncContext *s){
2183     AVCodecContext *avctx= s->avctx;
2184     Mpeg1Context *s1 = (Mpeg1Context*)s;
2185
2186     /* start frame decoding */
2187     if(s->first_field || s->picture_structure==PICT_FRAME){
2188         if(MPV_frame_start(s, avctx) < 0)
2189             return -1;
2190
2191         ff_er_frame_start(s);
2192
2193         /* first check if we must repeat the frame */
2194         s->current_picture_ptr->repeat_pict = 0;
2195         if (s->repeat_first_field) {
2196             if (s->progressive_sequence) {
2197                 if (s->top_field_first)
2198                     s->current_picture_ptr->repeat_pict = 4;
2199                 else
2200                     s->current_picture_ptr->repeat_pict = 2;
2201             } else if (s->progressive_frame) {
2202                 s->current_picture_ptr->repeat_pict = 1;
2203             }
2204         }         
2205
2206         *s->current_picture_ptr->pan_scan= s1->pan_scan;
2207     }else{ //second field
2208             int i;
2209             
2210             if(!s->current_picture_ptr){
2211                 av_log(s->avctx, AV_LOG_ERROR, "first field missing\n");
2212                 return -1;
2213             }
2214             
2215             for(i=0; i<4; i++){
2216                 s->current_picture.data[i] = s->current_picture_ptr->data[i];
2217                 if(s->picture_structure == PICT_BOTTOM_FIELD){
2218                     s->current_picture.data[i] += s->current_picture_ptr->linesize[i];
2219                 } 
2220             }
2221     }
2222 #ifdef HAVE_XVMC
2223 // MPV_frame_start will call this function too,
2224 // but we need to call it on every field
2225     if(s->avctx->xvmc_acceleration)
2226          XVMC_field_start(s,avctx);
2227 #endif
2228
2229     return 0;
2230 }
2231
2232 #define DECODE_SLICE_ERROR -1
2233 #define DECODE_SLICE_OK 0
2234
2235 /**
2236  * decodes a slice. MpegEncContext.mb_y must be set to the MB row from the startcode
2237  * @return DECODE_SLICE_ERROR if the slice is damaged<br>
2238  *         DECODE_SLICE_OK if this slice is ok<br>
2239  */
2240 static int mpeg_decode_slice(Mpeg1Context *s1, int mb_y,
2241                              const uint8_t **buf, int buf_size)
2242 {
2243     MpegEncContext *s = &s1->mpeg_enc_ctx;
2244     AVCodecContext *avctx= s->avctx;
2245     int ret;
2246     const int field_pic= s->picture_structure != PICT_FRAME;
2247
2248     s->resync_mb_x=
2249     s->resync_mb_y= -1;
2250
2251     if (mb_y >= s->mb_height){
2252         av_log(s->avctx, AV_LOG_ERROR, "slice below image (%d >= %d)\n", s->mb_y, s->mb_height);
2253         return -1;
2254     }
2255     
2256     init_get_bits(&s->gb, *buf, buf_size*8);
2257
2258     ff_mpeg1_clean_buffers(s);
2259     s->interlaced_dct = 0;
2260
2261     s->qscale = get_qscale(s);
2262
2263     if(s->qscale == 0){
2264         av_log(s->avctx, AV_LOG_ERROR, "qscale == 0\n");
2265         return -1;
2266     }
2267     
2268     /* extra slice info */
2269     while (get_bits1(&s->gb) != 0) {
2270         skip_bits(&s->gb, 8);
2271     }
2272     
2273     s->mb_x=0;
2274
2275     for(;;) {
2276         int code = get_vlc2(&s->gb, mbincr_vlc.table, MBINCR_VLC_BITS, 2);
2277         if (code < 0){
2278             av_log(s->avctx, AV_LOG_ERROR, "first mb_incr damaged\n");
2279             return -1;
2280         }
2281         if (code >= 33) {
2282             if (code == 33) {
2283                 s->mb_x += 33;
2284             }
2285             /* otherwise, stuffing, nothing to do */
2286         } else {
2287             s->mb_x += code;
2288             break;
2289         }
2290     }
2291
2292     s->resync_mb_x= s->mb_x;
2293     s->resync_mb_y= s->mb_y= mb_y;
2294     s->mb_skip_run= 0;
2295     ff_init_block_index(s);
2296
2297     if (s->mb_y==0 && s->mb_x==0 && (s->first_field || s->picture_structure==PICT_FRAME)) {
2298         if(s->avctx->debug&FF_DEBUG_PICT_INFO){
2299              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", 
2300                  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],
2301                  s->pict_type == I_TYPE ? "I" : (s->pict_type == P_TYPE ? "P" : (s->pict_type == B_TYPE ? "B" : "S")), 
2302                  s->progressive_sequence ? "ps" :"", s->progressive_frame ? "pf" : "", s->alternate_scan ? "alt" :"", s->top_field_first ? "top" :"", 
2303                  s->intra_dc_precision, s->picture_structure, s->frame_pred_frame_dct, s->concealment_motion_vectors,
2304                  s->q_scale_type, s->intra_vlc_format, s->repeat_first_field, s->chroma_420_type ? "420" :"");
2305         }
2306     }    
2307     
2308     for(;;) {
2309 #ifdef HAVE_XVMC
2310         //one 1 we memcpy blocks in xvmcvideo
2311         if(s->avctx->xvmc_acceleration > 1)
2312             XVMC_init_block(s);//set s->block
2313 #endif
2314
2315         s->dsp.clear_blocks(s->block[0]);
2316
2317         ret = mpeg_decode_mb(s, s->block);
2318         s->chroma_qscale= s->qscale;
2319
2320         dprintf("ret=%d\n", ret);
2321         if (ret < 0)
2322             return -1;
2323
2324         if(s->current_picture.motion_val[0] && !s->encoding){ //note motion_val is normally NULL unless we want to extract the MVs
2325             const int wrap = field_pic ? 2*s->block_wrap[0] : s->block_wrap[0];
2326             int xy = s->mb_x*2 + 1 + (s->mb_y*2 +1)*wrap;
2327             int motion_x, motion_y, dir, i;
2328             if(field_pic && !s->first_field)
2329                 xy += wrap/2;
2330
2331             for(i=0; i<2; i++){
2332                 for(dir=0; dir<2; dir++){
2333                     if (s->mb_intra || (dir==1 && s->pict_type != B_TYPE)) {
2334                         motion_x = motion_y = 0;
2335                     }else if (s->mv_type == MV_TYPE_16X16){
2336                         motion_x = s->mv[dir][0][0];
2337                         motion_y = s->mv[dir][0][1];
2338                     } else /*if ((s->mv_type == MV_TYPE_FIELD) || (s->mv_type == MV_TYPE_16X8))*/ {
2339                         motion_x = s->mv[dir][i][0];
2340                         motion_y = s->mv[dir][i][1];
2341                     }
2342                     
2343                     s->current_picture.motion_val[dir][xy    ][0] = motion_x;
2344                     s->current_picture.motion_val[dir][xy    ][1] = motion_y;
2345                     s->current_picture.motion_val[dir][xy + 1][0] = motion_x;
2346                     s->current_picture.motion_val[dir][xy + 1][1] = motion_y;
2347                 }
2348                 xy += wrap;
2349             }
2350         }
2351
2352         s->dest[0] += 16;
2353         s->dest[1] += 8;
2354         s->dest[2] += 8;
2355
2356         MPV_decode_mb(s, s->block);
2357         
2358         if (++s->mb_x >= s->mb_width) {
2359
2360             ff_draw_horiz_band(s, 16*s->mb_y, 16);
2361
2362             s->mb_x = 0;
2363             s->mb_y++;
2364
2365             if(s->mb_y<<field_pic >= s->mb_height){
2366                 int left= s->gb.size_in_bits - get_bits_count(&s->gb);
2367
2368                 if(left < 0 || (left && show_bits(&s->gb, FFMIN(left, 23)))
2369                    || (avctx->error_resilience >= FF_ER_AGGRESSIVE && left>8)){
2370                     av_log(avctx, AV_LOG_ERROR, "end mismatch left=%d\n", left);
2371                     return -1;
2372                 }else
2373                     goto eos;
2374             }
2375             
2376             ff_init_block_index(s);
2377         }
2378
2379         /* skip mb handling */
2380         if (s->mb_skip_run == -1) {
2381             /* read again increment */
2382             s->mb_skip_run = 0;
2383             for(;;) {
2384                 int code = get_vlc2(&s->gb, mbincr_vlc.table, MBINCR_VLC_BITS, 2);
2385                 if (code < 0){
2386                     av_log(s->avctx, AV_LOG_ERROR, "mb incr damaged\n");
2387                     return -1;
2388                 }
2389                 if (code >= 33) {
2390                     if (code == 33) {
2391                         s->mb_skip_run += 33;
2392                     }else if(code == 35){
2393                         if(s->mb_skip_run != 0 || show_bits(&s->gb, 15) != 0){
2394                             av_log(s->avctx, AV_LOG_ERROR, "slice mismatch\n");
2395                             return -1;
2396                         }
2397                         goto eos; /* end of slice */
2398                     }
2399                     /* otherwise, stuffing, nothing to do */
2400                 } else {
2401                     s->mb_skip_run += code;
2402                     break;
2403                 }
2404             }
2405         }
2406     }
2407 eos: // end of slice
2408     *buf += get_bits_count(&s->gb)/8 - 1;
2409 //printf("y %d %d %d %d\n", s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y);
2410     return 0;
2411 }
2412
2413 static int slice_decode_thread(AVCodecContext *c, void *arg){
2414     MpegEncContext *s= arg;
2415     const uint8_t *buf= s->gb.buffer;
2416     int mb_y= s->start_mb_y;
2417
2418     s->error_count= 3*(s->end_mb_y - s->start_mb_y)*s->mb_width;
2419
2420     for(;;){
2421         int start_code, ret;
2422
2423         ret= mpeg_decode_slice((Mpeg1Context*)s, mb_y, &buf, s->gb.buffer_end - buf);
2424         emms_c();
2425 //av_log(c, AV_LOG_DEBUG, "ret:%d resync:%d/%d mb:%d/%d ts:%d/%d ec:%d\n", 
2426 //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);
2427         if(ret < 0){
2428             if(s->resync_mb_x>=0 && s->resync_mb_y>=0)
2429                 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);
2430         }else{
2431             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);
2432         }
2433         
2434         if(s->mb_y == s->end_mb_y)
2435             return 0;
2436         
2437         start_code = find_start_code(&buf, s->gb.buffer_end);
2438         mb_y= start_code - SLICE_MIN_START_CODE;
2439         if(mb_y < 0 || mb_y >= s->end_mb_y)
2440             return -1;
2441     }
2442     
2443     return 0; //not reached
2444 }
2445
2446 /**
2447  * handles slice ends.
2448  * @return 1 if it seems to be the last slice of 
2449  */
2450 static int slice_end(AVCodecContext *avctx, AVFrame *pict)
2451 {
2452     Mpeg1Context *s1 = avctx->priv_data;
2453     MpegEncContext *s = &s1->mpeg_enc_ctx;
2454        
2455     if (!s1->mpeg_enc_ctx_allocated || !s->current_picture_ptr)
2456         return 0;
2457
2458 #ifdef HAVE_XVMC
2459     if(s->avctx->xvmc_acceleration)
2460         XVMC_field_end(s);
2461 #endif
2462     /* end of slice reached */
2463     if (/*s->mb_y<<field_pic == s->mb_height &&*/ !s->first_field) {
2464         /* end of image */
2465
2466         s->current_picture_ptr->qscale_type= FF_QSCALE_TYPE_MPEG2;
2467
2468         ff_er_frame_end(s);
2469
2470         MPV_frame_end(s);
2471
2472         if (s->pict_type == B_TYPE || s->low_delay) {
2473             *pict= *(AVFrame*)s->current_picture_ptr;
2474             ff_print_debug_info(s, pict);
2475         } else {
2476             s->picture_number++;
2477             /* latency of 1 frame for I and P frames */
2478             /* XXX: use another variable than picture_number */
2479             if (s->last_picture_ptr != NULL) {
2480                 *pict= *(AVFrame*)s->last_picture_ptr;
2481                  ff_print_debug_info(s, pict);
2482             }
2483         }
2484
2485         return 1;
2486     } else {
2487         return 0;
2488     }
2489 }
2490
2491 static int mpeg1_decode_sequence(AVCodecContext *avctx, 
2492                                  const uint8_t *buf, int buf_size)
2493 {
2494     Mpeg1Context *s1 = avctx->priv_data;
2495     MpegEncContext *s = &s1->mpeg_enc_ctx;
2496     int width,height;
2497     int i, v, j;
2498
2499     init_get_bits(&s->gb, buf, buf_size*8);
2500
2501     width = get_bits(&s->gb, 12);
2502     height = get_bits(&s->gb, 12);
2503     if (width <= 0 || height <= 0 ||
2504         (width % 2) != 0 || (height % 2) != 0)
2505         return -1;
2506     s->aspect_ratio_info= get_bits(&s->gb, 4);
2507     if (s->aspect_ratio_info == 0)
2508         return -1;
2509     s->frame_rate_index = get_bits(&s->gb, 4);
2510     if (s->frame_rate_index == 0 || s->frame_rate_index > 13)
2511         return -1;
2512     s->bit_rate = get_bits(&s->gb, 18) * 400;
2513     if (get_bits1(&s->gb) == 0) /* marker */
2514         return -1;
2515     s->width = width;
2516     s->height = height;
2517
2518     s->avctx->rc_buffer_size= get_bits(&s->gb, 10) * 1024*16;
2519     skip_bits(&s->gb, 1);
2520
2521     /* get matrix */
2522     if (get_bits1(&s->gb)) {
2523         for(i=0;i<64;i++) {
2524             v = get_bits(&s->gb, 8);
2525             if(v==0){
2526                 av_log(s->avctx, AV_LOG_ERROR, "intra matrix damaged\n");
2527                 return -1;
2528             }
2529             j = s->dsp.idct_permutation[ ff_zigzag_direct[i] ];
2530             s->intra_matrix[j] = v;
2531             s->chroma_intra_matrix[j] = v;
2532         }
2533 #ifdef DEBUG
2534         dprintf("intra matrix present\n");
2535         for(i=0;i<64;i++)
2536             dprintf(" %d", s->intra_matrix[s->dsp.idct_permutation[i]);
2537         printf("\n");
2538 #endif
2539     } else {
2540         for(i=0;i<64;i++) {
2541             j = s->dsp.idct_permutation[i];
2542             v = ff_mpeg1_default_intra_matrix[i];
2543             s->intra_matrix[j] = v;
2544             s->chroma_intra_matrix[j] = v;
2545         }
2546     }
2547     if (get_bits1(&s->gb)) {
2548         for(i=0;i<64;i++) {
2549             v = get_bits(&s->gb, 8);
2550             if(v==0){
2551                 av_log(s->avctx, AV_LOG_ERROR, "inter matrix damaged\n");
2552                 return -1;
2553             }
2554             j = s->dsp.idct_permutation[ ff_zigzag_direct[i] ];
2555             s->inter_matrix[j] = v;
2556             s->chroma_inter_matrix[j] = v;
2557         }
2558 #ifdef DEBUG
2559         dprintf("non intra matrix present\n");
2560         for(i=0;i<64;i++)
2561             dprintf(" %d", s->inter_matrix[s->dsp.idct_permutation[i]);
2562         printf("\n");
2563 #endif
2564     } else {
2565         for(i=0;i<64;i++) {
2566             int j= s->dsp.idct_permutation[i];
2567             v = ff_mpeg1_default_non_intra_matrix[i];
2568             s->inter_matrix[j] = v;
2569             s->chroma_inter_matrix[j] = v;
2570         }
2571     }
2572     
2573     if(show_bits(&s->gb, 23) != 0){
2574         av_log(s->avctx, AV_LOG_ERROR, "sequence header damaged\n");
2575         return -1;
2576     }
2577
2578     /* we set mpeg2 parameters so that it emulates mpeg1 */
2579     s->progressive_sequence = 1;
2580     s->progressive_frame = 1;
2581     s->picture_structure = PICT_FRAME;
2582     s->frame_pred_frame_dct = 1;
2583     s->chroma_format = 1;
2584     s->codec_id= s->avctx->codec_id= CODEC_ID_MPEG1VIDEO;
2585     avctx->sub_id = 1; /* indicates mpeg1 */
2586     s->out_format = FMT_MPEG1;
2587     s->swap_uv = 0;//AFAIK VCR2 don't have SEQ_HEADER
2588     if(s->flags & CODEC_FLAG_LOW_DELAY) s->low_delay=1;
2589     
2590     if(s->avctx->debug & FF_DEBUG_PICT_INFO)
2591         av_log(s->avctx, AV_LOG_DEBUG, "vbv buffer: %d, bitrate:%d\n", 
2592                s->avctx->rc_buffer_size, s->bit_rate);
2593     
2594     return 0;
2595 }
2596
2597 static int vcr2_init_sequence(AVCodecContext *avctx)
2598 {
2599     Mpeg1Context *s1 = avctx->priv_data;
2600     MpegEncContext *s = &s1->mpeg_enc_ctx;
2601     int i, v;
2602
2603     /* start new mpeg1 context decoding */
2604     s->out_format = FMT_MPEG1;
2605     if (s1->mpeg_enc_ctx_allocated) {
2606         MPV_common_end(s);
2607     }
2608     s->width = avctx->width;
2609     s->height = avctx->height;
2610     avctx->has_b_frames= 0; //true?
2611     s->low_delay= 1;
2612
2613     if(avctx->xvmc_acceleration){
2614         avctx->pix_fmt = avctx->get_format(avctx,pixfmt_xvmc_mpg2_420);
2615     }else{
2616         avctx->pix_fmt = avctx->get_format(avctx,pixfmt_yuv_420);
2617     }
2618
2619     if( avctx->pix_fmt == PIX_FMT_XVMC_MPEG2_IDCT )
2620         if( avctx->idct_algo == FF_IDCT_AUTO )
2621             avctx->idct_algo = FF_IDCT_SIMPLE;
2622     
2623     if (MPV_common_init(s) < 0)
2624         return -1;
2625     exchange_uv(s);//common init reset pblocks, so we swap them here
2626     s->swap_uv = 1;// in case of xvmc we need to swap uv for each MB 
2627     s1->mpeg_enc_ctx_allocated = 1;
2628
2629     for(i=0;i<64;i++) {
2630         int j= s->dsp.idct_permutation[i];
2631         v = ff_mpeg1_default_intra_matrix[i];
2632         s->intra_matrix[j] = v;
2633         s->chroma_intra_matrix[j] = v;
2634
2635         v = ff_mpeg1_default_non_intra_matrix[i];
2636         s->inter_matrix[j] = v;
2637         s->chroma_inter_matrix[j] = v;
2638     }
2639
2640     s->progressive_sequence = 1;
2641     s->progressive_frame = 1;
2642     s->picture_structure = PICT_FRAME;
2643     s->frame_pred_frame_dct = 1;
2644     s->chroma_format = 1;
2645     s->codec_id= s->avctx->codec_id= CODEC_ID_MPEG2VIDEO;
2646     avctx->sub_id = 2; /* indicates mpeg2 */
2647     return 0;
2648 }
2649
2650
2651 static void mpeg_decode_user_data(AVCodecContext *avctx, 
2652                                   const uint8_t *buf, int buf_size)
2653 {
2654     const uint8_t *p;
2655     int len, flags;
2656     p = buf;
2657     len = buf_size;
2658
2659     /* we parse the DTG active format information */
2660     if (len >= 5 &&
2661         p[0] == 'D' && p[1] == 'T' && p[2] == 'G' && p[3] == '1') {
2662         flags = p[4];
2663         p += 5;
2664         len -= 5;
2665         if (flags & 0x80) {
2666             /* skip event id */
2667             if (len < 2)
2668                 return;
2669             p += 2;
2670             len -= 2;
2671         }
2672         if (flags & 0x40) {
2673             if (len < 1)
2674                 return;
2675             avctx->dtg_active_format = p[0] & 0x0f;
2676         }
2677     }
2678 }
2679
2680 static void mpeg_decode_gop(AVCodecContext *avctx, 
2681                             const uint8_t *buf, int buf_size){
2682     Mpeg1Context *s1 = avctx->priv_data;
2683     MpegEncContext *s = &s1->mpeg_enc_ctx;
2684
2685     int drop_frame_flag;
2686     int time_code_hours, time_code_minutes;
2687     int time_code_seconds, time_code_pictures;
2688     int broken_link;
2689
2690     init_get_bits(&s->gb, buf, buf_size*8);
2691
2692     drop_frame_flag = get_bits1(&s->gb);
2693     
2694     time_code_hours=get_bits(&s->gb,5);
2695     time_code_minutes = get_bits(&s->gb,6);
2696     skip_bits1(&s->gb);//marker bit
2697     time_code_seconds = get_bits(&s->gb,6);
2698     time_code_pictures = get_bits(&s->gb,6);
2699
2700     /*broken_link indicate that after editing the
2701       reference frames of the first B-Frames after GOP I-Frame
2702       are missing (open gop)*/
2703     broken_link = get_bits1(&s->gb);
2704
2705     if(s->avctx->debug & FF_DEBUG_PICT_INFO)
2706         av_log(s->avctx, AV_LOG_DEBUG, "GOP (%2d:%02d:%02d.[%02d]) broken_link=%d\n",
2707             time_code_hours, time_code_minutes, time_code_seconds,
2708             time_code_pictures, broken_link);
2709 }
2710 /**
2711  * finds the end of the current frame in the bitstream.
2712  * @return the position of the first byte of the next frame, or -1
2713  */
2714 static int mpeg1_find_frame_end(MpegEncContext *s, uint8_t *buf, int buf_size){
2715     ParseContext *pc= &s->parse_context;
2716     int i;
2717     uint32_t state;
2718     
2719     state= pc->state;
2720     
2721     i=0;
2722     if(!pc->frame_start_found){
2723         for(i=0; i<buf_size; i++){
2724             state= (state<<8) | buf[i];
2725             if(state >= SLICE_MIN_START_CODE && state <= SLICE_MAX_START_CODE){
2726                 i++;
2727                 pc->frame_start_found=1;
2728                 break;
2729             }
2730         }
2731     }
2732     
2733     if(pc->frame_start_found){
2734         for(; i<buf_size; i++){
2735             state= (state<<8) | buf[i];
2736             if((state&0xFFFFFF00) == 0x100){
2737                 if(state < SLICE_MIN_START_CODE || state > SLICE_MAX_START_CODE){
2738                     pc->frame_start_found=0;
2739                     pc->state=-1; 
2740                     return i-3;
2741                 }
2742             }
2743         }
2744     }        
2745     pc->state= state;
2746     return END_NOT_FOUND;
2747 }
2748
2749 /* handle buffering and image synchronisation */
2750 static int mpeg_decode_frame(AVCodecContext *avctx, 
2751                              void *data, int *data_size,
2752                              uint8_t *buf, int buf_size)
2753 {
2754     Mpeg1Context *s = avctx->priv_data;
2755     const uint8_t *buf_end;
2756     const uint8_t *buf_ptr;
2757     int ret, start_code, input_size;
2758     AVFrame *picture = data;
2759     MpegEncContext *s2 = &s->mpeg_enc_ctx;
2760     dprintf("fill_buffer\n");
2761
2762     *data_size = 0;
2763
2764     /* special case for last picture */
2765     if (buf_size == 0 && s2->low_delay==0 && s2->next_picture_ptr) {
2766         *picture= *(AVFrame*)s2->next_picture_ptr;
2767         s2->next_picture_ptr= NULL;
2768
2769         *data_size = sizeof(AVFrame);
2770         return 0;
2771     }
2772
2773     if(s2->flags&CODEC_FLAG_TRUNCATED){
2774         int next= mpeg1_find_frame_end(s2, buf, buf_size);
2775         
2776         if( ff_combine_frame(s2, next, &buf, &buf_size) < 0 )
2777             return buf_size;
2778     }    
2779     
2780     buf_ptr = buf;
2781     buf_end = buf + buf_size;
2782
2783 #if 0    
2784     if (s->repeat_field % 2 == 1) { 
2785         s->repeat_field++;
2786         //fprintf(stderr,"\nRepeating last frame: %d -> %d! pict: %d %d", avctx->frame_number-1, avctx->frame_number,
2787         //        s2->picture_number, s->repeat_field);
2788         if (avctx->flags & CODEC_FLAG_REPEAT_FIELD) {
2789             *data_size = sizeof(AVPicture);
2790             goto the_end;
2791         }
2792     }
2793 #endif
2794
2795     if(s->mpeg_enc_ctx_allocated==0 && avctx->codec_tag == ff_get_fourcc("VCR2"))
2796         vcr2_init_sequence(avctx);
2797     
2798     s->slice_count= 0;
2799         
2800     for(;;) {
2801         /* find start next code */
2802         start_code = find_start_code(&buf_ptr, buf_end);
2803         if (start_code < 0){
2804             if(s2->pict_type != B_TYPE || avctx->hurry_up==0){
2805                 if(avctx->thread_count > 1){
2806                     int i;
2807
2808                     avctx->execute(avctx, slice_decode_thread,  (void**)&(s2->thread_context[0]), NULL, s->slice_count);
2809                     for(i=0; i<s->slice_count; i++)
2810                         s2->error_count += s2->thread_context[i]->error_count;
2811                 }
2812                 if (slice_end(avctx, picture)) {
2813                     if(s2->last_picture_ptr || s2->low_delay) //FIXME merge with the stuff in mpeg_decode_slice
2814                         *data_size = sizeof(AVPicture);
2815                 }
2816             }
2817             return FFMAX(0, buf_ptr - buf - s2->parse_context.last_index);
2818         }
2819         
2820         input_size = buf_end - buf_ptr;
2821
2822         if(avctx->debug & FF_DEBUG_STARTCODE){
2823             av_log(avctx, AV_LOG_DEBUG, "%3X at %d left %d\n", start_code, buf_ptr-buf, input_size);
2824         }
2825
2826                 /* prepare data for next start code */
2827                 switch(start_code) {
2828                 case SEQ_START_CODE:
2829                     mpeg1_decode_sequence(avctx, buf_ptr, 
2830                                           input_size);
2831                     break;
2832                             
2833                 case PICTURE_START_CODE:
2834                     /* we have a complete image : we try to decompress it */
2835                     mpeg1_decode_picture(avctx, 
2836                                          buf_ptr, input_size);
2837                     break;
2838                 case EXT_START_CODE:
2839                     mpeg_decode_extension(avctx,
2840                                           buf_ptr, input_size);
2841                     break;
2842                 case USER_START_CODE:
2843                     mpeg_decode_user_data(avctx, 
2844                                           buf_ptr, input_size);
2845                     break;
2846                 case GOP_START_CODE:
2847                     s2->first_field=0;
2848                     mpeg_decode_gop(avctx, 
2849                                           buf_ptr, input_size);
2850                     break;
2851                 default:
2852                     if (start_code >= SLICE_MIN_START_CODE &&
2853                         start_code <= SLICE_MAX_START_CODE) {
2854                         int mb_y= start_code - SLICE_MIN_START_CODE;
2855                         
2856                         /* skip b frames if we dont have reference frames */
2857                         if(s2->last_picture_ptr==NULL && s2->pict_type==B_TYPE) break;
2858                         /* skip b frames if we are in a hurry */
2859                         if(avctx->hurry_up && s2->pict_type==B_TYPE) break;
2860                         /* skip everything if we are in a hurry>=5 */
2861                         if(avctx->hurry_up>=5) break;
2862                         
2863                         if (!s->mpeg_enc_ctx_allocated) break;
2864                         
2865                         if(s2->first_slice){
2866                             s2->first_slice=0;
2867                             if(mpeg_field_start(s2) < 0)
2868                                 return -1;
2869                         }
2870                         
2871                         if(avctx->thread_count > 1){
2872                             int threshold= (s2->mb_height*s->slice_count + avctx->thread_count/2) / avctx->thread_count;
2873                             if(threshold <= mb_y){
2874                                 MpegEncContext *thread_context= s2->thread_context[s->slice_count];
2875                                 
2876                                 thread_context->start_mb_y= mb_y;
2877                                 thread_context->end_mb_y  = s2->mb_height;
2878                                 if(s->slice_count){
2879                                     s2->thread_context[s->slice_count-1]->end_mb_y= mb_y;
2880                                     ff_update_duplicate_context(thread_context, s2);
2881                                 }
2882                                 init_get_bits(&thread_context->gb, buf_ptr, input_size*8);
2883                                 s->slice_count++;
2884                             }
2885                             buf_ptr += 2; //FIXME add minimum num of bytes per slice
2886                         }else{
2887                             ret = mpeg_decode_slice(s, mb_y, &buf_ptr, input_size);
2888                             emms_c();
2889
2890                             if(ret < 0){
2891                                 if(s2->resync_mb_x>=0 && s2->resync_mb_y>=0)
2892                                     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);
2893                             }else{
2894                                 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);
2895                             }
2896                         }
2897                     }
2898                     break;
2899                 }
2900     }
2901 }
2902
2903 static int mpeg_decode_end(AVCodecContext *avctx)
2904 {
2905     Mpeg1Context *s = avctx->priv_data;
2906
2907     if (s->mpeg_enc_ctx_allocated)
2908         MPV_common_end(&s->mpeg_enc_ctx);
2909     return 0;
2910 }
2911
2912 AVCodec mpeg1video_decoder = {
2913     "mpeg1video",
2914     CODEC_TYPE_VIDEO,
2915     CODEC_ID_MPEG1VIDEO,
2916     sizeof(Mpeg1Context),
2917     mpeg_decode_init,
2918     NULL,
2919     mpeg_decode_end,
2920     mpeg_decode_frame,
2921     CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED,
2922     .flush= ff_mpeg_flush,
2923 };
2924
2925 AVCodec mpeg2video_decoder = {
2926     "mpeg2video",
2927     CODEC_TYPE_VIDEO,
2928     CODEC_ID_MPEG2VIDEO,
2929     sizeof(Mpeg1Context),
2930     mpeg_decode_init,
2931     NULL,
2932     mpeg_decode_end,
2933     mpeg_decode_frame,
2934     CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED,
2935     .flush= ff_mpeg_flush,
2936 };
2937
2938 //legacy decoder
2939 AVCodec mpegvideo_decoder = {
2940     "mpegvideo",
2941     CODEC_TYPE_VIDEO,
2942     CODEC_ID_MPEG2VIDEO,
2943     sizeof(Mpeg1Context),
2944     mpeg_decode_init,
2945     NULL,
2946     mpeg_decode_end,
2947     mpeg_decode_frame,
2948     CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED,
2949     .flush= ff_mpeg_flush,
2950 };
2951
2952 #ifdef CONFIG_ENCODERS
2953
2954 AVCodec mpeg1video_encoder = {
2955     "mpeg1video",
2956     CODEC_TYPE_VIDEO,
2957     CODEC_ID_MPEG1VIDEO,
2958     sizeof(MpegEncContext),
2959     encode_init,
2960     MPV_encode_picture,
2961     MPV_encode_end,
2962     .supported_framerates= frame_rate_tab+1,
2963 };
2964
2965 #ifdef CONFIG_RISKY
2966
2967 AVCodec mpeg2video_encoder = {
2968     "mpeg2video",
2969     CODEC_TYPE_VIDEO,
2970     CODEC_ID_MPEG2VIDEO,
2971     sizeof(MpegEncContext),
2972     encode_init,
2973     MPV_encode_picture,
2974     MPV_encode_end,
2975     .supported_framerates= frame_rate_tab+1,
2976 };
2977 #endif
2978 #endif
2979
2980 #ifdef HAVE_XVMC
2981 static int mpeg_mc_decode_init(AVCodecContext *avctx){
2982     Mpeg1Context *s;
2983
2984     if( !(avctx->slice_flags & SLICE_FLAG_CODED_ORDER) )
2985         return -1;
2986     if( !(avctx->slice_flags & SLICE_FLAG_ALLOW_FIELD) ){
2987         dprintf("mpeg12.c: XvMC decoder will work better if SLICE_FLAG_ALLOW_FIELD is set\n");
2988     }
2989     mpeg_decode_init(avctx);
2990     s = avctx->priv_data;
2991
2992     avctx->pix_fmt = PIX_FMT_XVMC_MPEG2_IDCT;
2993     avctx->xvmc_acceleration = 2;//2 - the blocks are packed!
2994
2995     return 0;
2996 }
2997
2998 AVCodec mpeg_xvmc_decoder = {
2999     "mpegvideo_xvmc",
3000     CODEC_TYPE_VIDEO,
3001     CODEC_ID_MPEG2VIDEO_XVMC,
3002     sizeof(Mpeg1Context),
3003     mpeg_mc_decode_init,
3004     NULL,
3005     mpeg_decode_end,
3006     mpeg_decode_frame,
3007     CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED| CODEC_CAP_HWACCEL,
3008     .flush= ff_mpeg_flush,
3009 };
3010
3011 #endif
3012
3013 /* this is ugly i know, but the alternative is too make 
3014    hundreds of vars global and prefix them with ff_mpeg1_
3015    which is far uglier. */
3016 #include "mdec.c"