Ticket #1007: weighted_pred_range_r1.patch

File weighted_pred_range_r1.patch, 3.1 KB (added by Tanizawa, 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        {
    240           Int shift = 1 << (g_bitDepthC - 1);
    241           Int pred = ( shift - ( ( shift*weight)>>(log2Denom) ) );
     240          Int pred = ( 128 - ( ( 128*weight)>>(log2Denom) ) );
    242241          Int deltaOffset = Clip3( -512, 511, (offset - pred) );    // signed 10bit
    243242          offset = Clip3( -128, 127, (deltaOffset + pred) );        // signed 8bit
    244243        }
     244        // Luma offset range limitation
     245        else
     246        {
     247          offset = Clip3( -128, 127, offset);
     248        }
    245249
    246250        // Weighting factor limitation
    247251        Int defaultWeight = (1<<log2Denom);