| 845 | #define DC_MAX 119 |
| 846 | |
| 847 | static void msmpeg4_encode_dc(MpegEncContext * s, int level, int n, int *dir_ptr) |
| 848 | { |
| 849 | int sign, code; |
| 850 | int pred, extquant; |
| 851 | int extrabits = 0; |
| 852 | |
| 853 | if(s->msmpeg4_version==1){ |
| 854 | int32_t *dc_val; |
| 855 | pred = msmpeg4v1_pred_dc(s, n, &dc_val); |
| 856 | |
| 857 | /* update predictor */ |
| 858 | *dc_val= level; |
| 859 | }else{ |
| 860 | int16_t *dc_val; |
| 861 | pred = msmpeg4_pred_dc(s, n, &dc_val, dir_ptr); |
| 862 | |
| 863 | /* update predictor */ |
| 864 | if (n < 4) { |
| 865 | *dc_val = level * s->y_dc_scale; |
| 866 | } else { |
| 867 | *dc_val = level * s->c_dc_scale; |
| 868 | } |
| 869 | } |
| 870 | |
| 871 | /* do the prediction */ |
| 872 | level -= pred; |
| 873 | |
| 874 | if(s->msmpeg4_version<=2){ |
| 875 | if (n < 4) { |
| 876 | put_bits(&s->pb, |
| 877 | v2_dc_lum_table[level+256][1], |
| 878 | v2_dc_lum_table[level+256][0]); |
| 879 | }else{ |
| 880 | put_bits(&s->pb, |
| 881 | v2_dc_chroma_table[level+256][1], |
| 882 | v2_dc_chroma_table[level+256][0]); |
| 883 | } |
| 884 | }else{ |
| 885 | sign = 0; |
| 886 | if (level < 0) { |
| 887 | level = -level; |
| 888 | sign = 1; |
| 889 | } |
| 890 | code = level; |
| 891 | if (code > DC_MAX) |
| 892 | code = DC_MAX; |
| 893 | else if( s->msmpeg4_version>=6 ) { |
| 894 | if( s->qscale == 1 ) { |
| 895 | extquant = (level + 3) & 0x3; |
| 896 | code = ((level+3)>>2); |
| 897 | } else if( s->qscale == 2 ) { |
| 898 | extquant = (level + 1) & 0x1; |
| 899 | code = ((level+1)>>1); |
| 900 | } |
| 901 | } |
| 902 | |
| 903 | if (s->dc_table_index == 0) { |
| 904 | if (n < 4) { |
no test coverage detected