Mercurial > libavcodec.hg
comparison msmpeg4.c @ 21:20e680e7a490 libavcodec
get_bits() specialization, gives 4\speedup
author | arpi_esp |
---|---|
date | Sat, 04 Aug 2001 00:46:50 +0000 |
parents | 1d3ac9654178 |
children | 2f603eb2f23d |
comparison
equal
deleted
inserted
replaced
20:907b67420d84 | 21:20e680e7a490 |
---|---|
599 } | 599 } |
600 | 600 |
601 static int decode012(GetBitContext *gb) | 601 static int decode012(GetBitContext *gb) |
602 { | 602 { |
603 int n; | 603 int n; |
604 n = get_bits(gb, 1); | 604 n = get_bits1(gb); |
605 if (n == 0) | 605 if (n == 0) |
606 return 0; | 606 return 0; |
607 else | 607 else |
608 return get_bits(gb, 1) + 1; | 608 return get_bits1(gb) + 1; |
609 } | 609 } |
610 | 610 |
611 int msmpeg4_decode_picture_header(MpegEncContext * s) | 611 int msmpeg4_decode_picture_header(MpegEncContext * s) |
612 { | 612 { |
613 int code; | 613 int code; |
627 return -1; | 627 return -1; |
628 s->slice_height = s->mb_height / (code - 0x16); | 628 s->slice_height = s->mb_height / (code - 0x16); |
629 s->rl_chroma_table_index = decode012(&s->gb); | 629 s->rl_chroma_table_index = decode012(&s->gb); |
630 s->rl_table_index = decode012(&s->gb); | 630 s->rl_table_index = decode012(&s->gb); |
631 | 631 |
632 s->dc_table_index = get_bits(&s->gb, 1); | 632 s->dc_table_index = get_bits1(&s->gb); |
633 s->no_rounding = 1; | 633 s->no_rounding = 1; |
634 } else { | 634 } else { |
635 s->use_skip_mb_code = get_bits(&s->gb, 1); | 635 s->use_skip_mb_code = get_bits1(&s->gb); |
636 | 636 |
637 s->rl_table_index = decode012(&s->gb); | 637 s->rl_table_index = decode012(&s->gb); |
638 s->rl_chroma_table_index = s->rl_table_index; | 638 s->rl_chroma_table_index = s->rl_table_index; |
639 | 639 |
640 s->dc_table_index = get_bits(&s->gb, 1); | 640 s->dc_table_index = get_bits1(&s->gb); |
641 | 641 |
642 s->mv_table_index = get_bits(&s->gb, 1); | 642 s->mv_table_index = get_bits1(&s->gb); |
643 s->no_rounding ^= 1; | 643 s->no_rounding ^= 1; |
644 } | 644 } |
645 #ifdef DEBUG | 645 #ifdef DEBUG |
646 printf("*****frame %d:\n", frame_count++); | 646 printf("*****frame %d:\n", frame_count++); |
647 #endif | 647 #endif |
683 } | 683 } |
684 | 684 |
685 if (s->pict_type == P_TYPE) { | 685 if (s->pict_type == P_TYPE) { |
686 set_stat(ST_INTER_MB); | 686 set_stat(ST_INTER_MB); |
687 if (s->use_skip_mb_code) { | 687 if (s->use_skip_mb_code) { |
688 if (get_bits(&s->gb, 1)) { | 688 if (get_bits1(&s->gb)) { |
689 /* skip mb */ | 689 /* skip mb */ |
690 s->mb_intra = 0; | 690 s->mb_intra = 0; |
691 for(i=0;i<6;i++) | 691 for(i=0;i<6;i++) |
692 s->block_last_index[i] = -1; | 692 s->block_last_index[i] = -1; |
693 s->mv_dir = MV_DIR_FORWARD; | 693 s->mv_dir = MV_DIR_FORWARD; |
737 s->mv_type = MV_TYPE_16X16; | 737 s->mv_type = MV_TYPE_16X16; |
738 s->mv[0][0][0] = mx; | 738 s->mv[0][0][0] = mx; |
739 s->mv[0][0][1] = my; | 739 s->mv[0][0][1] = my; |
740 } else { | 740 } else { |
741 set_stat(ST_INTRA_MB); | 741 set_stat(ST_INTRA_MB); |
742 s->ac_pred = get_bits(&s->gb, 1); | 742 s->ac_pred = get_bits1(&s->gb); |
743 } | 743 } |
744 | 744 |
745 for (i = 0; i < 6; i++) { | 745 for (i = 0; i < 6; i++) { |
746 if (msmpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1) < 0) | 746 if (msmpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1) < 0) |
747 return -1; | 747 return -1; |
799 code = get_vlc(&s->gb, &rl->vlc); | 799 code = get_vlc(&s->gb, &rl->vlc); |
800 if (code < 0) | 800 if (code < 0) |
801 return -1; | 801 return -1; |
802 if (code == rl->n) { | 802 if (code == rl->n) { |
803 /* escape */ | 803 /* escape */ |
804 if (get_bits(&s->gb, 1) == 0) { | 804 if (get_bits1(&s->gb) == 0) { |
805 if (get_bits(&s->gb, 1) == 0) { | 805 if (get_bits1(&s->gb) == 0) { |
806 /* third escape */ | 806 /* third escape */ |
807 last = get_bits(&s->gb, 1); | 807 last = get_bits1(&s->gb); |
808 run = get_bits(&s->gb, 6); | 808 run = get_bits(&s->gb, 6); |
809 level = get_bits(&s->gb, 8); | 809 level = get_bits(&s->gb, 8); |
810 level = (level << 24) >> 24; /* sign extend */ | 810 level = (level << 24) >> 24; /* sign extend */ |
811 } else { | 811 } else { |
812 /* second escape */ | 812 /* second escape */ |
815 return -1; | 815 return -1; |
816 run = rl->table_run[code]; | 816 run = rl->table_run[code]; |
817 level = rl->table_level[code]; | 817 level = rl->table_level[code]; |
818 last = code >= rl->last; | 818 last = code >= rl->last; |
819 run += rl->max_run[last][level] + run_diff; | 819 run += rl->max_run[last][level] + run_diff; |
820 if (get_bits(&s->gb, 1)) | 820 if (get_bits1(&s->gb)) |
821 level = -level; | 821 level = -level; |
822 } | 822 } |
823 } else { | 823 } else { |
824 /* first escape */ | 824 /* first escape */ |
825 code = get_vlc(&s->gb, &rl->vlc); | 825 code = get_vlc(&s->gb, &rl->vlc); |
827 return -1; | 827 return -1; |
828 run = rl->table_run[code]; | 828 run = rl->table_run[code]; |
829 level = rl->table_level[code]; | 829 level = rl->table_level[code]; |
830 last = code >= rl->last; | 830 last = code >= rl->last; |
831 level += rl->max_level[last][run]; | 831 level += rl->max_level[last][run]; |
832 if (get_bits(&s->gb, 1)) | 832 if (get_bits1(&s->gb)) |
833 level = -level; | 833 level = -level; |
834 } | 834 } |
835 } else { | 835 } else { |
836 run = rl->table_run[code]; | 836 run = rl->table_run[code]; |
837 level = rl->table_level[code]; | 837 level = rl->table_level[code]; |
838 last = code >= rl->last; | 838 last = code >= rl->last; |
839 if (get_bits(&s->gb, 1)) | 839 if (get_bits1(&s->gb)) |
840 level = -level; | 840 level = -level; |
841 } | 841 } |
842 i += run; | 842 i += run; |
843 if (i >= 64) | 843 if (i >= 64) |
844 return -1; | 844 return -1; |
873 if (level < 0) | 873 if (level < 0) |
874 return -1; | 874 return -1; |
875 | 875 |
876 if (level == DC_MAX) { | 876 if (level == DC_MAX) { |
877 level = get_bits(&s->gb, 8); | 877 level = get_bits(&s->gb, 8); |
878 if (get_bits(&s->gb, 1)) | 878 if (get_bits1(&s->gb)) |
879 level = -level; | 879 level = -level; |
880 } else if (level != 0) { | 880 } else if (level != 0) { |
881 if (get_bits(&s->gb, 1)) | 881 if (get_bits1(&s->gb)) |
882 level = -level; | 882 level = -level; |
883 } | 883 } |
884 | 884 |
885 pred = msmpeg4_pred_dc(s, n, &dc_val, dir_ptr); | 885 pred = msmpeg4_pred_dc(s, n, &dc_val, dir_ptr); |
886 level += pred; | 886 level += pred; |