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);