Mercurial > libavcodec.hg
diff mpegvideo.h @ 706:e65798d228ea libavcodec
idct permutation cleanup, idct can be selected per context now
fixing some threadunsafe code
author | michaelni |
---|---|
date | Sun, 29 Sep 2002 22:44:22 +0000 |
parents | 3525da287ee2 |
children | c0a914cc90c0 |
line wrap: on
line diff
--- a/mpegvideo.h Sun Sep 29 15:14:28 2002 +0000 +++ b/mpegvideo.h Sun Sep 29 22:44:22 2002 +0000 @@ -99,6 +99,11 @@ int picture_in_gop_number; } ReorderBuffer; +typedef struct ScanTable{ + UINT8 permutated[64]; + UINT8 raster_end[64]; +} ScanTable; + typedef struct MpegEncContext { struct AVCodecContext *avctx; /* the following parameters must be initialized before encoding */ @@ -286,6 +291,12 @@ UINT16 __align8 q_intra_matrix16_bias[32][64]; UINT16 __align8 q_inter_matrix16_bias[32][64]; int block_last_index[6]; /* last non zero coefficient in block */ + /* scantables */ + ScanTable intra_scantable; + ScanTable intra_h_scantable; + ScanTable intra_v_scantable; + ScanTable inter_scantable; // if inter == intra then intra should be used to reduce tha cache usage + UINT8 idct_permutation[64]; void *opaque; /* private data for the user */ @@ -421,10 +432,6 @@ int per_mb_rl_table; int esc3_level_length; int esc3_run_length; - UINT8 *inter_scantable; - UINT8 *intra_scantable; - UINT8 *intra_v_scantable; - UINT8 *intra_h_scantable; /* [mb_intra][isChroma][level][run][last] */ int (*ac_stats)[2][MAX_LEVEL+1][MAX_RUN+1][2]; int inter_intra_pred; @@ -477,7 +484,9 @@ void (*dct_unquantize)(struct MpegEncContext *s, // unquantizer to use (mpeg4 can use both) DCTELEM *block, int n, int qscale); int (*dct_quantize)(struct MpegEncContext *s, DCTELEM *block, int n, int qscale, int *overflow); - void (*fdct)(DCTELEM *block); + void (*fdct)(DCTELEM *block/* align 16*/); + void (*idct_put)(UINT8 *dest/*align 8*/, int line_size, DCTELEM *block/*align 16*/); + void (*idct_add)(UINT8 *dest/*align 8*/, int line_size, DCTELEM *block/*align 16*/); } MpegEncContext; int MPV_common_init(MpegEncContext *s); @@ -498,6 +507,7 @@ void ff_conceal_past_errors(MpegEncContext *s, int conceal_all); void ff_copy_bits(PutBitContext *pb, UINT8 *src, int length); void ff_clean_intra_table_entries(MpegEncContext *s); +void ff_init_scantable(MpegEncContext *s, ScanTable *st, const UINT8 *src_scantable); extern int ff_bit_exact; @@ -511,8 +521,8 @@ void ff_fix_long_b_mvs(MpegEncContext * s, int16_t (*mv_table)[2], int f_code, int type); /* mpeg12.c */ -extern INT16 ff_mpeg1_default_intra_matrix[64]; -extern INT16 ff_mpeg1_default_non_intra_matrix[64]; +extern const INT16 ff_mpeg1_default_intra_matrix[64]; +extern const INT16 ff_mpeg1_default_non_intra_matrix[64]; extern UINT8 ff_mpeg1_dc_scale_table[128]; void mpeg1_encode_picture_header(MpegEncContext *s, int picture_number); @@ -551,8 +561,8 @@ extern UINT8 ff_mpeg4_y_dc_scale_table[32]; extern UINT8 ff_mpeg4_c_dc_scale_table[32]; -extern INT16 ff_mpeg4_default_intra_matrix[64]; -extern INT16 ff_mpeg4_default_non_intra_matrix[64]; +extern const INT16 ff_mpeg4_default_intra_matrix[64]; +extern const INT16 ff_mpeg4_default_non_intra_matrix[64]; void h263_encode_mb(MpegEncContext *s, DCTELEM block[6][64],