residual_block_cavlc( coeffLevel, maxNumCoeff ) { for( i = 0; i < maxNumCoeff; i++ ) coeffLevel[ i ] = 0 coeff_token if( TotalCoeff( coeff_token ) > 0 ) { if( TotalCoeff( coeff_token ) > 10 && TrailingOnes( coeff_token ) < 3 ) suffixLength = 1 else suffixLength = 0 for( i = 0; i < TotalCoeff( coeff_token ); i++ ) if( i < TrailingOnes( coeff_token ) ) { trailing_ones_sign_flag level[ i ] = 1 – 2 * trailing_ones_sign_flag } else { level_prefix levelCode = ( Min( 15, level_prefix ) << suffixLength ) if( suffixLength > 0 | | level_prefix >= 14 ) { level_suffix levelCode += level_suffix } if( level_prefix > = 15 && suffixLength = = 0 ) levelCode += 15 if( level_prefix > = 16 ) levelCode += ( 1 << ( level_prefix – 3 ) ) – 4096 if( i = = TrailingOnes( coeff_token ) && TrailingOnes( coeff_token ) < 3 ) levelCode += 2 if( levelCode % 2 = = 0 ) level[ i ] = ( levelCode + 2 ) >> 1 else level[ i ] = ( –levelCode – 1 ) >> 1 if( suffixLength = = 0 ) suffixLength = 1 if( Abs( level[ i ] ) > ( 3 << ( suffixLength – 1 ) ) && suffixLength < 6 ) suffixLength++ } if( TotalCoeff( coeff_token ) < maxNumCoeff ) { total_zeros zerosLeft = total_zeros } else zerosLeft = 0 for( i = 0; i < TotalCoeff( coeff_token ) – 1; i++ ) { if( zerosLeft > 0 ) { run_before run[ i ] = run_before } else run[ i ] = 0 zerosLeft = zerosLeft – run[ i ] } run[ TotalCoeff( coeff_token ) – 1 ] = zerosLeft coeffNum = -1 for( i = TotalCoeff( coeff_token ) – 1; i >= 0; i--) { coeffNum += run[ i ] + 1 coeffLevel[ coeffNum ] = level[ i ] } } } 这是 264 的标准里面的 对于后缀长度 基本能看明白怎么取了的 CAVLC 编码