2 * MPEG1 codec / MPEG2 decoder
3 * Copyright (c) 2000,2001 Fabrice Bellard.
4 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
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.
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.
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
29 #include "mpegvideo.h"
31 #include "mpeg12data.h"
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
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
55 #ifdef CONFIG_ENCODERS
56 static void mpeg1_encode_block(MpegEncContext
*s
,
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
,
64 static inline int mpeg1_decode_block_intra(MpegEncContext
*s
,
67 static inline int mpeg1_fast_decode_block_inter(MpegEncContext
*s
, DCTELEM
*block
, int n
);
68 static inline int mpeg2_decode_block_non_intra(MpegEncContext
*s
,
71 static inline int mpeg2_decode_block_intra(MpegEncContext
*s
,
74 static inline int mpeg2_fast_decode_block_non_intra(MpegEncContext
*s
, DCTELEM
*block
, int n
);
75 static int mpeg_decode_motion(MpegEncContext
*s
, int fcode
, int pred
);
76 static void exchange_uv(MpegEncContext
*s
);
79 extern int XVMC_field_start(MpegEncContext
*s
, AVCodecContext
*avctx
);
80 extern int XVMC_field_end(MpegEncContext
*s
);
81 extern void XVMC_pack_pblocks(MpegEncContext
*s
,int cbp
);
82 extern void XVMC_init_block(MpegEncContext
*s
);//set s->block
85 const enum PixelFormat pixfmt_yuv_420
[]= {PIX_FMT_YUV420P
,-1};
86 const enum PixelFormat pixfmt_yuv_422
[]= {PIX_FMT_YUV422P
,-1};
87 const enum PixelFormat pixfmt_yuv_444
[]= {PIX_FMT_YUV444P
,-1};
88 const enum PixelFormat pixfmt_xvmc_mpg2_420
[] = {
89 PIX_FMT_XVMC_MPEG2_IDCT
,
90 PIX_FMT_XVMC_MPEG2_MC
,
92 #ifdef CONFIG_ENCODERS
93 static uint8_t (*mv_penalty
)[MAX_MV
*2+1]= NULL
;
94 static uint8_t fcode_tab
[MAX_MV
*2+1];
96 static uint32_t uni_mpeg1_ac_vlc_bits
[64*64*2];
97 static uint8_t uni_mpeg1_ac_vlc_len
[64*64*2];
99 /* simple include everything table for dc, first byte is bits number next 3 are code*/
100 static uint32_t mpeg1_lum_dc_uni
[512];
101 static uint32_t mpeg1_chr_dc_uni
[512];
103 static uint8_t mpeg1_index_run
[2][64];
104 static int8_t mpeg1_max_level
[2][64];
105 #endif //CONFIG_ENCODERS
107 static void init_2d_vlc_rl(RLTable
*rl
)
111 init_vlc(&rl
->vlc
, TEX_VLC_BITS
, rl
->n
+ 2,
112 &rl
->table_vlc
[0][1], 4, 2,
113 &rl
->table_vlc
[0][0], 4, 2);
116 rl
->rl_vlc
[0]= av_malloc(rl
->vlc
.table_size
*sizeof(RL_VLC_ELEM
));
117 for(i
=0; i
<rl
->vlc
.table_size
; i
++){
118 int code
= rl
->vlc
.table
[i
][0];
119 int len
= rl
->vlc
.table
[i
][1];
122 if(len
==0){ // illegal code
125 }else if(len
<0){ //more bits needed
129 if(code
==rl
->n
){ //esc
132 }else if(code
==rl
->n
+1){ //eob
136 run
= rl
->table_run
[code
] + 1;
137 level
= rl
->table_level
[code
];
140 rl
->rl_vlc
[0][i
].len
= len
;
141 rl
->rl_vlc
[0][i
].level
= level
;
142 rl
->rl_vlc
[0][i
].run
= run
;
146 #ifdef CONFIG_ENCODERS
147 static void init_uni_ac_vlc(RLTable
*rl
, uint32_t *uni_ac_vlc_bits
, uint8_t *uni_ac_vlc_len
){
150 for(i
=0; i
<128; i
++){
153 for(run
=0; run
<64; run
++){
156 int alevel
= ABS(level
);
157 int sign
= (level
>>31)&1;
159 if (alevel
> rl
->max_level
[0][run
])
162 code
= rl
->index_run
[0][run
] + alevel
- 1;
164 if (code
< 111 /* rl->n */) {
165 /* store the vlc & sign at once */
166 len
= mpeg1_vlc
[code
][1]+1;
167 bits
= (mpeg1_vlc
[code
][0]<<1) + sign
;
169 len
= mpeg1_vlc
[111/*rl->n*/][1]+6;
170 bits
= mpeg1_vlc
[111/*rl->n*/][0]<<6;
180 bits
|= 0x8001 + level
+ 255;
182 bits
|= level
& 0xffff;
187 uni_ac_vlc_bits
[UNI_AC_ENC_INDEX(run
, i
)]= bits
;
188 uni_ac_vlc_len
[UNI_AC_ENC_INDEX(run
, i
)]= len
;
194 static int find_frame_rate_index(MpegEncContext
*s
){
196 int64_t dmin
= INT64_MAX
;
200 int64_t n0
= 1001LL/frame_rate_tab
[i
].den
*frame_rate_tab
[i
].num
*s
->avctx
->frame_rate_base
;
201 int64_t n1
= 1001LL*s
->avctx
->frame_rate
;
202 if(s
->avctx
->strict_std_compliance
>= 0 && i
>=9) break;
207 s
->frame_rate_index
= i
;
216 static int encode_init(AVCodecContext
*avctx
)
218 MpegEncContext
*s
= avctx
->priv_data
;
220 if(MPV_encode_init(avctx
) < 0)
223 if(find_frame_rate_index(s
) < 0){
224 if(s
->strict_std_compliance
>=0){
225 av_log(avctx
, AV_LOG_ERROR
, "MPEG1/2 doesnt support %d/%d fps\n", avctx
->frame_rate
, avctx
->frame_rate_base
);
228 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
);
235 static void put_header(MpegEncContext
*s
, int header
)
237 align_put_bits(&s
->pb
);
238 put_bits(&s
->pb
, 16, header
>>16);
239 put_bits(&s
->pb
, 16, header
&0xFFFF);
242 /* put sequence header if needed */
243 static void mpeg1_encode_sequence_header(MpegEncContext
*s
)
245 unsigned int vbv_buffer_size
;
249 float best_aspect_error
= 1E10
;
250 float aspect_ratio
= av_q2d(s
->avctx
->sample_aspect_ratio
);
251 int constraint_parameter_flag
;
253 if(aspect_ratio
==0.0) aspect_ratio
= 1.0; //pixel aspect 1:1 (VGA)
255 if (s
->current_picture
.key_frame
) {
256 AVRational framerate
= frame_rate_tab
[s
->frame_rate_index
];
258 /* mpeg1 header repeated every gop */
259 put_header(s
, SEQ_START_CODE
);
261 put_bits(&s
->pb
, 12, s
->width
);
262 put_bits(&s
->pb
, 12, s
->height
);
265 float error
= aspect_ratio
;
266 if(s
->codec_id
== CODEC_ID_MPEG1VIDEO
|| i
<=1)
267 error
-= 1.0/mpeg1_aspect
[i
];
269 error
-= av_q2d(mpeg2_aspect
[i
])*s
->height
/s
->width
;
273 if(error
< best_aspect_error
){
274 best_aspect_error
= error
;
275 s
->aspect_ratio_info
= i
;
279 put_bits(&s
->pb
, 4, s
->aspect_ratio_info
);
280 put_bits(&s
->pb
, 4, s
->frame_rate_index
);
282 if(s
->avctx
->rc_max_rate
){
283 v
= (s
->avctx
->rc_max_rate
+ 399) / 400;
284 if (v
> 0x3ffff && s
->codec_id
== CODEC_ID_MPEG1VIDEO
)
290 if(s
->avctx
->rc_buffer_size
)
291 vbv_buffer_size
= s
->avctx
->rc_buffer_size
;
293 /* VBV calculation: Scaled so that a VCD has the proper VBV size of 40 kilobytes */
294 vbv_buffer_size
= (( 20 * s
->bit_rate
) / (1151929 / 2)) * 8 * 1024;
295 vbv_buffer_size
= (vbv_buffer_size
+ 16383) / 16384;
297 put_bits(&s
->pb
, 18, v
& 0x3FFFF);
298 put_bits(&s
->pb
, 1, 1); /* marker */
299 put_bits(&s
->pb
, 10, vbv_buffer_size
& 0x3FF);
301 constraint_parameter_flag
=
302 s
->width
<= 768 && s
->height
<= 576 &&
303 s
->mb_width
* s
->mb_height
<= 396 &&
304 s
->mb_width
* s
->mb_height
* framerate
.num
<= framerate
.den
*396*25 &&
305 framerate
.num
<= framerate
.den
*30 &&
306 vbv_buffer_size
<= 20 &&
308 s
->codec_id
== CODEC_ID_MPEG1VIDEO
;
310 put_bits(&s
->pb
, 1, constraint_parameter_flag
);
312 ff_write_quant_matrix(&s
->pb
, s
->avctx
->intra_matrix
);
313 ff_write_quant_matrix(&s
->pb
, s
->avctx
->inter_matrix
);
315 if(s
->codec_id
== CODEC_ID_MPEG2VIDEO
){
316 put_header(s
, EXT_START_CODE
);
317 put_bits(&s
->pb
, 4, 1); //seq ext
318 put_bits(&s
->pb
, 1, 0); //esc
320 if(s
->avctx
->profile
== FF_PROFILE_UNKNOWN
){
321 put_bits(&s
->pb
, 3, 4); //profile
323 put_bits(&s
->pb
, 3, s
->avctx
->profile
); //profile
326 if(s
->avctx
->level
== FF_LEVEL_UNKNOWN
){
327 put_bits(&s
->pb
, 4, 8); //level
329 put_bits(&s
->pb
, 4, s
->avctx
->level
); //level
332 put_bits(&s
->pb
, 1, s
->progressive_sequence
);
333 put_bits(&s
->pb
, 2, 1); //chroma format 4:2:0
334 put_bits(&s
->pb
, 2, 0); //horizontal size ext
335 put_bits(&s
->pb
, 2, 0); //vertical size ext
336 put_bits(&s
->pb
, 12, v
>>18); //bitrate ext
337 put_bits(&s
->pb
, 1, 1); //marker
338 put_bits(&s
->pb
, 8, vbv_buffer_size
>>10); //vbv buffer ext
339 put_bits(&s
->pb
, 1, s
->low_delay
);
340 put_bits(&s
->pb
, 2, 0); // frame_rate_ext_n
341 put_bits(&s
->pb
, 5, 0); // frame_rate_ext_d
344 put_header(s
, GOP_START_CODE
);
345 put_bits(&s
->pb
, 1, 0); /* do drop frame */
346 /* time code : we must convert from the real frame rate to a
347 fake mpeg frame rate in case of low frame rate */
348 fps
= (framerate
.num
+ framerate
.den
/2)/ framerate
.den
;
349 time_code
= s
->current_picture_ptr
->coded_picture_number
;
351 s
->gop_picture_number
= time_code
;
352 put_bits(&s
->pb
, 5, (uint32_t)((time_code
/ (fps
* 3600)) % 24));
353 put_bits(&s
->pb
, 6, (uint32_t)((time_code
/ (fps
* 60)) % 60));
354 put_bits(&s
->pb
, 1, 1);
355 put_bits(&s
->pb
, 6, (uint32_t)((time_code
/ fps
) % 60));
356 put_bits(&s
->pb
, 6, (uint32_t)((time_code
% fps
)));
357 put_bits(&s
->pb
, 1, !!(s
->flags
& CODEC_FLAG_CLOSED_GOP
));
358 put_bits(&s
->pb
, 1, 0); /* broken link */
362 static inline void encode_mb_skip_run(MpegEncContext
*s
, int run
){
364 put_bits(&s
->pb
, 11, 0x008);
367 put_bits(&s
->pb
, mbAddrIncrTable
[run
][1],
368 mbAddrIncrTable
[run
][0]);
370 #endif //CONFIG_ENCODERS
372 static void common_init(MpegEncContext
*s
)
376 s
->c_dc_scale_table
= mpeg2_dc_scale_table
[s
->intra_dc_precision
];
380 void ff_mpeg1_clean_buffers(MpegEncContext
*s
){
381 s
->last_dc
[0] = 1 << (7 + s
->intra_dc_precision
);
382 s
->last_dc
[1] = s
->last_dc
[0];
383 s
->last_dc
[2] = s
->last_dc
[0];
384 memset(s
->last_mv
, 0, sizeof(s
->last_mv
));
387 #ifdef CONFIG_ENCODERS
389 void ff_mpeg1_encode_slice_header(MpegEncContext
*s
){
390 put_header(s
, SLICE_MIN_START_CODE
+ s
->mb_y
);
391 put_bits(&s
->pb
, 5, s
->qscale
); /* quantizer scale */
392 put_bits(&s
->pb
, 1, 0); /* slice extra information */
395 void mpeg1_encode_picture_header(MpegEncContext
*s
, int picture_number
)
397 mpeg1_encode_sequence_header(s
);
399 /* mpeg1 picture header */
400 put_header(s
, PICTURE_START_CODE
);
401 /* temporal reference */
403 // RAL: s->picture_number instead of s->fake_picture_number
404 put_bits(&s
->pb
, 10, (s
->picture_number
-
405 s
->gop_picture_number
) & 0x3ff);
406 put_bits(&s
->pb
, 3, s
->pict_type
);
408 s
->vbv_delay_ptr
= s
->pb
.buf
+ put_bits_count(&s
->pb
)/8;
409 put_bits(&s
->pb
, 16, 0xFFFF); /* vbv_delay */
411 // RAL: Forward f_code also needed for B frames
412 if (s
->pict_type
== P_TYPE
|| s
->pict_type
== B_TYPE
) {
413 put_bits(&s
->pb
, 1, 0); /* half pel coordinates */
414 if(s
->codec_id
== CODEC_ID_MPEG1VIDEO
)
415 put_bits(&s
->pb
, 3, s
->f_code
); /* forward_f_code */
417 put_bits(&s
->pb
, 3, 7); /* forward_f_code */
420 // RAL: Backward f_code necessary for B frames
421 if (s
->pict_type
== B_TYPE
) {
422 put_bits(&s
->pb
, 1, 0); /* half pel coordinates */
423 if(s
->codec_id
== CODEC_ID_MPEG1VIDEO
)
424 put_bits(&s
->pb
, 3, s
->b_code
); /* backward_f_code */
426 put_bits(&s
->pb
, 3, 7); /* backward_f_code */
429 put_bits(&s
->pb
, 1, 0); /* extra bit picture */
431 s
->frame_pred_frame_dct
= 1;
432 if(s
->codec_id
== CODEC_ID_MPEG2VIDEO
){
433 put_header(s
, EXT_START_CODE
);
434 put_bits(&s
->pb
, 4, 8); //pic ext
435 if (s
->pict_type
== P_TYPE
|| s
->pict_type
== B_TYPE
) {
436 put_bits(&s
->pb
, 4, s
->f_code
);
437 put_bits(&s
->pb
, 4, s
->f_code
);
439 put_bits(&s
->pb
, 8, 255);
441 if (s
->pict_type
== B_TYPE
) {
442 put_bits(&s
->pb
, 4, s
->b_code
);
443 put_bits(&s
->pb
, 4, s
->b_code
);
445 put_bits(&s
->pb
, 8, 255);
447 put_bits(&s
->pb
, 2, s
->intra_dc_precision
);
449 assert(s
->picture_structure
== PICT_FRAME
);
450 put_bits(&s
->pb
, 2, s
->picture_structure
);
451 if (s
->progressive_sequence
) {
452 put_bits(&s
->pb
, 1, 0); /* no repeat */
454 put_bits(&s
->pb
, 1, s
->current_picture_ptr
->top_field_first
);
456 /* XXX: optimize the generation of this flag with entropy
458 s
->frame_pred_frame_dct
= s
->progressive_sequence
;
460 put_bits(&s
->pb
, 1, s
->frame_pred_frame_dct
);
461 put_bits(&s
->pb
, 1, s
->concealment_motion_vectors
);
462 put_bits(&s
->pb
, 1, s
->q_scale_type
);
463 put_bits(&s
->pb
, 1, s
->intra_vlc_format
);
464 put_bits(&s
->pb
, 1, s
->alternate_scan
);
465 put_bits(&s
->pb
, 1, s
->repeat_first_field
);
466 put_bits(&s
->pb
, 1, s
->chroma_420_type
=1);
467 s
->progressive_frame
= s
->progressive_sequence
;
468 put_bits(&s
->pb
, 1, s
->progressive_frame
);
469 put_bits(&s
->pb
, 1, 0); //composite_display_flag
471 if(s
->flags
& CODEC_FLAG_SVCD_SCAN_OFFSET
){
474 put_header(s
, USER_START_CODE
);
475 for(i
=0; i
<sizeof(svcd_scan_offset_placeholder
); i
++){
476 put_bits(&s
->pb
, 8, svcd_scan_offset_placeholder
[i
]);
481 ff_mpeg1_encode_slice_header(s
);
484 static inline void put_mb_modes(MpegEncContext
*s
, int n
, int bits
,
485 int has_mv
, int field_motion
)
487 put_bits(&s
->pb
, n
, bits
);
488 if (!s
->frame_pred_frame_dct
) {
490 put_bits(&s
->pb
, 2, 2 - field_motion
); /* motion_type: frame/field */
491 put_bits(&s
->pb
, 1, s
->interlaced_dct
);
495 void mpeg1_encode_mb(MpegEncContext
*s
,
496 DCTELEM block
[6][64],
497 int motion_x
, int motion_y
)
500 const int mb_x
= s
->mb_x
;
501 const int mb_y
= s
->mb_y
;
502 const int first_mb
= mb_x
== s
->resync_mb_x
&& mb_y
== s
->resync_mb_y
;
507 if (s
->block_last_index
[i
] >= 0)
511 if (cbp
== 0 && !first_mb
&& s
->mv_type
== MV_TYPE_16X16
&&
512 (mb_x
!= s
->mb_width
- 1 || (mb_y
!= s
->mb_height
- 1 && s
->codec_id
== CODEC_ID_MPEG1VIDEO
)) &&
513 ((s
->pict_type
== P_TYPE
&& (motion_x
| motion_y
) == 0) ||
514 (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) |
515 ((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))) {
517 s
->qscale
-= s
->dquant
;
521 if(s
->pict_type
== P_TYPE
){
522 s
->last_mv
[0][1][0]= s
->last_mv
[0][0][0]=
523 s
->last_mv
[0][1][1]= s
->last_mv
[0][0][1]= 0;
527 assert(s
->mb_skip_run
== 0);
528 encode_mb_skip_run(s
, s
->mb_x
);
530 encode_mb_skip_run(s
, s
->mb_skip_run
);
533 if (s
->pict_type
== I_TYPE
) {
534 if(s
->dquant
&& cbp
){
535 put_mb_modes(s
, 2, 1, 0, 0); /* macroblock_type : macroblock_quant = 1 */
536 put_bits(&s
->pb
, 5, s
->qscale
);
538 put_mb_modes(s
, 1, 1, 0, 0); /* macroblock_type : macroblock_quant = 0 */
539 s
->qscale
-= s
->dquant
;
541 s
->misc_bits
+= get_bits_diff(s
);
543 } else if (s
->mb_intra
) {
544 if(s
->dquant
&& cbp
){
545 put_mb_modes(s
, 6, 0x01, 0, 0);
546 put_bits(&s
->pb
, 5, s
->qscale
);
548 put_mb_modes(s
, 5, 0x03, 0, 0);
549 s
->qscale
-= s
->dquant
;
551 s
->misc_bits
+= get_bits_diff(s
);
553 memset(s
->last_mv
, 0, sizeof(s
->last_mv
));
554 } else if (s
->pict_type
== P_TYPE
) {
555 if(s
->mv_type
== MV_TYPE_16X16
){
557 if ((motion_x
|motion_y
) == 0) {
559 put_mb_modes(s
, 5, 1, 0, 0); /* macroblock_pattern & quant */
560 put_bits(&s
->pb
, 5, s
->qscale
);
562 put_mb_modes(s
, 2, 1, 0, 0); /* macroblock_pattern only */
564 s
->misc_bits
+= get_bits_diff(s
);
567 put_mb_modes(s
, 5, 2, 1, 0); /* motion + cbp */
568 put_bits(&s
->pb
, 5, s
->qscale
);
570 put_mb_modes(s
, 1, 1, 1, 0); /* motion + cbp */
572 s
->misc_bits
+= get_bits_diff(s
);
573 mpeg1_encode_motion(s
, motion_x
- s
->last_mv
[0][0][0], s
->f_code
); // RAL: f_code parameter added
574 mpeg1_encode_motion(s
, motion_y
- s
->last_mv
[0][0][1], s
->f_code
); // RAL: f_code parameter added
575 s
->mv_bits
+= get_bits_diff(s
);
578 put_bits(&s
->pb
, 3, 1); /* motion only */
579 if (!s
->frame_pred_frame_dct
)
580 put_bits(&s
->pb
, 2, 2); /* motion_type: frame */
581 s
->misc_bits
+= get_bits_diff(s
);
582 mpeg1_encode_motion(s
, motion_x
- s
->last_mv
[0][0][0], s
->f_code
); // RAL: f_code parameter added
583 mpeg1_encode_motion(s
, motion_y
- s
->last_mv
[0][0][1], s
->f_code
); // RAL: f_code parameter added
584 s
->qscale
-= s
->dquant
;
585 s
->mv_bits
+= get_bits_diff(s
);
587 s
->last_mv
[0][1][0]= s
->last_mv
[0][0][0]= motion_x
;
588 s
->last_mv
[0][1][1]= s
->last_mv
[0][0][1]= motion_y
;
590 assert(!s
->frame_pred_frame_dct
&& s
->mv_type
== MV_TYPE_FIELD
);
594 put_mb_modes(s
, 5, 2, 1, 1); /* motion + cbp */
595 put_bits(&s
->pb
, 5, s
->qscale
);
597 put_mb_modes(s
, 1, 1, 1, 1); /* motion + cbp */
600 put_bits(&s
->pb
, 3, 1); /* motion only */
601 put_bits(&s
->pb
, 2, 1); /* motion_type: field */
602 s
->qscale
-= s
->dquant
;
604 s
->misc_bits
+= get_bits_diff(s
);
606 put_bits(&s
->pb
, 1, s
->field_select
[0][i
]);
607 mpeg1_encode_motion(s
, s
->mv
[0][i
][0] - s
->last_mv
[0][i
][0] , s
->f_code
);
608 mpeg1_encode_motion(s
, s
->mv
[0][i
][1] - (s
->last_mv
[0][i
][1]>>1), s
->f_code
);
609 s
->last_mv
[0][i
][0]= s
->mv
[0][i
][0];
610 s
->last_mv
[0][i
][1]= 2*s
->mv
[0][i
][1];
612 s
->mv_bits
+= get_bits_diff(s
);
615 put_bits(&s
->pb
, mbPatTable
[cbp
][1], mbPatTable
[cbp
][0]);
618 static const int mb_type_len
[4]={0,3,4,2}; //bak,for,bi
620 if(s
->mv_type
== MV_TYPE_16X16
){
621 if (cbp
){ // With coded bloc pattern
623 if(s
->mv_dir
== MV_DIR_FORWARD
)
624 put_mb_modes(s
, 6, 3, 1, 0);
626 put_mb_modes(s
, mb_type_len
[s
->mv_dir
]+3, 2, 1, 0);
627 put_bits(&s
->pb
, 5, s
->qscale
);
629 put_mb_modes(s
, mb_type_len
[s
->mv_dir
], 3, 1, 0);
631 }else{ // No coded bloc pattern
632 put_bits(&s
->pb
, mb_type_len
[s
->mv_dir
], 2);
633 if (!s
->frame_pred_frame_dct
)
634 put_bits(&s
->pb
, 2, 2); /* motion_type: frame */
635 s
->qscale
-= s
->dquant
;
637 s
->misc_bits
+= get_bits_diff(s
);
638 if (s
->mv_dir
&MV_DIR_FORWARD
){
639 mpeg1_encode_motion(s
, s
->mv
[0][0][0] - s
->last_mv
[0][0][0], s
->f_code
);
640 mpeg1_encode_motion(s
, s
->mv
[0][0][1] - s
->last_mv
[0][0][1], s
->f_code
);
641 s
->last_mv
[0][0][0]=s
->last_mv
[0][1][0]= s
->mv
[0][0][0];
642 s
->last_mv
[0][0][1]=s
->last_mv
[0][1][1]= s
->mv
[0][0][1];
645 if (s
->mv_dir
&MV_DIR_BACKWARD
){
646 mpeg1_encode_motion(s
, s
->mv
[1][0][0] - s
->last_mv
[1][0][0], s
->b_code
);
647 mpeg1_encode_motion(s
, s
->mv
[1][0][1] - s
->last_mv
[1][0][1], s
->b_code
);
648 s
->last_mv
[1][0][0]=s
->last_mv
[1][1][0]= s
->mv
[1][0][0];
649 s
->last_mv
[1][0][1]=s
->last_mv
[1][1][1]= s
->mv
[1][0][1];
653 assert(s
->mv_type
== MV_TYPE_FIELD
);
654 assert(!s
->frame_pred_frame_dct
);
655 if (cbp
){ // With coded bloc pattern
657 if(s
->mv_dir
== MV_DIR_FORWARD
)
658 put_mb_modes(s
, 6, 3, 1, 1);
660 put_mb_modes(s
, mb_type_len
[s
->mv_dir
]+3, 2, 1, 1);
661 put_bits(&s
->pb
, 5, s
->qscale
);
663 put_mb_modes(s
, mb_type_len
[s
->mv_dir
], 3, 1, 1);
665 }else{ // No coded bloc pattern
666 put_bits(&s
->pb
, mb_type_len
[s
->mv_dir
], 2);
667 put_bits(&s
->pb
, 2, 1); /* motion_type: field */
668 s
->qscale
-= s
->dquant
;
670 s
->misc_bits
+= get_bits_diff(s
);
671 if (s
->mv_dir
&MV_DIR_FORWARD
){
673 put_bits(&s
->pb
, 1, s
->field_select
[0][i
]);
674 mpeg1_encode_motion(s
, s
->mv
[0][i
][0] - s
->last_mv
[0][i
][0] , s
->f_code
);
675 mpeg1_encode_motion(s
, s
->mv
[0][i
][1] - (s
->last_mv
[0][i
][1]>>1), s
->f_code
);
676 s
->last_mv
[0][i
][0]= s
->mv
[0][i
][0];
677 s
->last_mv
[0][i
][1]= 2*s
->mv
[0][i
][1];
681 if (s
->mv_dir
&MV_DIR_BACKWARD
){
683 put_bits(&s
->pb
, 1, s
->field_select
[1][i
]);
684 mpeg1_encode_motion(s
, s
->mv
[1][i
][0] - s
->last_mv
[1][i
][0] , s
->b_code
);
685 mpeg1_encode_motion(s
, s
->mv
[1][i
][1] - (s
->last_mv
[1][i
][1]>>1), s
->b_code
);
686 s
->last_mv
[1][i
][0]= s
->mv
[1][i
][0];
687 s
->last_mv
[1][i
][1]= 2*s
->mv
[1][i
][1];
692 s
->mv_bits
+= get_bits_diff(s
);
694 put_bits(&s
->pb
, mbPatTable
[cbp
][1], mbPatTable
[cbp
][0]);
697 if (cbp
& (1 << (5 - i
))) {
698 mpeg1_encode_block(s
, block
[i
], i
);
703 s
->i_tex_bits
+= get_bits_diff(s
);
705 s
->p_tex_bits
+= get_bits_diff(s
);
709 // RAL: Parameter added: f_or_b_code
710 static void mpeg1_encode_motion(MpegEncContext
*s
, int val
, int f_or_b_code
)
712 int code
, bit_size
, l
, bits
, range
, sign
;
718 mbMotionVectorTable
[0][1],
719 mbMotionVectorTable
[0][0]);
721 bit_size
= f_or_b_code
- 1;
722 range
= 1 << bit_size
;
723 /* modulo encoding */
724 l
= INT_BIT
- 5 - bit_size
;
729 code
= (val
>> bit_size
) + 1;
730 bits
= val
& (range
- 1);
735 code
= (val
>> bit_size
) + 1;
736 bits
= val
& (range
- 1);
740 assert(code
> 0 && code
<= 16);
743 mbMotionVectorTable
[code
][1],
744 mbMotionVectorTable
[code
][0]);
746 put_bits(&s
->pb
, 1, sign
);
748 put_bits(&s
->pb
, bit_size
, bits
);
753 void ff_mpeg1_encode_init(MpegEncContext
*s
)
769 mpeg1_max_level
[0][i
]= rl_mpeg1
.max_level
[0][i
];
770 mpeg1_index_run
[0][i
]= rl_mpeg1
.index_run
[0][i
];
773 init_uni_ac_vlc(&rl_mpeg1
, uni_mpeg1_ac_vlc_bits
, uni_mpeg1_ac_vlc_len
);
775 /* build unified dc encoding tables */
776 for(i
=-255; i
<256; i
++)
784 index
= av_log2(2*adiff
);
786 bits
= vlc_dc_lum_bits
[index
] + index
;
787 code
= (vlc_dc_lum_code
[index
]<<index
) + (diff
& ((1 << index
) - 1));
788 mpeg1_lum_dc_uni
[i
+255]= bits
+ (code
<<8);
790 bits
= vlc_dc_chroma_bits
[index
] + index
;
791 code
= (vlc_dc_chroma_code
[index
]<<index
) + (diff
& ((1 << index
) - 1));
792 mpeg1_chr_dc_uni
[i
+255]= bits
+ (code
<<8);
795 mv_penalty
= av_mallocz( sizeof(uint8_t)*(MAX_FCODE
+1)*(2*MAX_MV
+1) );
797 for(f_code
=1; f_code
<=MAX_FCODE
; f_code
++){
798 for(mv
=-MAX_MV
; mv
<=MAX_MV
; mv
++){
801 if(mv
==0) len
= mbMotionVectorTable
[0][1];
803 int val
, bit_size
, range
, code
;
805 bit_size
= f_code
- 1;
806 range
= 1 << bit_size
;
812 code
= (val
>> bit_size
) + 1;
814 len
= mbMotionVectorTable
[code
][1] + 1 + bit_size
;
816 len
= mbMotionVectorTable
[16][1] + 2 + bit_size
;
820 mv_penalty
[f_code
][mv
+MAX_MV
]= len
;
825 for(f_code
=MAX_FCODE
; f_code
>0; f_code
--){
826 for(mv
=-(8<<f_code
); mv
<(8<<f_code
); mv
++){
827 fcode_tab
[mv
+MAX_MV
]= f_code
;
831 s
->me
.mv_penalty
= mv_penalty
;
832 s
->fcode_tab
= fcode_tab
;
833 if(s
->codec_id
== CODEC_ID_MPEG1VIDEO
){
840 s
->intra_ac_vlc_length
=
841 s
->inter_ac_vlc_length
=
842 s
->intra_ac_vlc_last_length
=
843 s
->inter_ac_vlc_last_length
= uni_mpeg1_ac_vlc_len
;
846 static inline void encode_dc(MpegEncContext
*s
, int diff
, int component
)
848 if(((unsigned) (diff
+255)) >= 511){
852 index
= av_log2_16bit(-2*diff
);
855 index
= av_log2_16bit(2*diff
);
857 if (component
== 0) {
860 vlc_dc_lum_bits
[index
] + index
,
861 (vlc_dc_lum_code
[index
]<<index
) + (diff
& ((1 << index
) - 1)));
865 vlc_dc_chroma_bits
[index
] + index
,
866 (vlc_dc_chroma_code
[index
]<<index
) + (diff
& ((1 << index
) - 1)));
869 if (component
== 0) {
872 mpeg1_lum_dc_uni
[diff
+255]&0xFF,
873 mpeg1_lum_dc_uni
[diff
+255]>>8);
877 mpeg1_chr_dc_uni
[diff
+255]&0xFF,
878 mpeg1_chr_dc_uni
[diff
+255]>>8);
883 static void mpeg1_encode_block(MpegEncContext
*s
,
887 int alevel
, level
, last_non_zero
, dc
, diff
, i
, j
, run
, last_index
, sign
;
889 // RLTable *rl = &rl_mpeg1;
891 last_index
= s
->block_last_index
[n
];
895 component
= (n
<= 3 ?
0 : n
- 4 + 1);
896 dc
= block
[0]; /* overflow is impossible */
897 diff
= dc
- s
->last_dc
[component
];
898 encode_dc(s
, diff
, component
);
899 s
->last_dc
[component
] = dc
;
902 if (s->intra_vlc_format)
908 /* encode the first coefficient : needs to be done here because
909 it is handled slightly differently */
911 if (abs(level
) == 1) {
912 code
= ((uint32_t)level
>> 31); /* the sign bit */
913 put_bits(&s
->pb
, 2, code
| 0x02);
922 /* now quantify & encode AC coefs */
923 last_non_zero
= i
- 1;
925 for(;i
<=last_index
;i
++) {
926 j
= s
->intra_scantable
.permutated
[i
];
931 dprintf("level[%d]=%d\n", i
, level
);
933 /* encode using VLC */
935 run
= i
- last_non_zero
- 1;
938 MASK_ABS(sign
, alevel
)
941 // code = get_rl_index(rl, 0, run, alevel);
942 if (alevel
<= mpeg1_max_level
[0][run
]){
943 code
= mpeg1_index_run
[0][run
] + alevel
- 1;
944 /* store the vlc & sign at once */
945 put_bits(&s
->pb
, mpeg1_vlc
[code
][1]+1, (mpeg1_vlc
[code
][0]<<1) + sign
);
947 /* escape seems to be pretty rare <5% so i dont optimize it */
948 put_bits(&s
->pb
, mpeg1_vlc
[111/*rl->n*/][1], mpeg1_vlc
[111/*rl->n*/][0]);
949 /* escape: only clip in this case */
950 put_bits(&s
->pb
, 6, run
);
951 if(s
->codec_id
== CODEC_ID_MPEG1VIDEO
){
953 put_bits(&s
->pb
, 8, level
& 0xff);
956 put_bits(&s
->pb
, 16, 0x8001 + level
+ 255);
958 put_bits(&s
->pb
, 16, level
& 0xffff);
962 put_bits(&s
->pb
, 12, level
& 0xfff);
969 put_bits(&s
->pb
, 2, 0x2);
971 #endif //CONFIG_ENCODERS
973 /******************************************/
976 static VLC dc_lum_vlc
;
977 static VLC dc_chroma_vlc
;
979 static VLC mbincr_vlc
;
980 static VLC mb_ptype_vlc
;
981 static VLC mb_btype_vlc
;
982 static VLC mb_pat_vlc
;
984 static void init_vlcs(void)
991 init_vlc(&dc_lum_vlc
, DC_VLC_BITS
, 12,
992 vlc_dc_lum_bits
, 1, 1,
993 vlc_dc_lum_code
, 2, 2);
994 init_vlc(&dc_chroma_vlc
, DC_VLC_BITS
, 12,
995 vlc_dc_chroma_bits
, 1, 1,
996 vlc_dc_chroma_code
, 2, 2);
997 init_vlc(&mv_vlc
, MV_VLC_BITS
, 17,
998 &mbMotionVectorTable
[0][1], 2, 1,
999 &mbMotionVectorTable
[0][0], 2, 1);
1000 init_vlc(&mbincr_vlc
, MBINCR_VLC_BITS
, 36,
1001 &mbAddrIncrTable
[0][1], 2, 1,
1002 &mbAddrIncrTable
[0][0], 2, 1);
1003 init_vlc(&mb_pat_vlc
, MB_PAT_VLC_BITS
, 64,
1004 &mbPatTable
[0][1], 2, 1,
1005 &mbPatTable
[0][0], 2, 1);
1007 init_vlc(&mb_ptype_vlc
, MB_PTYPE_VLC_BITS
, 7,
1008 &table_mb_ptype
[0][1], 2, 1,
1009 &table_mb_ptype
[0][0], 2, 1);
1010 init_vlc(&mb_btype_vlc
, MB_BTYPE_VLC_BITS
, 11,
1011 &table_mb_btype
[0][1], 2, 1,
1012 &table_mb_btype
[0][0], 2, 1);
1016 init_2d_vlc_rl(&rl_mpeg1
);
1017 init_2d_vlc_rl(&rl_mpeg2
);
1021 static inline int get_dmv(MpegEncContext
*s
)
1023 if(get_bits1(&s
->gb
))
1024 return 1 - (get_bits1(&s
->gb
) << 1);
1029 static inline int get_qscale(MpegEncContext
*s
)
1031 int qscale
= get_bits(&s
->gb
, 5);
1032 if (s
->q_scale_type
) {
1033 return non_linear_qscale
[qscale
];
1039 /* motion type (for mpeg2) */
1045 static int mpeg_decode_mb(MpegEncContext
*s
,
1046 DCTELEM block
[12][64])
1048 int i
, j
, k
, cbp
, val
, mb_type
, motion_type
;
1049 const int mb_block_count
= 4 + (1<< s
->chroma_format
)
1051 dprintf("decode_mb: x=%d y=%d\n", s
->mb_x
, s
->mb_y
);
1053 assert(s
->mb_skiped
==0);
1055 if (s
->mb_skip_run
-- != 0) {
1056 if(s
->pict_type
== I_TYPE
){
1057 av_log(s
->avctx
, AV_LOG_ERROR
, "skiped MB in I frame at %d %d\n", s
->mb_x
, s
->mb_y
);
1064 s
->block_last_index
[i
] = -1;
1065 if(s
->picture_structure
== PICT_FRAME
)
1066 s
->mv_type
= MV_TYPE_16X16
;
1068 s
->mv_type
= MV_TYPE_FIELD
;
1069 if (s
->pict_type
== P_TYPE
) {
1070 /* if P type, zero motion vector is implied */
1071 s
->mv_dir
= MV_DIR_FORWARD
;
1072 s
->mv
[0][0][0] = s
->mv
[0][0][1] = 0;
1073 s
->last_mv
[0][0][0] = s
->last_mv
[0][0][1] = 0;
1074 s
->last_mv
[0][1][0] = s
->last_mv
[0][1][1] = 0;
1075 s
->field_select
[0][0]= s
->picture_structure
- 1;
1077 s
->current_picture
.mb_type
[ s
->mb_x
+ s
->mb_y
*s
->mb_stride
]= MB_TYPE_SKIP
| MB_TYPE_L0
| MB_TYPE_16x16
;
1079 /* if B type, reuse previous vectors and directions */
1080 s
->mv
[0][0][0] = s
->last_mv
[0][0][0];
1081 s
->mv
[0][0][1] = s
->last_mv
[0][0][1];
1082 s
->mv
[1][0][0] = s
->last_mv
[1][0][0];
1083 s
->mv
[1][0][1] = s
->last_mv
[1][0][1];
1085 s
->current_picture
.mb_type
[ s
->mb_x
+ s
->mb_y
*s
->mb_stride
]=
1086 s
->current_picture
.mb_type
[ s
->mb_x
+ s
->mb_y
*s
->mb_stride
- 1] | MB_TYPE_SKIP
;
1087 // assert(s->current_picture.mb_type[ s->mb_x + s->mb_y*s->mb_stride - 1]&(MB_TYPE_16x16|MB_TYPE_16x8));
1089 if((s
->mv
[0][0][0]|s
->mv
[0][0][1]|s
->mv
[1][0][0]|s
->mv
[1][0][1])==0)
1096 switch(s
->pict_type
) {
1099 if (get_bits1(&s
->gb
) == 0) {
1100 if (get_bits1(&s
->gb
) == 0){
1101 av_log(s
->avctx
, AV_LOG_ERROR
, "invalid mb type in I Frame at %d %d\n", s
->mb_x
, s
->mb_y
);
1104 mb_type
= MB_TYPE_QUANT
| MB_TYPE_INTRA
;
1106 mb_type
= MB_TYPE_INTRA
;
1110 mb_type
= get_vlc2(&s
->gb
, mb_ptype_vlc
.table
, MB_PTYPE_VLC_BITS
, 1);
1112 av_log(s
->avctx
, AV_LOG_ERROR
, "invalid mb type in P Frame at %d %d\n", s
->mb_x
, s
->mb_y
);
1115 mb_type
= ptype2mb_type
[ mb_type
];
1118 mb_type
= get_vlc2(&s
->gb
, mb_btype_vlc
.table
, MB_BTYPE_VLC_BITS
, 1);
1120 av_log(s
->avctx
, AV_LOG_ERROR
, "invalid mb type in B Frame at %d %d\n", s
->mb_x
, s
->mb_y
);
1123 mb_type
= btype2mb_type
[ mb_type
];
1126 dprintf("mb_type=%x\n", mb_type
);
1127 // motion_type = 0; /* avoid warning */
1128 if (IS_INTRA(mb_type
)) {
1129 /* compute dct type */
1130 if (s
->picture_structure
== PICT_FRAME
&& //FIXME add a interlaced_dct coded var?
1131 !s
->frame_pred_frame_dct
) {
1132 s
->interlaced_dct
= get_bits1(&s
->gb
);
1135 if (IS_QUANT(mb_type
))
1136 s
->qscale
= get_qscale(s
);
1138 if (s
->concealment_motion_vectors
) {
1139 /* just parse them */
1140 if (s
->picture_structure
!= PICT_FRAME
)
1141 skip_bits1(&s
->gb
); /* field select */
1143 s
->mv
[0][0][0]= s
->last_mv
[0][0][0]= s
->last_mv
[0][1][0] =
1144 mpeg_decode_motion(s
, s
->mpeg_f_code
[0][0], s
->last_mv
[0][0][0]);
1145 s
->mv
[0][0][1]= s
->last_mv
[0][0][1]= s
->last_mv
[0][1][1] =
1146 mpeg_decode_motion(s
, s
->mpeg_f_code
[0][1], s
->last_mv
[0][0][1]);
1148 skip_bits1(&s
->gb
); /* marker */
1150 memset(s
->last_mv
, 0, sizeof(s
->last_mv
)); /* reset mv prediction */
1153 //one 1 we memcpy blocks in xvmcvideo
1154 if(s
->avctx
->xvmc_acceleration
> 1){
1155 XVMC_pack_pblocks(s
,-1);//inter are always full blocks
1162 if (s
->codec_id
== CODEC_ID_MPEG2VIDEO
) {
1163 for(i
=0;i
<mb_block_count
;i
++) {
1164 if (mpeg2_decode_block_intra(s
, s
->pblocks
[i
], i
) < 0)
1169 if (mpeg1_decode_block_intra(s
, s
->pblocks
[i
], i
) < 0)
1174 if (mb_type
& MB_TYPE_ZERO_MV
){
1175 assert(mb_type
& MB_TYPE_CBP
);
1177 /* compute dct type */
1178 if (s
->picture_structure
== PICT_FRAME
&& //FIXME add a interlaced_dct coded var?
1179 !s
->frame_pred_frame_dct
) {
1180 s
->interlaced_dct
= get_bits1(&s
->gb
);
1183 if (IS_QUANT(mb_type
))
1184 s
->qscale
= get_qscale(s
);
1186 s
->mv_dir
= MV_DIR_FORWARD
;
1187 if(s
->picture_structure
== PICT_FRAME
)
1188 s
->mv_type
= MV_TYPE_16X16
;
1190 s
->mv_type
= MV_TYPE_FIELD
;
1191 mb_type
|= MB_TYPE_INTERLACED
;
1192 s
->field_select
[0][0]= s
->picture_structure
- 1;
1194 s
->last_mv
[0][0][0] = 0;
1195 s
->last_mv
[0][0][1] = 0;
1196 s
->last_mv
[0][1][0] = 0;
1197 s
->last_mv
[0][1][1] = 0;
1201 assert(mb_type
& MB_TYPE_L0L1
);
1202 //FIXME decide if MBs in field pictures are MB_TYPE_INTERLACED
1203 /* get additionnal motion vector type */
1204 if (s
->frame_pred_frame_dct
)
1205 motion_type
= MT_FRAME
;
1207 motion_type
= get_bits(&s
->gb
, 2);
1210 /* compute dct type */
1211 if (s
->picture_structure
== PICT_FRAME
&& //FIXME add a interlaced_dct coded var?
1212 !s
->frame_pred_frame_dct
&& HAS_CBP(mb_type
)) {
1213 s
->interlaced_dct
= get_bits1(&s
->gb
);
1216 if (IS_QUANT(mb_type
))
1217 s
->qscale
= get_qscale(s
);
1219 /* motion vectors */
1222 if (USES_LIST(mb_type
, i
)) {
1223 s
->mv_dir
|= (MV_DIR_FORWARD
>> i
);
1224 dprintf("motion_type=%d\n", motion_type
);
1225 switch(motion_type
) {
1226 case MT_FRAME
: /* or MT_16X8 */
1227 if (s
->picture_structure
== PICT_FRAME
) {
1229 mb_type
|= MB_TYPE_16x16
;
1230 s
->mv_type
= MV_TYPE_16X16
;
1231 s
->mv
[i
][0][0]= s
->last_mv
[i
][0][0]= s
->last_mv
[i
][1][0] =
1232 mpeg_decode_motion(s
, s
->mpeg_f_code
[i
][0], s
->last_mv
[i
][0][0]);
1233 s
->mv
[i
][0][1]= s
->last_mv
[i
][0][1]= s
->last_mv
[i
][1][1] =
1234 mpeg_decode_motion(s
, s
->mpeg_f_code
[i
][1], s
->last_mv
[i
][0][1]);
1235 /* full_pel: only for mpeg1 */
1236 if (s
->full_pel
[i
]){
1237 s
->mv
[i
][0][0] <<= 1;
1238 s
->mv
[i
][0][1] <<= 1;
1242 mb_type
|= MB_TYPE_16x8
| MB_TYPE_INTERLACED
;
1243 s
->mv_type
= MV_TYPE_16X8
;
1245 s
->field_select
[i
][j
] = get_bits1(&s
->gb
);
1247 val
= mpeg_decode_motion(s
, s
->mpeg_f_code
[i
][k
],
1248 s
->last_mv
[i
][j
][k
]);
1249 s
->last_mv
[i
][j
][k
] = val
;
1250 s
->mv
[i
][j
][k
] = val
;
1256 s
->mv_type
= MV_TYPE_FIELD
;
1257 if (s
->picture_structure
== PICT_FRAME
) {
1258 mb_type
|= MB_TYPE_16x8
| MB_TYPE_INTERLACED
;
1260 s
->field_select
[i
][j
] = get_bits1(&s
->gb
);
1261 val
= mpeg_decode_motion(s
, s
->mpeg_f_code
[i
][0],
1262 s
->last_mv
[i
][j
][0]);
1263 s
->last_mv
[i
][j
][0] = val
;
1264 s
->mv
[i
][j
][0] = val
;
1265 dprintf("fmx=%d\n", val
);
1266 val
= mpeg_decode_motion(s
, s
->mpeg_f_code
[i
][1],
1267 s
->last_mv
[i
][j
][1] >> 1);
1268 s
->last_mv
[i
][j
][1] = val
<< 1;
1269 s
->mv
[i
][j
][1] = val
;
1270 dprintf("fmy=%d\n", val
);
1273 mb_type
|= MB_TYPE_16x16
| MB_TYPE_INTERLACED
;
1274 s
->field_select
[i
][0] = get_bits1(&s
->gb
);
1276 val
= mpeg_decode_motion(s
, s
->mpeg_f_code
[i
][k
],
1277 s
->last_mv
[i
][0][k
]);
1278 s
->last_mv
[i
][0][k
] = val
;
1279 s
->last_mv
[i
][1][k
] = val
;
1280 s
->mv
[i
][0][k
] = val
;
1286 int dmx
, dmy
, mx
, my
, m
;
1288 mx
= mpeg_decode_motion(s
, s
->mpeg_f_code
[i
][0],
1289 s
->last_mv
[i
][0][0]);
1290 s
->last_mv
[i
][0][0] = mx
;
1291 s
->last_mv
[i
][1][0] = mx
;
1293 my
= mpeg_decode_motion(s
, s
->mpeg_f_code
[i
][1],
1294 s
->last_mv
[i
][0][1] >> 1);
1296 s
->mv_type
= MV_TYPE_DMV
;
1299 s
->last_mv
[i
][0][1] = my
<<1;
1300 s
->last_mv
[i
][1][1] = my
<<1;
1302 s
->mv
[i
][0][0] = mx
;
1303 s
->mv
[i
][0][1] = my
;
1304 s
->mv
[i
][1][0] = mx
;//not used
1305 s
->mv
[i
][1][1] = my
;//not used
1307 if (s
->picture_structure
== PICT_FRAME
) {
1308 mb_type
|= MB_TYPE_16x16
| MB_TYPE_INTERLACED
;
1310 //m = 1 + 2 * s->top_field_first;
1311 m
= s
->top_field_first ?
1 : 3;
1313 /* top -> top pred */
1314 s
->mv
[i
][2][0] = ((mx
* m
+ (mx
> 0)) >> 1) + dmx
;
1315 s
->mv
[i
][2][1] = ((my
* m
+ (my
> 0)) >> 1) + dmy
- 1;
1317 s
->mv
[i
][3][0] = ((mx
* m
+ (mx
> 0)) >> 1) + dmx
;
1318 s
->mv
[i
][3][1] = ((my
* m
+ (my
> 0)) >> 1) + dmy
+ 1;
1320 mb_type
|= MB_TYPE_16x16
;
1322 s
->mv
[i
][2][0] = ((mx
+ (mx
> 0)) >> 1) + dmx
;
1323 s
->mv
[i
][2][1] = ((my
+ (my
> 0)) >> 1) + dmy
;
1324 if(s
->picture_structure
== PICT_TOP_FIELD
)
1332 av_log(s
->avctx
, AV_LOG_ERROR
, "00 motion_type at %d %d\n", s
->mb_x
, s
->mb_y
);
1341 if (HAS_CBP(mb_type
)) {
1342 cbp
= get_vlc2(&s
->gb
, mb_pat_vlc
.table
, MB_PAT_VLC_BITS
, 1);
1343 if (cbp
< 0 || ((cbp
== 0) && (s
->chroma_format
< 2)) ){
1344 av_log(s
->avctx
, AV_LOG_ERROR
, "invalid cbp at %d %d\n", s
->mb_x
, s
->mb_y
);
1347 if(mb_block_count
> 6){
1348 cbp
<<= mb_block_count
-6;
1349 cbp
|= get_bits(&s
->gb
, mb_block_count
-6);
1353 //on 1 we memcpy blocks in xvmcvideo
1354 if(s
->avctx
->xvmc_acceleration
> 1){
1355 XVMC_pack_pblocks(s
,cbp
);
1362 if (s
->codec_id
== CODEC_ID_MPEG2VIDEO
) {
1363 if(s
->flags2
& CODEC_FLAG2_FAST
){
1366 mpeg2_fast_decode_block_non_intra(s
, s
->pblocks
[i
], i
);
1368 s
->block_last_index
[i
] = -1;
1373 cbp
<<= 12-mb_block_count
;
1375 for(i
=0;i
<mb_block_count
;i
++) {
1376 if ( cbp
& (1<<11) ) {
1377 if (mpeg2_decode_block_non_intra(s
, s
->pblocks
[i
], i
) < 0)
1380 s
->block_last_index
[i
] = -1;
1386 if(s
->flags2
& CODEC_FLAG2_FAST
){
1389 mpeg1_fast_decode_block_inter(s
, s
->pblocks
[i
], i
);
1391 s
->block_last_index
[i
] = -1;
1398 if (mpeg1_decode_block_inter(s
, s
->pblocks
[i
], i
) < 0)
1401 s
->block_last_index
[i
] = -1;
1409 s
->block_last_index
[i
] = -1;
1413 s
->current_picture
.mb_type
[ s
->mb_x
+ s
->mb_y
*s
->mb_stride
]= mb_type
;
1418 /* as h263, but only 17 codes */
1419 static int mpeg_decode_motion(MpegEncContext
*s
, int fcode
, int pred
)
1421 int code
, sign
, val
, l
, shift
;
1423 code
= get_vlc2(&s
->gb
, mv_vlc
.table
, MV_VLC_BITS
, 2);
1431 sign
= get_bits1(&s
->gb
);
1435 val
= (val
- 1) << shift
;
1436 val
|= get_bits(&s
->gb
, shift
);
1443 /* modulo decoding */
1444 l
= INT_BIT
- 5 - shift
;
1449 static inline int decode_dc(GetBitContext
*gb
, int component
)
1453 if (component
== 0) {
1454 code
= get_vlc2(gb
, dc_lum_vlc
.table
, DC_VLC_BITS
, 2);
1456 code
= get_vlc2(gb
, dc_chroma_vlc
.table
, DC_VLC_BITS
, 2);
1459 av_log(NULL
, AV_LOG_ERROR
, "invalid dc code at\n");
1465 diff
= get_xbits(gb
, code
);
1470 static inline int mpeg1_decode_block_intra(MpegEncContext
*s
,
1474 int level
, dc
, diff
, i
, j
, run
;
1476 RLTable
*rl
= &rl_mpeg1
;
1477 uint8_t * const scantable
= s
->intra_scantable
.permutated
;
1478 const uint16_t *quant_matrix
= s
->intra_matrix
;
1479 const int qscale
= s
->qscale
;
1482 component
= (n
<= 3 ?
0 : n
- 4 + 1);
1483 diff
= decode_dc(&s
->gb
, component
);
1486 dc
= s
->last_dc
[component
];
1488 s
->last_dc
[component
] = dc
;
1490 dprintf("dc=%d diff=%d\n", dc
, diff
);
1493 OPEN_READER(re
, &s
->gb
);
1494 /* now quantify & encode AC coefs */
1496 UPDATE_CACHE(re
, &s
->gb
);
1497 GET_RL_VLC(level
, run
, re
, &s
->gb
, rl
->rl_vlc
[0], TEX_VLC_BITS
, 2);
1501 } else if(level
!= 0) {
1504 level
= (level
*qscale
*quant_matrix
[j
])>>4;
1506 level
= (level
^ SHOW_SBITS(re
, &s
->gb
, 1)) - SHOW_SBITS(re
, &s
->gb
, 1);
1507 LAST_SKIP_BITS(re
, &s
->gb
, 1);
1510 run
= SHOW_UBITS(re
, &s
->gb
, 6)+1; LAST_SKIP_BITS(re
, &s
->gb
, 6);
1511 UPDATE_CACHE(re
, &s
->gb
);
1512 level
= SHOW_SBITS(re
, &s
->gb
, 8); SKIP_BITS(re
, &s
->gb
, 8);
1513 if (level
== -128) {
1514 level
= SHOW_UBITS(re
, &s
->gb
, 8) - 256; LAST_SKIP_BITS(re
, &s
->gb
, 8);
1515 } else if (level
== 0) {
1516 level
= SHOW_UBITS(re
, &s
->gb
, 8) ; LAST_SKIP_BITS(re
, &s
->gb
, 8);
1522 level
= (level
*qscale
*quant_matrix
[j
])>>4;
1526 level
= (level
*qscale
*quant_matrix
[j
])>>4;
1531 av_log(s
->avctx
, AV_LOG_ERROR
, "ac-tex damaged at %d %d\n", s
->mb_x
, s
->mb_y
);
1537 CLOSE_READER(re
, &s
->gb
);
1539 s
->block_last_index
[n
] = i
;
1543 static inline int mpeg1_decode_block_inter(MpegEncContext
*s
,
1547 int level
, i
, j
, run
;
1548 RLTable
*rl
= &rl_mpeg1
;
1549 uint8_t * const scantable
= s
->intra_scantable
.permutated
;
1550 const uint16_t *quant_matrix
= s
->inter_matrix
;
1551 const int qscale
= s
->qscale
;
1555 OPEN_READER(re
, &s
->gb
);
1557 /* special case for the first coef. no need to add a second vlc table */
1558 UPDATE_CACHE(re
, &s
->gb
);
1559 v
= SHOW_UBITS(re
, &s
->gb
, 2);
1561 LAST_SKIP_BITS(re
, &s
->gb
, 2);
1562 level
= (3*qscale
*quant_matrix
[0])>>5;
1570 /* now quantify & encode AC coefs */
1572 UPDATE_CACHE(re
, &s
->gb
);
1573 GET_RL_VLC(level
, run
, re
, &s
->gb
, rl
->rl_vlc
[0], TEX_VLC_BITS
, 2);
1577 } else if(level
!= 0) {
1580 level
= ((level
*2+1)*qscale
*quant_matrix
[j
])>>5;
1582 level
= (level
^ SHOW_SBITS(re
, &s
->gb
, 1)) - SHOW_SBITS(re
, &s
->gb
, 1);
1583 LAST_SKIP_BITS(re
, &s
->gb
, 1);
1586 run
= SHOW_UBITS(re
, &s
->gb
, 6)+1; LAST_SKIP_BITS(re
, &s
->gb
, 6);
1587 UPDATE_CACHE(re
, &s
->gb
);
1588 level
= SHOW_SBITS(re
, &s
->gb
, 8); SKIP_BITS(re
, &s
->gb
, 8);
1589 if (level
== -128) {
1590 level
= SHOW_UBITS(re
, &s
->gb
, 8) - 256; LAST_SKIP_BITS(re
, &s
->gb
, 8);
1591 } else if (level
== 0) {
1592 level
= SHOW_UBITS(re
, &s
->gb
, 8) ; LAST_SKIP_BITS(re
, &s
->gb
, 8);
1598 level
= ((level
*2+1)*qscale
*quant_matrix
[j
])>>5;
1602 level
= ((level
*2+1)*qscale
*quant_matrix
[j
])>>5;
1607 av_log(s
->avctx
, AV_LOG_ERROR
, "ac-tex damaged at %d %d\n", s
->mb_x
, s
->mb_y
);
1613 CLOSE_READER(re
, &s
->gb
);
1615 s
->block_last_index
[n
] = i
;
1619 static inline int mpeg1_fast_decode_block_inter(MpegEncContext
*s
, DCTELEM
*block
, int n
)
1621 int level
, i
, j
, run
;
1622 RLTable
*rl
= &rl_mpeg1
;
1623 uint8_t * const scantable
= s
->intra_scantable
.permutated
;
1624 const int qscale
= s
->qscale
;
1628 OPEN_READER(re
, &s
->gb
);
1630 /* special case for the first coef. no need to add a second vlc table */
1631 UPDATE_CACHE(re
, &s
->gb
);
1632 v
= SHOW_UBITS(re
, &s
->gb
, 2);
1634 LAST_SKIP_BITS(re
, &s
->gb
, 2);
1635 level
= (3*qscale
)>>1;
1643 /* now quantify & encode AC coefs */
1645 UPDATE_CACHE(re
, &s
->gb
);
1646 GET_RL_VLC(level
, run
, re
, &s
->gb
, rl
->rl_vlc
[0], TEX_VLC_BITS
, 2);
1650 } else if(level
!= 0) {
1653 level
= ((level
*2+1)*qscale
)>>1;
1655 level
= (level
^ SHOW_SBITS(re
, &s
->gb
, 1)) - SHOW_SBITS(re
, &s
->gb
, 1);
1656 LAST_SKIP_BITS(re
, &s
->gb
, 1);
1659 run
= SHOW_UBITS(re
, &s
->gb
, 6)+1; LAST_SKIP_BITS(re
, &s
->gb
, 6);
1660 UPDATE_CACHE(re
, &s
->gb
);
1661 level
= SHOW_SBITS(re
, &s
->gb
, 8); SKIP_BITS(re
, &s
->gb
, 8);
1662 if (level
== -128) {
1663 level
= SHOW_UBITS(re
, &s
->gb
, 8) - 256; LAST_SKIP_BITS(re
, &s
->gb
, 8);
1664 } else if (level
== 0) {
1665 level
= SHOW_UBITS(re
, &s
->gb
, 8) ; LAST_SKIP_BITS(re
, &s
->gb
, 8);
1671 level
= ((level
*2+1)*qscale
)>>1;
1675 level
= ((level
*2+1)*qscale
)>>1;
1682 CLOSE_READER(re
, &s
->gb
);
1684 s
->block_last_index
[n
] = i
;
1689 static inline int mpeg2_decode_block_non_intra(MpegEncContext
*s
,
1693 int level
, i
, j
, run
;
1694 RLTable
*rl
= &rl_mpeg1
;
1695 uint8_t * const scantable
= s
->intra_scantable
.permutated
;
1696 const uint16_t *quant_matrix
;
1697 const int qscale
= s
->qscale
;
1704 OPEN_READER(re
, &s
->gb
);
1707 quant_matrix
= s
->inter_matrix
;
1709 quant_matrix
= s
->chroma_inter_matrix
;
1711 /* special case for the first coef. no need to add a second vlc table */
1712 UPDATE_CACHE(re
, &s
->gb
);
1713 v
= SHOW_UBITS(re
, &s
->gb
, 2);
1715 LAST_SKIP_BITS(re
, &s
->gb
, 2);
1716 level
= (3*qscale
*quant_matrix
[0])>>5;
1724 /* now quantify & encode AC coefs */
1726 UPDATE_CACHE(re
, &s
->gb
);
1727 GET_RL_VLC(level
, run
, re
, &s
->gb
, rl
->rl_vlc
[0], TEX_VLC_BITS
, 2);
1731 } else if(level
!= 0) {
1734 level
= ((level
*2+1)*qscale
*quant_matrix
[j
])>>5;
1735 level
= (level
^ SHOW_SBITS(re
, &s
->gb
, 1)) - SHOW_SBITS(re
, &s
->gb
, 1);
1736 LAST_SKIP_BITS(re
, &s
->gb
, 1);
1739 run
= SHOW_UBITS(re
, &s
->gb
, 6)+1; LAST_SKIP_BITS(re
, &s
->gb
, 6);
1740 UPDATE_CACHE(re
, &s
->gb
);
1741 level
= SHOW_SBITS(re
, &s
->gb
, 12); SKIP_BITS(re
, &s
->gb
, 12);
1746 level
= ((-level
*2+1)*qscale
*quant_matrix
[j
])>>5;
1749 level
= ((level
*2+1)*qscale
*quant_matrix
[j
])>>5;
1753 av_log(s
->avctx
, AV_LOG_ERROR
, "ac-tex damaged at %d %d\n", s
->mb_x
, s
->mb_y
);
1760 CLOSE_READER(re
, &s
->gb
);
1762 block
[63] ^= (mismatch
& 1);
1764 s
->block_last_index
[n
] = i
;
1768 static inline int mpeg2_fast_decode_block_non_intra(MpegEncContext
*s
,
1772 int level
, i
, j
, run
;
1773 RLTable
*rl
= &rl_mpeg1
;
1774 uint8_t * const scantable
= s
->intra_scantable
.permutated
;
1775 const int qscale
= s
->qscale
;
1777 OPEN_READER(re
, &s
->gb
);
1780 /* special case for the first coef. no need to add a second vlc table */
1781 UPDATE_CACHE(re
, &s
->gb
);
1782 v
= SHOW_UBITS(re
, &s
->gb
, 2);
1784 LAST_SKIP_BITS(re
, &s
->gb
, 2);
1785 level
= (3*qscale
)>>1;
1792 /* now quantify & encode AC coefs */
1794 UPDATE_CACHE(re
, &s
->gb
);
1795 GET_RL_VLC(level
, run
, re
, &s
->gb
, rl
->rl_vlc
[0], TEX_VLC_BITS
, 2);
1799 } else if(level
!= 0) {
1802 level
= ((level
*2+1)*qscale
)>>1;
1803 level
= (level
^ SHOW_SBITS(re
, &s
->gb
, 1)) - SHOW_SBITS(re
, &s
->gb
, 1);
1804 LAST_SKIP_BITS(re
, &s
->gb
, 1);
1807 run
= SHOW_UBITS(re
, &s
->gb
, 6)+1; LAST_SKIP_BITS(re
, &s
->gb
, 6);
1808 UPDATE_CACHE(re
, &s
->gb
);
1809 level
= SHOW_SBITS(re
, &s
->gb
, 12); SKIP_BITS(re
, &s
->gb
, 12);
1814 level
= ((-level
*2+1)*qscale
)>>1;
1817 level
= ((level
*2+1)*qscale
)>>1;
1823 CLOSE_READER(re
, &s
->gb
);
1824 s
->block_last_index
[n
] = i
;
1829 static inline int mpeg2_decode_block_intra(MpegEncContext
*s
,
1833 int level
, dc
, diff
, i
, j
, run
;
1836 uint8_t * const scantable
= s
->intra_scantable
.permutated
;
1837 const uint16_t *quant_matrix
;
1838 const int qscale
= s
->qscale
;
1843 quant_matrix
= s
->intra_matrix
;
1846 quant_matrix
= s
->chroma_intra_matrix
;
1847 component
= (n
&1) + 1;
1849 diff
= decode_dc(&s
->gb
, component
);
1852 dc
= s
->last_dc
[component
];
1854 s
->last_dc
[component
] = dc
;
1855 block
[0] = dc
<< (3 - s
->intra_dc_precision
);
1856 dprintf("dc=%d\n", block
[0]);
1857 mismatch
= block
[0] ^ 1;
1859 if (s
->intra_vlc_format
)
1865 OPEN_READER(re
, &s
->gb
);
1866 /* now quantify & encode AC coefs */
1868 UPDATE_CACHE(re
, &s
->gb
);
1869 GET_RL_VLC(level
, run
, re
, &s
->gb
, rl
->rl_vlc
[0], TEX_VLC_BITS
, 2);
1873 } else if(level
!= 0) {
1876 level
= (level
*qscale
*quant_matrix
[j
])>>4;
1877 level
= (level
^ SHOW_SBITS(re
, &s
->gb
, 1)) - SHOW_SBITS(re
, &s
->gb
, 1);
1878 LAST_SKIP_BITS(re
, &s
->gb
, 1);
1881 run
= SHOW_UBITS(re
, &s
->gb
, 6)+1; LAST_SKIP_BITS(re
, &s
->gb
, 6);
1882 UPDATE_CACHE(re
, &s
->gb
);
1883 level
= SHOW_SBITS(re
, &s
->gb
, 12); SKIP_BITS(re
, &s
->gb
, 12);
1887 level
= (-level
*qscale
*quant_matrix
[j
])>>4;
1890 level
= (level
*qscale
*quant_matrix
[j
])>>4;
1894 av_log(s
->avctx
, AV_LOG_ERROR
, "ac-tex damaged at %d %d\n", s
->mb_x
, s
->mb_y
);
1901 CLOSE_READER(re
, &s
->gb
);
1903 block
[63]^= mismatch
&1;
1905 s
->block_last_index
[n
] = i
;
1909 typedef struct Mpeg1Context
{
1910 MpegEncContext mpeg_enc_ctx
;
1911 int mpeg_enc_ctx_allocated
; /* true if decoding context allocated */
1912 int repeat_field
; /* true if we must repeat the field */
1913 AVPanScan pan_scan
; /** some temporary storage for the panscan */
1915 int swap_uv
;//indicate VCR2
1916 int save_aspect_info
;
1917 AVRational frame_rate_ext
; ///< MPEG-2 specific framerate modificator
1921 static int mpeg_decode_init(AVCodecContext
*avctx
)
1923 Mpeg1Context
*s
= avctx
->priv_data
;
1924 MpegEncContext
*s2
= &s
->mpeg_enc_ctx
;
1927 //we need some parmutation to store
1928 //matrixes, until MPV_common_init()
1929 //set the real permutatuon
1931 s2
->dsp
.idct_permutation
[i
]=i
;
1933 MPV_decode_defaults(s2
);
1935 s
->mpeg_enc_ctx
.avctx
= avctx
;
1936 s
->mpeg_enc_ctx
.flags
= avctx
->flags
;
1937 s
->mpeg_enc_ctx
.flags2
= avctx
->flags2
;
1938 common_init(&s
->mpeg_enc_ctx
);
1941 s
->mpeg_enc_ctx_allocated
= 0;
1942 s
->mpeg_enc_ctx
.picture_number
= 0;
1943 s
->repeat_field
= 0;
1944 s
->mpeg_enc_ctx
.codec_id
= avctx
->codec
->id
;
1948 static void quant_matrix_rebuild(uint16_t *matrix
, const uint8_t *old_perm
,
1949 const uint8_t *new_perm
){
1950 uint16_t temp_matrix
[64];
1953 memcpy(temp_matrix
,matrix
,64*sizeof(uint16_t));
1956 matrix
[new_perm
[i
]] = temp_matrix
[old_perm
[i
]];
1960 //Call this function when we know all parameters
1961 //it may be called in different places for mpeg1 and mpeg2
1962 static int mpeg_decode_postinit(AVCodecContext
*avctx
){
1963 Mpeg1Context
*s1
= avctx
->priv_data
;
1964 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
1965 uint8_t old_permutation
[64];
1968 (s1
->mpeg_enc_ctx_allocated
== 0)||
1969 avctx
->width
!= s
->width
||
1970 avctx
->height
!= s
->height
||
1971 // s1->save_aspect_info != avctx->aspect_ratio_info||
1975 if (s1
->mpeg_enc_ctx_allocated
) {
1979 if( (s
->width
== 0 )||(s
->height
== 0))
1982 avctx
->width
= s
->width
;
1983 avctx
->height
= s
->height
;
1984 avctx
->bit_rate
= s
->bit_rate
;
1985 s1
->save_aspect_info
= s
->aspect_ratio_info
;
1987 //low_delay may be forced, in this case we will have B frames
1988 //that behave like P frames
1989 avctx
->has_b_frames
= !(s
->low_delay
);
1991 if(avctx
->sub_id
==1){//s->codec_id==avctx->codec_id==CODEC_ID
1993 avctx
->frame_rate
= frame_rate_tab
[s
->frame_rate_index
].num
;
1994 avctx
->frame_rate_base
= frame_rate_tab
[s
->frame_rate_index
].den
;
1996 avctx
->sample_aspect_ratio
= av_d2q(
1997 1.0/mpeg1_aspect
[s
->aspect_ratio_info
], 255);
2002 &s
->avctx
->frame_rate
,
2003 &s
->avctx
->frame_rate_base
,
2004 frame_rate_tab
[s
->frame_rate_index
].num
* s1
->frame_rate_ext
.num
,
2005 frame_rate_tab
[s
->frame_rate_index
].den
* s1
->frame_rate_ext
.den
,
2008 if(s
->aspect_ratio_info
> 1){
2009 if( (s1
->pan_scan
.width
== 0 )||(s1
->pan_scan
.height
== 0) ){
2010 s
->avctx
->sample_aspect_ratio
=
2012 mpeg2_aspect
[s
->aspect_ratio_info
],
2013 (AVRational
){s
->width
, s
->height
}
2016 s
->avctx
->sample_aspect_ratio
=
2018 mpeg2_aspect
[s
->aspect_ratio_info
],
2019 (AVRational
){s1
->pan_scan
.width
, s1
->pan_scan
.height
}
2023 s
->avctx
->sample_aspect_ratio
=
2024 mpeg2_aspect
[s
->aspect_ratio_info
];
2028 if(avctx
->xvmc_acceleration
){
2029 avctx
->pix_fmt
= avctx
->get_format(avctx
,pixfmt_xvmc_mpg2_420
);
2031 if(s
->chroma_format
< 2){
2032 avctx
->pix_fmt
= avctx
->get_format(avctx
,pixfmt_yuv_420
);
2034 if(s
->chroma_format
== 2){
2035 avctx
->pix_fmt
= avctx
->get_format(avctx
,pixfmt_yuv_422
);
2037 if(s
->chroma_format
> 2){
2038 avctx
->pix_fmt
= avctx
->get_format(avctx
,pixfmt_yuv_444
);
2041 //until then pix_fmt may be changed right after codec init
2042 if( avctx
->pix_fmt
== PIX_FMT_XVMC_MPEG2_IDCT
)
2043 if( avctx
->idct_algo
== FF_IDCT_AUTO
)
2044 avctx
->idct_algo
= FF_IDCT_SIMPLE
;
2046 //quantization matrixes may need reordering
2047 //if dct permutation is changed
2048 memcpy(old_permutation
,s
->dsp
.idct_permutation
,64*sizeof(uint8_t));
2050 if (MPV_common_init(s
) < 0)
2053 quant_matrix_rebuild(s
->intra_matrix
, old_permutation
,s
->dsp
.idct_permutation
);
2054 quant_matrix_rebuild(s
->inter_matrix
, old_permutation
,s
->dsp
.idct_permutation
);
2055 quant_matrix_rebuild(s
->chroma_intra_matrix
,old_permutation
,s
->dsp
.idct_permutation
);
2056 quant_matrix_rebuild(s
->chroma_inter_matrix
,old_permutation
,s
->dsp
.idct_permutation
);
2058 s1
->mpeg_enc_ctx_allocated
= 1;
2063 /* return the 8 bit start code value and update the search
2064 state. Return -1 if no start code found */
2065 static int find_start_code(const uint8_t **pbuf_ptr
, const uint8_t *buf_end
)
2067 const uint8_t *buf_ptr
= *pbuf_ptr
;
2069 buf_ptr
++; //gurantees that -1 is within the array
2070 buf_end
-= 2; // gurantees that +2 is within the array
2072 while (buf_ptr
< buf_end
) {
2074 while(buf_ptr
< buf_end
&& buf_ptr
[1]==0)
2077 if(buf_ptr
[-1] == 0 && buf_ptr
[1] == 1){
2078 *pbuf_ptr
= buf_ptr
+3;
2079 return buf_ptr
[2] + 0x100;
2084 buf_end
+= 2; //undo the hack above
2086 *pbuf_ptr
= buf_end
;
2090 static int mpeg1_decode_picture(AVCodecContext
*avctx
,
2091 const uint8_t *buf
, int buf_size
)
2093 Mpeg1Context
*s1
= avctx
->priv_data
;
2094 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
2095 int ref
, f_code
, vbv_delay
;
2097 if(mpeg_decode_postinit(s
->avctx
) < 0)
2100 init_get_bits(&s
->gb
, buf
, buf_size
*8);
2102 ref
= get_bits(&s
->gb
, 10); /* temporal ref */
2103 s
->pict_type
= get_bits(&s
->gb
, 3);
2105 vbv_delay
= get_bits(&s
->gb
, 16);
2106 if (s
->pict_type
== P_TYPE
|| s
->pict_type
== B_TYPE
) {
2107 s
->full_pel
[0] = get_bits1(&s
->gb
);
2108 f_code
= get_bits(&s
->gb
, 3);
2111 s
->mpeg_f_code
[0][0] = f_code
;
2112 s
->mpeg_f_code
[0][1] = f_code
;
2114 if (s
->pict_type
== B_TYPE
) {
2115 s
->full_pel
[1] = get_bits1(&s
->gb
);
2116 f_code
= get_bits(&s
->gb
, 3);
2119 s
->mpeg_f_code
[1][0] = f_code
;
2120 s
->mpeg_f_code
[1][1] = f_code
;
2122 s
->current_picture
.pict_type
= s
->pict_type
;
2123 s
->current_picture
.key_frame
= s
->pict_type
== I_TYPE
;
2125 // if(avctx->debug & FF_DEBUG_PICT_INFO)
2126 // av_log(avctx, AV_LOG_DEBUG, "vbv_delay %d, ref %d\n", vbv_delay, ref);
2134 static void mpeg_decode_sequence_extension(Mpeg1Context
*s1
)
2136 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
2137 int horiz_size_ext
, vert_size_ext
;
2140 skip_bits(&s
->gb
, 1); /* profil and level esc*/
2141 s
->avctx
->profile
= get_bits(&s
->gb
, 3);
2142 s
->avctx
->level
= get_bits(&s
->gb
, 4);
2143 s
->progressive_sequence
= get_bits1(&s
->gb
); /* progressive_sequence */
2144 s
->chroma_format
= get_bits(&s
->gb
, 2); /* chroma_format 1=420, 2=422, 3=444 */
2145 horiz_size_ext
= get_bits(&s
->gb
, 2);
2146 vert_size_ext
= get_bits(&s
->gb
, 2);
2147 s
->width
|= (horiz_size_ext
<< 12);
2148 s
->height
|= (vert_size_ext
<< 12);
2149 bit_rate_ext
= get_bits(&s
->gb
, 12); /* XXX: handle it */
2150 s
->bit_rate
+= (bit_rate_ext
<< 12) * 400;
2151 skip_bits1(&s
->gb
); /* marker */
2152 s
->avctx
->rc_buffer_size
+= get_bits(&s
->gb
, 8)*1024*16<<10;
2154 s
->low_delay
= get_bits1(&s
->gb
);
2155 if(s
->flags
& CODEC_FLAG_LOW_DELAY
) s
->low_delay
=1;
2157 s1
->frame_rate_ext
.num
= get_bits(&s
->gb
, 2)+1;
2158 s1
->frame_rate_ext
.den
= get_bits(&s
->gb
, 5)+1;
2160 dprintf("sequence extension\n");
2161 s
->codec_id
= s
->avctx
->codec_id
= CODEC_ID_MPEG2VIDEO
;
2162 s
->avctx
->sub_id
= 2; /* indicates mpeg2 found */
2164 if(s
->avctx
->debug
& FF_DEBUG_PICT_INFO
)
2165 av_log(s
->avctx
, AV_LOG_DEBUG
, "profile: %d, level: %d vbv buffer: %d, bitrate:%d\n",
2166 s
->avctx
->profile
, s
->avctx
->level
, s
->avctx
->rc_buffer_size
, s
->bit_rate
);
2170 static void mpeg_decode_sequence_display_extension(Mpeg1Context
*s1
)
2172 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
2173 int color_description
, w
, h
;
2175 skip_bits(&s
->gb
, 3); /* video format */
2176 color_description
= get_bits1(&s
->gb
);
2177 if(color_description
){
2178 skip_bits(&s
->gb
, 8); /* color primaries */
2179 skip_bits(&s
->gb
, 8); /* transfer_characteristics */
2180 skip_bits(&s
->gb
, 8); /* matrix_coefficients */
2182 w
= get_bits(&s
->gb
, 14);
2183 skip_bits(&s
->gb
, 1); //marker
2184 h
= get_bits(&s
->gb
, 14);
2185 skip_bits(&s
->gb
, 1); //marker
2187 s1
->pan_scan
.width
= 16*w
;
2188 s1
->pan_scan
.height
=16*h
;
2190 if(s
->avctx
->debug
& FF_DEBUG_PICT_INFO
)
2191 av_log(s
->avctx
, AV_LOG_DEBUG
, "sde w:%d, h:%d\n", w
, h
);
2194 static void mpeg_decode_picture_display_extension(Mpeg1Context
*s1
)
2196 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
2200 if(s
->progressive_sequence
){
2201 if(s
->repeat_first_field
){
2203 if(s
->top_field_first
)
2207 if(s
->picture_structure
== PICT_FRAME
){
2209 if(s
->repeat_first_field
)
2213 for(i
=0; i
<nofco
; i
++){
2214 s1
->pan_scan
.position
[i
][0]= get_sbits(&s
->gb
, 16);
2215 skip_bits(&s
->gb
, 1); //marker
2216 s1
->pan_scan
.position
[i
][1]= get_sbits(&s
->gb
, 16);
2217 skip_bits(&s
->gb
, 1); //marker
2220 if(s
->avctx
->debug
& FF_DEBUG_PICT_INFO
)
2221 av_log(s
->avctx
, AV_LOG_DEBUG
, "pde (%d,%d) (%d,%d) (%d,%d)\n",
2222 s1
->pan_scan
.position
[0][0], s1
->pan_scan
.position
[0][1],
2223 s1
->pan_scan
.position
[1][0], s1
->pan_scan
.position
[1][1],
2224 s1
->pan_scan
.position
[2][0], s1
->pan_scan
.position
[2][1]
2228 static void mpeg_decode_quant_matrix_extension(MpegEncContext
*s
)
2232 dprintf("matrix extension\n");
2234 if (get_bits1(&s
->gb
)) {
2236 v
= get_bits(&s
->gb
, 8);
2237 j
= s
->dsp
.idct_permutation
[ ff_zigzag_direct
[i
] ];
2238 s
->intra_matrix
[j
] = v
;
2239 s
->chroma_intra_matrix
[j
] = v
;
2242 if (get_bits1(&s
->gb
)) {
2244 v
= get_bits(&s
->gb
, 8);
2245 j
= s
->dsp
.idct_permutation
[ ff_zigzag_direct
[i
] ];
2246 s
->inter_matrix
[j
] = v
;
2247 s
->chroma_inter_matrix
[j
] = v
;
2250 if (get_bits1(&s
->gb
)) {
2252 v
= get_bits(&s
->gb
, 8);
2253 j
= s
->dsp
.idct_permutation
[ ff_zigzag_direct
[i
] ];
2254 s
->chroma_intra_matrix
[j
] = v
;
2257 if (get_bits1(&s
->gb
)) {
2259 v
= get_bits(&s
->gb
, 8);
2260 j
= s
->dsp
.idct_permutation
[ ff_zigzag_direct
[i
] ];
2261 s
->chroma_inter_matrix
[j
] = v
;
2266 static void mpeg_decode_picture_coding_extension(MpegEncContext
*s
)
2268 s
->full_pel
[0] = s
->full_pel
[1] = 0;
2269 s
->mpeg_f_code
[0][0] = get_bits(&s
->gb
, 4);
2270 s
->mpeg_f_code
[0][1] = get_bits(&s
->gb
, 4);
2271 s
->mpeg_f_code
[1][0] = get_bits(&s
->gb
, 4);
2272 s
->mpeg_f_code
[1][1] = get_bits(&s
->gb
, 4);
2273 s
->intra_dc_precision
= get_bits(&s
->gb
, 2);
2274 s
->picture_structure
= get_bits(&s
->gb
, 2);
2275 s
->top_field_first
= get_bits1(&s
->gb
);
2276 s
->frame_pred_frame_dct
= get_bits1(&s
->gb
);
2277 s
->concealment_motion_vectors
= get_bits1(&s
->gb
);
2278 s
->q_scale_type
= get_bits1(&s
->gb
);
2279 s
->intra_vlc_format
= get_bits1(&s
->gb
);
2280 s
->alternate_scan
= get_bits1(&s
->gb
);
2281 s
->repeat_first_field
= get_bits1(&s
->gb
);
2282 s
->chroma_420_type
= get_bits1(&s
->gb
);
2283 s
->progressive_frame
= get_bits1(&s
->gb
);
2285 if(s
->picture_structure
== PICT_FRAME
)
2288 s
->first_field
^= 1;
2289 memset(s
->mbskip_table
, 0, s
->mb_stride
*s
->mb_height
);
2292 if(s
->alternate_scan
){
2293 ff_init_scantable(s
->dsp
.idct_permutation
, &s
->inter_scantable
, ff_alternate_vertical_scan
);
2294 ff_init_scantable(s
->dsp
.idct_permutation
, &s
->intra_scantable
, ff_alternate_vertical_scan
);
2296 ff_init_scantable(s
->dsp
.idct_permutation
, &s
->inter_scantable
, ff_zigzag_direct
);
2297 ff_init_scantable(s
->dsp
.idct_permutation
, &s
->intra_scantable
, ff_zigzag_direct
);
2300 /* composite display not parsed */
2301 dprintf("intra_dc_precision=%d\n", s
->intra_dc_precision
);
2302 dprintf("picture_structure=%d\n", s
->picture_structure
);
2303 dprintf("top field first=%d\n", s
->top_field_first
);
2304 dprintf("repeat first field=%d\n", s
->repeat_first_field
);
2305 dprintf("conceal=%d\n", s
->concealment_motion_vectors
);
2306 dprintf("intra_vlc_format=%d\n", s
->intra_vlc_format
);
2307 dprintf("alternate_scan=%d\n", s
->alternate_scan
);
2308 dprintf("frame_pred_frame_dct=%d\n", s
->frame_pred_frame_dct
);
2309 dprintf("progressive_frame=%d\n", s
->progressive_frame
);
2312 static void mpeg_decode_extension(AVCodecContext
*avctx
,
2313 const uint8_t *buf
, int buf_size
)
2315 Mpeg1Context
*s1
= avctx
->priv_data
;
2316 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
2319 init_get_bits(&s
->gb
, buf
, buf_size
*8);
2321 ext_type
= get_bits(&s
->gb
, 4);
2324 mpeg_decode_sequence_extension(s1
);
2327 mpeg_decode_sequence_display_extension(s1
);
2330 mpeg_decode_quant_matrix_extension(s
);
2333 mpeg_decode_picture_display_extension(s1
);
2336 mpeg_decode_picture_coding_extension(s
);
2341 static void exchange_uv(MpegEncContext
*s
){
2342 short * tmp
= s
->pblocks
[4];
2343 s
->pblocks
[4] = s
->pblocks
[5];
2344 s
->pblocks
[5] = tmp
;
2347 static int mpeg_field_start(MpegEncContext
*s
){
2348 AVCodecContext
*avctx
= s
->avctx
;
2349 Mpeg1Context
*s1
= (Mpeg1Context
*)s
;
2351 /* start frame decoding */
2352 if(s
->first_field
|| s
->picture_structure
==PICT_FRAME
){
2353 if(MPV_frame_start(s
, avctx
) < 0)
2356 ff_er_frame_start(s
);
2358 /* first check if we must repeat the frame */
2359 s
->current_picture_ptr
->repeat_pict
= 0;
2360 if (s
->repeat_first_field
) {
2361 if (s
->progressive_sequence
) {
2362 if (s
->top_field_first
)
2363 s
->current_picture_ptr
->repeat_pict
= 4;
2365 s
->current_picture_ptr
->repeat_pict
= 2;
2366 } else if (s
->progressive_frame
) {
2367 s
->current_picture_ptr
->repeat_pict
= 1;
2371 *s
->current_picture_ptr
->pan_scan
= s1
->pan_scan
;
2372 }else{ //second field
2375 if(!s
->current_picture_ptr
){
2376 av_log(s
->avctx
, AV_LOG_ERROR
, "first field missing\n");
2381 s
->current_picture
.data
[i
] = s
->current_picture_ptr
->data
[i
];
2382 if(s
->picture_structure
== PICT_BOTTOM_FIELD
){
2383 s
->current_picture
.data
[i
] += s
->current_picture_ptr
->linesize
[i
];
2388 // MPV_frame_start will call this function too,
2389 // but we need to call it on every field
2390 if(s
->avctx
->xvmc_acceleration
)
2391 XVMC_field_start(s
,avctx
);
2397 #define DECODE_SLICE_ERROR -1
2398 #define DECODE_SLICE_OK 0
2401 * decodes a slice. MpegEncContext.mb_y must be set to the MB row from the startcode
2402 * @return DECODE_SLICE_ERROR if the slice is damaged<br>
2403 * DECODE_SLICE_OK if this slice is ok<br>
2405 static int mpeg_decode_slice(Mpeg1Context
*s1
, int mb_y
,
2406 const uint8_t **buf
, int buf_size
)
2408 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
2409 AVCodecContext
*avctx
= s
->avctx
;
2411 const int field_pic
= s
->picture_structure
!= PICT_FRAME
;
2412 const int lowres
= s
->avctx
->lowres
;
2417 if (mb_y
<<field_pic
>= s
->mb_height
){
2418 av_log(s
->avctx
, AV_LOG_ERROR
, "slice below image (%d >= %d)\n", mb_y
, s
->mb_height
);
2422 init_get_bits(&s
->gb
, *buf
, buf_size
*8);
2424 ff_mpeg1_clean_buffers(s
);
2425 s
->interlaced_dct
= 0;
2427 s
->qscale
= get_qscale(s
);
2430 av_log(s
->avctx
, AV_LOG_ERROR
, "qscale == 0\n");
2434 /* extra slice info */
2435 while (get_bits1(&s
->gb
) != 0) {
2436 skip_bits(&s
->gb
, 8);
2442 int code
= get_vlc2(&s
->gb
, mbincr_vlc
.table
, MBINCR_VLC_BITS
, 2);
2444 av_log(s
->avctx
, AV_LOG_ERROR
, "first mb_incr damaged\n");
2451 /* otherwise, stuffing, nothing to do */
2458 s
->resync_mb_x
= s
->mb_x
;
2459 s
->resync_mb_y
= s
->mb_y
= mb_y
;
2461 ff_init_block_index(s
);
2463 if (s
->mb_y
==0 && s
->mb_x
==0 && (s
->first_field
|| s
->picture_structure
==PICT_FRAME
)) {
2464 if(s
->avctx
->debug
&FF_DEBUG_PICT_INFO
){
2465 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",
2466 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],
2467 s
->pict_type
== I_TYPE ?
"I" : (s
->pict_type
== P_TYPE ?
"P" : (s
->pict_type
== B_TYPE ?
"B" : "S")),
2468 s
->progressive_sequence ?
"ps" :"", s
->progressive_frame ?
"pf" : "", s
->alternate_scan ?
"alt" :"", s
->top_field_first ?
"top" :"",
2469 s
->intra_dc_precision
, s
->picture_structure
, s
->frame_pred_frame_dct
, s
->concealment_motion_vectors
,
2470 s
->q_scale_type
, s
->intra_vlc_format
, s
->repeat_first_field
, s
->chroma_420_type ?
"420" :"");
2476 //one 1 we memcpy blocks in xvmcvideo
2477 if(s
->avctx
->xvmc_acceleration
> 1)
2478 XVMC_init_block(s
);//set s->block
2481 s
->dsp
.clear_blocks(s
->block
[0]);
2482 if(!s
->chroma_y_shift
){
2483 s
->dsp
.clear_blocks(s
->block
[6]);
2485 ret
= mpeg_decode_mb(s
, s
->block
);
2486 s
->chroma_qscale
= s
->qscale
;
2488 dprintf("ret=%d\n", ret
);
2492 if(s
->current_picture
.motion_val
[0] && !s
->encoding
){ //note motion_val is normally NULL unless we want to extract the MVs
2493 const int wrap
= field_pic ?
2*s
->b8_stride
: s
->b8_stride
;
2494 int xy
= s
->mb_x
*2 + s
->mb_y
*2*wrap
;
2495 int motion_x
, motion_y
, dir
, i
;
2496 if(field_pic
&& !s
->first_field
)
2500 for(dir
=0; dir
<2; dir
++){
2501 if (s
->mb_intra
|| (dir
==1 && s
->pict_type
!= B_TYPE
)) {
2502 motion_x
= motion_y
= 0;
2503 }else if (s
->mv_type
== MV_TYPE_16X16
|| (s
->mv_type
== MV_TYPE_FIELD
&& field_pic
)){
2504 motion_x
= s
->mv
[dir
][0][0];
2505 motion_y
= s
->mv
[dir
][0][1];
2506 } else /*if ((s->mv_type == MV_TYPE_FIELD) || (s->mv_type == MV_TYPE_16X8))*/ {
2507 motion_x
= s
->mv
[dir
][i
][0];
2508 motion_y
= s
->mv
[dir
][i
][1];
2511 s
->current_picture
.motion_val
[dir
][xy
][0] = motion_x
;
2512 s
->current_picture
.motion_val
[dir
][xy
][1] = motion_y
;
2513 s
->current_picture
.motion_val
[dir
][xy
+ 1][0] = motion_x
;
2514 s
->current_picture
.motion_val
[dir
][xy
+ 1][1] = motion_y
;
2515 s
->current_picture
.ref_index
[dir
][xy
]=
2516 s
->current_picture
.ref_index
[dir
][xy
+ 1]= s
->field_select
[dir
][i
];
2522 s
->dest
[0] += 16 >> lowres
;
2523 s
->dest
[1] += 16 >> (s
->chroma_x_shift
+ lowres
);
2524 s
->dest
[2] += 16 >> (s
->chroma_x_shift
+ lowres
);
2526 MPV_decode_mb(s
, s
->block
);
2528 if (++s
->mb_x
>= s
->mb_width
) {
2530 ff_draw_horiz_band(s
, 16*s
->mb_y
, 16);
2535 if(s
->mb_y
<<field_pic
>= s
->mb_height
){
2536 int left
= s
->gb
.size_in_bits
- get_bits_count(&s
->gb
);
2538 if(left
< 0 || (left
&& show_bits(&s
->gb
, FFMIN(left
, 23)))
2539 || (avctx
->error_resilience
>= FF_ER_AGGRESSIVE
&& left
>8)){
2540 av_log(avctx
, AV_LOG_ERROR
, "end mismatch left=%d\n", left
);
2546 ff_init_block_index(s
);
2549 /* skip mb handling */
2550 if (s
->mb_skip_run
== -1) {
2551 /* read again increment */
2554 int code
= get_vlc2(&s
->gb
, mbincr_vlc
.table
, MBINCR_VLC_BITS
, 2);
2556 av_log(s
->avctx
, AV_LOG_ERROR
, "mb incr damaged\n");
2561 s
->mb_skip_run
+= 33;
2562 }else if(code
== 35){
2563 if(s
->mb_skip_run
!= 0 || show_bits(&s
->gb
, 15) != 0){
2564 av_log(s
->avctx
, AV_LOG_ERROR
, "slice mismatch\n");
2567 goto eos
; /* end of slice */
2569 /* otherwise, stuffing, nothing to do */
2571 s
->mb_skip_run
+= code
;
2577 eos
: // end of slice
2578 *buf
+= get_bits_count(&s
->gb
)/8 - 1;
2579 //printf("y %d %d %d %d\n", s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y);
2583 static int slice_decode_thread(AVCodecContext
*c
, void *arg
){
2584 MpegEncContext
*s
= arg
;
2585 const uint8_t *buf
= s
->gb
.buffer
;
2586 int mb_y
= s
->start_mb_y
;
2588 s
->error_count
= 3*(s
->end_mb_y
- s
->start_mb_y
)*s
->mb_width
;
2591 int start_code
, ret
;
2593 ret
= mpeg_decode_slice((Mpeg1Context
*)s
, mb_y
, &buf
, s
->gb
.buffer_end
- buf
);
2595 //av_log(c, AV_LOG_DEBUG, "ret:%d resync:%d/%d mb:%d/%d ts:%d/%d ec:%d\n",
2596 //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);
2598 if(s
->resync_mb_x
>=0 && s
->resync_mb_y
>=0)
2599 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
);
2601 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
);
2604 if(s
->mb_y
== s
->end_mb_y
)
2607 start_code
= find_start_code(&buf
, s
->gb
.buffer_end
);
2608 mb_y
= start_code
- SLICE_MIN_START_CODE
;
2609 if(mb_y
< 0 || mb_y
>= s
->end_mb_y
)
2613 return 0; //not reached
2617 * handles slice ends.
2618 * @return 1 if it seems to be the last slice of
2620 static int slice_end(AVCodecContext
*avctx
, AVFrame
*pict
)
2622 Mpeg1Context
*s1
= avctx
->priv_data
;
2623 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
2625 if (!s1
->mpeg_enc_ctx_allocated
|| !s
->current_picture_ptr
)
2629 if(s
->avctx
->xvmc_acceleration
)
2632 /* end of slice reached */
2633 if (/*s->mb_y<<field_pic == s->mb_height &&*/ !s
->first_field
) {
2636 s
->current_picture_ptr
->qscale_type
= FF_QSCALE_TYPE_MPEG2
;
2642 if (s
->pict_type
== B_TYPE
|| s
->low_delay
) {
2643 *pict
= *(AVFrame
*)s
->current_picture_ptr
;
2644 ff_print_debug_info(s
, pict
);
2646 s
->picture_number
++;
2647 /* latency of 1 frame for I and P frames */
2648 /* XXX: use another variable than picture_number */
2649 if (s
->last_picture_ptr
!= NULL
) {
2650 *pict
= *(AVFrame
*)s
->last_picture_ptr
;
2651 ff_print_debug_info(s
, pict
);
2661 static int mpeg1_decode_sequence(AVCodecContext
*avctx
,
2662 const uint8_t *buf
, int buf_size
)
2664 Mpeg1Context
*s1
= avctx
->priv_data
;
2665 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
2669 init_get_bits(&s
->gb
, buf
, buf_size
*8);
2671 width
= get_bits(&s
->gb
, 12);
2672 height
= get_bits(&s
->gb
, 12);
2673 if (width
<= 0 || height
<= 0 ||
2674 (width
% 2) != 0 || (height
% 2) != 0)
2676 s
->aspect_ratio_info
= get_bits(&s
->gb
, 4);
2677 if (s
->aspect_ratio_info
== 0)
2679 s
->frame_rate_index
= get_bits(&s
->gb
, 4);
2680 if (s
->frame_rate_index
== 0 || s
->frame_rate_index
> 13)
2682 s
->bit_rate
= get_bits(&s
->gb
, 18) * 400;
2683 if (get_bits1(&s
->gb
) == 0) /* marker */
2688 s
->avctx
->rc_buffer_size
= get_bits(&s
->gb
, 10) * 1024*16;
2689 skip_bits(&s
->gb
, 1);
2692 if (get_bits1(&s
->gb
)) {
2694 v
= get_bits(&s
->gb
, 8);
2696 av_log(s
->avctx
, AV_LOG_ERROR
, "intra matrix damaged\n");
2699 j
= s
->dsp
.idct_permutation
[ ff_zigzag_direct
[i
] ];
2700 s
->intra_matrix
[j
] = v
;
2701 s
->chroma_intra_matrix
[j
] = v
;
2704 dprintf("intra matrix present\n");
2706 dprintf(" %d", s
->intra_matrix
[s
->dsp
.idct_permutation
[i
]);
2711 j
= s
->dsp
.idct_permutation
[i
];
2712 v
= ff_mpeg1_default_intra_matrix
[i
];
2713 s
->intra_matrix
[j
] = v
;
2714 s
->chroma_intra_matrix
[j
] = v
;
2717 if (get_bits1(&s
->gb
)) {
2719 v
= get_bits(&s
->gb
, 8);
2721 av_log(s
->avctx
, AV_LOG_ERROR
, "inter matrix damaged\n");
2724 j
= s
->dsp
.idct_permutation
[ ff_zigzag_direct
[i
] ];
2725 s
->inter_matrix
[j
] = v
;
2726 s
->chroma_inter_matrix
[j
] = v
;
2729 dprintf("non intra matrix present\n");
2731 dprintf(" %d", s
->inter_matrix
[s
->dsp
.idct_permutation
[i
]);
2736 int j
= s
->dsp
.idct_permutation
[i
];
2737 v
= ff_mpeg1_default_non_intra_matrix
[i
];
2738 s
->inter_matrix
[j
] = v
;
2739 s
->chroma_inter_matrix
[j
] = v
;
2743 if(show_bits(&s
->gb
, 23) != 0){
2744 av_log(s
->avctx
, AV_LOG_ERROR
, "sequence header damaged\n");
2748 /* we set mpeg2 parameters so that it emulates mpeg1 */
2749 s
->progressive_sequence
= 1;
2750 s
->progressive_frame
= 1;
2751 s
->picture_structure
= PICT_FRAME
;
2752 s
->frame_pred_frame_dct
= 1;
2753 s
->chroma_format
= 1;
2754 s
->codec_id
= s
->avctx
->codec_id
= CODEC_ID_MPEG1VIDEO
;
2755 avctx
->sub_id
= 1; /* indicates mpeg1 */
2756 s
->out_format
= FMT_MPEG1
;
2757 s
->swap_uv
= 0;//AFAIK VCR2 don't have SEQ_HEADER
2758 if(s
->flags
& CODEC_FLAG_LOW_DELAY
) s
->low_delay
=1;
2760 if(s
->avctx
->debug
& FF_DEBUG_PICT_INFO
)
2761 av_log(s
->avctx
, AV_LOG_DEBUG
, "vbv buffer: %d, bitrate:%d\n",
2762 s
->avctx
->rc_buffer_size
, s
->bit_rate
);
2767 static int vcr2_init_sequence(AVCodecContext
*avctx
)
2769 Mpeg1Context
*s1
= avctx
->priv_data
;
2770 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
2773 /* start new mpeg1 context decoding */
2774 s
->out_format
= FMT_MPEG1
;
2775 if (s1
->mpeg_enc_ctx_allocated
) {
2778 s
->width
= avctx
->width
;
2779 s
->height
= avctx
->height
;
2780 avctx
->has_b_frames
= 0; //true?
2783 if(avctx
->xvmc_acceleration
){
2784 avctx
->pix_fmt
= avctx
->get_format(avctx
,pixfmt_xvmc_mpg2_420
);
2786 avctx
->pix_fmt
= avctx
->get_format(avctx
,pixfmt_yuv_420
);
2789 if( avctx
->pix_fmt
== PIX_FMT_XVMC_MPEG2_IDCT
)
2790 if( avctx
->idct_algo
== FF_IDCT_AUTO
)
2791 avctx
->idct_algo
= FF_IDCT_SIMPLE
;
2793 if (MPV_common_init(s
) < 0)
2795 exchange_uv(s
);//common init reset pblocks, so we swap them here
2796 s
->swap_uv
= 1;// in case of xvmc we need to swap uv for each MB
2797 s1
->mpeg_enc_ctx_allocated
= 1;
2800 int j
= s
->dsp
.idct_permutation
[i
];
2801 v
= ff_mpeg1_default_intra_matrix
[i
];
2802 s
->intra_matrix
[j
] = v
;
2803 s
->chroma_intra_matrix
[j
] = v
;
2805 v
= ff_mpeg1_default_non_intra_matrix
[i
];
2806 s
->inter_matrix
[j
] = v
;
2807 s
->chroma_inter_matrix
[j
] = v
;
2810 s
->progressive_sequence
= 1;
2811 s
->progressive_frame
= 1;
2812 s
->picture_structure
= PICT_FRAME
;
2813 s
->frame_pred_frame_dct
= 1;
2814 s
->chroma_format
= 1;
2815 s
->codec_id
= s
->avctx
->codec_id
= CODEC_ID_MPEG2VIDEO
;
2816 avctx
->sub_id
= 2; /* indicates mpeg2 */
2821 static void mpeg_decode_user_data(AVCodecContext
*avctx
,
2822 const uint8_t *buf
, int buf_size
)
2829 /* we parse the DTG active format information */
2831 p
[0] == 'D' && p
[1] == 'T' && p
[2] == 'G' && p
[3] == '1') {
2845 avctx
->dtg_active_format
= p
[0] & 0x0f;
2850 static void mpeg_decode_gop(AVCodecContext
*avctx
,
2851 const uint8_t *buf
, int buf_size
){
2852 Mpeg1Context
*s1
= avctx
->priv_data
;
2853 MpegEncContext
*s
= &s1
->mpeg_enc_ctx
;
2855 int drop_frame_flag
;
2856 int time_code_hours
, time_code_minutes
;
2857 int time_code_seconds
, time_code_pictures
;
2860 init_get_bits(&s
->gb
, buf
, buf_size
*8);
2862 drop_frame_flag
= get_bits1(&s
->gb
);
2864 time_code_hours
=get_bits(&s
->gb
,5);
2865 time_code_minutes
= get_bits(&s
->gb
,6);
2866 skip_bits1(&s
->gb
);//marker bit
2867 time_code_seconds
= get_bits(&s
->gb
,6);
2868 time_code_pictures
= get_bits(&s
->gb
,6);
2870 /*broken_link indicate that after editing the
2871 reference frames of the first B-Frames after GOP I-Frame
2872 are missing (open gop)*/
2873 broken_link
= get_bits1(&s
->gb
);
2875 if(s
->avctx
->debug
& FF_DEBUG_PICT_INFO
)
2876 av_log(s
->avctx
, AV_LOG_DEBUG
, "GOP (%2d:%02d:%02d.[%02d]) broken_link=%d\n",
2877 time_code_hours
, time_code_minutes
, time_code_seconds
,
2878 time_code_pictures
, broken_link
);
2881 * finds the end of the current frame in the bitstream.
2882 * @return the position of the first byte of the next frame, or -1
2884 int ff_mpeg1_find_frame_end(ParseContext
*pc
, const uint8_t *buf
, int buf_size
)