Ticket #1007: weighted_pred_range.patch

File weighted_pred_range.patch, 3.0 KB (added by bheng, 11 years ago)
  • source/Lib/TLibDecoder/TDecCAVLC.cpp

     
    17451745  Int iDeltaDenom;
    17461746  // decode delta_luma_log2_weight_denom :
    17471747  READ_UVLC( uiLog2WeightDenomLuma, "luma_log2_weight_denom" );     // ue(v): luma_log2_weight_denom
     1748  assert( uiLog2WeightDenomLuma <= 7 );
    17481749  if( bChroma )
    17491750  {
    17501751    READ_SVLC( iDeltaDenom, "delta_chroma_log2_weight_denom" );     // se(v): delta_chroma_log2_weight_denom
    17511752    assert((iDeltaDenom + (Int)uiLog2WeightDenomLuma)>=0);
     1753    assert((iDeltaDenom + (Int)uiLog2WeightDenomLuma)<=7);
    17521754    uiLog2WeightDenomChroma = (UInt)(iDeltaDenom + uiLog2WeightDenomLuma);
    17531755  }
    17541756
     
    17871789      {
    17881790        Int iDeltaWeight;
    17891791        READ_SVLC( iDeltaWeight, "delta_luma_weight_lX" );  // se(v): delta_luma_weight_l0[i]
     1792        assert( iDeltaWeight >= -128 );
     1793        assert( iDeltaWeight <=  127 );
    17901794        wp[0].iWeight = (iDeltaWeight + (1<<wp[0].uiLog2WeightDenom));
    17911795        READ_SVLC( wp[0].iOffset, "luma_offset_lX" );       // se(v): luma_offset_l0[i]
     1796        assert( wp[0].iOffset >= -128 );
     1797        assert( wp[0].iOffset <=  127 );
    17921798      }
    17931799      else
    17941800      {
     
    18031809          {
    18041810            Int iDeltaWeight;
    18051811            READ_SVLC( iDeltaWeight, "delta_chroma_weight_lX" );  // se(v): chroma_weight_l0[i][j]
     1812            assert( iDeltaWeight >= -128 );
     1813            assert( iDeltaWeight <=  127 );
    18061814            wp[j].iWeight = (iDeltaWeight + (1<<wp[1].uiLog2WeightDenom));
    18071815
    18081816            Int iDeltaChroma;
    18091817            READ_SVLC( iDeltaChroma, "delta_chroma_offset_lX" );  // se(v): delta_chroma_offset_l0[i][j]
     1818            assert( iDeltaChroma >= -512 );
     1819            assert( iDeltaChroma <=  511 );
    18101820            Int pred = ( 128 - ( ( 128*wp[j].iWeight)>>(wp[j].uiLog2WeightDenom) ) );
    18111821            wp[j].iOffset = Clip3(-128, 127, (iDeltaChroma + pred) );
    18121822          }
  • source/Lib/TLibEncoder/WeightPredAnalysis.cpp

     
    234234        Int weight = (Int)( 0.5 + dWeight * (Double)(1<<log2Denom) );
    235235        Int offset = (Int)( ((currDC<<log2Denom) - ((Int64)weight * refDC) + (Int64)realOffset) >> realLog2Denom );
    236236
    237         // Chroma offset range limination
     237        // Chroma offset range limitation
    238238        if(comp)
    239239        {
    240240          Int shift = 1 << (g_bitDepthC - 1);
     
    242242          Int deltaOffset = Clip3( -512, 511, (offset - pred) );    // signed 10bit
    243243          offset = Clip3( -128, 127, (deltaOffset + pred) );        // signed 8bit
    244244        }
     245                // Luma offset range limitation
     246                else
     247                {
     248                        offset = Clip3( -128, 127, offset);
     249                }
    245250
    246251        // Weighting factor limitation
    247252        Int defaultWeight = (1<<log2Denom);