/* Shell decoder, operates on one shell code frame of 16 pulses */ void silk_shell_decoder( opus_int *pulses0, /* O data: nonnegative pulse amplitudes */ ec_dec *psRangeDec, /* I/O Compressor data structure */ const opus_int pulses4 /* I number of pulses per pulse-subframe */ ) { opus_int pulses3[ 2 ], pulses2[ 4 ], pulses1[ 8 ]; /* this function operates on one shell code frame of 16 pulses */ silk_assert( SHELL_CODEC_FRAME_LENGTH == 16 ); decode_split( &pulses3[ 0 ], &pulses3[ 1 ], psRangeDec, pulses4, silk_shell_code_table3 ); decode_split( &pulses2[ 0 ], &pulses2[ 1 ], psRangeDec, pulses3[ 0 ], silk_shell_code_table2 ); decode_split( &pulses1[ 0 ], &pulses1[ 1 ], psRangeDec, pulses2[ 0 ], silk_shell_code_table1 ); decode_split( &pulses0[ 0 ], &pulses0[ 1 ], psRangeDec, pulses1[ 0 ], silk_shell_code_table0 ); decode_split( &pulses0[ 2 ], &pulses0[ 3 ], psRangeDec, pulses1[ 1 ], silk_shell_code_table0 ); decode_split( &pulses1[ 2 ], &pulses1[ 3 ], psRangeDec, pulses2[ 1 ], silk_shell_code_table1 ); decode_split( &pulses0[ 4 ], &pulses0[ 5 ], psRangeDec, pulses1[ 2 ], silk_shell_code_table0 ); decode_split( &pulses0[ 6 ], &pulses0[ 7 ], psRangeDec, pulses1[ 3 ], silk_shell_code_table0 ); decode_split( &pulses2[ 2 ], &pulses2[ 3 ], psRangeDec, pulses3[ 1 ], silk_shell_code_table2 ); decode_split( &pulses1[ 4 ], &pulses1[ 5 ], psRangeDec, pulses2[ 2 ], silk_shell_code_table1 ); decode_split( &pulses0[ 8 ], &pulses0[ 9 ], psRangeDec, pulses1[ 4 ], silk_shell_code_table0 ); decode_split( &pulses0[ 10 ], &pulses0[ 11 ], psRangeDec, pulses1[ 5 ], silk_shell_code_table0 ); decode_split( &pulses1[ 6 ], &pulses1[ 7 ], psRangeDec, pulses2[ 3 ], silk_shell_code_table1 ); decode_split( &pulses0[ 12 ], &pulses0[ 13 ], psRangeDec, pulses1[ 6 ], silk_shell_code_table0 ); decode_split( &pulses0[ 14 ], &pulses0[ 15 ], psRangeDec, pulses1[ 7 ], silk_shell_code_table0 ); }
/* Shell decoder, operates on one shell code frame of 16 pulses */ void SKP_Silk_shell_decoder(int *pulses0, /* O data: nonnegative pulse amplitudes */ SKP_Silk_range_coder_state * sRC, /* I/O compressor data structure */ const int pulses4 /* I number of pulses per pulse-subframe */ ) { int pulses3[2], pulses2[4], pulses1[8]; /* this function operates on one shell code frame of 16 pulses */ assert(SHELL_CODEC_FRAME_LENGTH == 16); decode_split(&pulses3[0], &pulses3[1], sRC, pulses4, SKP_Silk_shell_code_table3); decode_split(&pulses2[0], &pulses2[1], sRC, pulses3[0], SKP_Silk_shell_code_table2); decode_split(&pulses1[0], &pulses1[1], sRC, pulses2[0], SKP_Silk_shell_code_table1); decode_split(&pulses0[0], &pulses0[1], sRC, pulses1[0], SKP_Silk_shell_code_table0); decode_split(&pulses0[2], &pulses0[3], sRC, pulses1[1], SKP_Silk_shell_code_table0); decode_split(&pulses1[2], &pulses1[3], sRC, pulses2[1], SKP_Silk_shell_code_table1); decode_split(&pulses0[4], &pulses0[5], sRC, pulses1[2], SKP_Silk_shell_code_table0); decode_split(&pulses0[6], &pulses0[7], sRC, pulses1[3], SKP_Silk_shell_code_table0); decode_split(&pulses2[2], &pulses2[3], sRC, pulses3[1], SKP_Silk_shell_code_table2); decode_split(&pulses1[4], &pulses1[5], sRC, pulses2[2], SKP_Silk_shell_code_table1); decode_split(&pulses0[8], &pulses0[9], sRC, pulses1[4], SKP_Silk_shell_code_table0); decode_split(&pulses0[10], &pulses0[11], sRC, pulses1[5], SKP_Silk_shell_code_table0); decode_split(&pulses1[6], &pulses1[7], sRC, pulses2[3], SKP_Silk_shell_code_table1); decode_split(&pulses0[12], &pulses0[13], sRC, pulses1[6], SKP_Silk_shell_code_table0); decode_split(&pulses0[14], &pulses0[15], sRC, pulses1[7], SKP_Silk_shell_code_table0); }