Mercurial > libavcodec.hg
comparison msmpeg4.c @ 1064:b32afefe7d33 libavcodec
* UINTX -> uintx_t INTX -> intx_t
author | kabi |
---|---|
date | Tue, 11 Feb 2003 16:35:48 +0000 |
parents | fdeac9642346 |
children | 6da5ae9ee199 |
comparison
equal
deleted
inserted
replaced
1063:fdeac9642346 | 1064:b32afefe7d33 |
---|---|
48 #define II_BITRATE 128*1024 | 48 #define II_BITRATE 128*1024 |
49 #define MBAC_BITRATE 50*1024 | 49 #define MBAC_BITRATE 50*1024 |
50 | 50 |
51 #define DEFAULT_INTER_INDEX 3 | 51 #define DEFAULT_INTER_INDEX 3 |
52 | 52 |
53 static UINT32 v2_dc_lum_table[512][2]; | 53 static uint32_t v2_dc_lum_table[512][2]; |
54 static UINT32 v2_dc_chroma_table[512][2]; | 54 static uint32_t v2_dc_chroma_table[512][2]; |
55 | 55 |
56 static inline void msmpeg4_encode_block(MpegEncContext * s, DCTELEM * block, int n); | 56 static inline void msmpeg4_encode_block(MpegEncContext * s, DCTELEM * block, int n); |
57 static inline int msmpeg4_decode_block(MpegEncContext * s, DCTELEM * block, | 57 static inline int msmpeg4_decode_block(MpegEncContext * s, DCTELEM * block, |
58 int n, int coded, const uint8_t *scantable); | 58 int n, int coded, const uint8_t *scantable); |
59 static int msmpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr); | 59 static int msmpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr); |
65 static int get_size_of_code(MpegEncContext * s, RLTable *rl, int last, int run, int level, int intra); | 65 static int get_size_of_code(MpegEncContext * s, RLTable *rl, int last, int run, int level, int intra); |
66 static int msmpeg4v12_decode_mb(MpegEncContext *s, DCTELEM block[6][64]); | 66 static int msmpeg4v12_decode_mb(MpegEncContext *s, DCTELEM block[6][64]); |
67 static int msmpeg4v34_decode_mb(MpegEncContext *s, DCTELEM block[6][64]); | 67 static int msmpeg4v34_decode_mb(MpegEncContext *s, DCTELEM block[6][64]); |
68 static int wmv2_decode_mb(MpegEncContext *s, DCTELEM block[6][64]); | 68 static int wmv2_decode_mb(MpegEncContext *s, DCTELEM block[6][64]); |
69 | 69 |
70 extern UINT32 inverse[256]; | 70 extern uint32_t inverse[256]; |
71 | 71 |
72 | 72 |
73 #ifdef DEBUG | 73 #ifdef DEBUG |
74 int intra_count = 0; | 74 int intra_count = 0; |
75 int frame_count = 0; | 75 int frame_count = 0; |
76 #endif | 76 #endif |
77 | 77 |
78 #include "msmpeg4data.h" | 78 #include "msmpeg4data.h" |
79 | 79 |
80 static UINT8 rl_length[NB_RL_TABLES][MAX_LEVEL+1][MAX_RUN+1][2]; | 80 static uint8_t rl_length[NB_RL_TABLES][MAX_LEVEL+1][MAX_RUN+1][2]; |
81 | 81 |
82 #ifdef STATS | 82 #ifdef STATS |
83 | 83 |
84 const char *st_names[ST_NB] = { | 84 const char *st_names[ST_NB] = { |
85 "unknown", | 85 "unknown", |
188 /* build the table which associate a (x,y) motion vector to a vlc */ | 188 /* build the table which associate a (x,y) motion vector to a vlc */ |
189 static void init_mv_table(MVTable *tab) | 189 static void init_mv_table(MVTable *tab) |
190 { | 190 { |
191 int i, x, y; | 191 int i, x, y; |
192 | 192 |
193 tab->table_mv_index = av_malloc(sizeof(UINT16) * 4096); | 193 tab->table_mv_index = av_malloc(sizeof(uint16_t) * 4096); |
194 /* mark all entries as not used */ | 194 /* mark all entries as not used */ |
195 for(i=0;i<4096;i++) | 195 for(i=0;i<4096;i++) |
196 tab->table_mv_index[i] = tab->n; | 196 tab->table_mv_index[i] = tab->n; |
197 | 197 |
198 for(i=0;i<tab->n;i++) { | 198 for(i=0;i<tab->n;i++) { |
432 put_bits(&s->pb, 1, s->flipflop_rounding); | 432 put_bits(&s->pb, 1, s->flipflop_rounding); |
433 } | 433 } |
434 } | 434 } |
435 | 435 |
436 /* predict coded block */ | 436 /* predict coded block */ |
437 static inline int coded_block_pred(MpegEncContext * s, int n, UINT8 **coded_block_ptr) | 437 static inline int coded_block_pred(MpegEncContext * s, int n, uint8_t **coded_block_ptr) |
438 { | 438 { |
439 int xy, wrap, pred, a, b, c; | 439 int xy, wrap, pred, a, b, c; |
440 | 440 |
441 xy = s->block_index[n]; | 441 xy = s->block_index[n]; |
442 wrap = s->block_wrap[0]; | 442 wrap = s->block_wrap[0]; |
516 DCTELEM block[6][64], | 516 DCTELEM block[6][64], |
517 int motion_x, int motion_y) | 517 int motion_x, int motion_y) |
518 { | 518 { |
519 int cbp, coded_cbp, i; | 519 int cbp, coded_cbp, i; |
520 int pred_x, pred_y; | 520 int pred_x, pred_y; |
521 UINT8 *coded_block; | 521 uint8_t *coded_block; |
522 | 522 |
523 handle_slices(s); | 523 handle_slices(s); |
524 | 524 |
525 if (!s->mb_intra) { | 525 if (!s->mb_intra) { |
526 /* compute cbp */ | 526 /* compute cbp */ |
638 s->c_dc_scale = (s->qscale + 13)>>1; | 638 s->c_dc_scale = (s->qscale + 13)>>1; |
639 } | 639 } |
640 } | 640 } |
641 | 641 |
642 static inline int msmpeg4v1_pred_dc(MpegEncContext * s, int n, | 642 static inline int msmpeg4v1_pred_dc(MpegEncContext * s, int n, |
643 INT32 **dc_val_ptr) | 643 int32_t **dc_val_ptr) |
644 { | 644 { |
645 int i; | 645 int i; |
646 | 646 |
647 if (n < 4) { | 647 if (n < 4) { |
648 i= 0; | 648 i= 0; |
667 return (sum + (scale>>1))/scale; | 667 return (sum + (scale>>1))/scale; |
668 } | 668 } |
669 | 669 |
670 /* dir = 0: left, dir = 1: top prediction */ | 670 /* dir = 0: left, dir = 1: top prediction */ |
671 static inline int msmpeg4_pred_dc(MpegEncContext * s, int n, | 671 static inline int msmpeg4_pred_dc(MpegEncContext * s, int n, |
672 UINT16 **dc_val_ptr, int *dir_ptr) | 672 uint16_t **dc_val_ptr, int *dir_ptr) |
673 { | 673 { |
674 int a, b, c, wrap, pred, scale; | 674 int a, b, c, wrap, pred, scale; |
675 INT16 *dc_val; | 675 int16_t *dc_val; |
676 | 676 |
677 /* find prediction */ | 677 /* find prediction */ |
678 if (n < 4) { | 678 if (n < 4) { |
679 scale = s->y_dc_scale; | 679 scale = s->y_dc_scale; |
680 } else { | 680 } else { |
821 { | 821 { |
822 int sign, code; | 822 int sign, code; |
823 int pred; | 823 int pred; |
824 | 824 |
825 if(s->msmpeg4_version==1){ | 825 if(s->msmpeg4_version==1){ |
826 INT32 *dc_val; | 826 int32_t *dc_val; |
827 pred = msmpeg4v1_pred_dc(s, n, &dc_val); | 827 pred = msmpeg4v1_pred_dc(s, n, &dc_val); |
828 | 828 |
829 /* update predictor */ | 829 /* update predictor */ |
830 *dc_val= level; | 830 *dc_val= level; |
831 }else{ | 831 }else{ |
832 UINT16 *dc_val; | 832 uint16_t *dc_val; |
833 pred = msmpeg4_pred_dc(s, n, &dc_val, dir_ptr); | 833 pred = msmpeg4_pred_dc(s, n, &dc_val, dir_ptr); |
834 | 834 |
835 /* update predictor */ | 835 /* update predictor */ |
836 if (n < 4) { | 836 if (n < 4) { |
837 *dc_val = level * s->y_dc_scale; | 837 *dc_val = level * s->y_dc_scale; |
893 { | 893 { |
894 int level, run, last, i, j, last_index; | 894 int level, run, last, i, j, last_index; |
895 int last_non_zero, sign, slevel; | 895 int last_non_zero, sign, slevel; |
896 int code, run_diff, dc_pred_dir; | 896 int code, run_diff, dc_pred_dir; |
897 const RLTable *rl; | 897 const RLTable *rl; |
898 const UINT8 *scantable; | 898 const uint8_t *scantable; |
899 | 899 |
900 if (s->mb_intra) { | 900 if (s->mb_intra) { |
901 set_stat(ST_DC); | 901 set_stat(ST_DC); |
902 msmpeg4_encode_dc(s, block[0], n, &dc_pred_dir); | 902 msmpeg4_encode_dc(s, block[0], n, &dc_pred_dir); |
903 i = 1; | 903 i = 1; |
1542 } | 1542 } |
1543 | 1543 |
1544 static int msmpeg4v34_decode_mb(MpegEncContext *s, DCTELEM block[6][64]) | 1544 static int msmpeg4v34_decode_mb(MpegEncContext *s, DCTELEM block[6][64]) |
1545 { | 1545 { |
1546 int cbp, code, i; | 1546 int cbp, code, i; |
1547 UINT8 *coded_val; | 1547 uint8_t *coded_val; |
1548 | 1548 |
1549 #ifdef PRINT_MB | 1549 #ifdef PRINT_MB |
1550 if(s->mb_x==0){ | 1550 if(s->mb_x==0){ |
1551 printf("\n"); | 1551 printf("\n"); |
1552 if(s->mb_y==0) printf("\n"); | 1552 if(s->mb_y==0) printf("\n"); |
1937 level = -level; | 1937 level = -level; |
1938 } | 1938 } |
1939 } | 1939 } |
1940 | 1940 |
1941 if(s->msmpeg4_version==1){ | 1941 if(s->msmpeg4_version==1){ |
1942 INT32 *dc_val; | 1942 int32_t *dc_val; |
1943 pred = msmpeg4v1_pred_dc(s, n, &dc_val); | 1943 pred = msmpeg4v1_pred_dc(s, n, &dc_val); |
1944 level += pred; | 1944 level += pred; |
1945 | 1945 |
1946 /* update predictor */ | 1946 /* update predictor */ |
1947 *dc_val= level; | 1947 *dc_val= level; |
1948 }else{ | 1948 }else{ |
1949 UINT16 *dc_val; | 1949 uint16_t *dc_val; |
1950 pred = msmpeg4_pred_dc(s, n, &dc_val, dir_ptr); | 1950 pred = msmpeg4_pred_dc(s, n, &dc_val, dir_ptr); |
1951 level += pred; | 1951 level += pred; |
1952 | 1952 |
1953 /* update predictor */ | 1953 /* update predictor */ |
1954 if (n < 4) { | 1954 if (n < 4) { |