From: Stéphane Borel Date: Fri, 28 Jan 2000 00:12:32 +0000 (+0000) Subject: . D�placement de deux structures de lookup dans le parseur X-Git-Tag: 0.1.99e~150 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;ds=sidebyside;h=eeddf916f0f8b15e99d7bb0d4f2a6f3fabc9c89a;p=vlc . D�placement de deux structures de lookup dans le parseur --- diff --git a/include/video_parser.h b/include/video_parser.h index a43d7bd76b..2187bcc38c 100644 --- a/include/video_parser.h +++ b/include/video_parser.h @@ -106,12 +106,16 @@ typedef struct vpar_thread_s #endif lookup_t pl_mb_addr_inc[2048]; /* for macroblock address increment */ - /* tables for macroblock types 0=P 1=B */ + /* tables for macroblock types 0=P 1=B */ lookup_t ppl_mb_type[2][64]; /* table for coded_block_pattern */ lookup_t * pl_coded_pattern; /* variable length codes for the structure dct_dc_size for intra blocks */ lookup_t * pppl_dct_dc_size[2][2]; + /* Structure to store the tables B14 & B15 (ISO/CEI 13818-2 B.4) */ + dct_lookup_t ppl_dct_coef[2][16384]; + + #ifdef STATS /* Statistics */ diff --git a/src/video_parser/video_parser.c b/src/video_parser/video_parser.c index e26a4cc266..cf3ee9d0b0 100644 --- a/src/video_parser/video_parser.c +++ b/src/video_parser/video_parser.c @@ -239,7 +239,6 @@ static int InitThread( vpar_thread_t *p_vpar ) vpar_InitDCTTables( p_vpar ); vpar_InitPMBType( p_vpar ); vpar_InitBMBType( p_vpar ); - vpar_InitCodedPattern( p_vpar ); vpar_InitDCTTables( p_vpar ); diff --git a/src/video_parser/vpar_blocks.c b/src/video_parser/vpar_blocks.c index 1e9aa21e15..26510a38db 100644 --- a/src/video_parser/vpar_blocks.c +++ b/src/video_parser/vpar_blocks.c @@ -54,7 +54,7 @@ */ /* Table for coded_block_pattern resolution */ -static lookup_t pl_coded_pattern_init_table[512] = +static lookup_t pl_coded_pattern[512] = { {MB_ERROR, 0}, {0, 9}, {39, 9}, {27, 9}, {59, 9}, {55, 9}, {47, 9}, {31, 9}, {58, 8}, {58, 8}, {54, 8}, {54, 8}, {46, 8}, {46, 8}, {30, 8}, {30, 8}, {57, 8}, {57, 8}, {53, 8}, {53, 8}, {45, 8}, {45, 8}, {29, 8}, {29, 8}, @@ -158,12 +158,6 @@ static lookup_t pl_dct_dc_chrom_init_table_2[32] = {8, 8}, {8, 8}, {8, 8}, {8, 8}, {9, 9}, {9, 9}, {10,10}, {11,10} }; - /* - * Structure to store the tables B14 & B15 - * Is constructed from the tables below - */ - dct_lookup_t ppl_dct_coef[2][16384]; - /* Tables for ac DCT coefficients. There are cut in many parts to save space */ /* Table B-14, DCT coefficients table zero, @@ -505,14 +499,6 @@ void vpar_InitBMBType( vpar_thread_t * p_vpar ) p_vpar->ppl_mb_type[1][0].i_length = 0; } -/***************************************************************************** - * vpar_InitCodedPattern : Initialize the lookup table for decoding - * coded block pattern - *****************************************************************************/ -void vpar_InitCodedPattern( vpar_thread_t * p_vpar ) -{ - p_vpar->pl_coded_pattern = (lookup_t*) pl_coded_pattern_init_table; -} /***************************************************************************** * vpar_InitDCTTables : Initialize tables giving the length of the dct @@ -544,26 +530,26 @@ void vpar_InitDCTTables( vpar_thread_t * p_vpar ) p_vpar->pppl_dct_dc_size[1][0] = pl_dct_dc_chrom_init_table_1; p_vpar->pppl_dct_dc_size[1][1] = pl_dct_dc_chrom_init_table_2; - memset( ppl_dct_coef[0], MB_ERROR, 16 ); - memset( ppl_dct_coef[1], MB_ERROR, 16 ); + memset( p_vpar->ppl_dct_coef[0], MB_ERROR, 16 ); + memset( p_vpar->ppl_dct_coef[1], MB_ERROR, 16 ); /* For table B14 & B15, we have a pointer to tables */ /* We fill the table thanks to the fonction defined above */ - FillDCTTable( ppl_dct_coef[0], pl_DCT_tab0, 256, 60, 4 ); - FillDCTTable( ppl_dct_coef[0], pl_DCT_tab1, 64, 8, 8 ); - FillDCTTable( ppl_dct_coef[0], pl_DCT_tab2, 16, 16, 16 ); - FillDCTTable( ppl_dct_coef[0], pl_DCT_tab3, 8, 16, 16 ); - FillDCTTable( ppl_dct_coef[0], pl_DCT_tab4, 4, 16, 16 ); - FillDCTTable( ppl_dct_coef[0], pl_DCT_tab5, 2, 16, 16 ); - FillDCTTable( ppl_dct_coef[0], pl_DCT_tab6, 1, 16, 16 ); - - FillDCTTable( ppl_dct_coef[1], pl_DCT_tab0a, 256, 60, 4 ); - FillDCTTable( ppl_dct_coef[1], pl_DCT_tab1a, 64, 8, 8 ); - FillDCTTable( ppl_dct_coef[1], pl_DCT_tab2, 16, 16, 16 ); - FillDCTTable( ppl_dct_coef[1], pl_DCT_tab3, 8, 16, 16 ); - FillDCTTable( ppl_dct_coef[1], pl_DCT_tab4, 4, 16, 16 ); - FillDCTTable( ppl_dct_coef[1], pl_DCT_tab5, 2, 16, 16 ); - FillDCTTable( ppl_dct_coef[1], pl_DCT_tab6, 1, 16, 16 ); + FillDCTTable( p_vpar->ppl_dct_coef[0], pl_DCT_tab0, 256, 60, 4 ); + FillDCTTable( p_vpar->ppl_dct_coef[0], pl_DCT_tab1, 64, 8, 8 ); + FillDCTTable( p_vpar->ppl_dct_coef[0], pl_DCT_tab2, 16, 16, 16 ); + FillDCTTable( p_vpar->ppl_dct_coef[0], pl_DCT_tab3, 8, 16, 16 ); + FillDCTTable( p_vpar->ppl_dct_coef[0], pl_DCT_tab4, 4, 16, 16 ); + FillDCTTable( p_vpar->ppl_dct_coef[0], pl_DCT_tab5, 2, 16, 16 ); + FillDCTTable( p_vpar->ppl_dct_coef[0], pl_DCT_tab6, 1, 16, 16 ); + + FillDCTTable( p_vpar->ppl_dct_coef[1], pl_DCT_tab0a, 256, 60, 4 ); + FillDCTTable( p_vpar->ppl_dct_coef[1], pl_DCT_tab1a, 64, 8, 8 ); + FillDCTTable( p_vpar->ppl_dct_coef[1], pl_DCT_tab2, 16, 16, 16 ); + FillDCTTable( p_vpar->ppl_dct_coef[1], pl_DCT_tab3, 8, 16, 16 ); + FillDCTTable( p_vpar->ppl_dct_coef[1], pl_DCT_tab4, 4, 16, 16 ); + FillDCTTable( p_vpar->ppl_dct_coef[1], pl_DCT_tab5, 2, 16, 16 ); + FillDCTTable( p_vpar->ppl_dct_coef[1], pl_DCT_tab6, 1, 16, 16 ); } @@ -671,9 +657,9 @@ static __inline__ void DecodeMPEG2NonIntra( vpar_thread_t * p_vpar, } else { - i_run = ppl_dct_coef[0][i_code].i_run; - i_length = ppl_dct_coef[0][i_code].i_length; - i_level = ppl_dct_coef[0][i_code].i_level; + i_run = p_vpar->ppl_dct_coef[0][i_code].i_run; + i_length = p_vpar->ppl_dct_coef[0][i_code].i_length; + i_level = p_vpar->ppl_dct_coef[0][i_code].i_level; } @@ -861,9 +847,9 @@ static __inline__ void DecodeMPEG2Intra( vpar_thread_t * p_vpar, } else { - i_run = ppl_dct_coef[b_vlc_intra][i_code].i_run; - i_length = ppl_dct_coef[b_vlc_intra][i_code].i_length; - i_level = ppl_dct_coef[b_vlc_intra][i_code].i_level; + i_run = p_vpar->ppl_dct_coef[b_vlc_intra][i_code].i_run; + i_length = p_vpar->ppl_dct_coef[b_vlc_intra][i_code].i_length; + i_level = p_vpar->ppl_dct_coef[b_vlc_intra][i_code].i_level; } #if 0 @@ -1287,10 +1273,10 @@ static __inline__ int CodedPattern420( vpar_thread_t * p_vpar ) int i_vlc = ShowBits( &p_vpar->bit_stream, 9 ); /* Trash the good number of bits read in the lookup table */ - RemoveBits( &p_vpar->bit_stream, p_vpar->pl_coded_pattern[i_vlc].i_length ); + RemoveBits( &p_vpar->bit_stream, pl_coded_pattern[i_vlc].i_length ); /* return the value from the vlc table */ - return p_vpar->pl_coded_pattern[i_vlc].i_value; + return pl_coded_pattern[i_vlc].i_value; } /***************************************************************************** @@ -1300,10 +1286,10 @@ static __inline__ int CodedPattern422( vpar_thread_t * p_vpar ) { int i_vlc = ShowBits( &p_vpar->bit_stream, 9 ); - RemoveBits( &p_vpar->bit_stream, p_vpar->pl_coded_pattern[i_vlc].i_length ); + RemoveBits( &p_vpar->bit_stream, pl_coded_pattern[i_vlc].i_length ); /* Supplementary 2 bits long code for 4:2:2 format */ - return p_vpar->pl_coded_pattern[i_vlc].i_value | + return pl_coded_pattern[i_vlc].i_value | (GetBits( &p_vpar->bit_stream, 2 ) << 6); } @@ -1314,9 +1300,9 @@ static __inline__ int CodedPattern444( vpar_thread_t * p_vpar ) { int i_vlc = ShowBits( &p_vpar->bit_stream, 9 ); - RemoveBits( &p_vpar->bit_stream, p_vpar->pl_coded_pattern[i_vlc].i_length ); + RemoveBits( &p_vpar->bit_stream, pl_coded_pattern[i_vlc].i_length ); - return p_vpar->pl_coded_pattern[i_vlc].i_value | + return pl_coded_pattern[i_vlc].i_value | (GetBits( &p_vpar->bit_stream, 6 ) << 6); }