Mercurial > libavcodec.hg
comparison mpeg12.c @ 4621:5464e5021a67 libavcodec
dummy support for mpeg2 non linear quant
author | bcoudurier |
---|---|
date | Sun, 04 Mar 2007 02:26:20 +0000 |
parents | ff5472c81ab8 |
children | e541c0dd35dd |
comparison
equal
deleted
inserted
replaced
4620:f23c20cf7579 | 4621:5464e5021a67 |
---|---|
417 memset(s->last_mv, 0, sizeof(s->last_mv)); | 417 memset(s->last_mv, 0, sizeof(s->last_mv)); |
418 } | 418 } |
419 | 419 |
420 #ifdef CONFIG_ENCODERS | 420 #ifdef CONFIG_ENCODERS |
421 | 421 |
422 static av_always_inline void put_qscale(MpegEncContext *s) | |
423 { | |
424 if(s->q_scale_type){ | |
425 assert(s->qscale>=1 && s->qscale <=12); | |
426 put_bits(&s->pb, 5, inv_non_linear_qscale[s->qscale]); | |
427 }else{ | |
428 put_bits(&s->pb, 5, s->qscale); | |
429 } | |
430 } | |
431 | |
422 void ff_mpeg1_encode_slice_header(MpegEncContext *s){ | 432 void ff_mpeg1_encode_slice_header(MpegEncContext *s){ |
423 put_header(s, SLICE_MIN_START_CODE + s->mb_y); | 433 put_header(s, SLICE_MIN_START_CODE + s->mb_y); |
424 put_bits(&s->pb, 5, s->qscale); /* quantizer scale */ | 434 put_qscale(s); |
425 put_bits(&s->pb, 1, 0); /* slice extra information */ | 435 put_bits(&s->pb, 1, 0); /* slice extra information */ |
426 } | 436 } |
427 | 437 |
428 void mpeg1_encode_picture_header(MpegEncContext *s, int picture_number) | 438 void mpeg1_encode_picture_header(MpegEncContext *s, int picture_number) |
429 { | 439 { |
565 } | 575 } |
566 | 576 |
567 if (s->pict_type == I_TYPE) { | 577 if (s->pict_type == I_TYPE) { |
568 if(s->dquant && cbp){ | 578 if(s->dquant && cbp){ |
569 put_mb_modes(s, 2, 1, 0, 0); /* macroblock_type : macroblock_quant = 1 */ | 579 put_mb_modes(s, 2, 1, 0, 0); /* macroblock_type : macroblock_quant = 1 */ |
570 put_bits(&s->pb, 5, s->qscale); | 580 put_qscale(s); |
571 }else{ | 581 }else{ |
572 put_mb_modes(s, 1, 1, 0, 0); /* macroblock_type : macroblock_quant = 0 */ | 582 put_mb_modes(s, 1, 1, 0, 0); /* macroblock_type : macroblock_quant = 0 */ |
573 s->qscale -= s->dquant; | 583 s->qscale -= s->dquant; |
574 } | 584 } |
575 s->misc_bits+= get_bits_diff(s); | 585 s->misc_bits+= get_bits_diff(s); |
576 s->i_count++; | 586 s->i_count++; |
577 } else if (s->mb_intra) { | 587 } else if (s->mb_intra) { |
578 if(s->dquant && cbp){ | 588 if(s->dquant && cbp){ |
579 put_mb_modes(s, 6, 0x01, 0, 0); | 589 put_mb_modes(s, 6, 0x01, 0, 0); |
580 put_bits(&s->pb, 5, s->qscale); | 590 put_qscale(s); |
581 }else{ | 591 }else{ |
582 put_mb_modes(s, 5, 0x03, 0, 0); | 592 put_mb_modes(s, 5, 0x03, 0, 0); |
583 s->qscale -= s->dquant; | 593 s->qscale -= s->dquant; |
584 } | 594 } |
585 s->misc_bits+= get_bits_diff(s); | 595 s->misc_bits+= get_bits_diff(s); |
589 if(s->mv_type == MV_TYPE_16X16){ | 599 if(s->mv_type == MV_TYPE_16X16){ |
590 if (cbp != 0) { | 600 if (cbp != 0) { |
591 if ((motion_x|motion_y) == 0) { | 601 if ((motion_x|motion_y) == 0) { |
592 if(s->dquant){ | 602 if(s->dquant){ |
593 put_mb_modes(s, 5, 1, 0, 0); /* macroblock_pattern & quant */ | 603 put_mb_modes(s, 5, 1, 0, 0); /* macroblock_pattern & quant */ |
594 put_bits(&s->pb, 5, s->qscale); | 604 put_qscale(s); |
595 }else{ | 605 }else{ |
596 put_mb_modes(s, 2, 1, 0, 0); /* macroblock_pattern only */ | 606 put_mb_modes(s, 2, 1, 0, 0); /* macroblock_pattern only */ |
597 } | 607 } |
598 s->misc_bits+= get_bits_diff(s); | 608 s->misc_bits+= get_bits_diff(s); |
599 } else { | 609 } else { |
600 if(s->dquant){ | 610 if(s->dquant){ |
601 put_mb_modes(s, 5, 2, 1, 0); /* motion + cbp */ | 611 put_mb_modes(s, 5, 2, 1, 0); /* motion + cbp */ |
602 put_bits(&s->pb, 5, s->qscale); | 612 put_qscale(s); |
603 }else{ | 613 }else{ |
604 put_mb_modes(s, 1, 1, 1, 0); /* motion + cbp */ | 614 put_mb_modes(s, 1, 1, 1, 0); /* motion + cbp */ |
605 } | 615 } |
606 s->misc_bits+= get_bits_diff(s); | 616 s->misc_bits+= get_bits_diff(s); |
607 mpeg1_encode_motion(s, motion_x - s->last_mv[0][0][0], s->f_code); // RAL: f_code parameter added | 617 mpeg1_encode_motion(s, motion_x - s->last_mv[0][0][0], s->f_code); // RAL: f_code parameter added |
624 assert(!s->frame_pred_frame_dct && s->mv_type == MV_TYPE_FIELD); | 634 assert(!s->frame_pred_frame_dct && s->mv_type == MV_TYPE_FIELD); |
625 | 635 |
626 if (cbp) { | 636 if (cbp) { |
627 if(s->dquant){ | 637 if(s->dquant){ |
628 put_mb_modes(s, 5, 2, 1, 1); /* motion + cbp */ | 638 put_mb_modes(s, 5, 2, 1, 1); /* motion + cbp */ |
629 put_bits(&s->pb, 5, s->qscale); | 639 put_qscale(s); |
630 }else{ | 640 }else{ |
631 put_mb_modes(s, 1, 1, 1, 1); /* motion + cbp */ | 641 put_mb_modes(s, 1, 1, 1, 1); /* motion + cbp */ |
632 } | 642 } |
633 } else { | 643 } else { |
634 put_bits(&s->pb, 3, 1); /* motion only */ | 644 put_bits(&s->pb, 3, 1); /* motion only */ |
662 if (s->dquant) { | 672 if (s->dquant) { |
663 if(s->mv_dir == MV_DIR_FORWARD) | 673 if(s->mv_dir == MV_DIR_FORWARD) |
664 put_mb_modes(s, 6, 3, 1, 0); | 674 put_mb_modes(s, 6, 3, 1, 0); |
665 else | 675 else |
666 put_mb_modes(s, mb_type_len[s->mv_dir]+3, 2, 1, 0); | 676 put_mb_modes(s, mb_type_len[s->mv_dir]+3, 2, 1, 0); |
667 put_bits(&s->pb, 5, s->qscale); | 677 put_qscale(s); |
668 } else { | 678 } else { |
669 put_mb_modes(s, mb_type_len[s->mv_dir], 3, 1, 0); | 679 put_mb_modes(s, mb_type_len[s->mv_dir], 3, 1, 0); |
670 } | 680 } |
671 }else{ // No coded bloc pattern | 681 }else{ // No coded bloc pattern |
672 put_bits(&s->pb, mb_type_len[s->mv_dir], 2); | 682 put_bits(&s->pb, mb_type_len[s->mv_dir], 2); |
696 if (s->dquant) { | 706 if (s->dquant) { |
697 if(s->mv_dir == MV_DIR_FORWARD) | 707 if(s->mv_dir == MV_DIR_FORWARD) |
698 put_mb_modes(s, 6, 3, 1, 1); | 708 put_mb_modes(s, 6, 3, 1, 1); |
699 else | 709 else |
700 put_mb_modes(s, mb_type_len[s->mv_dir]+3, 2, 1, 1); | 710 put_mb_modes(s, mb_type_len[s->mv_dir]+3, 2, 1, 1); |
701 put_bits(&s->pb, 5, s->qscale); | 711 put_qscale(s); |
702 } else { | 712 } else { |
703 put_mb_modes(s, mb_type_len[s->mv_dir], 3, 1, 1); | 713 put_mb_modes(s, mb_type_len[s->mv_dir], 3, 1, 1); |
704 } | 714 } |
705 }else{ // No coded bloc pattern | 715 }else{ // No coded bloc pattern |
706 put_bits(&s->pb, mb_type_len[s->mv_dir], 2); | 716 put_bits(&s->pb, mb_type_len[s->mv_dir], 2); |