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