226
247
/* By now UMV IS DISABLED ON H.263v1, since the restrictions
227
248
of H.263v1 UMV implies to check the predicted MV after
228
249
calculation of the current MB to see if we're on the limits */
229
put_bits(&s->pb, 1, 0); /* unrestricted motion vector: off */
230
put_bits(&s->pb, 1, 0); /* SAC: off */
231
put_bits(&s->pb, 1, 0); /* advanced prediction mode: off */
232
put_bits(&s->pb, 1, 0); /* not PB frame */
250
put_bits(&s->pb, 1, 0); /* Unrestricted Motion Vector: off */
251
put_bits(&s->pb, 1, 0); /* SAC: off */
252
put_bits(&s->pb, 1, s->obmc); /* Advanced Prediction */
253
put_bits(&s->pb, 1, 0); /* only I/P frames, no PB frame */
233
254
put_bits(&s->pb, 5, s->qscale);
234
put_bits(&s->pb, 1, 0); /* Continuous Presence Multipoint mode: off */
255
put_bits(&s->pb, 1, 0); /* Continuous Presence Multipoint mode: off */
237
259
/* H.263 Plus PTYPE */
238
261
put_bits(&s->pb, 3, 7);
239
put_bits(&s->pb,3,1); /* Update Full Extended PTYPE */
262
put_bits(&s->pb,3,ufep); /* Update Full Extended PTYPE */
241
264
put_bits(&s->pb,3,6); /* Custom Source Format */
243
266
put_bits(&s->pb, 3, format);
245
put_bits(&s->pb,1,0); /* Custom PCF: off */
246
s->umvplus = s->unrestricted_mv;
247
put_bits(&s->pb, 1, s->umvplus); /* Unrestricted Motion Vector */
268
put_bits(&s->pb,1, s->custom_pcf);
269
put_bits(&s->pb,1, s->umvplus); /* Unrestricted Motion Vector */
248
270
put_bits(&s->pb,1,0); /* SAC: off */
249
put_bits(&s->pb,1,0); /* Advanced Prediction Mode: off */
271
put_bits(&s->pb,1,s->obmc); /* Advanced Prediction Mode */
250
272
put_bits(&s->pb,1,s->h263_aic); /* Advanced Intra Coding */
251
put_bits(&s->pb,1,0); /* Deblocking Filter: off */
252
put_bits(&s->pb,1,0); /* Slice Structured: off */
273
put_bits(&s->pb,1,s->loop_filter); /* Deblocking Filter */
274
put_bits(&s->pb,1,s->h263_slice_structured); /* Slice Structured */
253
275
put_bits(&s->pb,1,0); /* Reference Picture Selection: off */
254
276
put_bits(&s->pb,1,0); /* Independent Segment Decoding: off */
255
put_bits(&s->pb,1,0); /* Alternative Inter VLC: off */
256
put_bits(&s->pb,1,0); /* Modified Quantization: off */
277
put_bits(&s->pb,1,s->alt_inter_vlc); /* Alternative Inter VLC */
278
put_bits(&s->pb,1,s->modified_quant); /* Modified Quantization: */
257
279
put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
258
280
put_bits(&s->pb,3,0); /* Reserved */
260
282
put_bits(&s->pb, 3, s->pict_type == P_TYPE);
262
284
put_bits(&s->pb,1,0); /* Reference Picture Resampling: off */
263
285
put_bits(&s->pb,1,0); /* Reduced-Resolution Update: off */
264
286
put_bits(&s->pb,1,s->no_rounding); /* Rounding Type */
265
287
put_bits(&s->pb,2,0); /* Reserved */
266
288
put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
268
290
/* This should be here if PLUSPTYPE */
269
put_bits(&s->pb, 1, 0); /* Continuous Presence Multipoint mode: off */
291
put_bits(&s->pb, 1, 0); /* Continuous Presence Multipoint mode: off */
272
294
/* Custom Picture Format (CPFMT) */
273
float_aspect_to_info(s, s->avctx->aspect_ratio);
295
aspect_to_info(s, s->avctx->sample_aspect_ratio);
275
297
put_bits(&s->pb,4,s->aspect_ratio_info);
276
298
put_bits(&s->pb,9,(s->width >> 2) - 1);
277
299
put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
278
300
put_bits(&s->pb,9,(s->height >> 2));
279
if (s->aspect_ratio_info == FF_ASPECT_EXTENDED)
281
put_bits(&s->pb, 8, s->aspected_width);
282
put_bits(&s->pb, 8, s->aspected_height);
301
if (s->aspect_ratio_info == FF_ASPECT_EXTENDED){
302
put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.num);
303
put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.den);
308
put_bits(&s->pb, 1, best_clock_code);
309
put_bits(&s->pb, 7, best_divisor);
311
put_bits(&s->pb, 2, (temp_ref>>8)&3);
286
314
/* Unlimited Unrestricted Motion Vectors Indicator (UUI) */
288
316
// put_bits(&s->pb,1,1); /* Limited according tables of Annex D */
317
//FIXME check actual requested range
289
318
put_bits(&s->pb,2,1); /* unlimited */
319
if(s->h263_slice_structured)
320
put_bits(&s->pb,2,0); /* no weird submodes */
291
322
put_bits(&s->pb, 5, s->qscale);
294
put_bits(&s->pb, 1, 0); /* no PEI */
325
put_bits(&s->pb, 1, 0); /* no PEI */
327
if(s->h263_slice_structured){
328
put_bits(&s->pb, 1, 1);
330
assert(s->mb_x == 0 && s->mb_y == 0);
331
ff_h263_encode_mba(s);
333
put_bits(&s->pb, 1, 1);
298
s->c_dc_scale_table= h263_aic_dc_scale_table;
338
s->c_dc_scale_table= ff_aic_dc_scale_table;
300
340
s->y_dc_scale_table=
301
341
s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
306
346
* Encodes a group of blocks header.
308
int h263_encode_gob_header(MpegEncContext * s, int mb_line)
310
align_put_bits(&s->pb);
311
flush_put_bits(&s->pb);
312
/* Call the RTP callback to send the last GOB */
313
if (s->rtp_callback) {
314
int pdif = pbBufPtr(&s->pb) - s->ptr_lastgob;
315
s->rtp_callback(s->ptr_lastgob, pdif, s->gob_number);
317
put_bits(&s->pb, 17, 1); /* GBSC */
318
s->gob_number = mb_line / s->gob_index;
319
put_bits(&s->pb, 5, s->gob_number); /* GN */
320
put_bits(&s->pb, 2, s->pict_type == I_TYPE); /* GFID */
321
put_bits(&s->pb, 5, s->qscale); /* GQUANT */
322
//fprintf(stderr,"\nGOB: %2d size: %d", s->gob_number - 1, pdif);
326
static inline int decide_ac_pred(MpegEncContext * s, DCTELEM block[6][64], int dir[6])
328
int score0=0, score1=0;
348
void h263_encode_gob_header(MpegEncContext * s, int mb_line)
350
put_bits(&s->pb, 17, 1); /* GBSC */
352
if(s->h263_slice_structured){
353
put_bits(&s->pb, 1, 1);
355
ff_h263_encode_mba(s);
358
put_bits(&s->pb, 1, 1);
359
put_bits(&s->pb, 5, s->qscale); /* GQUANT */
360
put_bits(&s->pb, 1, 1);
361
put_bits(&s->pb, 2, s->pict_type == I_TYPE); /* GFID */
363
int gob_number= mb_line / s->gob_index;
365
put_bits(&s->pb, 5, gob_number); /* GN */
366
put_bits(&s->pb, 2, s->pict_type == I_TYPE); /* GFID */
367
put_bits(&s->pb, 5, s->qscale); /* GQUANT */
371
static inline int get_block_rate(MpegEncContext * s, DCTELEM block[64], int block_last_index, uint8_t scantable[64]){
376
for(j=1; j<=block_last_index; j++){
377
const int index= scantable[j];
378
int level= block[index];
381
if((level&(~127)) == 0){
382
if(j<block_last_index) rate+= s->intra_ac_vlc_length [UNI_AC_ENC_INDEX(j-last-1, level)];
383
else rate+= s->intra_ac_vlc_last_length[UNI_AC_ENC_INDEX(j-last-1, level)];
385
rate += s->ac_esc_length;
395
static inline int decide_ac_pred(MpegEncContext * s, DCTELEM block[6][64], int dir[6], uint8_t *st[6], int zigzag_last_index[6])
330
399
int8_t * const qscale_table= s->current_picture.qscale_table;
401
memcpy(zigzag_last_index, s->block_last_index, sizeof(int)*6);
332
403
for(n=0; n<6; n++){
333
404
int16_t *ac_val, *ac_val1;
406
score -= get_block_rate(s, block[n], s->block_last_index[n], s->intra_scantable.permutated);
335
408
ac_val = s->ac_val[0][0] + s->block_index[n] * 16;
411
537
int8_t * const qscale_table= s->current_picture.qscale_table;
413
539
ff_clean_h263_qscales(s);
415
for(i=1; i<s->mb_num; i++){
416
int mb_xy= s->mb_index2xy[i];
418
if(qscale_table[mb_xy] != qscale_table[s->mb_index2xy[i-1]] && (s->mb_type[mb_xy]&MB_TYPE_INTER4V)){
419
s->mb_type[mb_xy]&= ~MB_TYPE_INTER4V;
420
s->mb_type[mb_xy]|= MB_TYPE_INTER;
424
541
if(s->pict_type== B_TYPE){
426
/* ok, come on, this isnt funny anymore, theres more code for handling this mpeg4 mess than
427
for the actual adaptive quantization */
543
/* ok, come on, this isn't funny anymore, there's more code for handling this mpeg4 mess than for the actual adaptive quantization */
429
545
for(i=0; i<s->mb_num; i++){
430
546
int mb_xy= s->mb_index2xy[i];
431
547
odd += qscale_table[mb_xy]&1;
434
550
if(2*odd > s->mb_num) odd=1;
437
553
for(i=0; i<s->mb_num; i++){
438
554
int mb_xy= s->mb_index2xy[i];
439
555
if((qscale_table[mb_xy]&1) != odd)
440
556
qscale_table[mb_xy]++;
441
557
if(qscale_table[mb_xy] > 31)
442
558
qscale_table[mb_xy]= 31;
445
561
for(i=1; i<s->mb_num; i++){
446
562
int mb_xy= s->mb_index2xy[i];
447
if(qscale_table[mb_xy] != qscale_table[s->mb_index2xy[i-1]] && (s->mb_type[mb_xy]&MB_TYPE_DIRECT)){
448
s->mb_type[mb_xy]&= ~MB_TYPE_DIRECT;
449
s->mb_type[mb_xy]|= MB_TYPE_BIDIR;
563
if(qscale_table[mb_xy] != qscale_table[s->mb_index2xy[i-1]] && (s->mb_type[mb_xy]&CANDIDATE_MB_TYPE_DIRECT)){
564
s->mb_type[mb_xy]|= CANDIDATE_MB_TYPE_BIDIR;
455
570
#endif //CONFIG_ENCODERS
572
#define tab_size ((signed)(sizeof(s->direct_scale_mv[0])/sizeof(int16_t)))
573
#define tab_bias (tab_size/2)
575
void ff_mpeg4_init_direct_mv(MpegEncContext *s){
577
for(i=0; i<tab_size; i++){
578
s->direct_scale_mv[0][i] = (i-tab_bias)*s->pb_time/s->pp_time;
579
s->direct_scale_mv[1][i] = (i-tab_bias)*(s->pb_time-s->pp_time)/s->pp_time;
583
static inline void ff_mpeg4_set_one_direct_mv(MpegEncContext *s, int mx, int my, int i){
584
int xy= s->block_index[i];
585
uint16_t time_pp= s->pp_time;
586
uint16_t time_pb= s->pb_time;
589
p_mx= s->next_picture.motion_val[0][xy][0];
590
if((unsigned)(p_mx + tab_bias) < tab_size){
591
s->mv[0][i][0] = s->direct_scale_mv[0][p_mx + tab_bias] + mx;
592
s->mv[1][i][0] = mx ? s->mv[0][i][0] - p_mx
593
: s->direct_scale_mv[1][p_mx + tab_bias];
595
s->mv[0][i][0] = p_mx*time_pb/time_pp + mx;
596
s->mv[1][i][0] = mx ? s->mv[0][i][0] - p_mx
597
: p_mx*(time_pb - time_pp)/time_pp;
599
p_my= s->next_picture.motion_val[0][xy][1];
600
if((unsigned)(p_my + tab_bias) < tab_size){
601
s->mv[0][i][1] = s->direct_scale_mv[0][p_my + tab_bias] + my;
602
s->mv[1][i][1] = my ? s->mv[0][i][1] - p_my
603
: s->direct_scale_mv[1][p_my + tab_bias];
605
s->mv[0][i][1] = p_my*time_pb/time_pp + my;
606
s->mv[1][i][1] = my ? s->mv[0][i][1] - p_my
607
: p_my*(time_pb - time_pp)/time_pp;
458
616
* @return the mb_type
460
618
int ff_mpeg4_set_direct_mv(MpegEncContext *s, int mx, int my){
461
619
const int mb_index= s->mb_x + s->mb_y*s->mb_stride;
462
const int colocated_mb_type= s->next_picture.mb_type[mb_index]; //FIXME or next?
463
int xy= s->block_index[0];
620
const int colocated_mb_type= s->next_picture.mb_type[mb_index];
464
621
uint16_t time_pp= s->pp_time;
465
622
uint16_t time_pb= s->pb_time;
468
625
//FIXME avoid divides
626
// try special case with shifts for 1 and 3 B-frames?
470
628
if(IS_8X8(colocated_mb_type)){
471
629
s->mv_type = MV_TYPE_8X8;
472
630
for(i=0; i<4; i++){
473
xy= s->block_index[i];
474
s->mv[0][i][0] = s->motion_val[xy][0]*time_pb/time_pp + mx;
475
s->mv[0][i][1] = s->motion_val[xy][1]*time_pb/time_pp + my;
476
s->mv[1][i][0] = mx ? s->mv[0][i][0] - s->motion_val[xy][0]
477
: s->motion_val[xy][0]*(time_pb - time_pp)/time_pp;
478
s->mv[1][i][1] = my ? s->mv[0][i][1] - s->motion_val[xy][1]
479
: s->motion_val[xy][1]*(time_pb - time_pp)/time_pp;
631
ff_mpeg4_set_one_direct_mv(s, mx, my, i);
481
633
return MB_TYPE_DIRECT2 | MB_TYPE_8x8 | MB_TYPE_L0L1;
482
634
} else if(IS_INTERLACED(colocated_mb_type)){
483
635
s->mv_type = MV_TYPE_FIELD;
484
636
for(i=0; i<2; i++){
637
int field_select= s->next_picture.ref_index[0][s->block_index[2*i]];
638
s->field_select[0][i]= field_select;
639
s->field_select[1][i]= i;
485
640
if(s->top_field_first){
486
time_pp= s->pp_field_time - s->field_select_table[mb_index][i] + i;
487
time_pb= s->pb_field_time - s->field_select_table[mb_index][i] + i;
641
time_pp= s->pp_field_time - field_select + i;
642
time_pb= s->pb_field_time - field_select + i;
489
time_pp= s->pp_field_time + s->field_select_table[mb_index][i] - i;
490
time_pb= s->pb_field_time + s->field_select_table[mb_index][i] - i;
644
time_pp= s->pp_field_time + field_select - i;
645
time_pb= s->pb_field_time + field_select - i;
492
s->mv[0][i][0] = s->field_mv_table[mb_index][i][0]*time_pb/time_pp + mx;
493
s->mv[0][i][1] = s->field_mv_table[mb_index][i][1]*time_pb/time_pp + my;
494
s->mv[1][i][0] = mx ? s->mv[0][i][0] - s->field_mv_table[mb_index][i][0]
495
: s->field_mv_table[mb_index][i][0]*(time_pb - time_pp)/time_pp;
496
s->mv[1][i][1] = my ? s->mv[0][i][1] - s->field_mv_table[mb_index][i][1]
497
: s->field_mv_table[mb_index][i][1]*(time_pb - time_pp)/time_pp;
647
s->mv[0][i][0] = s->p_field_mv_table[i][0][mb_index][0]*time_pb/time_pp + mx;
648
s->mv[0][i][1] = s->p_field_mv_table[i][0][mb_index][1]*time_pb/time_pp + my;
649
s->mv[1][i][0] = mx ? s->mv[0][i][0] - s->p_field_mv_table[i][0][mb_index][0]
650
: s->p_field_mv_table[i][0][mb_index][0]*(time_pb - time_pp)/time_pp;
651
s->mv[1][i][1] = my ? s->mv[0][i][1] - s->p_field_mv_table[i][0][mb_index][1]
652
: s->p_field_mv_table[i][0][mb_index][1]*(time_pb - time_pp)/time_pp;
499
654
return MB_TYPE_DIRECT2 | MB_TYPE_16x8 | MB_TYPE_L0L1 | MB_TYPE_INTERLACED;
501
s->mv[0][0][0] = s->mv[0][1][0] = s->mv[0][2][0] = s->mv[0][3][0] = s->motion_val[xy][0]*time_pb/time_pp + mx;
502
s->mv[0][0][1] = s->mv[0][1][1] = s->mv[0][2][1] = s->mv[0][3][1] = s->motion_val[xy][1]*time_pb/time_pp + my;
503
s->mv[1][0][0] = s->mv[1][1][0] = s->mv[1][2][0] = s->mv[1][3][0] = mx ? s->mv[0][0][0] - s->motion_val[xy][0]
504
: s->motion_val[xy][0]*(time_pb - time_pp)/time_pp;
505
s->mv[1][0][1] = s->mv[1][1][1] = s->mv[1][2][1] = s->mv[1][3][1] = my ? s->mv[0][0][1] - s->motion_val[xy][1]
506
: s->motion_val[xy][1]*(time_pb - time_pp)/time_pp;
656
ff_mpeg4_set_one_direct_mv(s, mx, my, 0);
657
s->mv[0][1][0] = s->mv[0][2][0] = s->mv[0][3][0] = s->mv[0][0][0];
658
s->mv[0][1][1] = s->mv[0][2][1] = s->mv[0][3][1] = s->mv[0][0][1];
659
s->mv[1][1][0] = s->mv[1][2][0] = s->mv[1][3][0] = s->mv[1][0][0];
660
s->mv[1][1][1] = s->mv[1][2][1] = s->mv[1][3][1] = s->mv[1][0][1];
507
661
if((s->avctx->workaround_bugs & FF_BUG_DIRECT_BLOCKSIZE) || !s->quarter_sample)
508
662
s->mv_type= MV_TYPE_16X16;
534
688
motion_y = s->mv[0][0][1] + s->mv[0][1][1];
535
689
motion_x = (motion_x>>1) | (motion_x&1);
536
690
for(i=0; i<2; i++){
537
s->field_mv_table[mb_xy][i][0]= s->mv[0][i][0];
538
s->field_mv_table[mb_xy][i][1]= s->mv[0][i][1];
539
s->field_select_table[mb_xy][i]= s->field_select[0][i];
691
s->p_field_mv_table[i][0][mb_xy][0]= s->mv[0][i][0];
692
s->p_field_mv_table[i][0][mb_xy][1]= s->mv[0][i][1];
694
s->current_picture.ref_index[0][xy ]=
695
s->current_picture.ref_index[0][xy + 1]= s->field_select[0][0];
696
s->current_picture.ref_index[0][xy + wrap ]=
697
s->current_picture.ref_index[0][xy + wrap + 1]= s->field_select[0][1];
543
700
/* no update if 8X8 because it has been done during parsing */
544
s->motion_val[xy][0] = motion_x;
545
s->motion_val[xy][1] = motion_y;
546
s->motion_val[xy + 1][0] = motion_x;
547
s->motion_val[xy + 1][1] = motion_y;
548
s->motion_val[xy + wrap][0] = motion_x;
549
s->motion_val[xy + wrap][1] = motion_y;
550
s->motion_val[xy + 1 + wrap][0] = motion_x;
551
s->motion_val[xy + 1 + wrap][1] = motion_y;
701
s->current_picture.motion_val[0][xy][0] = motion_x;
702
s->current_picture.motion_val[0][xy][1] = motion_y;
703
s->current_picture.motion_val[0][xy + 1][0] = motion_x;
704
s->current_picture.motion_val[0][xy + 1][1] = motion_y;
705
s->current_picture.motion_val[0][xy + wrap][0] = motion_x;
706
s->current_picture.motion_val[0][xy + wrap][1] = motion_y;
707
s->current_picture.motion_val[0][xy + 1 + wrap][0] = motion_x;
708
s->current_picture.motion_val[0][xy + 1 + wrap][1] = motion_y;
554
711
if(s->encoding){ //FIXME encoding MUST be cleaned up
555
if (s->mv_type == MV_TYPE_8X8)
712
if (s->mv_type == MV_TYPE_8X8)
556
713
s->current_picture.mb_type[mb_xy]= MB_TYPE_L0 | MB_TYPE_8x8;
715
s->current_picture.mb_type[mb_xy]= MB_TYPE_INTRA;
558
717
s->current_picture.mb_type[mb_xy]= MB_TYPE_L0 | MB_TYPE_16x16;
562
721
#ifdef CONFIG_ENCODERS
723
static inline int h263_get_motion_length(MpegEncContext * s, int val, int f_code){
724
int l, bit_size, code;
729
bit_size = f_code - 1;
730
/* modulo encoding */
731
l= INT_BIT - 6 - bit_size;
734
code = (val >> bit_size) + 1;
736
return mvtab[code][1] + 1 + bit_size;
740
static inline void ff_h263_encode_motion_vector(MpegEncContext * s, int x, int y, int f_code){
741
if(s->flags2 & CODEC_FLAG2_NO_OUTPUT){
742
skip_put_bits(&s->pb,
743
h263_get_motion_length(s, x, f_code)
744
+h263_get_motion_length(s, y, f_code));
746
ff_h263_encode_motion(s, x, f_code);
747
ff_h263_encode_motion(s, y, f_code);
751
static inline int get_p_cbp(MpegEncContext * s,
752
DCTELEM block[6][64],
753
int motion_x, int motion_y){
756
if(s->flags & CODEC_FLAG_CBP_RD){
757
int best_cbpy_score= INT_MAX;
758
int best_cbpc_score= INT_MAX;
759
int cbpc = (-1), cbpy= (-1);
760
const int offset= (s->mv_type==MV_TYPE_16X16 ? 0 : 16) + (s->dquant ? 8 : 0);
761
const int lambda= s->lambda2 >> (FF_LAMBDA_SHIFT - 6);
764
int score= inter_MCBPC_bits[i + offset] * lambda;
765
if(i&1) score += s->coded_score[5];
766
if(i&2) score += s->coded_score[4];
768
if(score < best_cbpc_score){
769
best_cbpc_score= score;
775
int score= cbpy_tab[i ^ 0xF][1] * lambda;
776
if(i&1) score += s->coded_score[3];
777
if(i&2) score += s->coded_score[2];
778
if(i&4) score += s->coded_score[1];
779
if(i&8) score += s->coded_score[0];
781
if(score < best_cbpy_score){
782
best_cbpy_score= score;
787
if ((motion_x | motion_y | s->dquant) == 0 && s->mv_type==MV_TYPE_16X16){
788
if(best_cbpy_score + best_cbpc_score + 2*lambda >= 0)
792
for (i = 0; i < 6; i++) {
793
if (s->block_last_index[i] >= 0 && ((cbp >> (5 - i))&1)==0 ){
794
s->block_last_index[i]= -1;
795
memset(s->block[i], 0, sizeof(DCTELEM)*64);
800
for (i = 0; i < 6; i++) {
801
if (s->block_last_index[i] >= 0)
808
static inline int get_b_cbp(MpegEncContext * s, DCTELEM block[6][64],
809
int motion_x, int motion_y, int mb_type){
812
if(s->flags & CODEC_FLAG_CBP_RD){
814
const int lambda= s->lambda2 >> (FF_LAMBDA_SHIFT - 6);
817
if(s->coded_score[i] < 0){
818
score += s->coded_score[i];
825
if ((motion_x | motion_y | s->dquant | mb_type) == 0){
826
zero_score-= 4; //2*MV + mb_type + cbp bit
830
if(zero_score <= score){
835
for (i = 0; i < 6; i++) {
836
if (s->block_last_index[i] >= 0 && ((cbp >> (5 - i))&1)==0 ){
837
s->block_last_index[i]= -1;
838
memset(s->block[i], 0, sizeof(DCTELEM)*64);
842
for (i = 0; i < 6; i++) {
843
if (s->block_last_index[i] >= 0)
850
static inline void mpeg4_encode_blocks(MpegEncContext * s, DCTELEM block[6][64], int intra_dc[6],
851
uint8_t **scan_table, PutBitContext *dc_pb, PutBitContext *ac_pb){
855
if(s->flags2 & CODEC_FLAG2_NO_OUTPUT){
856
for (i = 0; i < 6; i++) {
857
skip_put_bits(&s->pb, mpeg4_get_block_length(s, block[i], i, intra_dc[i], scan_table[i]));
860
/* encode each block */
861
for (i = 0; i < 6; i++) {
862
mpeg4_encode_block(s, block[i], i, intra_dc[i], scan_table[i], dc_pb, ac_pb);
866
if(s->flags2 & CODEC_FLAG2_NO_OUTPUT){
867
for (i = 0; i < 6; i++) {
868
skip_put_bits(&s->pb, mpeg4_get_block_length(s, block[i], i, 0, s->intra_scantable.permutated));
871
/* encode each block */
872
for (i = 0; i < 6; i++) {
873
mpeg4_encode_block(s, block[i], i, 0, s->intra_scantable.permutated, dc_pb, ac_pb);
563
879
void mpeg4_encode_mb(MpegEncContext * s,
564
DCTELEM block[6][64],
565
int motion_x, int motion_y)
880
DCTELEM block[6][64],
881
int motion_x, int motion_y)
567
883
int cbpc, cbpy, pred_x, pred_y;
568
884
PutBitContext * const pb2 = s->data_partitioning ? &s->pb2 : &s->pb;
635
950
put_bits(&s->pb, 1, 0);
637
952
s->qscale -= s->dquant;
639
954
if(!s->progressive_sequence){
641
956
put_bits(&s->pb, 1, s->interlaced_dct);
642
if(mb_type) // not diect mode
643
put_bits(&s->pb, 1, 0); // no interlaced ME yet
957
if(mb_type) // not direct mode
958
put_bits(&s->pb, 1, s->mv_type == MV_TYPE_FIELD);
646
961
if(interleaved_stats){
647
962
s->misc_bits+= get_bits_diff(s);
653
h263_encode_motion(s, motion_x, 1);
654
h263_encode_motion(s, motion_y, 1);
659
h263_encode_motion(s, s->mv[0][0][0] - s->last_mv[0][0][0], s->f_code);
660
h263_encode_motion(s, s->mv[0][0][1] - s->last_mv[0][0][1], s->f_code);
661
h263_encode_motion(s, s->mv[1][0][0] - s->last_mv[1][0][0], s->b_code);
662
h263_encode_motion(s, s->mv[1][0][1] - s->last_mv[1][0][1], s->b_code);
663
s->last_mv[0][0][0]= s->mv[0][0][0];
664
s->last_mv[0][0][1]= s->mv[0][0][1];
665
s->last_mv[1][0][0]= s->mv[1][0][0];
666
s->last_mv[1][0][1]= s->mv[1][0][1];
670
case 2: /* backward */
671
h263_encode_motion(s, motion_x - s->last_mv[1][0][0], s->b_code);
672
h263_encode_motion(s, motion_y - s->last_mv[1][0][1], s->b_code);
673
s->last_mv[1][0][0]= motion_x;
674
s->last_mv[1][0][1]= motion_y;
677
case 3: /* forward */
678
h263_encode_motion(s, motion_x - s->last_mv[0][0][0], s->f_code);
679
h263_encode_motion(s, motion_y - s->last_mv[0][0][1], s->f_code);
680
s->last_mv[0][0][0]= motion_x;
681
s->last_mv[0][0][1]= motion_y;
685
printf("unknown mb type\n");
966
assert(s->mv_dir & MV_DIRECT);
967
ff_h263_encode_motion_vector(s, motion_x, motion_y, 1);
971
assert(mb_type > 0 && mb_type < 4);
972
if(s->mv_type != MV_TYPE_FIELD){
973
if(s->mv_dir & MV_DIR_FORWARD){
974
ff_h263_encode_motion_vector(s, s->mv[0][0][0] - s->last_mv[0][0][0],
975
s->mv[0][0][1] - s->last_mv[0][0][1], s->f_code);
976
s->last_mv[0][0][0]= s->last_mv[0][1][0]= s->mv[0][0][0];
977
s->last_mv[0][0][1]= s->last_mv[0][1][1]= s->mv[0][0][1];
980
if(s->mv_dir & MV_DIR_BACKWARD){
981
ff_h263_encode_motion_vector(s, s->mv[1][0][0] - s->last_mv[1][0][0],
982
s->mv[1][0][1] - s->last_mv[1][0][1], s->b_code);
983
s->last_mv[1][0][0]= s->last_mv[1][1][0]= s->mv[1][0][0];
984
s->last_mv[1][0][1]= s->last_mv[1][1][1]= s->mv[1][0][1];
988
if(s->mv_dir & MV_DIR_FORWARD){
989
put_bits(&s->pb, 1, s->field_select[0][0]);
990
put_bits(&s->pb, 1, s->field_select[0][1]);
992
if(s->mv_dir & MV_DIR_BACKWARD){
993
put_bits(&s->pb, 1, s->field_select[1][0]);
994
put_bits(&s->pb, 1, s->field_select[1][1]);
996
if(s->mv_dir & MV_DIR_FORWARD){
998
ff_h263_encode_motion_vector(s, s->mv[0][i][0] - s->last_mv[0][i][0] ,
999
s->mv[0][i][1] - s->last_mv[0][i][1]/2, s->f_code);
1000
s->last_mv[0][i][0]= s->mv[0][i][0];
1001
s->last_mv[0][i][1]= s->mv[0][i][1]*2;
1005
if(s->mv_dir & MV_DIR_BACKWARD){
1007
ff_h263_encode_motion_vector(s, s->mv[1][i][0] - s->last_mv[1][i][0] ,
1008
s->mv[1][i][1] - s->last_mv[1][i][1]/2, s->b_code);
1009
s->last_mv[1][i][0]= s->mv[1][i][0];
1010
s->last_mv[1][i][1]= s->mv[1][i][1]*2;
689
1017
if(interleaved_stats){
690
1018
s->mv_bits+= get_bits_diff(s);
693
/* encode each block */
694
for (i = 0; i < 6; i++) {
695
mpeg4_encode_block(s, block[i], i, 0, s->intra_scantable.permutated, NULL, &s->pb);
1021
mpeg4_encode_blocks(s, block, NULL, NULL, NULL, &s->pb);
698
1023
if(interleaved_stats){
699
1024
s->p_tex_bits+= get_bits_diff(s);
701
1027
}else{ /* s->pict_type==B_TYPE */
1028
cbp= get_p_cbp(s, block, motion_x, motion_y);
702
1030
if ((cbp | motion_x | motion_y | s->dquant) == 0 && s->mv_type==MV_TYPE_16X16) {
703
/* check if the B frames can skip it too, as we must skip it if we skip here
704
why didnt they just compress the skip-mb bits instead of reusing them ?! */
1031
/* check if the B frames can skip it too, as we must skip it if we skip here
1032
why didn't they just compress the skip-mb bits instead of reusing them ?! */
705
1033
if(s->max_b_frames>0){
707
1035
int x,y, offset;
764
1094
if(!s->progressive_sequence){
766
1096
put_bits(pb2, 1, s->interlaced_dct);
767
put_bits(pb2, 1, 0); // no interlaced ME yet
1097
put_bits(pb2, 1, 0);
770
1100
if(interleaved_stats){
771
1101
s->misc_bits+= get_bits_diff(s);
774
1104
/* motion vectors: 16x16 mode */
775
h263_pred_motion(s, 0, &pred_x, &pred_y);
777
h263_encode_motion(s, motion_x - pred_x, s->f_code);
778
h263_encode_motion(s, motion_y - pred_y, s->f_code);
1105
h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
1107
ff_h263_encode_motion_vector(s, motion_x - pred_x,
1108
motion_y - pred_y, s->f_code);
1109
}else if(s->mv_type==MV_TYPE_FIELD){
1110
if(s->dquant) cbpc+= 8;
781
1111
put_bits(&s->pb,
782
1112
inter_MCBPC_bits[cbpc],
783
1113
inter_MCBPC_code[cbpc]);
1115
put_bits(pb2, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
1117
put_bits(pb2, 2, dquant_code[s->dquant+2]);
1119
assert(!s->progressive_sequence);
1121
put_bits(pb2, 1, s->interlaced_dct);
1122
put_bits(pb2, 1, 1);
1124
if(interleaved_stats){
1125
s->misc_bits+= get_bits_diff(s);
1128
/* motion vectors: 16x8 interlaced mode */
1129
h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
1132
put_bits(&s->pb, 1, s->field_select[0][0]);
1133
put_bits(&s->pb, 1, s->field_select[0][1]);
1135
ff_h263_encode_motion_vector(s, s->mv[0][0][0] - pred_x,
1136
s->mv[0][0][1] - pred_y, s->f_code);
1137
ff_h263_encode_motion_vector(s, s->mv[0][1][0] - pred_x,
1138
s->mv[0][1][1] - pred_y, s->f_code);
1140
assert(s->mv_type==MV_TYPE_8X8);
1142
inter_MCBPC_bits[cbpc+16],
1143
inter_MCBPC_code[cbpc+16]);
786
1144
put_bits(pb2, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
788
1146
if(!s->progressive_sequence){
790
1148
put_bits(pb2, 1, s->interlaced_dct);
793
1151
if(interleaved_stats){
794
1152
s->misc_bits+= get_bits_diff(s);
797
1155
for(i=0; i<4; i++){
798
1156
/* motion vectors: 8x8 mode*/
799
h263_pred_motion(s, i, &pred_x, &pred_y);
1157
h263_pred_motion(s, i, 0, &pred_x, &pred_y);
801
h263_encode_motion(s, s->motion_val[ s->block_index[i] ][0] - pred_x, s->f_code);
802
h263_encode_motion(s, s->motion_val[ s->block_index[i] ][1] - pred_y, s->f_code);
1159
ff_h263_encode_motion_vector(s, s->current_picture.motion_val[0][ s->block_index[i] ][0] - pred_x,
1160
s->current_picture.motion_val[0][ s->block_index[i] ][1] - pred_y, s->f_code);
806
if(interleaved_stats){
1164
if(interleaved_stats){
807
1165
s->mv_bits+= get_bits_diff(s);
810
/* encode each block */
811
for (i = 0; i < 6; i++) {
812
mpeg4_encode_block(s, block[i], i, 0, s->intra_scantable.permutated, NULL, tex_pb);
1168
mpeg4_encode_blocks(s, block, NULL, NULL, NULL, tex_pb);
815
1170
if(interleaved_stats){
816
1171
s->p_tex_bits+= get_bits_diff(s);
906
1237
/* restore ac coeffs & last_index stuff if we messed them up with the prediction */
912
ac_val = s->ac_val[0][0] + s->block_index[i] * 16;
916
block[i][s->dsp.idct_permutation[j ]]= ac_val[j+8];
919
block[i][s->dsp.idct_permutation[j<<3]]= ac_val[j ];
921
s->block_last_index[i]= zigzag_last_index[i];
1239
restore_ac_coeffs(s, block, dir, scan_table, zigzag_last_index);
927
1243
void h263_encode_mb(MpegEncContext * s,
928
DCTELEM block[6][64],
929
int motion_x, int motion_y)
1244
DCTELEM block[6][64],
1245
int motion_x, int motion_y)
931
1247
int cbpc, cbpy, i, cbp, pred_x, pred_y;
932
1248
int16_t pred_dc;
933
1249
int16_t rec_intradc[6];
935
1251
const int interleaved_stats= (s->flags&CODEC_FLAG_PASS1);
936
1252
const int dquant_code[5]= {1,0,9,2,3};
938
1254
//printf("**mb x=%d y=%d\n", s->mb_x, s->mb_y);
939
1255
if (!s->mb_intra) {
940
1256
/* compute cbp */
942
for (i = 0; i < 6; i++) {
943
if (s->block_last_index[i] >= 0)
946
if ((cbp | motion_x | motion_y | s->dquant) == 0) {
1257
cbp= get_p_cbp(s, block, motion_x, motion_y);
1259
if ((cbp | motion_x | motion_y | s->dquant | (s->mv_type - MV_TYPE_16X16)) == 0) {
947
1260
/* skip macroblock */
948
1261
put_bits(&s->pb, 1, 1);
949
1262
if(interleaved_stats){
955
put_bits(&s->pb, 1, 0); /* mb coded */
1270
put_bits(&s->pb, 1, 0); /* mb coded */
1274
if(s->alt_inter_vlc==0 || cbpc!=3)
957
1276
if(s->dquant) cbpc+= 8;
959
inter_MCBPC_bits[cbpc],
960
inter_MCBPC_code[cbpc]);
963
put_bits(&s->pb, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
965
put_bits(&s->pb, 2, dquant_code[s->dquant+2]);
967
if(interleaved_stats){
968
s->misc_bits+= get_bits_diff(s);
971
/* motion vectors: 16x16 mode only now */
972
h263_pred_motion(s, 0, &pred_x, &pred_y);
975
h263_encode_motion(s, motion_x - pred_x, s->f_code);
976
h263_encode_motion(s, motion_y - pred_y, s->f_code);
979
h263p_encode_umotion(s, motion_x - pred_x);
980
h263p_encode_umotion(s, motion_y - pred_y);
981
if (((motion_x - pred_x) == 1) && ((motion_y - pred_y) == 1))
982
/* To prevent Start Code emulation */
983
put_bits(&s->pb,1,1);
1277
if(s->mv_type==MV_TYPE_16X16){
1279
inter_MCBPC_bits[cbpc],
1280
inter_MCBPC_code[cbpc]);
1282
put_bits(&s->pb, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
1284
put_bits(&s->pb, 2, dquant_code[s->dquant+2]);
1286
if(interleaved_stats){
1287
s->misc_bits+= get_bits_diff(s);
1290
/* motion vectors: 16x16 mode */
1291
h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
1294
ff_h263_encode_motion_vector(s, motion_x - pred_x,
1295
motion_y - pred_y, 1);
1298
h263p_encode_umotion(s, motion_x - pred_x);
1299
h263p_encode_umotion(s, motion_y - pred_y);
1300
if (((motion_x - pred_x) == 1) && ((motion_y - pred_y) == 1))
1301
/* To prevent Start Code emulation */
1302
put_bits(&s->pb,1,1);
1306
inter_MCBPC_bits[cbpc+16],
1307
inter_MCBPC_code[cbpc+16]);
1308
put_bits(&s->pb, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
1310
put_bits(&s->pb, 2, dquant_code[s->dquant+2]);
1312
if(interleaved_stats){
1313
s->misc_bits+= get_bits_diff(s);
1317
/* motion vectors: 8x8 mode*/
1318
h263_pred_motion(s, i, 0, &pred_x, &pred_y);
1320
motion_x= s->current_picture.motion_val[0][ s->block_index[i] ][0];
1321
motion_y= s->current_picture.motion_val[0][ s->block_index[i] ][1];
1323
ff_h263_encode_motion_vector(s, motion_x - pred_x,
1324
motion_y - pred_y, 1);
1327
h263p_encode_umotion(s, motion_x - pred_x);
1328
h263p_encode_umotion(s, motion_y - pred_y);
1329
if (((motion_x - pred_x) == 1) && ((motion_y - pred_y) == 1))
1330
/* To prevent Start Code emulation */
1331
put_bits(&s->pb,1,1);
986
1336
if(interleaved_stats){
987
1337
s->mv_bits+= get_bits_diff(s);
990
int li = s->h263_aic ? 0 : 1;
1340
assert(s->mb_intra);
994
1344
/* Predict DC */
995
if (s->h263_aic && s->mb_intra) {
1345
for(i=0; i<6; i++) {
996
1346
int16_t level = block[i][0];
1349
if(i<4) scale= s->y_dc_scale;
1350
else scale= s->c_dc_scale;
998
1352
pred_dc = h263_pred_dc(s, i, &dc_ptr[i]);
999
1353
level -= pred_dc;
1002
level = (level + (s->qscale >> 1))/(s->y_dc_scale);
1356
level = (level + (scale>>1))/scale;
1004
level = (level - (s->qscale >> 1))/(s->y_dc_scale);
1358
level = (level - (scale>>1))/scale;
1006
1360
/* AIC can change CBP */
1007
1361
if (level == 0 && s->block_last_index[i] == 0)
1008
1362
s->block_last_index[i] = -1;
1009
else if (level < -127)
1011
else if (level > 127)
1364
if(!s->modified_quant){
1367
else if (level > 127)
1014
1371
block[i][0] = level;
1015
/* Reconstruction */
1016
rec_intradc[i] = (s->y_dc_scale*level) + pred_dc;
1372
/* Reconstruction */
1373
rec_intradc[i] = scale*level + pred_dc;
1018
1375
rec_intradc[i] |= 1;
1019
1376
//if ((rec_intradc[i] % 2) == 0)
1085
static int h263_pred_dc(MpegEncContext * s, int n, uint16_t **dc_val_ptr)
1447
void ff_h263_loop_filter(MpegEncContext * s){
1449
const int linesize = s->linesize;
1450
const int uvlinesize= s->uvlinesize;
1451
const int xy = s->mb_y * s->mb_stride + s->mb_x;
1452
uint8_t *dest_y = s->dest[0];
1453
uint8_t *dest_cb= s->dest[1];
1454
uint8_t *dest_cr= s->dest[2];
1456
// if(s->pict_type==B_TYPE && !s->readable) return;
1462
if(!IS_SKIP(s->current_picture.mb_type[xy])){
1464
s->dsp.h263_v_loop_filter(dest_y+8*linesize , linesize, qp_c);
1465
s->dsp.h263_v_loop_filter(dest_y+8*linesize+8, linesize, qp_c);
1470
int qp_dt, qp_t, qp_tc;
1472
if(IS_SKIP(s->current_picture.mb_type[xy-s->mb_stride]))
1475
qp_t= s->current_picture.qscale_table[xy-s->mb_stride];
1483
const int chroma_qp= s->chroma_qscale_table[qp_tc];
1484
s->dsp.h263_v_loop_filter(dest_y , linesize, qp_tc);
1485
s->dsp.h263_v_loop_filter(dest_y+8, linesize, qp_tc);
1487
s->dsp.h263_v_loop_filter(dest_cb , uvlinesize, chroma_qp);
1488
s->dsp.h263_v_loop_filter(dest_cr , uvlinesize, chroma_qp);
1492
s->dsp.h263_h_loop_filter(dest_y-8*linesize+8 , linesize, qp_t);
1495
if(qp_t || IS_SKIP(s->current_picture.mb_type[xy-1-s->mb_stride]))
1498
qp_dt= s->current_picture.qscale_table[xy-1-s->mb_stride];
1501
const int chroma_qp= s->chroma_qscale_table[qp_dt];
1502
s->dsp.h263_h_loop_filter(dest_y -8*linesize , linesize, qp_dt);
1503
s->dsp.h263_h_loop_filter(dest_cb-8*uvlinesize, uvlinesize, chroma_qp);
1504
s->dsp.h263_h_loop_filter(dest_cr-8*uvlinesize, uvlinesize, chroma_qp);
1510
s->dsp.h263_h_loop_filter(dest_y +8, linesize, qp_c);
1511
if(s->mb_y + 1 == s->mb_height)
1512
s->dsp.h263_h_loop_filter(dest_y+8*linesize+8, linesize, qp_c);
1517
if(qp_c || IS_SKIP(s->current_picture.mb_type[xy-1]))
1520
qp_lc= s->current_picture.qscale_table[xy-1];
1523
s->dsp.h263_h_loop_filter(dest_y, linesize, qp_lc);
1524
if(s->mb_y + 1 == s->mb_height){
1525
const int chroma_qp= s->chroma_qscale_table[qp_lc];
1526
s->dsp.h263_h_loop_filter(dest_y +8* linesize, linesize, qp_lc);
1527
s->dsp.h263_h_loop_filter(dest_cb , uvlinesize, chroma_qp);
1528
s->dsp.h263_h_loop_filter(dest_cr , uvlinesize, chroma_qp);
1534
#ifdef CONFIG_ENCODERS
1535
static int h263_pred_dc(MpegEncContext * s, int n, int16_t **dc_val_ptr)
1087
1537
int x, y, wrap, a, c, pred_dc, scale;
1088
int16_t *dc_val, *ac_val;
1090
1540
/* find prediction */
1092
x = 2 * s->mb_x + 1 + (n & 1);
1093
y = 2 * s->mb_y + 1 + ((n & 2) >> 1);
1094
wrap = s->mb_width * 2 + 2;
1542
x = 2 * s->mb_x + (n & 1);
1543
y = 2 * s->mb_y + ((n & 2) >> 1);
1544
wrap = s->b8_stride;
1095
1545
dc_val = s->dc_val[0];
1096
ac_val = s->ac_val[0][0];
1097
1546
scale = s->y_dc_scale;
1101
wrap = s->mb_width + 2;
1550
wrap = s->mb_stride;
1102
1551
dc_val = s->dc_val[n - 4 + 1];
1103
ac_val = s->ac_val[n - 4 + 1][0];
1104
1552
scale = s->c_dc_scale;
1109
1557
a = dc_val[(x - 1) + (y) * wrap];
1110
1558
c = dc_val[(x) + (y - 1) * wrap];
1112
1560
/* No prediction outside GOB boundary */
1113
if (s->first_slice_line && ((n < 2) || (n > 3)))
1561
if(s->first_slice_line && n!=3){
1563
if(n!=1 && s->mb_x == s->resync_mb_x) a= 1024;
1115
1565
pred_dc = 1024;
1116
1566
/* just DC prediction */
1117
1567
if (a != 1024 && c != 1024)
1819
2375
put_bits(&s->pb, 16, 0);
1820
2376
put_bits(&s->pb, 16, 0x120 + vol_number); /* video obj layer */
1822
put_bits(&s->pb, 1, 0); /* random access vol */
1823
put_bits(&s->pb, 8, s->vo_type); /* video obj type indication */
1824
put_bits(&s->pb, 1, 1); /* is obj layer id= yes */
1825
put_bits(&s->pb, 4, vo_ver_id); /* is obj layer ver id */
1826
put_bits(&s->pb, 3, 1); /* is obj layer priority */
1828
float_aspect_to_info(s, s->avctx->aspect_ratio);
2378
put_bits(&s->pb, 1, 0); /* random access vol */
2379
put_bits(&s->pb, 8, s->vo_type); /* video obj type indication */
2380
if(s->workaround_bugs & FF_BUG_MS) {
2381
put_bits(&s->pb, 1, 0); /* is obj layer id= no */
2383
put_bits(&s->pb, 1, 1); /* is obj layer id= yes */
2384
put_bits(&s->pb, 4, vo_ver_id); /* is obj layer ver id */
2385
put_bits(&s->pb, 3, 1); /* is obj layer priority */
2388
aspect_to_info(s, s->avctx->sample_aspect_ratio);
1830
2390
put_bits(&s->pb, 4, s->aspect_ratio_info);/* aspect ratio info */
1831
if (s->aspect_ratio_info == FF_ASPECT_EXTENDED)
1833
put_bits(&s->pb, 8, s->aspected_width);
1834
put_bits(&s->pb, 8, s->aspected_height);
2391
if (s->aspect_ratio_info == FF_ASPECT_EXTENDED){
2392
put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.num);
2393
put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.den);
1838
put_bits(&s->pb, 1, 1); /* vol control parameters= yes */
1839
put_bits(&s->pb, 2, 1); /* chroma format YUV 420/YV12 */
2396
if(s->workaround_bugs & FF_BUG_MS) { //
2397
put_bits(&s->pb, 1, 0); /* vol control parameters= no @@@ */
2399
put_bits(&s->pb, 1, 1); /* vol control parameters= yes */
2400
put_bits(&s->pb, 2, 1); /* chroma format YUV 420/YV12 */
1840
2401
put_bits(&s->pb, 1, s->low_delay);
1841
put_bits(&s->pb, 1, 0); /* vbv parameters= no */
1843
put_bits(&s->pb, 1, 0); /* vol control parameters= no */
2402
put_bits(&s->pb, 1, 0); /* vbv parameters= no */
1846
put_bits(&s->pb, 2, RECT_SHAPE); /* vol shape= rectangle */
1847
put_bits(&s->pb, 1, 1); /* marker bit */
1849
put_bits(&s->pb, 16, s->time_increment_resolution);
2405
put_bits(&s->pb, 2, RECT_SHAPE); /* vol shape= rectangle */
2406
put_bits(&s->pb, 1, 1); /* marker bit */
2408
put_bits(&s->pb, 16, s->avctx->time_base.den);
1850
2409
if (s->time_increment_bits < 1)
1851
2410
s->time_increment_bits = 1;
1852
put_bits(&s->pb, 1, 1); /* marker bit */
1853
put_bits(&s->pb, 1, 0); /* fixed vop rate=no */
1854
put_bits(&s->pb, 1, 1); /* marker bit */
1855
put_bits(&s->pb, 13, s->width); /* vol width */
1856
put_bits(&s->pb, 1, 1); /* marker bit */
1857
put_bits(&s->pb, 13, s->height); /* vol height */
1858
put_bits(&s->pb, 1, 1); /* marker bit */
2411
put_bits(&s->pb, 1, 1); /* marker bit */
2412
put_bits(&s->pb, 1, 0); /* fixed vop rate=no */
2413
put_bits(&s->pb, 1, 1); /* marker bit */
2414
put_bits(&s->pb, 13, s->width); /* vol width */
2415
put_bits(&s->pb, 1, 1); /* marker bit */
2416
put_bits(&s->pb, 13, s->height); /* vol height */
2417
put_bits(&s->pb, 1, 1); /* marker bit */
1859
2418
put_bits(&s->pb, 1, s->progressive_sequence ? 0 : 1);
1860
put_bits(&s->pb, 1, 1); /* obmc disable */
2419
put_bits(&s->pb, 1, 1); /* obmc disable */
1861
2420
if (vo_ver_id == 1) {
1862
put_bits(&s->pb, 1, s->vol_sprite_usage=0); /* sprite enable */
2421
put_bits(&s->pb, 1, s->vol_sprite_usage); /* sprite enable */
1864
put_bits(&s->pb, 2, s->vol_sprite_usage=0); /* sprite enable */
2423
put_bits(&s->pb, 2, s->vol_sprite_usage); /* sprite enable */
1867
s->quant_precision=5;
1868
put_bits(&s->pb, 1, 0); /* not 8 bit == false */
1869
put_bits(&s->pb, 1, s->mpeg_quant); /* quant type= (0=h263 style)*/
2426
put_bits(&s->pb, 1, 0); /* not 8 bit == false */
2427
put_bits(&s->pb, 1, s->mpeg_quant); /* quant type= (0=h263 style)*/
1871
2429
if(s->mpeg_quant){
1872
2430
ff_write_quant_matrix(&s->pb, s->avctx->intra_matrix);
1907
2464
int time_div, time_mod;
1909
2466
if(s->pict_type==I_TYPE){
1910
2467
if(!(s->flags&CODEC_FLAG_GLOBAL_HEADER)){
1911
if(s->strict_std_compliance < 2) //HACK, the reference sw is buggy
2468
if(s->strict_std_compliance < FF_COMPLIANCE_VERY_STRICT) //HACK, the reference sw is buggy
1912
2469
mpeg4_encode_visual_object_header(s);
1913
if(s->strict_std_compliance < 2 || picture_number==0) //HACK, the reference sw is buggy
2470
if(s->strict_std_compliance < FF_COMPLIANCE_VERY_STRICT || picture_number==0) //HACK, the reference sw is buggy
1914
2471
mpeg4_encode_vol_header(s, 0, 0);
1916
mpeg4_encode_gop_header(s);
2473
if(!(s->workaround_bugs & FF_BUG_MS))
2474
mpeg4_encode_gop_header(s);
1919
2477
s->partitioned_frame= s->data_partitioning && s->pict_type!=B_TYPE;
1921
//printf("num:%d rate:%d base:%d\n", s->picture_number, s->frame_rate, FRAME_RATE_BASE);
1923
put_bits(&s->pb, 16, 0); /* vop header */
1924
put_bits(&s->pb, 16, VOP_STARTCODE); /* vop header */
1925
put_bits(&s->pb, 2, s->pict_type - 1); /* pict type: I = 0 , P = 1 */
1927
time_div= s->time/s->time_increment_resolution;
1928
time_mod= s->time%s->time_increment_resolution;
2479
//printf("num:%d rate:%d base:%d\n", s->picture_number, s->time_base.den, FRAME_RATE_BASE);
2481
put_bits(&s->pb, 16, 0); /* vop header */
2482
put_bits(&s->pb, 16, VOP_STARTCODE); /* vop header */
2483
put_bits(&s->pb, 2, s->pict_type - 1); /* pict type: I = 0 , P = 1 */
2486
time_div= s->time/s->avctx->time_base.den;
2487
time_mod= s->time%s->avctx->time_base.den;
1929
2488
time_incr= time_div - s->last_time_base;
2489
assert(time_incr >= 0);
1930
2490
while(time_incr--)
1931
2491
put_bits(&s->pb, 1, 1);
1933
2493
put_bits(&s->pb, 1, 0);
1935
put_bits(&s->pb, 1, 1); /* marker */
1936
put_bits(&s->pb, s->time_increment_bits, time_mod); /* time increment */
1937
put_bits(&s->pb, 1, 1); /* marker */
1938
put_bits(&s->pb, 1, 1); /* vop coded */
1939
if ( s->pict_type == P_TYPE
2495
put_bits(&s->pb, 1, 1); /* marker */
2496
put_bits(&s->pb, s->time_increment_bits, time_mod); /* time increment */
2497
put_bits(&s->pb, 1, 1); /* marker */
2498
put_bits(&s->pb, 1, 1); /* vop coded */
2499
if ( s->pict_type == P_TYPE
1940
2500
|| (s->pict_type == S_TYPE && s->vol_sprite_usage==GMC_SPRITE)) {
1941
put_bits(&s->pb, 1, s->no_rounding); /* rounding type */
2501
put_bits(&s->pb, 1, s->no_rounding); /* rounding type */
1943
put_bits(&s->pb, 3, 0); /* intra dc VLC threshold */
2503
put_bits(&s->pb, 3, 0); /* intra dc VLC threshold */
1944
2504
if(!s->progressive_sequence){
1945
put_bits(&s->pb, 1, s->top_field_first);
2505
put_bits(&s->pb, 1, s->current_picture_ptr->top_field_first);
1946
2506
put_bits(&s->pb, 1, s->alternate_scan);
1948
2508
//FIXME sprite stuff
2432
init_vlc(&intra_MCBPC_vlc, INTRA_MCBPC_VLC_BITS, 9,
2985
init_vlc(&intra_MCBPC_vlc, INTRA_MCBPC_VLC_BITS, 9,
2433
2986
intra_MCBPC_bits, 1, 1,
2434
intra_MCBPC_code, 1, 1);
2435
init_vlc(&inter_MCBPC_vlc, INTER_MCBPC_VLC_BITS, 28,
2987
intra_MCBPC_code, 1, 1, 1);
2988
init_vlc(&inter_MCBPC_vlc, INTER_MCBPC_VLC_BITS, 28,
2436
2989
inter_MCBPC_bits, 1, 1,
2437
inter_MCBPC_code, 1, 1);
2990
inter_MCBPC_code, 1, 1, 1);
2438
2991
init_vlc(&cbpy_vlc, CBPY_VLC_BITS, 16,
2439
2992
&cbpy_tab[0][1], 2, 1,
2440
&cbpy_tab[0][0], 2, 1);
2993
&cbpy_tab[0][0], 2, 1, 1);
2441
2994
init_vlc(&mv_vlc, MV_VLC_BITS, 33,
2442
2995
&mvtab[0][1], 2, 1,
2443
&mvtab[0][0], 2, 1);
2446
init_rl(&rvlc_rl_inter);
2447
init_rl(&rvlc_rl_intra);
2448
init_rl(&rl_intra_aic);
2449
init_vlc_rl(&rl_inter);
2450
init_vlc_rl(&rl_intra);
2451
init_vlc_rl(&rvlc_rl_inter);
2452
init_vlc_rl(&rvlc_rl_intra);
2453
init_vlc_rl(&rl_intra_aic);
2996
&mvtab[0][0], 2, 1, 1);
2997
init_rl(&rl_inter, 1);
2998
init_rl(&rl_intra, 1);
2999
init_rl(&rvlc_rl_inter, 1);
3000
init_rl(&rvlc_rl_intra, 1);
3001
init_rl(&rl_intra_aic, 1);
3002
init_vlc_rl(&rl_inter, 1);
3003
init_vlc_rl(&rl_intra, 1);
3004
init_vlc_rl(&rvlc_rl_inter, 1);
3005
init_vlc_rl(&rvlc_rl_intra, 1);
3006
init_vlc_rl(&rl_intra_aic, 1);
2454
3007
init_vlc(&dc_lum, DC_VLC_BITS, 10 /* 13 */,
2455
3008
&DCtab_lum[0][1], 2, 1,
2456
&DCtab_lum[0][0], 2, 1);
3009
&DCtab_lum[0][0], 2, 1, 1);
2457
3010
init_vlc(&dc_chrom, DC_VLC_BITS, 10 /* 13 */,
2458
3011
&DCtab_chrom[0][1], 2, 1,
2459
&DCtab_chrom[0][0], 2, 1);
3012
&DCtab_chrom[0][0], 2, 1, 1);
2460
3013
init_vlc(&sprite_trajectory, SPRITE_TRAJ_VLC_BITS, 15,
2461
3014
&sprite_trajectory_tab[0][1], 4, 2,
2462
&sprite_trajectory_tab[0][0], 4, 2);
3015
&sprite_trajectory_tab[0][0], 4, 2, 1);
2463
3016
init_vlc(&mb_type_b_vlc, MB_TYPE_B_VLC_BITS, 4,
2464
3017
&mb_type_b_tab[0][1], 2, 1,
2465
&mb_type_b_tab[0][0], 2, 1);
3018
&mb_type_b_tab[0][0], 2, 1, 1);
3019
init_vlc(&h263_mbtype_b_vlc, H263_MBTYPE_B_VLC_BITS, 15,
3020
&h263_mbtype_b_tab[0][1], 2, 1,
3021
&h263_mbtype_b_tab[0][0], 2, 1, 1);
3022
init_vlc(&cbpc_b_vlc, CBPC_B_VLC_BITS, 4,
3023
&cbpc_b_tab[0][1], 2, 1,
3024
&cbpc_b_tab[0][0], 2, 1, 1);
3854
* read the next MVs for OBMC. yes this is a ugly hack, feel free to send a patch :)
3856
static void preview_obmc(MpegEncContext *s){
3857
GetBitContext gb= s->gb;
3859
int cbpc, i, pred_x, pred_y, mx, my;
3861
const int xy= s->mb_x + 1 + s->mb_y * s->mb_stride;
3862
const int stride= s->b8_stride*2;
3865
s->block_index[i]+= 2;
3867
s->block_index[i]+= 1;
3870
assert(s->pict_type == P_TYPE);
3873
if (get_bits1(&s->gb)) {
3875
mot_val = s->current_picture.motion_val[0][ s->block_index[0] ];
3876
mot_val[0 ]= mot_val[2 ]=
3877
mot_val[0+stride]= mot_val[2+stride]= 0;
3878
mot_val[1 ]= mot_val[3 ]=
3879
mot_val[1+stride]= mot_val[3+stride]= 0;
3881
s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0;
3884
cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
3888
s->current_picture.mb_type[xy]= MB_TYPE_INTRA;
3890
get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
3892
if(s->modified_quant){
3893
if(get_bits1(&s->gb)) skip_bits(&s->gb, 1);
3894
else skip_bits(&s->gb, 5);
3896
skip_bits(&s->gb, 2);
3899
if ((cbpc & 16) == 0) {
3900
s->current_picture.mb_type[xy]= MB_TYPE_16x16 | MB_TYPE_L0;
3901
/* 16x16 motion prediction */
3902
mot_val= h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
3904
mx = h263p_decode_umotion(s, pred_x);
3906
mx = h263_decode_motion(s, pred_x, 1);
3909
my = h263p_decode_umotion(s, pred_y);
3911
my = h263_decode_motion(s, pred_y, 1);
3913
mot_val[0 ]= mot_val[2 ]=
3914
mot_val[0+stride]= mot_val[2+stride]= mx;
3915
mot_val[1 ]= mot_val[3 ]=
3916
mot_val[1+stride]= mot_val[3+stride]= my;
3918
s->current_picture.mb_type[xy]= MB_TYPE_8x8 | MB_TYPE_L0;
3920
mot_val = h263_pred_motion(s, i, 0, &pred_x, &pred_y);
3922
mx = h263p_decode_umotion(s, pred_x);
3924
mx = h263_decode_motion(s, pred_x, 1);
3927
my = h263p_decode_umotion(s, pred_y);
3929
my = h263_decode_motion(s, pred_y, 1);
3930
if (s->umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
3931
skip_bits1(&s->gb); /* Bit stuffing to prevent PSC */
3940
s->block_index[i]-= 2;
3942
s->block_index[i]-= 1;
3948
static void h263_decode_dquant(MpegEncContext *s){
3949
static const int8_t quant_tab[4] = { -1, -2, 1, 2 };
3951
if(s->modified_quant){
3952
if(get_bits1(&s->gb))
3953
s->qscale= modified_quant_tab[get_bits1(&s->gb)][ s->qscale ];
3955
s->qscale= get_bits(&s->gb, 5);
3957
s->qscale += quant_tab[get_bits(&s->gb, 2)];
3958
ff_set_qscale(s, s->qscale);
3231
3961
int ff_h263_decode_mb(MpegEncContext *s,
3232
3962
DCTELEM block[6][64])
3234
3964
int cbpc, cbpy, i, cbp, pred_x, pred_y, mx, my, dquant;
3235
3965
int16_t *mot_val;
3236
static int8_t quant_tab[4] = { -1, -2, 1, 2 };
3237
3966
const int xy= s->mb_x + s->mb_y * s->mb_stride;
3239
if (s->pict_type == P_TYPE || s->pict_type==S_TYPE) {
3241
if (get_bits1(&s->gb)) {
3245
s->block_last_index[i] = -1;
3246
s->mv_dir = MV_DIR_FORWARD;
3247
s->mv_type = MV_TYPE_16X16;
3248
if(s->pict_type==S_TYPE && s->vol_sprite_usage==GMC_SPRITE){
3249
s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_GMC | MB_TYPE_16x16 | MB_TYPE_L0;
3251
s->mv[0][0][0]= get_amv(s, 0);
3252
s->mv[0][0][1]= get_amv(s, 1);
3968
assert(!s->h263_pred);
3970
if (s->pict_type == P_TYPE) {
3972
if (get_bits1(&s->gb)) {
3976
s->block_last_index[i] = -1;
3977
s->mv_dir = MV_DIR_FORWARD;
3978
s->mv_type = MV_TYPE_16X16;
3256
3979
s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0;
3258
3980
s->mv[0][0][0] = 0;
3259
3981
s->mv[0][0][1] = 0;
3264
cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
3265
//fprintf(stderr, "\tCBPC: %d", cbpc);
3267
fprintf(stderr, "cbpc damaged at %d %d\n", s->mb_x, s->mb_y);
3982
s->mb_skipped = !(s->obmc | s->loop_filter);
3985
cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
3986
//fprintf(stderr, "\tCBPC: %d", cbpc);
3988
av_log(s->avctx, AV_LOG_ERROR, "cbpc damaged at %d %d\n", s->mb_x, s->mb_y);
3993
s->dsp.clear_blocks(s->block[0]);
3996
s->mb_intra = ((cbpc & 4) != 0);
3997
if (s->mb_intra) goto intra;
3999
cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
4001
if(s->alt_inter_vlc==0 || (cbpc & 3)!=3)
4004
cbp = (cbpc & 3) | (cbpy << 2);
4006
h263_decode_dquant(s);
4009
s->mv_dir = MV_DIR_FORWARD;
4010
if ((cbpc & 16) == 0) {
4011
s->current_picture.mb_type[xy]= MB_TYPE_16x16 | MB_TYPE_L0;
4012
/* 16x16 motion prediction */
4013
s->mv_type = MV_TYPE_16X16;
4014
h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
4016
mx = h263p_decode_umotion(s, pred_x);
4018
mx = h263_decode_motion(s, pred_x, 1);
4024
my = h263p_decode_umotion(s, pred_y);
4026
my = h263_decode_motion(s, pred_y, 1);
4030
s->mv[0][0][0] = mx;
4031
s->mv[0][0][1] = my;
4033
if (s->umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
4034
skip_bits1(&s->gb); /* Bit stuffing to prevent PSC */
4036
s->current_picture.mb_type[xy]= MB_TYPE_8x8 | MB_TYPE_L0;
4037
s->mv_type = MV_TYPE_8X8;
4039
mot_val = h263_pred_motion(s, i, 0, &pred_x, &pred_y);
4041
mx = h263p_decode_umotion(s, pred_x);
4043
mx = h263_decode_motion(s, pred_x, 1);
4048
my = h263p_decode_umotion(s, pred_y);
4050
my = h263_decode_motion(s, pred_y, 1);
4053
s->mv[0][i][0] = mx;
4054
s->mv[0][i][1] = my;
4055
if (s->umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
4056
skip_bits1(&s->gb); /* Bit stuffing to prevent PSC */
4062
/* decode each block */
4063
for (i = 0; i < 6; i++) {
4064
if (h263_decode_block(s, block[i], i, cbp&32) < 0)
4070
if(s->pict_type == P_TYPE && s->mb_x+1<s->mb_width && s->mb_num_left != 1)
4073
} else if(s->pict_type==B_TYPE) {
4075
const int stride= s->b8_stride;
4076
int16_t *mot_val0 = s->current_picture.motion_val[0][ 2*(s->mb_x + s->mb_y*stride) ];
4077
int16_t *mot_val1 = s->current_picture.motion_val[1][ 2*(s->mb_x + s->mb_y*stride) ];
4078
// const int mv_xy= s->mb_x + 1 + s->mb_y * s->mb_stride;
4081
mot_val0[0 ]= mot_val0[2 ]= mot_val0[0+2*stride]= mot_val0[2+2*stride]=
4082
mot_val0[1 ]= mot_val0[3 ]= mot_val0[1+2*stride]= mot_val0[3+2*stride]=
4083
mot_val1[0 ]= mot_val1[2 ]= mot_val1[0+2*stride]= mot_val1[2+2*stride]=
4084
mot_val1[1 ]= mot_val1[3 ]= mot_val1[1+2*stride]= mot_val1[3+2*stride]= 0;
4087
mb_type= get_vlc2(&s->gb, h263_mbtype_b_vlc.table, H263_MBTYPE_B_VLC_BITS, 2);
4089
av_log(s->avctx, AV_LOG_ERROR, "b mb_type damaged at %d %d\n", s->mb_x, s->mb_y);
4093
mb_type= h263_mb_type_b_map[ mb_type ];
4096
s->mb_intra = IS_INTRA(mb_type);
4097
if(HAS_CBP(mb_type)){
4098
s->dsp.clear_blocks(s->block[0]);
4099
cbpc = get_vlc2(&s->gb, cbpc_b_vlc.table, CBPC_B_VLC_BITS, 1);
4101
dquant = IS_QUANT(mb_type);
4105
cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
4108
av_log(s->avctx, AV_LOG_ERROR, "b cbpy damaged at %d %d\n", s->mb_x, s->mb_y);
4112
if(s->alt_inter_vlc==0 || (cbpc & 3)!=3)
4115
cbp = (cbpc & 3) | (cbpy << 2);
4119
assert(!s->mb_intra);
4121
if(IS_QUANT(mb_type)){
4122
h263_decode_dquant(s);
4125
if(IS_DIRECT(mb_type)){
4126
s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD | MV_DIRECT;
4127
mb_type |= ff_mpeg4_set_direct_mv(s, 0, 0);
4130
s->mv_type= MV_TYPE_16X16;
4133
if(USES_LIST(mb_type, 0)){
4134
int16_t *mot_val= h263_pred_motion(s, 0, 0, &mx, &my);
4135
s->mv_dir = MV_DIR_FORWARD;
4137
mx = h263_decode_motion(s, mx, 1);
4138
my = h263_decode_motion(s, my, 1);
4140
s->mv[0][0][0] = mx;
4141
s->mv[0][0][1] = my;
4142
mot_val[0 ]= mot_val[2 ]= mot_val[0+2*stride]= mot_val[2+2*stride]= mx;
4143
mot_val[1 ]= mot_val[3 ]= mot_val[1+2*stride]= mot_val[3+2*stride]= my;
4146
if(USES_LIST(mb_type, 1)){
4147
int16_t *mot_val= h263_pred_motion(s, 0, 1, &mx, &my);
4148
s->mv_dir |= MV_DIR_BACKWARD;
4150
mx = h263_decode_motion(s, mx, 1);
4151
my = h263_decode_motion(s, my, 1);
4153
s->mv[1][0][0] = mx;
4154
s->mv[1][0][1] = my;
4155
mot_val[0 ]= mot_val[2 ]= mot_val[0+2*stride]= mot_val[2+2*stride]= mx;
4156
mot_val[1 ]= mot_val[3 ]= mot_val[1+2*stride]= mot_val[3+2*stride]= my;
4160
s->current_picture.mb_type[xy]= mb_type;
4162
/* decode each block */
4163
for (i = 0; i < 6; i++) {
4164
if (h263_decode_block(s, block[i], i, cbp&32) < 0)
4168
} else { /* I-Frame */
4170
cbpc = get_vlc2(&s->gb, intra_MCBPC_vlc.table, INTRA_MCBPC_VLC_BITS, 2);
4172
av_log(s->avctx, AV_LOG_ERROR, "I cbpc damaged at %d %d\n", s->mb_x, s->mb_y);
4177
s->dsp.clear_blocks(s->block[0]);
4182
s->current_picture.mb_type[xy]= MB_TYPE_INTRA;
4184
s->ac_pred = get_bits1(&s->gb);
4186
s->current_picture.mb_type[xy]= MB_TYPE_INTRA | MB_TYPE_ACPRED;
4188
s->h263_aic_dir = get_bits1(&s->gb);
4193
cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
4195
av_log(s->avctx, AV_LOG_ERROR, "I cbpy damaged at %d %d\n", s->mb_x, s->mb_y);
4198
cbp = (cbpc & 3) | (cbpy << 2);
4200
h263_decode_dquant(s);
4203
/* decode each block */
4204
for (i = 0; i < 6; i++) {
4205
if (h263_decode_block(s, block[i], i, cbp&32) < 0)
4212
/* per-MB end of slice check */
4214
int v= show_bits(&s->gb, 16);
4216
if(get_bits_count(&s->gb) + 16 > s->gb.size_in_bits){
4217
v>>= get_bits_count(&s->gb) + 16 - s->gb.size_in_bits;
4227
int ff_mpeg4_decode_mb(MpegEncContext *s,
4228
DCTELEM block[6][64])
4230
int cbpc, cbpy, i, cbp, pred_x, pred_y, mx, my, dquant;
4232
static int8_t quant_tab[4] = { -1, -2, 1, 2 };
4233
const int xy= s->mb_x + s->mb_y * s->mb_stride;
4235
assert(s->h263_pred);
4237
if (s->pict_type == P_TYPE || s->pict_type==S_TYPE) {
4239
if (get_bits1(&s->gb)) {
4243
s->block_last_index[i] = -1;
4244
s->mv_dir = MV_DIR_FORWARD;
4245
s->mv_type = MV_TYPE_16X16;
4246
if(s->pict_type==S_TYPE && s->vol_sprite_usage==GMC_SPRITE){
4247
s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_GMC | MB_TYPE_16x16 | MB_TYPE_L0;
4249
s->mv[0][0][0]= get_amv(s, 0);
4250
s->mv[0][0][1]= get_amv(s, 1);
4254
s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0;
4262
cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
4263
//fprintf(stderr, "\tCBPC: %d", cbpc);
4265
av_log(s->avctx, AV_LOG_ERROR, "cbpc damaged at %d %d\n", s->mb_x, s->mb_y);
4270
s->dsp.clear_blocks(s->block[0]);
3272
4271
dquant = cbpc & 8;
3273
4272
s->mb_intra = ((cbpc & 4) != 0);
3274
4273
if (s->mb_intra) goto intra;
3276
4275
if(s->pict_type==S_TYPE && s->vol_sprite_usage==GMC_SPRITE && (cbpc & 16) == 0)
3277
4276
s->mcsel= get_bits1(&s->gb);
3278
4277
else s->mcsel= 0;
3279
cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
3280
cbp = (cbpc & 3) | ((cbpy ^ 0xf) << 2);
4278
cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1) ^ 0x0F;
4280
cbp = (cbpc & 3) | (cbpy << 2);
3282
change_qscale(s, quant_tab[get_bits(&s->gb, 2)]);
4282
ff_set_qscale(s, s->qscale + quant_tab[get_bits(&s->gb, 2)]);
3284
4284
if((!s->progressive_sequence) && (cbp || (s->workaround_bugs&FF_BUG_XVID_ILACE)))
3285
4285
s->interlaced_dct= get_bits1(&s->gb);
3287
4287
s->mv_dir = MV_DIR_FORWARD;
3288
4288
if ((cbpc & 16) == 0) {
3979
4934
level= SHOW_SBITS(re, &s->gb, 12); LAST_SKIP_BITS(re, &s->gb, 12);
3981
4936
if(SHOW_UBITS(re, &s->gb, 1)==0){
3982
fprintf(stderr, "1. marker bit missing in 3. esc\n");
4937
av_log(s->avctx, AV_LOG_ERROR, "1. marker bit missing in 3. esc\n");
3984
4939
}; SKIP_CACHE(re, &s->gb, 1);
3986
4941
level= SHOW_SBITS(re, &s->gb, 12); SKIP_CACHE(re, &s->gb, 12);
3988
4943
if(SHOW_UBITS(re, &s->gb, 1)==0){
3989
fprintf(stderr, "2. marker bit missing in 3. esc\n");
4944
av_log(s->avctx, AV_LOG_ERROR, "2. marker bit missing in 3. esc\n");
3991
4946
}; LAST_SKIP_CACHE(re, &s->gb, 1);
3993
4948
SKIP_COUNTER(re, &s->gb, 1+12+1);
3996
if(level*s->qscale>1024 || level*s->qscale<-1024){
3997
fprintf(stderr, "|level| overflow in 3. esc, qp=%d\n", s->qscale);
4002
const int abs_level= ABS(level);
4003
if(abs_level<=MAX_LEVEL && run<=MAX_RUN && !(s->workaround_bugs&FF_BUG_AC_VLC)){
4952
if(s->error_resilience >= FF_ER_COMPLIANT){
4953
const int abs_level= FFABS(level);
4954
if(abs_level<=MAX_LEVEL && run<=MAX_RUN){
4004
4955
const int run1= run - rl->max_run[last][abs_level] - 1;
4005
4956
if(abs_level <= rl->max_level[last][run]){
4006
fprintf(stderr, "illegal 3. esc, vlc encoding possible\n");
4957
av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, vlc encoding possible\n");
4009
4960
if(s->error_resilience > FF_ER_COMPLIANT){
4010
4961
if(abs_level <= rl->max_level[last][run]*2){
4011
fprintf(stderr, "illegal 3. esc, esc 1 encoding possible\n");
4962
av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, esc 1 encoding possible\n");
4014
4965
if(run1 >= 0 && abs_level <= rl->max_level[last][run1]){
4015
fprintf(stderr, "illegal 3. esc, esc 2 encoding possible\n");
4966
av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, esc 2 encoding possible\n");
4022
if (level>0) level= level * qmul + qadd;
4973
if (level>0) level= level * qmul + qadd;
4023
4974
else level= level * qmul - qadd;
4976
if((unsigned)(level + 2048) > 4095){
4977
if(s->error_resilience > FF_ER_COMPLIANT){
4978
if(level > 2560 || level<-2560){
4979
av_log(s->avctx, AV_LOG_ERROR, "|level| overflow in 3. esc, qp=%d\n", s->qscale);
4983
level= level<0 ? -2048 : 2047;
4026
4987
if(last) i+=192;
4139
5107
height = h263_format[format][1];
4143
5111
s->pict_type = I_TYPE + get_bits1(&s->gb);
4145
s->unrestricted_mv = get_bits1(&s->gb);
4146
s->h263_long_vectors = s->unrestricted_mv;
4148
if (get_bits1(&s->gb) != 0) {
4149
fprintf(stderr, "H263 SAC not supported\n");
4150
return -1; /* SAC: off */
4152
if (get_bits1(&s->gb) != 0) {
4153
s->mv_type = MV_TYPE_8X8; /* Advanced prediction mode */
4156
if (get_bits1(&s->gb) != 0) {
4157
fprintf(stderr, "H263 PB frame not supported\n");
4158
return -1; /* not PB frame */
4160
s->qscale = get_bits(&s->gb, 5);
4161
skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
5113
s->h263_long_vectors = get_bits1(&s->gb);
5115
if (get_bits1(&s->gb) != 0) {
5116
av_log(s->avctx, AV_LOG_ERROR, "H263 SAC not supported\n");
5117
return -1; /* SAC: off */
5119
s->obmc= get_bits1(&s->gb); /* Advanced prediction mode */
5120
s->unrestricted_mv = s->h263_long_vectors || s->obmc;
5122
if (get_bits1(&s->gb) != 0) {
5123
av_log(s->avctx, AV_LOG_ERROR, "H263 PB frame not supported\n");
5124
return -1; /* not PB frame */
5126
s->chroma_qscale= s->qscale = get_bits(&s->gb, 5);
5127
skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
4163
5129
s->width = width;
4164
5130
s->height = height;
5131
s->avctx->sample_aspect_ratio= (AVRational){12,11};
5132
s->avctx->time_base= (AVRational){1001, 30000};
4169
5137
s->h263_plus = 1;
4170
5138
ufep = get_bits(&s->gb, 3); /* Update Full Extended PTYPE */
4172
/* ufep other than 0 and 1 are reserved */
5140
/* ufep other than 0 and 1 are reserved */
4173
5141
if (ufep == 1) {
4175
5143
format = get_bits(&s->gb, 3);
4176
5144
dprintf("ufep=1, format: %d\n", format);
4177
skip_bits(&s->gb,1); /* Custom PCF */
5145
s->custom_pcf= get_bits1(&s->gb);
4178
5146
s->umvplus = get_bits(&s->gb, 1); /* Unrestricted Motion Vector */
4179
skip_bits1(&s->gb); /* Syntax-based Arithmetic Coding (SAC) */
4180
if (get_bits1(&s->gb) != 0) {
4181
s->mv_type = MV_TYPE_8X8; /* Advanced prediction mode */
4183
if (get_bits1(&s->gb) != 0) { /* Advanced Intra Coding (AIC) */
4187
if (get_bits1(&s->gb) != 0) {
4188
fprintf(stderr, "Deblocking Filter not supported\n");
4190
if (get_bits1(&s->gb) != 0) {
4191
fprintf(stderr, "Slice Structured not supported\n");
4193
if (get_bits1(&s->gb) != 0) {
4194
fprintf(stderr, "Reference Picture Selection not supported\n");
4196
if (get_bits1(&s->gb) != 0) {
4197
fprintf(stderr, "Independent Segment Decoding not supported\n");
4199
if (get_bits1(&s->gb) != 0) {
4200
fprintf(stderr, "Alternative Inter VLC not supported\n");
4202
if (get_bits1(&s->gb) != 0) {
4203
fprintf(stderr, "Modified Quantization not supported\n");
5147
if (get_bits1(&s->gb) != 0) {
5148
av_log(s->avctx, AV_LOG_ERROR, "Syntax-based Arithmetic Coding (SAC) not supported\n");
5150
s->obmc= get_bits1(&s->gb); /* Advanced prediction mode */
5151
s->h263_aic = get_bits1(&s->gb); /* Advanced Intra Coding (AIC) */
5152
s->loop_filter= get_bits1(&s->gb);
5153
s->unrestricted_mv = s->umvplus || s->obmc || s->loop_filter;
5155
s->h263_slice_structured= get_bits1(&s->gb);
5156
if (get_bits1(&s->gb) != 0) {
5157
av_log(s->avctx, AV_LOG_ERROR, "Reference Picture Selection not supported\n");
5159
if (get_bits1(&s->gb) != 0) {
5160
av_log(s->avctx, AV_LOG_ERROR, "Independent Segment Decoding not supported\n");
5162
s->alt_inter_vlc= get_bits1(&s->gb);
5163
s->modified_quant= get_bits1(&s->gb);
5164
if(s->modified_quant)
5165
s->chroma_qscale_table= ff_h263_chroma_qscale_table;
4206
5167
skip_bits(&s->gb, 1); /* Prevent start code emulation */
4208
5169
skip_bits(&s->gb, 3); /* Reserved */
4209
5170
} else if (ufep != 0) {
4210
fprintf(stderr, "Bad UFEP type (%d)\n", ufep);
5171
av_log(s->avctx, AV_LOG_ERROR, "Bad UFEP type (%d)\n", ufep);
4215
s->pict_type = get_bits(&s->gb, 3) + I_TYPE;
4216
dprintf("pict_type: %d\n", s->pict_type);
4217
if (s->pict_type != I_TYPE &&
4218
s->pict_type != P_TYPE)
5176
s->pict_type = get_bits(&s->gb, 3);
5177
switch(s->pict_type){
5178
case 0: s->pict_type= I_TYPE;break;
5179
case 1: s->pict_type= P_TYPE;break;
5180
case 3: s->pict_type= B_TYPE;break;
5181
case 7: s->pict_type= I_TYPE;break; //ZYGO
4220
5185
skip_bits(&s->gb, 2);
4221
5186
s->no_rounding = get_bits1(&s->gb);
4222
dprintf("RTYPE: %d\n", s->no_rounding);
4223
5187
skip_bits(&s->gb, 4);
4225
5189
/* Get the picture dimensions */
4227
5191
if (format == 6) {
4243
5207
dprintf("\nH.263+ Custom picture: %dx%d\n",width,height);
4244
5208
if (s->aspect_ratio_info == FF_ASPECT_EXTENDED) {
4245
5209
/* aspected dimensions */
4246
s->aspected_width = get_bits(&s->gb, 8);
4247
s->aspected_height = get_bits(&s->gb, 8);
5210
s->avctx->sample_aspect_ratio.num= get_bits(&s->gb, 8);
5211
s->avctx->sample_aspect_ratio.den= get_bits(&s->gb, 8);
4249
s->aspected_width = pixel_aspect[s->aspect_ratio_info][0];
4250
s->aspected_height= pixel_aspect[s->aspect_ratio_info][1];
5213
s->avctx->sample_aspect_ratio= pixel_aspect[s->aspect_ratio_info];
4253
5216
width = h263_format[format][0];
4254
5217
height = h263_format[format][1];
5218
s->avctx->sample_aspect_ratio= (AVRational){12,11};
4256
5220
if ((width == 0) || (height == 0))
4258
5222
s->width = width;
4259
5223
s->height = height;
5227
s->avctx->time_base.den= 1800000;
5228
s->avctx->time_base.num= 1000 + get_bits1(&s->gb);
5229
s->avctx->time_base.num*= get_bits(&s->gb, 7);
5230
if(s->avctx->time_base.num == 0){
5231
av_log(s, AV_LOG_ERROR, "zero framerate\n");
5234
gcd= ff_gcd(s->avctx->time_base.den, s->avctx->time_base.num);
5235
s->avctx->time_base.den /= gcd;
5236
s->avctx->time_base.num /= gcd;
5237
// av_log(s->avctx, AV_LOG_DEBUG, "%d/%d\n", s->avctx->time_base.den, s->avctx->time_base.num);
5239
s->avctx->time_base= (AVRational){1001, 30000};
5244
skip_bits(&s->gb, 2); //extended Temporal reference
4260
5248
if (s->umvplus) {
4261
5249
if(get_bits1(&s->gb)==0) /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */
5252
if(s->h263_slice_structured){
5253
if (get_bits1(&s->gb) != 0) {
5254
av_log(s->avctx, AV_LOG_ERROR, "rectangular slices not supported\n");
5256
if (get_bits1(&s->gb) != 0) {
5257
av_log(s->avctx, AV_LOG_ERROR, "unordered slices not supported\n");
4266
5262
s->qscale = get_bits(&s->gb, 5);
5265
s->mb_width = (s->width + 15) / 16;
5266
s->mb_height = (s->height + 15) / 16;
5267
s->mb_num = s->mb_width * s->mb_height;
4269
5270
while (get_bits1(&s->gb) != 0) {
4270
5271
skip_bits(&s->gb, 8);
5274
if(s->h263_slice_structured){
5275
if (get_bits1(&s->gb) != 1) {
5276
av_log(s->avctx, AV_LOG_ERROR, "SEPB1 marker missing\n");
5280
ff_h263_decode_mba(s);
5282
if (get_bits1(&s->gb) != 1) {
5283
av_log(s->avctx, AV_LOG_ERROR, "SEPB2 marker missing\n");
4274
5289
if(s->h263_aic){
4275
s->y_dc_scale_table=
4276
s->c_dc_scale_table= h263_aic_dc_scale_table;
5290
s->y_dc_scale_table=
5291
s->c_dc_scale_table= ff_aic_dc_scale_table;
4278
5293
s->y_dc_scale_table=
4279
5294
s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
4282
5297
if(s->avctx->debug&FF_DEBUG_PICT_INFO){
4283
printf("qp:%d %c size:%d rnd:%d %s %s %s %s\n",
5298
av_log(s->avctx, AV_LOG_DEBUG, "qp:%d %c size:%d rnd:%d%s%s%s%s%s%s%s%s%s %d/%d\n",
4284
5299
s->qscale, av_get_pict_type_char(s->pict_type),
4285
5300
s->gb.size_in_bits, 1-s->no_rounding,
4286
s->mv_type == MV_TYPE_8X8 ? "ADV" : "",
4287
s->umvplus ? "UMV" : "",
4288
s->h263_long_vectors ? "LONG" : "",
4289
s->h263_plus ? "+" : ""
5301
s->obmc ? " AP" : "",
5302
s->umvplus ? " UMV" : "",
5303
s->h263_long_vectors ? " LONG" : "",
5304
s->h263_plus ? " +" : "",
5305
s->h263_aic ? " AIC" : "",
5306
s->alt_inter_vlc ? " AIV" : "",
5307
s->modified_quant ? " MQ" : "",
5308
s->loop_filter ? " LOOP" : "",
5309
s->h263_slice_structured ? " SS" : "",
5310
s->avctx->time_base.den, s->avctx->time_base.num
5314
if (s->pict_type == I_TYPE && s->codec_tag == ff_get_fourcc("ZYGO")){
5316
for(i=0; i<85; i++) av_log(s->avctx, AV_LOG_DEBUG, "%d", get_bits1(&s->gb));
5317
av_log(s->avctx, AV_LOG_DEBUG, "\n");
5318
for(i=0; i<13; i++){
5320
int v= get_bits(&s->gb, 8);
5321
v |= get_sbits(&s->gb, 8)<<8;
5322
av_log(s->avctx, AV_LOG_DEBUG, " %5d", v);
5324
av_log(s->avctx, AV_LOG_DEBUG, "\n");
5326
for(i=0; i<50; i++) av_log(s->avctx, AV_LOG_DEBUG, "%d", get_bits1(&s->gb));
4297
static void mpeg4_decode_sprite_trajectory(MpegEncContext * s)
5333
static void mpeg4_decode_sprite_trajectory(MpegEncContext * s, GetBitContext *gb)
4300
5336
int a= 2<<s->sprite_warping_accuracy;
4534
5570
//printf("vo type:%d\n",s->vo_type);
4535
5571
s->aspect_ratio_info= get_bits(gb, 4);
4536
if(s->aspect_ratio_info == FF_ASPECT_EXTENDED){
4537
s->aspected_width = get_bits(gb, 8); // par_width
4538
s->aspected_height = get_bits(gb, 8); // par_height
5572
if(s->aspect_ratio_info == FF_ASPECT_EXTENDED){
5573
s->avctx->sample_aspect_ratio.num= get_bits(gb, 8); // par_width
5574
s->avctx->sample_aspect_ratio.den= get_bits(gb, 8); // par_height
4540
s->aspected_width = pixel_aspect[s->aspect_ratio_info][0];
4541
s->aspected_height= pixel_aspect[s->aspect_ratio_info][1];
5576
s->avctx->sample_aspect_ratio= pixel_aspect[s->aspect_ratio_info];
4544
5579
if ((s->vol_control_parameters=get_bits1(gb))) { /* vol control parameter */
4545
5580
int chroma_format= get_bits(gb, 2);
4546
5581
if(chroma_format!=1){
4547
printf("illegal chroma format\n");
5582
av_log(s->avctx, AV_LOG_ERROR, "illegal chroma format\n");
4549
5584
s->low_delay= get_bits1(gb);
4550
5585
if(get_bits1(gb)){ /* vbv parameters */
4551
get_bits(gb, 15); /* first_half_bitrate */
4552
skip_bits1(gb); /* marker */
4553
get_bits(gb, 15); /* latter_half_bitrate */
4554
skip_bits1(gb); /* marker */
4555
get_bits(gb, 15); /* first_half_vbv_buffer_size */
4556
skip_bits1(gb); /* marker */
4557
get_bits(gb, 3); /* latter_half_vbv_buffer_size */
4558
get_bits(gb, 11); /* first_half_vbv_occupancy */
4559
skip_bits1(gb); /* marker */
4560
get_bits(gb, 15); /* latter_half_vbv_occupancy */
4561
skip_bits1(gb); /* marker */
5586
get_bits(gb, 15); /* first_half_bitrate */
5587
skip_bits1(gb); /* marker */
5588
get_bits(gb, 15); /* latter_half_bitrate */
5589
skip_bits1(gb); /* marker */
5590
get_bits(gb, 15); /* first_half_vbv_buffer_size */
5591
skip_bits1(gb); /* marker */
5592
get_bits(gb, 3); /* latter_half_vbv_buffer_size */
5593
get_bits(gb, 11); /* first_half_vbv_occupancy */
5594
skip_bits1(gb); /* marker */
5595
get_bits(gb, 15); /* latter_half_vbv_occupancy */
5596
skip_bits1(gb); /* marker */
4564
// set low delay flag only once so the smart? low delay detection wont be overriden
5599
// set low delay flag only once the smartest? low delay detection won't be overriden
4565
5600
if(s->picture_number==0)
4566
5601
s->low_delay=0;
4569
5604
s->shape = get_bits(gb, 2); /* vol shape */
4570
if(s->shape != RECT_SHAPE) printf("only rectangular vol supported\n");
5605
if(s->shape != RECT_SHAPE) av_log(s->avctx, AV_LOG_ERROR, "only rectangular vol supported\n");
4571
5606
if(s->shape == GRAY_SHAPE && vo_ver_id != 1){
4572
printf("Gray shape not supported\n");
5607
av_log(s->avctx, AV_LOG_ERROR, "Gray shape not supported\n");
4573
5608
skip_bits(gb, 4); //video_object_layer_shape_extension
4576
5611
check_marker(gb, "before time_increment_resolution");
4578
s->time_increment_resolution = get_bits(gb, 16);
4580
s->time_increment_bits = av_log2(s->time_increment_resolution - 1) + 1;
5613
s->avctx->time_base.den = get_bits(gb, 16);
5614
if(!s->avctx->time_base.den){
5615
av_log(s->avctx, AV_LOG_ERROR, "time_base.den==0\n");
5619
s->time_increment_bits = av_log2(s->avctx->time_base.den - 1) + 1;
4581
5620
if (s->time_increment_bits < 1)
4582
5621
s->time_increment_bits = 1;
4584
5623
check_marker(gb, "before fixed_vop_rate");
4586
5625
if (get_bits1(gb) != 0) { /* fixed_vop_rate */
4587
skip_bits(gb, s->time_increment_bits);
5626
s->avctx->time_base.num = get_bits(gb, s->time_increment_bits);
5628
s->avctx->time_base.num = 1;
4590
5632
if (s->shape != BIN_ONLY_SHAPE) {
4591
5633
if (s->shape == RECT_SHAPE) {
4822
5867
static int decode_vop_header(MpegEncContext *s, GetBitContext *gb){
4823
5868
int time_incr, time_increment;
4825
s->pict_type = get_bits(gb, 2) + I_TYPE; /* pict type: I = 0 , P = 1 */
5870
s->pict_type = get_bits(gb, 2) + I_TYPE; /* pict type: I = 0 , P = 1 */
4826
5871
if(s->pict_type==B_TYPE && s->low_delay && s->vol_control_parameters==0 && !(s->flags & CODEC_FLAG_LOW_DELAY)){
4827
printf("low_delay flag set, but shouldnt, clearing it\n");
5872
av_log(s->avctx, AV_LOG_ERROR, "low_delay flag incorrectly, clearing it\n");
4828
5873
s->low_delay=0;
4831
5876
s->partitioned_frame= s->data_partitioning && s->pict_type!=B_TYPE;
4832
5877
if(s->partitioned_frame)
4833
5878
s->decode_mb= mpeg4_decode_partitioned_mb;
4835
s->decode_mb= ff_h263_decode_mb;
5880
s->decode_mb= ff_mpeg4_decode_mb;
4837
if(s->time_increment_resolution==0){
4838
s->time_increment_resolution=1;
4839
// fprintf(stderr, "time_increment_resolution is illegal\n");
4842
while (get_bits1(gb) != 0)
5883
while (get_bits1(gb) != 0)
4845
5886
check_marker(gb, "before time_increment");
4847
if(s->time_increment_bits==0){
4848
printf("hmm, seems the headers arnt complete, trying to guess time_increment_bits\n");
5888
if(s->time_increment_bits==0 || !(show_bits(gb, s->time_increment_bits+1)&1)){
5889
av_log(s->avctx, AV_LOG_ERROR, "hmm, seems the headers are not complete, trying to guess time_increment_bits\n");
4850
5891
for(s->time_increment_bits=1 ;s->time_increment_bits<16; s->time_increment_bits++){
4851
5892
if(show_bits(gb, s->time_increment_bits+1)&1) break;
4854
printf("my guess is %d bits ;)\n",s->time_increment_bits);
5895
av_log(s->avctx, AV_LOG_ERROR, "my guess is %d bits ;)\n",s->time_increment_bits);
4857
5898
if(IS_3IV1) time_increment= get_bits1(gb); //FIXME investigate further
4858
5899
else time_increment= get_bits(gb, s->time_increment_bits);
4860
5901
// printf("%d %X\n", s->time_increment_bits, time_increment);
4861
//printf(" type:%d modulo_time_base:%d increment:%d\n", s->pict_type, time_incr, time_increment);
5902
//av_log(s->avctx, AV_LOG_DEBUG, " type:%d modulo_time_base:%d increment:%d t_frame %d\n", s->pict_type, time_incr, time_increment, s->t_frame);
4862
5903
if(s->pict_type!=B_TYPE){
4863
5904
s->last_time_base= s->time_base;
4864
5905
s->time_base+= time_incr;
4865
s->time= s->time_base*s->time_increment_resolution + time_increment;
5906
s->time= s->time_base*s->avctx->time_base.den + time_increment;
4866
5907
if(s->workaround_bugs&FF_BUG_UMP4){
4867
5908
if(s->time < s->last_non_b_time){
4868
5909
// fprintf(stderr, "header is not mpeg4 compatible, broken encoder, trying to workaround\n");
4869
5910
s->time_base++;
4870
s->time+= s->time_increment_resolution;
5911
s->time+= s->avctx->time_base.den;
4873
5914
s->pp_time= s->time - s->last_non_b_time;
4874
5915
s->last_non_b_time= s->time;
4876
s->time= (s->last_time_base + time_incr)*s->time_increment_resolution + time_increment;
5917
s->time= (s->last_time_base + time_incr)*s->avctx->time_base.den + time_increment;
4877
5918
s->pb_time= s->pp_time - (s->last_non_b_time - s->time);
4878
5919
if(s->pp_time <=s->pb_time || s->pp_time <= s->pp_time - s->pb_time || s->pp_time<=0){
4879
// printf("messed up order, seeking?, skiping current b frame\n");
4880
return FRAME_SKIPED;
5920
// printf("messed up order, maybe after seeking? skipping current b frame\n");
5921
return FRAME_SKIPPED;
4883
if(s->t_frame==0) s->t_frame= s->time - s->last_time_base;
5923
ff_mpeg4_init_direct_mv(s);
5925
if(s->t_frame==0) s->t_frame= s->pb_time;
4884
5926
if(s->t_frame==0) s->t_frame=1; // 1/0 protection
4885
//printf("%Ld %Ld %d %d\n", s->last_non_b_time, s->time, s->pp_time, s->t_frame); fflush(stdout);
4886
s->pp_field_time= ( ROUNDED_DIV(s->last_non_b_time, s->t_frame)
4887
- ROUNDED_DIV(s->last_non_b_time - s->pp_time, s->t_frame))*2;
4888
s->pb_field_time= ( ROUNDED_DIV(s->time, s->t_frame)
4889
- ROUNDED_DIV(s->last_non_b_time - s->pp_time, s->t_frame))*2;
5927
s->pp_field_time= ( ROUNDED_DIV(s->last_non_b_time, s->t_frame)
5928
- ROUNDED_DIV(s->last_non_b_time - s->pp_time, s->t_frame))*2;
5929
s->pb_field_time= ( ROUNDED_DIV(s->time, s->t_frame)
5930
- ROUNDED_DIV(s->last_non_b_time - s->pp_time, s->t_frame))*2;
5931
if(!s->progressive_sequence){
5932
if(s->pp_field_time <= s->pb_field_time || s->pb_field_time <= 1)
5933
return FRAME_SKIPPED;
4892
s->current_picture.pts= s->time*1000LL*1000LL / s->time_increment_resolution;
5936
//av_log(s->avctx, AV_LOG_DEBUG, "last nonb %"PRId64" last_base %d time %"PRId64" pp %d pb %d t %d ppf %d pbf %d\n", s->last_non_b_time, s->last_time_base, s->time, s->pp_time, s->pb_time, s->t_frame, s->pp_field_time, s->pb_field_time);
5938
if(s->avctx->time_base.num)
5939
s->current_picture_ptr->pts= (s->time + s->avctx->time_base.num/2) / s->avctx->time_base.num;
5941
s->current_picture_ptr->pts= AV_NOPTS_VALUE;
4893
5942
if(s->avctx->debug&FF_DEBUG_PTS)
4894
printf("MPEG4 PTS: %f\n", s->current_picture.pts/(1000.0*1000.0));
5943
av_log(s->avctx, AV_LOG_DEBUG, "MPEG4 PTS: %"PRId64"\n", s->current_picture_ptr->pts);
4896
5945
check_marker(gb, "before vop_coded");
4898
5947
/* vop coded */
4899
5948
if (get_bits1(gb) != 1){
4900
printf("vop not coded\n");
4901
return FRAME_SKIPED;
5949
if(s->avctx->debug&FF_DEBUG_PICT_INFO)
5950
av_log(s->avctx, AV_LOG_ERROR, "vop not coded\n");
5951
return FRAME_SKIPPED;
4903
//printf("time %d %d %d || %Ld %Ld %Ld\n", s->time_increment_bits, s->time_increment_resolution, s->time_base,
4904
//s->time, s->last_non_b_time, s->last_non_b_time - s->pp_time);
5953
//printf("time %d %d %d || %"PRId64" %"PRId64" %"PRId64"\n", s->time_increment_bits, s->avctx->time_base.den, s->time_base,
5954
//s->time, s->last_non_b_time, s->last_non_b_time - s->pp_time);
4905
5955
if (s->shape != BIN_ONLY_SHAPE && ( s->pict_type == P_TYPE
4906
5956
|| (s->pict_type == S_TYPE && s->vol_sprite_usage==GMC_SPRITE))) {
4907
5957
/* rounding type for motion estimation */
4908
s->no_rounding = get_bits1(gb);
5958
s->no_rounding = get_bits1(gb);
4912
5962
//FIXME reduced res stuff
4914
5964
if (s->shape != RECT_SHAPE) {
4915
5965
if (s->vol_sprite_usage != 1 || s->pict_type != I_TYPE) {
4916
5966
int width, height, hor_spat_ref, ver_spat_ref;
4918
5968
width = get_bits(gb, 13);
4919
5969
skip_bits1(gb); /* marker */
4920
5970
height = get_bits(gb, 13);
4953
6001
ff_init_scantable(s->dsp.idct_permutation, &s->intra_h_scantable, ff_alternate_horizontal_scan);
4954
6002
ff_init_scantable(s->dsp.idct_permutation, &s->intra_v_scantable, ff_alternate_vertical_scan);
4957
6005
if(s->pict_type == S_TYPE && (s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE)){
4958
mpeg4_decode_sprite_trajectory(s);
4959
if(s->sprite_brightness_change) printf("sprite_brightness_change not supported\n");
4960
if(s->vol_sprite_usage==STATIC_SPRITE) printf("static sprite not supported\n");
6006
mpeg4_decode_sprite_trajectory(s, gb);
6007
if(s->sprite_brightness_change) av_log(s->avctx, AV_LOG_ERROR, "sprite_brightness_change not supported\n");
6008
if(s->vol_sprite_usage==STATIC_SPRITE) av_log(s->avctx, AV_LOG_ERROR, "static sprite not supported\n");
4963
6011
if (s->shape != BIN_ONLY_SHAPE) {
4964
s->qscale = get_bits(gb, s->quant_precision);
6012
s->chroma_qscale= s->qscale = get_bits(gb, s->quant_precision);
4965
6013
if(s->qscale==0){
4966
printf("Error, header damaged or not MPEG4 header (qscale=0)\n");
6014
av_log(s->avctx, AV_LOG_ERROR, "Error, header damaged or not MPEG4 header (qscale=0)\n");
4967
6015
return -1; // makes no sense to continue, as there is nothing left from the image then
4970
6018
if (s->pict_type != I_TYPE) {
4971
s->f_code = get_bits(gb, 3); /* fcode_for */
6019
s->f_code = get_bits(gb, 3); /* fcode_for */
4972
6020
if(s->f_code==0){
4973
printf("Error, header damaged or not MPEG4 header (f_code=0)\n");
6021
av_log(s->avctx, AV_LOG_ERROR, "Error, header damaged or not MPEG4 header (f_code=0)\n");
4974
6022
return -1; // makes no sense to continue, as the MV decoding will break very quickly
4979
6027
if (s->pict_type == B_TYPE) {
4980
6028
s->b_code = get_bits(gb, 3);
4984
6032
if(s->avctx->debug&FF_DEBUG_PICT_INFO){
4985
printf("qp:%d fc:%d,%d %s size:%d pro:%d alt:%d top:%d %spel part:%d resync:%d w:%d a:%d rnd:%d vot:%d%s\n",
4986
s->qscale, s->f_code, s->b_code,
4987
s->pict_type == I_TYPE ? "I" : (s->pict_type == P_TYPE ? "P" : (s->pict_type == B_TYPE ? "B" : "S")),
4988
gb->size_in_bits,s->progressive_sequence, s->alternate_scan, s->top_field_first,
6033
av_log(s->avctx, AV_LOG_DEBUG, "qp:%d fc:%d,%d %s size:%d pro:%d alt:%d top:%d %spel part:%d resync:%d w:%d a:%d rnd:%d vot:%d%s dc:%d\n",
6034
s->qscale, s->f_code, s->b_code,
6035
s->pict_type == I_TYPE ? "I" : (s->pict_type == P_TYPE ? "P" : (s->pict_type == B_TYPE ? "B" : "S")),
6036
gb->size_in_bits,s->progressive_sequence, s->alternate_scan, s->top_field_first,
4989
6037
s->quarter_sample ? "q" : "h", s->data_partitioning, s->resync_marker, s->num_sprite_warping_points,
4990
s->sprite_warping_accuracy, 1-s->no_rounding, s->vo_type, s->vol_control_parameters ? " VOLC" : " ");
6038
s->sprite_warping_accuracy, 1-s->no_rounding, s->vo_type, s->vol_control_parameters ? " VOLC" : " ", s->intra_dc_threshold);
4993
6041
if(!s->scalability){
5036
6084
/* search next start code */
5037
6085
align_get_bits(gb);
6087
if(s->codec_tag == ff_get_fourcc("WV1F") && show_bits(gb, 24) == 0x575630){
6089
if(get_bits(gb, 8) == 0xF0)
6090
return decode_vop_header(s, gb);
5038
6093
startcode = 0xff;
6095
if(get_bits_count(gb) >= gb->size_in_bits){
6096
if(gb->size_in_bits==8 && (s->divx_version || s->xvid_build)){
6097
av_log(s->avctx, AV_LOG_ERROR, "frame skip %d\n", gb->size_in_bits);
6098
return FRAME_SKIPPED; //divx bug
6100
return -1; //end of stream
6103
/* use the bits after the test */
5040
6104
v = get_bits(gb, 8);
5041
6105
startcode = ((startcode << 8) | v) & 0xffffffff;
5043
if(get_bits_count(gb) >= gb->size_in_bits){
5044
if(gb->size_in_bits==8 && s->divx_version){
5045
printf("frame skip %d\n", gb->size_in_bits);
5046
return FRAME_SKIPED; //divx bug
5048
return -1; //end of stream
5051
6107
if((startcode&0xFFFFFF00) != 0x100)
5052
6108
continue; //no startcode
5054
6110
if(s->avctx->debug&FF_DEBUG_STARTCODE){
5055
printf("startcode: %3X ", startcode);
5056
if (startcode<=0x11F) printf("Video Object Start");
5057
else if(startcode<=0x12F) printf("Video Object Layer Start");
5058
else if(startcode<=0x13F) printf("Reserved");
5059
else if(startcode<=0x15F) printf("FGS bp start");
5060
else if(startcode<=0x1AF) printf("Reserved");
5061
else if(startcode==0x1B0) printf("Visual Object Seq Start");
5062
else if(startcode==0x1B1) printf("Visual Object Seq End");
5063
else if(startcode==0x1B2) printf("User Data");
5064
else if(startcode==0x1B3) printf("Group of VOP start");
5065
else if(startcode==0x1B4) printf("Video Session Error");
5066
else if(startcode==0x1B5) printf("Visual Object Start");
5067
else if(startcode==0x1B6) printf("Video Object Plane start");
5068
else if(startcode==0x1B7) printf("slice start");
5069
else if(startcode==0x1B8) printf("extension start");
5070
else if(startcode==0x1B9) printf("fgs start");
5071
else if(startcode==0x1BA) printf("FBA Object start");
5072
else if(startcode==0x1BB) printf("FBA Object Plane start");
5073
else if(startcode==0x1BC) printf("Mesh Object start");
5074
else if(startcode==0x1BD) printf("Mesh Object Plane start");
5075
else if(startcode==0x1BE) printf("Still Textutre Object start");
5076
else if(startcode==0x1BF) printf("Textutre Spatial Layer start");
5077
else if(startcode==0x1C0) printf("Textutre SNR Layer start");
5078
else if(startcode==0x1C1) printf("Textutre Tile start");
5079
else if(startcode==0x1C2) printf("Textutre Shape Layer start");
5080
else if(startcode==0x1C3) printf("stuffing start");
5081
else if(startcode<=0x1C5) printf("reserved");
5082
else if(startcode<=0x1FF) printf("System start");
5083
printf(" at %d\n", get_bits_count(gb));
6111
av_log(s->avctx, AV_LOG_DEBUG, "startcode: %3X ", startcode);
6112
if (startcode<=0x11F) av_log(s->avctx, AV_LOG_DEBUG, "Video Object Start");
6113
else if(startcode<=0x12F) av_log(s->avctx, AV_LOG_DEBUG, "Video Object Layer Start");
6114
else if(startcode<=0x13F) av_log(s->avctx, AV_LOG_DEBUG, "Reserved");
6115
else if(startcode<=0x15F) av_log(s->avctx, AV_LOG_DEBUG, "FGS bp start");
6116
else if(startcode<=0x1AF) av_log(s->avctx, AV_LOG_DEBUG, "Reserved");
6117
else if(startcode==0x1B0) av_log(s->avctx, AV_LOG_DEBUG, "Visual Object Seq Start");
6118
else if(startcode==0x1B1) av_log(s->avctx, AV_LOG_DEBUG, "Visual Object Seq End");
6119
else if(startcode==0x1B2) av_log(s->avctx, AV_LOG_DEBUG, "User Data");
6120
else if(startcode==0x1B3) av_log(s->avctx, AV_LOG_DEBUG, "Group of VOP start");
6121
else if(startcode==0x1B4) av_log(s->avctx, AV_LOG_DEBUG, "Video Session Error");
6122
else if(startcode==0x1B5) av_log(s->avctx, AV_LOG_DEBUG, "Visual Object Start");
6123
else if(startcode==0x1B6) av_log(s->avctx, AV_LOG_DEBUG, "Video Object Plane start");
6124
else if(startcode==0x1B7) av_log(s->avctx, AV_LOG_DEBUG, "slice start");
6125
else if(startcode==0x1B8) av_log(s->avctx, AV_LOG_DEBUG, "extension start");
6126
else if(startcode==0x1B9) av_log(s->avctx, AV_LOG_DEBUG, "fgs start");
6127
else if(startcode==0x1BA) av_log(s->avctx, AV_LOG_DEBUG, "FBA Object start");
6128
else if(startcode==0x1BB) av_log(s->avctx, AV_LOG_DEBUG, "FBA Object Plane start");
6129
else if(startcode==0x1BC) av_log(s->avctx, AV_LOG_DEBUG, "Mesh Object start");
6130
else if(startcode==0x1BD) av_log(s->avctx, AV_LOG_DEBUG, "Mesh Object Plane start");
6131
else if(startcode==0x1BE) av_log(s->avctx, AV_LOG_DEBUG, "Still Texture Object start");
6132
else if(startcode==0x1BF) av_log(s->avctx, AV_LOG_DEBUG, "Texture Spatial Layer start");
6133
else if(startcode==0x1C0) av_log(s->avctx, AV_LOG_DEBUG, "Texture SNR Layer start");
6134
else if(startcode==0x1C1) av_log(s->avctx, AV_LOG_DEBUG, "Texture Tile start");
6135
else if(startcode==0x1C2) av_log(s->avctx, AV_LOG_DEBUG, "Texture Shape Layer start");
6136
else if(startcode==0x1C3) av_log(s->avctx, AV_LOG_DEBUG, "stuffing start");
6137
else if(startcode<=0x1C5) av_log(s->avctx, AV_LOG_DEBUG, "reserved");
6138
else if(startcode<=0x1FF) av_log(s->avctx, AV_LOG_DEBUG, "System start");
6139
av_log(s->avctx, AV_LOG_DEBUG, " at %d\n", get_bits_count(gb));
5088
if(decode_vol_header(s, gb) < 0)
6142
if(startcode >= 0x120 && startcode <= 0x12F){
6143
if(decode_vol_header(s, gb) < 0)
5091
case USER_DATA_STARTCODE:
6146
else if(startcode == USER_DATA_STARTCODE){
5092
6147
decode_user_data(s, gb);
6149
else if(startcode == GOP_STARTCODE){
5095
6150
mpeg4_decode_gop_header(s, gb);
6152
else if(startcode == VOP_STARTCODE){
5098
6153
return decode_vop_header(s, gb);
5103
6156
align_get_bits(gb);
5113
6166
/* picture header */
5114
6167
if (get_bits_long(&s->gb, 22) != 0x20) {
5115
fprintf(stderr, "Bad picture start code\n");
6168
av_log(s->avctx, AV_LOG_ERROR, "Bad picture start code\n");
5118
6171
s->picture_number = get_bits(&s->gb, 8); /* picture timestamp */
5120
6173
if (get_bits1(&s->gb) != 1) {
5121
fprintf(stderr, "Bad marker\n");
5122
return -1; /* marker */
6174
av_log(s->avctx, AV_LOG_ERROR, "Bad marker\n");
6175
return -1; /* marker */
5124
6177
if (get_bits1(&s->gb) != 0) {
5125
fprintf(stderr, "Bad H263 id\n");
5126
return -1; /* h263 id */
6178
av_log(s->avctx, AV_LOG_ERROR, "Bad H263 id\n");
6179
return -1; /* h263 id */
5128
skip_bits1(&s->gb); /* split screen off */
5129
skip_bits1(&s->gb); /* camera off */
5130
skip_bits1(&s->gb); /* freeze picture release off */
6181
skip_bits1(&s->gb); /* split screen off */
6182
skip_bits1(&s->gb); /* camera off */
6183
skip_bits1(&s->gb); /* freeze picture release off */
5132
6185
format = get_bits(&s->gb, 3);
5133
6186
if (format != 7) {
5134
fprintf(stderr, "Intel H263 free format not supported\n");
6187
av_log(s->avctx, AV_LOG_ERROR, "Intel H263 free format not supported\n");
5137
6190
s->h263_plus = 0;
5139
6192
s->pict_type = I_TYPE + get_bits1(&s->gb);
5141
s->unrestricted_mv = get_bits1(&s->gb);
6194
s->unrestricted_mv = get_bits1(&s->gb);
5142
6195
s->h263_long_vectors = s->unrestricted_mv;
5144
6197
if (get_bits1(&s->gb) != 0) {
5145
fprintf(stderr, "SAC not supported\n");
5146
return -1; /* SAC: off */
5148
if (get_bits1(&s->gb) != 0) {
5149
fprintf(stderr, "Advanced Prediction Mode not supported\n");
5150
return -1; /* advanced prediction mode: off */
5152
if (get_bits1(&s->gb) != 0) {
5153
fprintf(stderr, "PB frame mode no supported\n");
5154
return -1; /* PB frame mode */
6198
av_log(s->avctx, AV_LOG_ERROR, "SAC not supported\n");
6199
return -1; /* SAC: off */
6201
if (get_bits1(&s->gb) != 0) {
6203
av_log(s->avctx, AV_LOG_ERROR, "Advanced Prediction Mode not supported\n");
6204
// return -1; /* advanced prediction mode: off */
6206
if (get_bits1(&s->gb) != 0) {
6207
av_log(s->avctx, AV_LOG_ERROR, "PB frame mode no supported\n");
6208
return -1; /* PB frame mode */
5157
6211
/* skip unknown header garbage */
5158
6212
skip_bits(&s->gb, 41);
5160
s->qscale = get_bits(&s->gb, 5);
5161
skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
6214
s->chroma_qscale= s->qscale = get_bits(&s->gb, 5);
6215
skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
5164
6218
while (get_bits1(&s->gb) != 0) {