[x265] [PATCH] pass bLuma and bChroma parameters for functions

Sumalatha Polureddy sumalatha at multicorewareinc.com
Mon Oct 21 12:38:58 CEST 2013


This patch was sent last week . Before sending this patch, it was not their
in the repo. After sending this patch only, it has been pushed to the repo

Regards
Sumalatha



On Mon, Oct 21, 2013 at 3:32 PM, Deepthi Nandakumar <
deepthi at multicorewareinc.com> wrote:

> This has already been accepted.
>
>
> On Wed, Oct 16, 2013 at 5:18 PM, <sumalatha at multicorewareinc.com> wrote:
>
>> # HG changeset patch
>> # User Sumalatha Polureddy
>> # Date 1381924099 -19800
>> # Node ID ac7aa89eae11d264992fd8495f6dcad8da85f243
>> # Parent  3cdbc62783e197cd5cf6dcf5b1cc76e2cd6d93c2
>> pass bLuma and bChroma parameters for functions
>>
>> Based on the values of two parameters, luma and chroma operations are
>> done.
>> Default value for both is set as true todo both operations
>>
>> diff -r 3cdbc62783e1 -r ac7aa89eae11
>> source/Lib/TLibCommon/TComPrediction.cpp
>> --- a/source/Lib/TLibCommon/TComPrediction.cpp  Wed Oct 16 12:17:21 2013
>> +0530
>> +++ b/source/Lib/TLibCommon/TComPrediction.cpp  Wed Oct 16 17:18:19 2013
>> +0530
>> @@ -245,7 +245,7 @@
>>      return false;
>>  }
>>
>> -void TComPrediction::motionCompensation(TComDataCU* cu, TComYuv*
>> predYuv, RefPicList picList, int partIdx)
>> +void TComPrediction::motionCompensation(TComDataCU* cu, TComYuv*
>> predYuv, RefPicList picList, int partIdx, bool bLuma, bool bChroma)
>>  {
>>      int  width;
>>      int  height;
>> @@ -264,26 +264,27 @@
>>
>>                  MV mv = cu->getCUMvField(picList)->getMv(partAddr);
>>                  cu->clipMv(mv);
>> +                if (bLuma)
>> +                    xPredInterLumaBlk(cu,
>> cu->getSlice()->getRefPic(picList, refId)->getPicYuvRec(), partAddr, &mv,
>> width, height, pcMbYuv);
>> +                if (bChroma)
>> +                    xPredInterChromaBlk(cu,
>> cu->getSlice()->getRefPic(picList, refId)->getPicYuvRec(), partAddr, &mv,
>> width, height, pcMbYuv);
>>
>> -                xPredInterLumaBlk(cu, cu->getSlice()->getRefPic(picList,
>> refId)->getPicYuvRec(), partAddr, &mv, width, height, pcMbYuv);
>> -                xPredInterChromaBlk(cu,
>> cu->getSlice()->getRefPic(picList, refId)->getPicYuvRec(), partAddr, &mv,
>> width, height, pcMbYuv);
>> -
>> -                xWeightedPredictionUni(cu, pcMbYuv, partAddr, width,
>> height, picList, predYuv);
>> +                xWeightedPredictionUni(cu, pcMbYuv, partAddr, width,
>> height, picList, predYuv, bLuma, bChroma);
>>              }
>>              else
>>              {
>> -                xPredInterUni(cu, partAddr, width, height, picList,
>> predYuv);
>> +                xPredInterUni(cu, partAddr, width, height, picList,
>> predYuv, bLuma, bChroma);
>>              }
>>          }
>>          else
>>          {
>>              if (xCheckIdenticalMotion(cu, partAddr))
>>              {
>> -                xPredInterUni(cu, partAddr, width, height,
>> REF_PIC_LIST_0, predYuv);
>> +                xPredInterUni(cu, partAddr, width, height,
>> REF_PIC_LIST_0, predYuv, bLuma, bChroma);
>>              }
>>              else
>>              {
>> -                xPredInterBi(cu, partAddr, width, height, predYuv);
>> +                xPredInterBi(cu, partAddr, width, height, predYuv,
>> bLuma, bChroma);
>>              }
>>          }
>>          return;
>> @@ -305,31 +306,33 @@
>>                  MV mv = cu->getCUMvField(picList)->getMv(partAddr);
>>                  cu->clipMv(mv);
>>
>> -                xPredInterLumaBlk(cu, cu->getSlice()->getRefPic(picList,
>> refId)->getPicYuvRec(), partAddr, &mv, width, height, pcMbYuv);
>> -                xPredInterChromaBlk(cu,
>> cu->getSlice()->getRefPic(picList, refId)->getPicYuvRec(), partAddr, &mv,
>> width, height, pcMbYuv);
>> +                if (bLuma)
>> +                    xPredInterLumaBlk(cu,
>> cu->getSlice()->getRefPic(picList, refId)->getPicYuvRec(), partAddr, &mv,
>> width, height, pcMbYuv);
>> +                if (bChroma)
>> +                    xPredInterChromaBlk(cu,
>> cu->getSlice()->getRefPic(picList, refId)->getPicYuvRec(), partAddr, &mv,
>> width, height, pcMbYuv);
>>
>> -                xWeightedPredictionUni(cu, pcMbYuv, partAddr, width,
>> height, picList, predYuv);
>> +                xWeightedPredictionUni(cu, pcMbYuv, partAddr, width,
>> height, picList, predYuv, bLuma, bChroma);
>>              }
>>              else
>>              {
>> -                xPredInterUni(cu, partAddr, width, height, picList,
>> predYuv);
>> +                xPredInterUni(cu, partAddr, width, height, picList,
>> predYuv, bLuma, bChroma);
>>              }
>>          }
>>          else
>>          {
>>              if (xCheckIdenticalMotion(cu, partAddr))
>>              {
>> -                xPredInterUni(cu, partAddr, width, height,
>> REF_PIC_LIST_0, predYuv);
>> +                xPredInterUni(cu, partAddr, width, height,
>> REF_PIC_LIST_0, predYuv, bLuma, bChroma);
>>              }
>>              else
>>              {
>> -                xPredInterBi(cu, partAddr, width, height, predYuv);
>> +                xPredInterBi(cu, partAddr, width, height, predYuv,
>> bLuma, bChroma);
>>              }
>>          }
>>      }
>>  }
>>
>> -void TComPrediction::xPredInterUni(TComDataCU* cu, UInt partAddr, int
>> width, int height, RefPicList picList, TComYuv* outPredYuv)
>> +void TComPrediction::xPredInterUni(TComDataCU* cu, UInt partAddr, int
>> width, int height, RefPicList picList, TComYuv* outPredYuv, bool bLuma,
>> bool bChroma)
>>  {
>>      int refIdx = cu->getCUMvField(picList)->getRefIdx(partAddr);
>>
>> @@ -338,12 +341,14 @@
>>      MV mv = cu->getCUMvField(picList)->getMv(partAddr);
>>      cu->clipMv(mv);
>>
>> -    xPredInterLumaBlk(cu, cu->getSlice()->m_mref[picList][refIdx],
>> partAddr, &mv, width, height, outPredYuv);
>> +    if (bLuma)
>> +        xPredInterLumaBlk(cu, cu->getSlice()->m_mref[picList][refIdx],
>> partAddr, &mv, width, height, outPredYuv);
>>
>> -    xPredInterChromaBlk(cu, cu->getSlice()->getRefPic(picList,
>> refIdx)->getPicYuvRec(), partAddr, &mv, width, height, outPredYuv);
>> +    if (bChroma)
>> +        xPredInterChromaBlk(cu, cu->getSlice()->getRefPic(picList,
>> refIdx)->getPicYuvRec(), partAddr, &mv, width, height, outPredYuv);
>>  }
>>
>> -void TComPrediction::xPredInterUni(TComDataCU* cu, UInt partAddr, int
>> width, int height, RefPicList picList, TShortYUV* outPredYuv)
>> +void TComPrediction::xPredInterUni(TComDataCU* cu, UInt partAddr, int
>> width, int height, RefPicList picList, TShortYUV* outPredYuv, bool bLuma,
>> bool bChroma)
>>  {
>>      int refIdx = cu->getCUMvField(picList)->getRefIdx(partAddr);
>>
>> @@ -352,11 +357,13 @@
>>      MV mv = cu->getCUMvField(picList)->getMv(partAddr);
>>      cu->clipMv(mv);
>>
>> -    xPredInterLumaBlk(cu, cu->getSlice()->getRefPic(picList,
>> refIdx)->getPicYuvRec(), partAddr, &mv, width, height, outPredYuv);
>> -    xPredInterChromaBlk(cu, cu->getSlice()->getRefPic(picList,
>> refIdx)->getPicYuvRec(), partAddr, &mv, width, height, outPredYuv);
>> +    if (bLuma)
>> +        xPredInterLumaBlk(cu, cu->getSlice()->getRefPic(picList,
>> refIdx)->getPicYuvRec(), partAddr, &mv, width, height, outPredYuv);
>> +    if (bChroma)
>> +        xPredInterChromaBlk(cu, cu->getSlice()->getRefPic(picList,
>> refIdx)->getPicYuvRec(), partAddr, &mv, width, height, outPredYuv);
>>  }
>>
>> -void TComPrediction::xPredInterBi(TComDataCU* cu, UInt partAddr, int
>> width, int height, TComYuv*& outPredYuv)
>> +void TComPrediction::xPredInterBi(TComDataCU* cu, UInt partAddr, int
>> width, int height, TComYuv*& outPredYuv, bool bLuma, bool bChroma)
>>  {
>>      int refIdx[2] = { -1, -1 };
>>
>> @@ -371,16 +378,16 @@
>>              assert(refIdx[refList] <
>> cu->getSlice()->getNumRefIdx(picList));
>>
>>              pcMbYuv = &m_predShortYuv[refList];
>> -            xPredInterUni(cu, partAddr, width, height, picList, pcMbYuv);
>> +            xPredInterUni(cu, partAddr, width, height, picList, pcMbYuv,
>> bLuma, bChroma);
>>          }
>>
>>          if (cu->getSlice()->getPPS()->getWPBiPred() &&
>> cu->getSlice()->getSliceType() == B_SLICE)
>>          {
>> -            xWeightedPredictionBi(cu, &m_predShortYuv[0],
>> &m_predShortYuv[1], refIdx[0], refIdx[1], partAddr, width, height,
>> outPredYuv);
>> +            xWeightedPredictionBi(cu, &m_predShortYuv[0],
>> &m_predShortYuv[1], refIdx[0], refIdx[1], partAddr, width, height,
>> outPredYuv, bLuma, bChroma);
>>          }
>>          else
>>          {
>> -            outPredYuv->addAvg(&m_predShortYuv[0], &m_predShortYuv[1],
>> partAddr, width, height);
>> +            outPredYuv->addAvg(&m_predShortYuv[0], &m_predShortYuv[1],
>> partAddr, width, height, bLuma, bChroma);
>>          }
>>      }
>>      else if (cu->getSlice()->getPPS()->getWPBiPred() &&
>> cu->getSlice()->getSliceType() == B_SLICE)
>> @@ -399,10 +406,10 @@
>>              assert(refIdx[refList] <
>> cu->getSlice()->getNumRefIdx(picList));
>>
>>              pcMbYuv = &m_predShortYuv[refList];
>> -            xPredInterUni(cu, partAddr, width, height, picList, pcMbYuv);
>> +            xPredInterUni(cu, partAddr, width, height, picList, pcMbYuv,
>> bLuma, bChroma);
>>          }
>>
>> -        xWeightedPredictionBi(cu, &m_predShortYuv[0],
>> &m_predShortYuv[1], refIdx[0], refIdx[1], partAddr, width, height,
>> outPredYuv);
>> +        xWeightedPredictionBi(cu, &m_predShortYuv[0],
>> &m_predShortYuv[1], refIdx[0], refIdx[1], partAddr, width, height,
>> outPredYuv, bLuma, bChroma);
>>      }
>>      else if (cu->getSlice()->getPPS()->getUseWP() &&
>> cu->getSlice()->getSliceType() == P_SLICE)
>>      {
>> @@ -421,11 +428,12 @@
>>
>>              MV mv = cu->getCUMvField(picList)->getMv(partAddr);
>>              cu->clipMv(mv);
>> +            if (bLuma)
>> +                xPredInterLumaBlk(cu, cu->getSlice()->getRefPic(picList,
>> refId)->getPicYuvRec(), partAddr, &mv, width, height, pcMbYuv);
>> +            if (bChroma)
>> +                xPredInterChromaBlk(cu,
>> cu->getSlice()->getRefPic(picList, refId)->getPicYuvRec(), partAddr, &mv,
>> width, height, pcMbYuv);
>>
>> -            xPredInterLumaBlk(cu, cu->getSlice()->getRefPic(picList,
>> refId)->getPicYuvRec(), partAddr, &mv, width, height, pcMbYuv);
>> -            xPredInterChromaBlk(cu, cu->getSlice()->getRefPic(picList,
>> refId)->getPicYuvRec(), partAddr, &mv, width, height, pcMbYuv);
>> -
>> -            xWeightedPredictionUni(cu, &m_predShortYuv[0], partAddr,
>> width, height, REF_PIC_LIST_0, outPredYuv);
>> +            xWeightedPredictionUni(cu, &m_predShortYuv[0], partAddr,
>> width, height, REF_PIC_LIST_0, outPredYuv, bLuma, bChroma);
>>          }
>>      }
>>      else
>> @@ -443,10 +451,10 @@
>>              assert(refIdx[refList] <
>> cu->getSlice()->getNumRefIdx(picList));
>>
>>              TComYuv* yuv = &m_predYuv[refList];
>> -            xPredInterUni(cu, partAddr, width, height, picList, yuv);
>> +            xPredInterUni(cu, partAddr, width, height, picList, yuv,
>> bLuma, bChroma);
>>          }
>>
>> -        xWeightedAverage(&m_predYuv[0], &m_predYuv[1], refIdx[0],
>> refIdx[1], partAddr, width, height, outPredYuv);
>> +        xWeightedAverage(&m_predYuv[0], &m_predYuv[1], refIdx[0],
>> refIdx[1], partAddr, width, height, outPredYuv, bLuma, bChroma);
>>      }
>>  }
>>
>> @@ -635,19 +643,19 @@
>>      }
>>  }
>>
>> -void TComPrediction::xWeightedAverage(TComYuv* srcYuv0, TComYuv*
>> srcYuv1, int refIdx0, int refIdx1, UInt partIdx, int width, int height,
>> TComYuv*& outDstYuv)
>> +void TComPrediction::xWeightedAverage(TComYuv* srcYuv0, TComYuv*
>> srcYuv1, int refIdx0, int refIdx1, UInt partIdx, int width, int height,
>> TComYuv*& outDstYuv, bool bLuma, bool bChroma)
>>  {
>>      if (refIdx0 >= 0 && refIdx1 >= 0)
>>      {
>> -        outDstYuv->addAvg(srcYuv0, srcYuv1, partIdx, width, height);
>> +        outDstYuv->addAvg(srcYuv0, srcYuv1, partIdx, width, height,
>> bLuma, bChroma);
>>      }
>>      else if (refIdx0 >= 0 && refIdx1 <  0)
>>      {
>> -        srcYuv0->copyPartToPartYuv(outDstYuv, partIdx, width, height);
>> +        srcYuv0->copyPartToPartYuv(outDstYuv, partIdx, width, height,
>> bLuma, bChroma);
>>      }
>>      else if (refIdx0 <  0 && refIdx1 >= 0)
>>      {
>> -        srcYuv1->copyPartToPartYuv(outDstYuv, partIdx, width, height);
>> +        srcYuv1->copyPartToPartYuv(outDstYuv, partIdx, width, height,
>> bLuma, bChroma);
>>      }
>>  }
>>
>> diff -r 3cdbc62783e1 -r ac7aa89eae11
>> source/Lib/TLibCommon/TComPrediction.h
>> --- a/source/Lib/TLibCommon/TComPrediction.h    Wed Oct 16 12:17:21 2013
>> +0530
>> +++ b/source/Lib/TLibCommon/TComPrediction.h    Wed Oct 16 17:18:19 2013
>> +0530
>> @@ -83,15 +83,15 @@
>>      int       m_lumaRecStride; ///< stride of m_lumaRecBuffer
>>
>>      // motion compensation functions
>> -    void xPredInterUni(TComDataCU* cu, UInt partAddr, int width, int
>> height, RefPicList picList, TComYuv* outPredYuv);
>> -    void xPredInterUni(TComDataCU* cu, UInt partAddr, int width, int
>> height, RefPicList picList, TShortYUV* outPredYuv);
>> +    void xPredInterUni(TComDataCU* cu, UInt partAddr, int width, int
>> height, RefPicList picList, TComYuv* outPredYuv, bool bLuma = true, bool
>> bChroma = true);
>> +    void xPredInterUni(TComDataCU* cu, UInt partAddr, int width, int
>> height, RefPicList picList, TShortYUV* outPredYuv, bool bLuma = true, bool
>> bChroma = true);
>>      void xPredInterLumaBlk(TComDataCU *cu, MotionReference *refPic, UInt
>> partAddr, MV *mv, int width, int height, TComYuv *dstPic);
>>      void xPredInterLumaBlk(TComDataCU *cu, TComPicYuv *refPic, UInt
>> partAddr, MV *mv, int width, int height, TShortYUV *dstPic);
>>      void xPredInterChromaBlk(TComDataCU *cu, TComPicYuv *refPic, UInt
>> partAddr, MV *mv, int width, int height, TComYuv *dstPic);
>>      void xPredInterChromaBlk(TComDataCU *cu, TComPicYuv *refPic, UInt
>> partAddr, MV *mv, int width, int height, TShortYUV *dstPic);
>>
>> -    void xPredInterBi(TComDataCU* cu, UInt partAddr, int width, int
>> height, TComYuv*& outPredYuv);
>> -    void xWeightedAverage(TComYuv* srcYuv0, TComYuv* srcYuv1, int
>> refIdx0, int refIdx1, UInt partAddr, int width, int height, TComYuv*&
>> outDstYuv);
>> +    void xPredInterBi(TComDataCU* cu, UInt partAddr, int width, int
>> height, TComYuv*& outPredYuv, bool bLuma = true, bool bChroma = true);
>> +    void xWeightedAverage(TComYuv* srcYuv0, TComYuv* srcYuv1, int
>> refIdx0, int refIdx1, UInt partAddr, int width, int height, TComYuv*&
>> outDstYuv, bool bLuma = true, bool bChroma = true);
>>
>>      void xGetLLSPrediction(TComPattern* pcPattern, int* src0, int
>> srcstride, Pel* dst0, int dststride, UInt width, UInt height, UInt ext0);
>>
>> @@ -107,7 +107,7 @@
>>      void initTempBuff();
>>
>>      // inter
>> -    void motionCompensation(TComDataCU* cu, TComYuv* predYuv, RefPicList
>> picList = REF_PIC_LIST_X, int partIdx = -1);
>> +    void motionCompensation(TComDataCU* cu, TComYuv* predYuv, RefPicList
>> picList = REF_PIC_LIST_X, int partIdx = -1, bool bLuma = true, bool bChroma
>> = true);
>>
>>      // motion vector prediction
>>      void getMvPredAMVP(TComDataCU* cu, UInt partIdx, UInt partAddr,
>> RefPicList picList, MV& mvPred);
>> diff -r 3cdbc62783e1 -r ac7aa89eae11
>> source/Lib/TLibCommon/TComWeightPrediction.cpp
>> --- a/source/Lib/TLibCommon/TComWeightPrediction.cpp    Wed Oct 16
>> 12:17:21 2013 +0530
>> +++ b/source/Lib/TLibCommon/TComWeightPrediction.cpp    Wed Oct 16
>> 17:18:19 2013 +0530
>> @@ -80,7 +80,7 @@
>>   * \param TComYuv* outDstYuv
>>   * \returns void
>>   */
>> -void TComWeightPrediction::addWeightBi(TComYuv* srcYuv0, TComYuv*
>> srcYuv1, UInt partUnitIdx, UInt width, UInt height, wpScalingParam *wp0,
>> wpScalingParam *wp1, TComYuv* outDstYuv, bool bRound)
>> +void TComWeightPrediction::addWeightBi(TComYuv* srcYuv0, TComYuv*
>> srcYuv1, UInt partUnitIdx, UInt width, UInt height, wpScalingParam *wp0,
>> wpScalingParam *wp1, TComYuv* outDstYuv, bool bRound, bool bLuma, bool
>> bChroma)
>>  {
>>      int x, y;
>>
>> @@ -96,90 +96,96 @@
>>      Pel* dstU   = outDstYuv->getCbAddr(partUnitIdx);
>>      Pel* dstV   = outDstYuv->getCrAddr(partUnitIdx);
>>
>> -    // Luma : --------------------------------------------
>> -    int w0      = wp0[0].w;
>> -    int offset  = wp0[0].offset;
>> -    int shiftNum = IF_INTERNAL_PREC - X265_DEPTH;
>> -    int shift   = wp0[0].shift + shiftNum;
>> -    int round   = shift ? (1 << (shift - 1)) * bRound : 0;
>> -    int w1      = wp1[0].w;
>> +    if (bLuma)
>> +    {
>> +        // Luma : --------------------------------------------
>> +        int w0      = wp0[0].w;
>> +        int offset  = wp0[0].offset;
>> +        int shiftNum = IF_INTERNAL_PREC - X265_DEPTH;
>> +        int shift   = wp0[0].shift + shiftNum;
>> +        int round   = shift ? (1 << (shift - 1)) * bRound : 0;
>> +        int w1      = wp1[0].w;
>>
>> -    UInt  src0Stride = srcYuv0->getStride();
>> -    UInt  src1Stride = srcYuv1->getStride();
>> -    UInt  dststride  = outDstYuv->getStride();
>> +        UInt  src0Stride = srcYuv0->getStride();
>> +        UInt  src1Stride = srcYuv1->getStride();
>> +        UInt  dststride  = outDstYuv->getStride();
>>
>> -    for (y = height - 1; y >= 0; y--)
>> +        for (y = height - 1; y >= 0; y--)
>> +        {
>> +            for (x = width - 1; x >= 0; )
>> +            {
>> +                // note: luma min width is 4
>> +                pDstY[x] = weightBidirY(w0, srcY0[x], w1, srcY1[x],
>> round, shift, offset);
>> +                x--;
>> +                pDstY[x] = weightBidirY(w0, srcY0[x], w1, srcY1[x],
>> round, shift, offset);
>> +                x--;
>> +                pDstY[x] = weightBidirY(w0, srcY0[x], w1, srcY1[x],
>> round, shift, offset);
>> +                x--;
>> +                pDstY[x] = weightBidirY(w0, srcY0[x], w1, srcY1[x],
>> round, shift, offset);
>> +                x--;
>> +            }
>> +
>> +            srcY0 += src0Stride;
>> +            srcY1 += src1Stride;
>> +            pDstY  += dststride;
>> +        }
>> +    }
>> +
>> +    if (bChroma)
>>      {
>> -        for (x = width - 1; x >= 0; )
>> +        // Chroma U : --------------------------------------------
>> +        int w0      = wp0[1].w;
>> +        int offset  = wp0[1].offset;
>> +        int shiftNum = IF_INTERNAL_PREC - X265_DEPTH;
>> +        int shift   = wp0[1].shift + shiftNum;
>> +        int round   = shift ? (1 << (shift - 1)) : 0;
>> +        int w1      = wp1[1].w;
>> +
>> +        UInt src0Stride = srcYuv0->getCStride();
>> +        UInt src1Stride = srcYuv1->getCStride();
>> +        UInt dststride  = outDstYuv->getCStride();
>> +
>> +        width  >>= 1;
>> +        height >>= 1;
>> +
>> +        for (y = height - 1; y >= 0; y--)
>>          {
>> -            // note: luma min width is 4
>> -            pDstY[x] = weightBidirY(w0, srcY0[x], w1, srcY1[x], round,
>> shift, offset);
>> -            x--;
>> -            pDstY[x] = weightBidirY(w0, srcY0[x], w1, srcY1[x], round,
>> shift, offset);
>> -            x--;
>> -            pDstY[x] = weightBidirY(w0, srcY0[x], w1, srcY1[x], round,
>> shift, offset);
>> -            x--;
>> -            pDstY[x] = weightBidirY(w0, srcY0[x], w1, srcY1[x], round,
>> shift, offset);
>> -            x--;
>> +            for (x = width - 1; x >= 0; )
>> +            {
>> +                // note: chroma min width is 2
>> +                dstU[x] = weightBidirC(w0, srcU0[x], w1, srcU1[x],
>> round, shift, offset);
>> +                x--;
>> +                dstU[x] = weightBidirC(w0, srcU0[x], w1, srcU1[x],
>> round, shift, offset);
>> +                x--;
>> +            }
>> +
>> +            srcU0 += src0Stride;
>> +            srcU1 += src1Stride;
>> +            dstU  += dststride;
>>          }
>>
>> -        srcY0 += src0Stride;
>> -        srcY1 += src1Stride;
>> -        pDstY  += dststride;
>> -    }
>> +        // Chroma V : --------------------------------------------
>> +        w0      = wp0[2].w;
>> +        offset  = wp0[2].offset;
>> +        shift   = wp0[2].shift + shiftNum;
>> +        round   = shift ? (1 << (shift - 1)) : 0;
>> +        w1      = wp1[2].w;
>>
>> -    // Chroma U : --------------------------------------------
>> -    w0      = wp0[1].w;
>> -    offset  = wp0[1].offset;
>> -    shiftNum = IF_INTERNAL_PREC - X265_DEPTH;
>> -    shift   = wp0[1].shift + shiftNum;
>> -    round   = shift ? (1 << (shift - 1)) : 0;
>> -    w1      = wp1[1].w;
>> +        for (y = height - 1; y >= 0; y--)
>> +        {
>> +            for (x = width - 1; x >= 0; )
>> +            {
>> +                // note: chroma min width is 2
>> +                dstV[x] = weightBidirC(w0, srcV0[x], w1, srcV1[x],
>> round, shift, offset);
>> +                x--;
>> +                dstV[x] = weightBidirC(w0, srcV0[x], w1, srcV1[x],
>> round, shift, offset);
>> +                x--;
>> +            }
>>
>> -    src0Stride = srcYuv0->getCStride();
>> -    src1Stride = srcYuv1->getCStride();
>> -    dststride  = outDstYuv->getCStride();
>> -
>> -    width  >>= 1;
>> -    height >>= 1;
>> -
>> -    for (y = height - 1; y >= 0; y--)
>> -    {
>> -        for (x = width - 1; x >= 0; )
>> -        {
>> -            // note: chroma min width is 2
>> -            dstU[x] = weightBidirC(w0, srcU0[x], w1, srcU1[x], round,
>> shift, offset);
>> -            x--;
>> -            dstU[x] = weightBidirC(w0, srcU0[x], w1, srcU1[x], round,
>> shift, offset);
>> -            x--;
>> +            srcV0 += src0Stride;
>> +            srcV1 += src1Stride;
>> +            dstV  += dststride;
>>          }
>> -
>> -        srcU0 += src0Stride;
>> -        srcU1 += src1Stride;
>> -        dstU  += dststride;
>> -    }
>> -
>> -    // Chroma V : --------------------------------------------
>> -    w0      = wp0[2].w;
>> -    offset  = wp0[2].offset;
>> -    shift   = wp0[2].shift + shiftNum;
>> -    round   = shift ? (1 << (shift - 1)) : 0;
>> -    w1      = wp1[2].w;
>> -
>> -    for (y = height - 1; y >= 0; y--)
>> -    {
>> -        for (x = width - 1; x >= 0; )
>> -        {
>> -            // note: chroma min width is 2
>> -            dstV[x] = weightBidirC(w0, srcV0[x], w1, srcV1[x], round,
>> shift, offset);
>> -            x--;
>> -            dstV[x] = weightBidirC(w0, srcV0[x], w1, srcV1[x], round,
>> shift, offset);
>> -            x--;
>> -        }
>> -
>> -        srcV0 += src0Stride;
>> -        srcV1 += src1Stride;
>> -        dstV  += dststride;
>>      }
>>  }
>>
>> @@ -194,10 +200,13 @@
>>   * \param TComYuv* outDstYuv
>>   * \returns void
>>   */
>> -void TComWeightPrediction::addWeightBi(TShortYUV* srcYuv0, TShortYUV*
>> srcYuv1, UInt partUnitIdx, UInt width, UInt height, wpScalingParam *wp0,
>> wpScalingParam *wp1, TComYuv* outDstYuv, bool bRound)
>> +void TComWeightPrediction::addWeightBi(TShortYUV* srcYuv0, TShortYUV*
>> srcYuv1, UInt partUnitIdx, UInt width, UInt height, wpScalingParam *wp0,
>> wpScalingParam *wp1, TComYuv* outDstYuv, bool bRound, bool bLuma, bool
>> bChroma)
>>  {
>>      int x, y;
>>
>> +    int w0,w1,  offset, shiftNum, shift, round;
>> +    UInt src0Stride, src1Stride, dststride;
>> +
>>      short* srcY0  = srcYuv0->getLumaAddr(partUnitIdx);
>>      short* srcU0  = srcYuv0->getCbAddr(partUnitIdx);
>>      short* srcV0  = srcYuv0->getCrAddr(partUnitIdx);
>> @@ -210,90 +219,96 @@
>>      Pel* dstU   = outDstYuv->getCbAddr(partUnitIdx);
>>      Pel* dstV   = outDstYuv->getCrAddr(partUnitIdx);
>>
>> -    // Luma : --------------------------------------------
>> -    int w0      = wp0[0].w;
>> -    int offset  = wp0[0].offset;
>> -    int shiftNum = IF_INTERNAL_PREC - X265_DEPTH;
>> -    int shift   = wp0[0].shift + shiftNum;
>> -    int round   = shift ? (1 << (shift - 1)) * bRound : 0;
>> -    int w1      = wp1[0].w;
>> +    if (bLuma)
>> +    {
>> +        // Luma : --------------------------------------------
>> +        w0      = wp0[0].w;
>> +        offset  = wp0[0].offset;
>> +        shiftNum = IF_INTERNAL_PREC - X265_DEPTH;
>> +        shift   = wp0[0].shift + shiftNum;
>> +        round   = shift ? (1 << (shift - 1)) * bRound : 0;
>> +        w1      = wp1[0].w;
>>
>> -    UInt  src0Stride = srcYuv0->m_width;
>> -    UInt  src1Stride = srcYuv1->m_width;
>> -    UInt  dststride  = outDstYuv->getStride();
>> +        src0Stride = srcYuv0->m_width;
>> +        src1Stride = srcYuv1->m_width;
>> +        dststride  = outDstYuv->getStride();
>>
>> -    for (y = height - 1; y >= 0; y--)
>> +        for (y = height - 1; y >= 0; y--)
>> +        {
>> +            for (x = width - 1; x >= 0; )
>> +            {
>> +                // note: luma min width is 4
>> +                dstY[x] = weightBidirY(w0, srcY0[x], w1, srcY1[x],
>> round, shift, offset);
>> +                x--;
>> +                dstY[x] = weightBidirY(w0, srcY0[x], w1, srcY1[x],
>> round, shift, offset);
>> +                x--;
>> +                dstY[x] = weightBidirY(w0, srcY0[x], w1, srcY1[x],
>> round, shift, offset);
>> +                x--;
>> +                dstY[x] = weightBidirY(w0, srcY0[x], w1, srcY1[x],
>> round, shift, offset);
>> +                x--;
>> +            }
>> +
>> +            srcY0 += src0Stride;
>> +            srcY1 += src1Stride;
>> +            dstY  += dststride;
>> +        }
>> +    }
>> +
>> +    if (bChroma)
>>      {
>> -        for (x = width - 1; x >= 0; )
>> +        // Chroma U : --------------------------------------------
>> +        w0      = wp0[1].w;
>> +        offset  = wp0[1].offset;
>> +        shiftNum = IF_INTERNAL_PREC - X265_DEPTH;
>> +        shift   = wp0[1].shift + shiftNum;
>> +        round   = shift ? (1 << (shift - 1)) : 0;
>> +        w1      = wp1[1].w;
>> +
>> +        src0Stride = srcYuv0->m_cwidth;
>> +        src1Stride = srcYuv1->m_cwidth;
>> +        dststride  = outDstYuv->getCStride();
>> +
>> +        width  >>= 1;
>> +        height >>= 1;
>> +
>> +        for (y = height - 1; y >= 0; y--)
>>          {
>> -            // note: luma min width is 4
>> -            dstY[x] = weightBidirY(w0, srcY0[x], w1, srcY1[x], round,
>> shift, offset);
>> -            x--;
>> -            dstY[x] = weightBidirY(w0, srcY0[x], w1, srcY1[x], round,
>> shift, offset);
>> -            x--;
>> -            dstY[x] = weightBidirY(w0, srcY0[x], w1, srcY1[x], round,
>> shift, offset);
>> -            x--;
>> -            dstY[x] = weightBidirY(w0, srcY0[x], w1, srcY1[x], round,
>> shift, offset);
>> -            x--;
>> +            for (x = width - 1; x >= 0; )
>> +            {
>> +                // note: chroma min width is 2
>> +                dstU[x] = weightBidirC(w0, srcU0[x], w1, srcU1[x],
>> round, shift, offset);
>> +                x--;
>> +                dstU[x] = weightBidirC(w0, srcU0[x], w1, srcU1[x],
>> round, shift, offset);
>> +                x--;
>> +            }
>> +
>> +            srcU0 += src0Stride;
>> +            srcU1 += src1Stride;
>> +            dstU  += dststride;
>>          }
>>
>> -        srcY0 += src0Stride;
>> -        srcY1 += src1Stride;
>> -        dstY  += dststride;
>> -    }
>> +        // Chroma V : --------------------------------------------
>> +        w0      = wp0[2].w;
>> +        offset  = wp0[2].offset;
>> +        shift   = wp0[2].shift + shiftNum;
>> +        round   = shift ? (1 << (shift - 1)) : 0;
>> +        w1      = wp1[2].w;
>>
>> -    // Chroma U : --------------------------------------------
>> -    w0      = wp0[1].w;
>> -    offset  = wp0[1].offset;
>> -    shiftNum = IF_INTERNAL_PREC - X265_DEPTH;
>> -    shift   = wp0[1].shift + shiftNum;
>> -    round   = shift ? (1 << (shift - 1)) : 0;
>> -    w1      = wp1[1].w;
>> +        for (y = height - 1; y >= 0; y--)
>> +        {
>> +            for (x = width - 1; x >= 0; )
>> +            {
>> +                // note: chroma min width is 2
>> +                dstV[x] = weightBidirC(w0, srcV0[x], w1, srcV1[x],
>> round, shift, offset);
>> +                x--;
>> +                dstV[x] = weightBidirC(w0, srcV0[x], w1, srcV1[x],
>> round, shift, offset);
>> +                x--;
>> +            }
>>
>> -    src0Stride = srcYuv0->m_cwidth;
>> -    src1Stride = srcYuv1->m_cwidth;
>> -    dststride  = outDstYuv->getCStride();
>> -
>> -    width  >>= 1;
>> -    height >>= 1;
>> -
>> -    for (y = height - 1; y >= 0; y--)
>> -    {
>> -        for (x = width - 1; x >= 0; )
>> -        {
>> -            // note: chroma min width is 2
>> -            dstU[x] = weightBidirC(w0, srcU0[x], w1, srcU1[x], round,
>> shift, offset);
>> -            x--;
>> -            dstU[x] = weightBidirC(w0, srcU0[x], w1, srcU1[x], round,
>> shift, offset);
>> -            x--;
>> +            srcV0 += src0Stride;
>> +            srcV1 += src1Stride;
>> +            dstV  += dststride;
>>          }
>> -
>> -        srcU0 += src0Stride;
>> -        srcU1 += src1Stride;
>> -        dstU  += dststride;
>> -    }
>> -
>> -    // Chroma V : --------------------------------------------
>> -    w0      = wp0[2].w;
>> -    offset  = wp0[2].offset;
>> -    shift   = wp0[2].shift + shiftNum;
>> -    round   = shift ? (1 << (shift - 1)) : 0;
>> -    w1      = wp1[2].w;
>> -
>> -    for (y = height - 1; y >= 0; y--)
>> -    {
>> -        for (x = width - 1; x >= 0; )
>> -        {
>> -            // note: chroma min width is 2
>> -            dstV[x] = weightBidirC(w0, srcV0[x], w1, srcV1[x], round,
>> shift, offset);
>> -            x--;
>> -            dstV[x] = weightBidirC(w0, srcV0[x], w1, srcV1[x], round,
>> shift, offset);
>> -            x--;
>> -        }
>> -
>> -        srcV0 += src0Stride;
>> -        srcV1 += src1Stride;
>> -        dstV  += dststride;
>>      }
>>  }
>>
>> @@ -306,10 +321,13 @@
>>   * \param TComYuv* outDstYuv
>>   * \returns void
>>   */
>> -void TComWeightPrediction::addWeightUni(TComYuv* srcYuv0, UInt
>> partUnitIdx, UInt width, UInt height, wpScalingParam *wp0, TComYuv*
>> outDstYuv)
>> +void TComWeightPrediction::addWeightUni(TComYuv* srcYuv0, UInt
>> partUnitIdx, UInt width, UInt height, wpScalingParam *wp0, TComYuv*
>> outDstYuv, bool bLuma, bool bChroma)
>>  {
>>      int x, y;
>>
>> +    int w0, offset, shiftNum, shift, round;
>> +    UInt src0Stride, dststride;
>> +
>>      Pel* srcY0  = srcYuv0->getLumaAddr(partUnitIdx);
>>      Pel* srcU0  = srcYuv0->getCbAddr(partUnitIdx);
>>      Pel* srcV0  = srcYuv0->getCrAddr(partUnitIdx);
>> @@ -318,81 +336,87 @@
>>      Pel* dstU   = outDstYuv->getCbAddr(partUnitIdx);
>>      Pel* dstV   = outDstYuv->getCrAddr(partUnitIdx);
>>
>> -    // Luma : --------------------------------------------
>> -    int w0      = wp0[0].w;
>> -    int offset  = wp0[0].offset;
>> -    int shiftNum = IF_INTERNAL_PREC - X265_DEPTH;
>> -    int shift   = wp0[0].shift + shiftNum;
>> -    int round   = shift ? (1 << (shift - 1)) : 0;
>> -    UInt src0Stride = srcYuv0->getStride();
>> -    UInt dststride  = outDstYuv->getStride();
>> +    if (bLuma)
>> +    {
>> +        // Luma : --------------------------------------------
>> +        w0      = wp0[0].w;
>> +        offset  = wp0[0].offset;
>> +        shiftNum = IF_INTERNAL_PREC - X265_DEPTH;
>> +        shift   = wp0[0].shift + shiftNum;
>> +        round   = shift ? (1 << (shift - 1)) : 0;
>> +        src0Stride = srcYuv0->getStride();
>> +        dststride  = outDstYuv->getStride();
>>
>> -    for (y = height - 1; y >= 0; y--)
>> +        for (y = height - 1; y >= 0; y--)
>> +        {
>> +            for (x = width - 1; x >= 0; )
>> +            {
>> +                // note: luma min width is 4
>> +                dstY[x] = weightUnidirY(w0, srcY0[x], round, shift,
>> offset);
>> +                x--;
>> +                dstY[x] = weightUnidirY(w0, srcY0[x], round, shift,
>> offset);
>> +                x--;
>> +                dstY[x] = weightUnidirY(w0, srcY0[x], round, shift,
>> offset);
>> +                x--;
>> +                dstY[x] = weightUnidirY(w0, srcY0[x], round, shift,
>> offset);
>> +                x--;
>> +            }
>> +
>> +            srcY0 += src0Stride;
>> +            dstY  += dststride;
>> +        }
>> +    }
>> +
>> +    if (bChroma)
>>      {
>> -        for (x = width - 1; x >= 0; )
>> +        // Chroma U : --------------------------------------------
>> +        w0      = wp0[1].w;
>> +        offset  = wp0[1].offset;
>> +        shiftNum = IF_INTERNAL_PREC - X265_DEPTH;
>> +        shift   = wp0[1].shift + shiftNum;
>> +        round   = shift ? (1 << (shift - 1)) : 0;
>> +
>> +        src0Stride = srcYuv0->getCStride();
>> +        dststride  = outDstYuv->getCStride();
>> +
>> +        width  >>= 1;
>> +        height >>= 1;
>> +
>> +        for (y = height - 1; y >= 0; y--)
>>          {
>> -            // note: luma min width is 4
>> -            dstY[x] = weightUnidirY(w0, srcY0[x], round, shift, offset);
>> -            x--;
>> -            dstY[x] = weightUnidirY(w0, srcY0[x], round, shift, offset);
>> -            x--;
>> -            dstY[x] = weightUnidirY(w0, srcY0[x], round, shift, offset);
>> -            x--;
>> -            dstY[x] = weightUnidirY(w0, srcY0[x], round, shift, offset);
>> -            x--;
>> +            for (x = width - 1; x >= 0; )
>> +            {
>> +                // note: chroma min width is 2
>> +                dstU[x] = weightUnidirC(w0, srcU0[x], round, shift,
>> offset);
>> +                x--;
>> +                dstU[x] = weightUnidirC(w0, srcU0[x], round, shift,
>> offset);
>> +                x--;
>> +            }
>> +
>> +            srcU0 += src0Stride;
>> +            dstU  += dststride;
>>          }
>>
>> -        srcY0 += src0Stride;
>> -        dstY  += dststride;
>> -    }
>> +        // Chroma V : --------------------------------------------
>> +        w0      = wp0[2].w;
>> +        offset  = wp0[2].offset;
>> +        shift   = wp0[2].shift + shiftNum;
>> +        round   = shift ? (1 << (shift - 1)) : 0;
>>
>> -    // Chroma U : --------------------------------------------
>> -    w0      = wp0[1].w;
>> -    offset  = wp0[1].offset;
>> -    shiftNum = IF_INTERNAL_PREC - X265_DEPTH;
>> -    shift   = wp0[1].shift + shiftNum;
>> -    round   = shift ? (1 << (shift - 1)) : 0;
>> +        for (y = height - 1; y >= 0; y--)
>> +        {
>> +            for (x = width - 1; x >= 0; )
>> +            {
>> +                // note: chroma min width is 2
>> +                dstV[x] = weightUnidirC(w0, srcV0[x], round, shift,
>> offset);
>> +                x--;
>> +                dstV[x] = weightUnidirC(w0, srcV0[x], round, shift,
>> offset);
>> +                x--;
>> +            }
>>
>> -    src0Stride = srcYuv0->getCStride();
>> -    dststride  = outDstYuv->getCStride();
>> -
>> -    width  >>= 1;
>> -    height >>= 1;
>> -
>> -    for (y = height - 1; y >= 0; y--)
>> -    {
>> -        for (x = width - 1; x >= 0; )
>> -        {
>> -            // note: chroma min width is 2
>> -            dstU[x] = weightUnidirC(w0, srcU0[x], round, shift, offset);
>> -            x--;
>> -            dstU[x] = weightUnidirC(w0, srcU0[x], round, shift, offset);
>> -            x--;
>> +            srcV0 += src0Stride;
>> +            dstV  += dststride;
>>          }
>> -
>> -        srcU0 += src0Stride;
>> -        dstU  += dststride;
>> -    }
>> -
>> -    // Chroma V : --------------------------------------------
>> -    w0      = wp0[2].w;
>> -    offset  = wp0[2].offset;
>> -    shift   = wp0[2].shift + shiftNum;
>> -    round   = shift ? (1 << (shift - 1)) : 0;
>> -
>> -    for (y = height - 1; y >= 0; y--)
>> -    {
>> -        for (x = width - 1; x >= 0; )
>> -        {
>> -            // note: chroma min width is 2
>> -            dstV[x] = weightUnidirC(w0, srcV0[x], round, shift, offset);
>> -            x--;
>> -            dstV[x] = weightUnidirC(w0, srcV0[x], round, shift, offset);
>> -            x--;
>> -        }
>> -
>> -        srcV0 += src0Stride;
>> -        dstV  += dststride;
>>      }
>>  }
>>
>> @@ -406,7 +430,7 @@
>>   * \returns void
>>   */
>>
>> -void TComWeightPrediction::addWeightUni(TShortYUV* srcYuv0, UInt
>> partUnitIdx, UInt width, UInt height, wpScalingParam *wp0, TComYuv*
>> outDstYuv, bool justChroma)
>> +void TComWeightPrediction::addWeightUni(TShortYUV* srcYuv0, UInt
>> partUnitIdx, UInt width, UInt height, wpScalingParam *wp0, TComYuv*
>> outDstYuv, bool bLuma, bool bChroma)
>>  {
>>      short* srcY0  = srcYuv0->getLumaAddr(partUnitIdx);
>>      short* srcU0  = srcYuv0->getCbAddr(partUnitIdx);
>> @@ -420,7 +444,7 @@
>>      int w0, offset, shiftNum, shift, round;
>>      UInt srcStride, dstStride;
>>
>> -    if(!justChroma)
>> +    if (bLuma)
>>      {
>>          // Luma : --------------------------------------------
>>          w0      = wp0[0].w;
>> @@ -434,28 +458,31 @@
>>          primitives.weightpUni((int16_t *)srcY0, dstY, srcStride,
>> dstStride, width, height, w0, round, shift, offset);
>>      }
>>
>> -    // Chroma U : --------------------------------------------
>> -    w0      = wp0[1].w;
>> -    offset  = wp0[1].offset;
>> -    shiftNum = IF_INTERNAL_PREC - X265_DEPTH;
>> -    shift   = wp0[1].shift + shiftNum;
>> -    round   = shift ? (1 << (shift - 1)) : 0;
>> +    if (bChroma)
>> +    {
>> +        // Chroma U : --------------------------------------------
>> +        w0      = wp0[1].w;
>> +        offset  = wp0[1].offset;
>> +        shiftNum = IF_INTERNAL_PREC - X265_DEPTH;
>> +        shift   = wp0[1].shift + shiftNum;
>> +        round   = shift ? (1 << (shift - 1)) : 0;
>>
>> -    srcStride = srcYuv0->m_cwidth;
>> -    dstStride  = outDstYuv->getCStride();
>> +        srcStride = srcYuv0->m_cwidth;
>> +        dstStride  = outDstYuv->getCStride();
>>
>> -    width  >>= 1;
>> -    height >>= 1;
>> +        width  >>= 1;
>> +        height >>= 1;
>>
>> -    primitives.weightpUni((int16_t *)srcU0, dstU, srcStride, dstStride,
>> width, height, w0, round, shift, offset);
>> +        primitives.weightpUni((int16_t *)srcU0, dstU, srcStride,
>> dstStride, width, height, w0, round, shift, offset);
>>
>> -    // Chroma V : --------------------------------------------
>> -    w0      = wp0[2].w;
>> -    offset  = wp0[2].offset;
>> -    shift   = wp0[2].shift + shiftNum;
>> -    round   = shift ? (1 << (shift - 1)) : 0;
>> +        // Chroma V : --------------------------------------------
>> +        w0      = wp0[2].w;
>> +        offset  = wp0[2].offset;
>> +        shift   = wp0[2].shift + shiftNum;
>> +        round   = shift ? (1 << (shift - 1)) : 0;
>>
>> -    primitives.weightpUni((int16_t *)srcV0, dstV, srcStride, dstStride,
>> width, height, w0, round, shift, offset);
>> +        primitives.weightpUni((int16_t *)srcV0, dstV, srcStride,
>> dstStride, width, height, w0, round, shift, offset);
>> +    }
>>  }
>>
>>  //=======================================================
>> @@ -546,7 +573,7 @@
>>   * \param TComYuv* outDstYuv
>>   * \returns void
>>   */
>> -void TComWeightPrediction::xWeightedPredictionBi(TComDataCU* cu,
>> TComYuv* srcYuv0, TComYuv* srcYuv1, int refIdx0, int refIdx1, UInt partIdx,
>> int width, int height, TComYuv* outDstYuv)
>> +void TComWeightPrediction::xWeightedPredictionBi(TComDataCU* cu,
>> TComYuv* srcYuv0, TComYuv* srcYuv1, int refIdx0, int refIdx1, UInt partIdx,
>> int width, int height, TComYuv* outDstYuv, bool bLuma, bool bChroma)
>>  {
>>      wpScalingParam  *pwp0, *pwp1;
>>
>> @@ -554,15 +581,15 @@
>>
>>      if (refIdx0 >= 0 && refIdx1 >= 0)
>>      {
>> -        addWeightBi(srcYuv0, srcYuv1, partIdx, width, height, pwp0,
>> pwp1, outDstYuv);
>> +        addWeightBi(srcYuv0, srcYuv1, partIdx, width, height, pwp0,
>> pwp1, outDstYuv, bLuma, bChroma);
>>      }
>>      else if (refIdx0 >= 0 && refIdx1 <  0)
>>      {
>> -        addWeightUni(srcYuv0, partIdx, width, height, pwp0, outDstYuv);
>> +        addWeightUni(srcYuv0, partIdx, width, height, pwp0, outDstYuv,
>> bLuma, bChroma);
>>      }
>>      else if (refIdx0 <  0 && refIdx1 >= 0)
>>      {
>> -        addWeightUni(srcYuv1, partIdx, width, height, pwp1, outDstYuv);
>> +        addWeightUni(srcYuv1, partIdx, width, height, pwp1, outDstYuv,
>> bLuma, bChroma);
>>      }
>>      else
>>      {
>> @@ -582,7 +609,7 @@
>>   * \param TComYuv* outDstYuv
>>   * \returns void
>>   */
>> -void TComWeightPrediction::xWeightedPredictionBi(TComDataCU* cu,
>> TShortYUV* srcYuv0, TShortYUV* srcYuv1, int refIdx0, int refIdx1, UInt
>> partIdx, int width, int height, TComYuv* outDstYuv)
>> +void TComWeightPrediction::xWeightedPredictionBi(TComDataCU* cu,
>> TShortYUV* srcYuv0, TShortYUV* srcYuv1, int refIdx0, int refIdx1, UInt
>> partIdx, int width, int height, TComYuv* outDstYuv, bool bLuma, bool
>> bChroma)
>>  {
>>      wpScalingParam  *pwp0, *pwp1;
>>
>> @@ -590,15 +617,15 @@
>>
>>      if (refIdx0 >= 0 && refIdx1 >= 0)
>>      {
>> -        addWeightBi(srcYuv0, srcYuv1, partIdx, width, height, pwp0,
>> pwp1, outDstYuv);
>> +        addWeightBi(srcYuv0, srcYuv1, partIdx, width, height, pwp0,
>> pwp1, outDstYuv, bLuma, bChroma);
>>      }
>>      else if (refIdx0 >= 0 && refIdx1 <  0)
>>      {
>> -        addWeightUni(srcYuv0, partIdx, width, height, pwp0, outDstYuv);
>> +        addWeightUni(srcYuv0, partIdx, width, height, pwp0, outDstYuv,
>> bLuma, bChroma);
>>      }
>>      else if (refIdx0 <  0 && refIdx1 >= 0)
>>      {
>> -        addWeightUni(srcYuv1, partIdx, width, height, pwp1, outDstYuv);
>> +        addWeightUni(srcYuv1, partIdx, width, height, pwp1, outDstYuv,
>> bLuma, bChroma);
>>      }
>>      else
>>      {
>> @@ -618,7 +645,7 @@
>>   * \param refIdx
>>   * \returns void
>>   */
>> -void TComWeightPrediction::xWeightedPredictionUni(TComDataCU* cu,
>> TComYuv* srcYuv, UInt partAddr, int width, int height, RefPicList picList,
>> TComYuv*& outPredYuv, int refIdx)
>> +void TComWeightPrediction::xWeightedPredictionUni(TComDataCU* cu,
>> TComYuv* srcYuv, UInt partAddr, int width, int height, RefPicList picList,
>> TComYuv*& outPredYuv, int refIdx, bool bLuma, bool bChroma)
>>  {
>>      wpScalingParam  *pwp, *pwpTmp;
>>
>> @@ -636,7 +663,7 @@
>>      {
>>          getWpScaling(cu, -1, refIdx, pwpTmp, pwp);
>>      }
>> -    addWeightUni(srcYuv, partAddr, width, height, pwp, outPredYuv);
>> +    addWeightUni(srcYuv, partAddr, width, height, pwp, outPredYuv,
>> bLuma, bChroma);
>>  }
>>
>>  /** weighted prediction for uni-pred
>> @@ -651,7 +678,7 @@
>>   * \param refIdx
>>   * \returns void
>>   */
>> -void TComWeightPrediction::xWeightedPredictionUni(TComDataCU* cu,
>> TShortYUV* srcYuv, UInt partAddr, int width, int height, RefPicList
>> picList, TComYuv*& outPredYuv, int refIdx)
>> +void TComWeightPrediction::xWeightedPredictionUni(TComDataCU* cu,
>> TShortYUV* srcYuv, UInt partAddr, int width, int height, RefPicList
>> picList, TComYuv*& outPredYuv, int refIdx, bool bLuma, bool bChroma)
>>  {
>>      wpScalingParam  *pwp, *pwpTmp;
>>
>> @@ -669,5 +696,5 @@
>>      {
>>          getWpScaling(cu, -1, refIdx, pwpTmp, pwp);
>>      }
>> -    addWeightUni(srcYuv, partAddr, width, height, pwp, outPredYuv);
>> +    addWeightUni(srcYuv, partAddr, width, height, pwp, outPredYuv,
>> bLuma, bChroma);
>>  }
>> diff -r 3cdbc62783e1 -r ac7aa89eae11
>> source/Lib/TLibCommon/TComWeightPrediction.h
>> --- a/source/Lib/TLibCommon/TComWeightPrediction.h      Wed Oct 16
>> 12:17:21 2013 +0530
>> +++ b/source/Lib/TLibCommon/TComWeightPrediction.h      Wed Oct 16
>> 17:18:19 2013 +0530
>> @@ -60,15 +60,15 @@
>>
>>      void  getWpScaling(TComDataCU* cu, int refIdx0, int refIdx1,
>> wpScalingParam *&wp0, wpScalingParam *&wp1);
>>
>> -    void  addWeightBi(TComYuv* srcYuv0, TComYuv* srcYuv1, UInt
>> partUnitIdx, UInt width, UInt height, wpScalingParam *wp0, wpScalingParam
>> *wp1, TComYuv* outDstYuv, bool bRound = true);
>> -    void  addWeightBi(TShortYUV* srcYuv0, TShortYUV* srcYuv1, UInt
>> partUnitIdx, UInt width, UInt height, wpScalingParam *wp0, wpScalingParam
>> *wp1, TComYuv* outDstYuv, bool bRound = true);
>> -    void  addWeightUni(TComYuv* srcYuv0, UInt partUnitIdx, UInt width,
>> UInt height, wpScalingParam *wp0, TComYuv* outDstYuv);
>> -    void  addWeightUni(TShortYUV* srcYuv0, UInt partUnitIdx, UInt width,
>> UInt height, wpScalingParam *wp0, TComYuv* outDstYuv, bool justChroma =
>> false);
>> +    void  addWeightBi(TComYuv* srcYuv0, TComYuv* srcYuv1, UInt
>> partUnitIdx, UInt width, UInt height, wpScalingParam *wp0, wpScalingParam
>> *wp1, TComYuv* outDstYuv, bool bRound = true, bool bLuma = true, bool
>> bChroma = true);
>> +    void  addWeightBi(TShortYUV* srcYuv0, TShortYUV* srcYuv1, UInt
>> partUnitIdx, UInt width, UInt height, wpScalingParam *wp0, wpScalingParam
>> *wp1, TComYuv* outDstYuv, bool bRound = true, bool bLuma = true, bool
>> bChroma = true);
>> +    void  addWeightUni(TComYuv* srcYuv0, UInt partUnitIdx, UInt width,
>> UInt height, wpScalingParam *wp0, TComYuv* outDstYuv, bool bLuma = true,
>> bool bChroma = true);
>> +    void  addWeightUni(TShortYUV* srcYuv0, UInt partUnitIdx, UInt width,
>> UInt height, wpScalingParam *wp0, TComYuv* outDstYuv, bool bLuma = true,
>> bool bChroma = true);
>>
>> -    void  xWeightedPredictionUni(TComDataCU* cu, TComYuv* srcYuv, UInt
>> partAddr, int width, int height, RefPicList picList, TComYuv*& outPredYuv,
>> int refIdx = -1);
>> -    void  xWeightedPredictionUni(TComDataCU* cu, TShortYUV* srcYuv, UInt
>> partAddr, int width, int height, RefPicList picList, TComYuv*& outPredYuv,
>> int refIdx = -1);
>> -    void  xWeightedPredictionBi(TComDataCU* cu, TComYuv* srcYuv0,
>> TComYuv* srcYuv1, int refIdx0, int refIdx1, UInt partIdx, int width, int
>> height, TComYuv* outDstYuv);
>> -    void  xWeightedPredictionBi(TComDataCU* cu, TShortYUV* srcYuv0,
>> TShortYUV* srcYuv1, int refIdx0, int refIdx1, UInt partIdx, int width, int
>> height, TComYuv* outDstYuv);
>> +    void  xWeightedPredictionUni(TComDataCU* cu, TComYuv* srcYuv, UInt
>> partAddr, int width, int height, RefPicList picList, TComYuv*& outPredYuv,
>> int refIdx = -1, bool bLuma = true, bool bChroma = true);
>> +    void  xWeightedPredictionUni(TComDataCU* cu, TShortYUV* srcYuv, UInt
>> partAddr, int width, int height, RefPicList picList, TComYuv*& outPredYuv,
>> int refIdx = -1, bool bLuma = true, bool bChroma = true);
>> +    void  xWeightedPredictionBi(TComDataCU* cu, TComYuv* srcYuv0,
>> TComYuv* srcYuv1, int refIdx0, int refIdx1, UInt partIdx, int width, int
>> height, TComYuv* outDstYuv, bool bLuma = true, bool bChroma = true);
>> +    void  xWeightedPredictionBi(TComDataCU* cu, TShortYUV* srcYuv0,
>> TShortYUV* srcYuv1, int refIdx0, int refIdx1, UInt partIdx, int width, int
>> height, TComYuv* outDstYuv, bool bLuma = true, bool bChroma = true);
>>  };
>>  }
>>
>> diff -r 3cdbc62783e1 -r ac7aa89eae11 source/Lib/TLibCommon/TComYuv.cpp
>> --- a/source/Lib/TLibCommon/TComYuv.cpp Wed Oct 16 12:17:21 2013 +0530
>> +++ b/source/Lib/TLibCommon/TComYuv.cpp Wed Oct 16 17:18:19 2013 +0530
>> @@ -234,16 +234,20 @@
>>      primitives.blockcpy_pp(uiCWidth, uiCHeight, dstV, dststride, srcV,
>> srcstride);
>>  }
>>
>> -void TComYuv::copyPartToPartYuv(TComYuv* dstPicYuv, UInt partIdx, UInt
>> width, UInt height)
>> +void TComYuv::copyPartToPartYuv(TComYuv* dstPicYuv, UInt partIdx, UInt
>> width, UInt height, bool bLuma, bool bChroma)
>>  {
>> -    copyPartToPartLuma(dstPicYuv, partIdx, width, height);
>> -    copyPartToPartChroma(dstPicYuv, partIdx, width >> 1, height >> 1);
>> +    if(bLuma)
>> +        copyPartToPartLuma(dstPicYuv, partIdx, width, height);
>> +    if(bChroma)
>> +        copyPartToPartChroma(dstPicYuv, partIdx, width >> 1, height >>
>> 1);
>>  }
>>
>> -void TComYuv::copyPartToPartYuv(TShortYUV* dstPicYuv, UInt partIdx, UInt
>> width, UInt height)
>> +void TComYuv::copyPartToPartYuv(TShortYUV* dstPicYuv, UInt partIdx, UInt
>> width, UInt height, bool bLuma, bool bChroma)
>>  {
>> -    copyPartToPartLuma(dstPicYuv, partIdx, width, height);
>> -    copyPartToPartChroma(dstPicYuv, partIdx, width >> 1, height >> 1);
>> +    if(bLuma)
>> +        copyPartToPartLuma(dstPicYuv, partIdx, width, height);
>> +    if(bChroma)
>> +        copyPartToPartChroma(dstPicYuv, partIdx, width >> 1, height >>
>> 1);
>>  }
>>
>>  void TComYuv::copyPartToPartLuma(TComYuv* dstPicYuv, UInt partIdx, UInt
>> width, UInt height)
>> @@ -529,9 +533,11 @@
>>      }
>>  }
>>
>> -void TComYuv::addAvg(TComYuv* srcYuv0, TComYuv* srcYuv1, UInt
>> partUnitIdx, UInt width, UInt height)
>> +void TComYuv::addAvg(TComYuv* srcYuv0, TComYuv* srcYuv1, UInt
>> partUnitIdx, UInt width, UInt height, bool bLuma, bool bChroma)
>>  {
>>      int x, y;
>> +    UInt src0Stride, src1Stride, dststride;
>> +    int shiftNum, offset;
>>
>>      Pel* srcY0 = srcYuv0->getLumaAddr(partUnitIdx);
>>      Pel* srcU0 = srcYuv0->getCbAddr(partUnitIdx);
>> @@ -545,62 +551,69 @@
>>      Pel* dstU  = getCbAddr(partUnitIdx);
>>      Pel* dstV  = getCrAddr(partUnitIdx);
>>
>> -    UInt src0Stride = srcYuv0->getStride();
>> -    UInt src1Stride = srcYuv1->getStride();
>> -    UInt dststride  = getStride();
>> -    int shiftNum = IF_INTERNAL_PREC + 1 - X265_DEPTH;
>> -    int offset = (1 << (shiftNum - 1)) + 2 * IF_INTERNAL_OFFS;
>> +    if(bLuma)
>> +    {
>> +        src0Stride = srcYuv0->getStride();
>> +        src1Stride = srcYuv1->getStride();
>> +        dststride  = getStride();
>> +        shiftNum = IF_INTERNAL_PREC + 1 - X265_DEPTH;
>> +        offset = (1 << (shiftNum - 1)) + 2 * IF_INTERNAL_OFFS;
>>
>> -    for (y = 0; y < height; y++)
>> +        for (y = 0; y < height; y++)
>> +        {
>> +            for (x = 0; x < width; x += 4)
>> +            {
>> +                dstY[x + 0] = ClipY((srcY0[x + 0] + srcY1[x + 0] +
>> offset) >> shiftNum);
>> +                dstY[x + 1] = ClipY((srcY0[x + 1] + srcY1[x + 1] +
>> offset) >> shiftNum);
>> +                dstY[x + 2] = ClipY((srcY0[x + 2] + srcY1[x + 2] +
>> offset) >> shiftNum);
>> +                dstY[x + 3] = ClipY((srcY0[x + 3] + srcY1[x + 3] +
>> offset) >> shiftNum);
>> +            }
>> +
>> +            srcY0 += src0Stride;
>> +            srcY1 += src1Stride;
>> +            dstY  += dststride;
>> +        }
>> +    }
>> +    if(bChroma)
>>      {
>> -        for (x = 0; x < width; x += 4)
>> +        shiftNum = IF_INTERNAL_PREC + 1 - X265_DEPTH;
>> +        offset = (1 << (shiftNum - 1)) + 2 * IF_INTERNAL_OFFS;
>> +
>> +        src0Stride = srcYuv0->getCStride();
>> +        src1Stride = srcYuv1->getCStride();
>> +        dststride  = getCStride();
>> +
>> +        width  >>= 1;
>> +        height >>= 1;
>> +
>> +        for (y = height - 1; y >= 0; y--)
>>          {
>> -            dstY[x + 0] = ClipY((srcY0[x + 0] + srcY1[x + 0] + offset)
>> >> shiftNum);
>> -            dstY[x + 1] = ClipY((srcY0[x + 1] + srcY1[x + 1] + offset)
>> >> shiftNum);
>> -            dstY[x + 2] = ClipY((srcY0[x + 2] + srcY1[x + 2] + offset)
>> >> shiftNum);
>> -            dstY[x + 3] = ClipY((srcY0[x + 3] + srcY1[x + 3] + offset)
>> >> shiftNum);
>> +            for (x = width - 1; x >= 0; )
>> +            {
>> +                // note: chroma min width is 2
>> +                dstU[x] = ClipC((srcU0[x] + srcU1[x] + offset) >>
>> shiftNum);
>> +                dstV[x] = ClipC((srcV0[x] + srcV1[x] + offset) >>
>> shiftNum);
>> +                x--;
>> +                dstU[x] = ClipC((srcU0[x] + srcU1[x] + offset) >>
>> shiftNum);
>> +                dstV[x] = ClipC((srcV0[x] + srcV1[x] + offset) >>
>> shiftNum);
>> +                x--;
>> +            }
>> +
>> +            srcU0 += src0Stride;
>> +            srcU1 += src1Stride;
>> +            srcV0 += src0Stride;
>> +            srcV1 += src1Stride;
>> +            dstU  += dststride;
>> +            dstV  += dststride;
>>          }
>> -
>> -        srcY0 += src0Stride;
>> -        srcY1 += src1Stride;
>> -        dstY  += dststride;
>> -    }
>> -
>> -    shiftNum = IF_INTERNAL_PREC + 1 - X265_DEPTH;
>> -    offset = (1 << (shiftNum - 1)) + 2 * IF_INTERNAL_OFFS;
>> -
>> -    src0Stride = srcYuv0->getCStride();
>> -    src1Stride = srcYuv1->getCStride();
>> -    dststride  = getCStride();
>> -
>> -    width  >>= 1;
>> -    height >>= 1;
>> -
>> -    for (y = height - 1; y >= 0; y--)
>> -    {
>> -        for (x = width - 1; x >= 0; )
>> -        {
>> -            // note: chroma min width is 2
>> -            dstU[x] = ClipC((srcU0[x] + srcU1[x] + offset) >> shiftNum);
>> -            dstV[x] = ClipC((srcV0[x] + srcV1[x] + offset) >> shiftNum);
>> -            x--;
>> -            dstU[x] = ClipC((srcU0[x] + srcU1[x] + offset) >> shiftNum);
>> -            dstV[x] = ClipC((srcV0[x] + srcV1[x] + offset) >> shiftNum);
>> -            x--;
>> -        }
>> -
>> -        srcU0 += src0Stride;
>> -        srcU1 += src1Stride;
>> -        srcV0 += src0Stride;
>> -        srcV1 += src1Stride;
>> -        dstU  += dststride;
>> -        dstV  += dststride;
>>      }
>>  }
>>
>> -void TComYuv::addAvg(TShortYUV* srcYuv0, TShortYUV* srcYuv1, UInt
>> partUnitIdx, UInt width, UInt height)
>> +void TComYuv::addAvg(TShortYUV* srcYuv0, TShortYUV* srcYuv1, UInt
>> partUnitIdx, UInt width, UInt height, bool bLuma, bool bChroma)
>>  {
>>      int x, y;
>> +    UInt src0Stride, src1Stride, dststride;
>> +    int shiftNum, offset;
>>
>>      short* srcY0 = srcYuv0->getLumaAddr(partUnitIdx);
>>      short* srcU0 = srcYuv0->getCbAddr(partUnitIdx);
>> @@ -614,56 +627,61 @@
>>      Pel* dstU = getCbAddr(partUnitIdx);
>>      Pel* dstV = getCrAddr(partUnitIdx);
>>
>> -    UInt src0Stride = srcYuv0->m_width;
>> -    UInt src1Stride = srcYuv1->m_width;
>> -    UInt dststride  = getStride();
>> -    int shiftNum = IF_INTERNAL_PREC + 1 - X265_DEPTH;
>> -    int offset = (1 << (shiftNum - 1)) + 2 * IF_INTERNAL_OFFS;
>> +    if(bLuma)
>> +    {
>> +        src0Stride = srcYuv0->m_width;
>> +        src1Stride = srcYuv1->m_width;
>> +        dststride  = getStride();
>> +        shiftNum = IF_INTERNAL_PREC + 1 - X265_DEPTH;
>> +        offset = (1 << (shiftNum - 1)) + 2 * IF_INTERNAL_OFFS;
>>
>> -    for (y = 0; y < height; y++)
>> +        for (y = 0; y < height; y++)
>> +        {
>> +            for (x = 0; x < width; x += 4)
>> +            {
>> +                dstY[x + 0] = ClipY((srcY0[x + 0] + srcY1[x + 0] +
>> offset) >> shiftNum);
>> +                dstY[x + 1] = ClipY((srcY0[x + 1] + srcY1[x + 1] +
>> offset) >> shiftNum);
>> +                dstY[x + 2] = ClipY((srcY0[x + 2] + srcY1[x + 2] +
>> offset) >> shiftNum);
>> +                dstY[x + 3] = ClipY((srcY0[x + 3] + srcY1[x + 3] +
>> offset) >> shiftNum);
>> +            }
>> +
>> +            srcY0 += src0Stride;
>> +            srcY1 += src1Stride;
>> +            dstY  += dststride;
>> +        }
>> +    }
>> +    if(bChroma)
>>      {
>> -        for (x = 0; x < width; x += 4)
>> +        shiftNum = IF_INTERNAL_PREC + 1 - X265_DEPTH;
>> +        offset = (1 << (shiftNum - 1)) + 2 * IF_INTERNAL_OFFS;
>> +
>> +        src0Stride = srcYuv0->m_cwidth;
>> +        src1Stride = srcYuv1->m_cwidth;
>> +        dststride  = getCStride();
>> +
>> +        width  >>= 1;
>> +        height >>= 1;
>> +
>> +        for (y = height - 1; y >= 0; y--)
>>          {
>> -            dstY[x + 0] = ClipY((srcY0[x + 0] + srcY1[x + 0] + offset)
>> >> shiftNum);
>> -            dstY[x + 1] = ClipY((srcY0[x + 1] + srcY1[x + 1] + offset)
>> >> shiftNum);
>> -            dstY[x + 2] = ClipY((srcY0[x + 2] + srcY1[x + 2] + offset)
>> >> shiftNum);
>> -            dstY[x + 3] = ClipY((srcY0[x + 3] + srcY1[x + 3] + offset)
>> >> shiftNum);
>> +            for (x = width - 1; x >= 0; )
>> +            {
>> +                // note: chroma min width is 2
>> +                dstU[x] = ClipC((srcU0[x] + srcU1[x] + offset) >>
>> shiftNum);
>> +                dstV[x] = ClipC((srcV0[x] + srcV1[x] + offset) >>
>> shiftNum);
>> +                x--;
>> +                dstU[x] = ClipC((srcU0[x] + srcU1[x] + offset) >>
>> shiftNum);
>> +                dstV[x] = ClipC((srcV0[x] + srcV1[x] + offset) >>
>> shiftNum);
>> +                x--;
>> +            }
>> +
>> +            srcU0 += src0Stride;
>> +            srcU1 += src1Stride;
>> +            srcV0 += src0Stride;
>> +            srcV1 += src1Stride;
>> +            dstU  += dststride;
>> +            dstV  += dststride;
>>          }
>> -
>> -        srcY0 += src0Stride;
>> -        srcY1 += src1Stride;
>> -        dstY  += dststride;
>> -    }
>> -
>> -    shiftNum = IF_INTERNAL_PREC + 1 - X265_DEPTH;
>> -    offset = (1 << (shiftNum - 1)) + 2 * IF_INTERNAL_OFFS;
>> -
>> -    src0Stride = srcYuv0->m_cwidth;
>> -    src1Stride = srcYuv1->m_cwidth;
>> -    dststride  = getCStride();
>> -
>> -    width  >>= 1;
>> -    height >>= 1;
>> -
>> -    for (y = height - 1; y >= 0; y--)
>> -    {
>> -        for (x = width - 1; x >= 0; )
>> -        {
>> -            // note: chroma min width is 2
>> -            dstU[x] = ClipC((srcU0[x] + srcU1[x] + offset) >> shiftNum);
>> -            dstV[x] = ClipC((srcV0[x] + srcV1[x] + offset) >> shiftNum);
>> -            x--;
>> -            dstU[x] = ClipC((srcU0[x] + srcU1[x] + offset) >> shiftNum);
>> -            dstV[x] = ClipC((srcV0[x] + srcV1[x] + offset) >> shiftNum);
>> -            x--;
>> -        }
>> -
>> -        srcU0 += src0Stride;
>> -        srcU1 += src1Stride;
>> -        srcV0 += src0Stride;
>> -        srcV1 += src1Stride;
>> -        dstU  += dststride;
>> -        dstV  += dststride;
>>      }
>>  }
>>
>> diff -r 3cdbc62783e1 -r ac7aa89eae11 source/Lib/TLibCommon/TComYuv.h
>> --- a/source/Lib/TLibCommon/TComYuv.h   Wed Oct 16 12:17:21 2013 +0530
>> +++ b/source/Lib/TLibCommon/TComYuv.h   Wed Oct 16 17:18:19 2013 +0530
>> @@ -132,8 +132,8 @@
>>      void    copyPartToChroma(TComYuv* dstPicYuv, UInt uiSrcPartIdx);
>>
>>      //  Copy YUV partition buffer to other YUV partition buffer
>> -    void    copyPartToPartYuv(TComYuv* dstPicYuv, UInt partIdx, UInt
>> width, UInt height);
>> -    void    copyPartToPartYuv(TShortYUV* dstPicYuv, UInt partIdx, UInt
>> width, UInt height);
>> +    void    copyPartToPartYuv(TComYuv* dstPicYuv, UInt partIdx, UInt
>> width, UInt height, bool bLuma = true, bool bChroma = true);
>> +    void    copyPartToPartYuv(TShortYUV* dstPicYuv, UInt partIdx, UInt
>> width, UInt height, bool bLuma = true, bool bChroma = true);
>>      void    copyPartToPartLuma(TComYuv* dstPicYuv, UInt partIdx, UInt
>> width, UInt height);
>>      void    copyPartToPartLuma(TShortYUV* dstPicYuv, UInt partIdx, UInt
>> width, UInt height);
>>      void    copyPartToPartChroma(TComYuv* dstPicYuv, UInt partIdx, UInt
>> width, UInt height);
>> @@ -160,8 +160,8 @@
>>      void    subtractChroma(TComYuv* srcYuv0, TComYuv* srcYuv1, UInt
>> trUnitIdx, UInt partSize);
>>
>>      //  (srcYuv0 + srcYuv1)/2 for YUV partition
>> -    void    addAvg(TComYuv* srcYuv0, TComYuv* srcYuv1, UInt partUnitIdx,
>> UInt width, UInt height);
>> -    void    addAvg(TShortYUV* srcYuv0, TShortYUV* srcYuv1, UInt
>> partUnitIdx, UInt width, UInt height);
>> +    void    addAvg(TComYuv* srcYuv0, TComYuv* srcYuv1, UInt partUnitIdx,
>> UInt width, UInt height, bool bLuma = true, bool bChroma = true);
>> +    void    addAvg(TShortYUV* srcYuv0, TShortYUV* srcYuv1, UInt
>> partUnitIdx, UInt width, UInt height, bool bLuma = true, bool bChroma =
>> true);
>>
>>      //   Remove High frequency
>>      void    removeHighFreq(TComYuv* srcYuv, UInt partIdx, UInt width,
>> UInt height);
>> diff -r 3cdbc62783e1 -r ac7aa89eae11 source/Lib/TLibEncoder/TEncSearch.cpp
>> --- a/source/Lib/TLibEncoder/TEncSearch.cpp     Wed Oct 16 12:17:21 2013
>> +0530
>> +++ b/source/Lib/TLibEncoder/TEncSearch.cpp     Wed Oct 16 17:18:19 2013
>> +0530
>> @@ -2196,7 +2196,7 @@
>>   * \param bUseMRG
>>   * \returns void
>>   */
>> -void TEncSearch::predInterSearch(TComDataCU* cu, TComYuv* predYuv, bool
>> bUseMRG)
>> +void TEncSearch::predInterSearch(TComDataCU* cu, TComYuv* predYuv, bool
>> bUseMRG, bool bLuma, bool bChroma)
>>  {
>>      MV mvzero(0, 0);
>>      MV mv[2];
>> @@ -2521,7 +2521,7 @@
>>  #endif
>>              }
>>          }
>> -        motionCompensation(cu, predYuv, REF_PIC_LIST_X, partIdx);
>> +        motionCompensation(cu, predYuv, REF_PIC_LIST_X, partIdx, bLuma,
>> bChroma);
>>      }
>>
>>      setWpScalingDistParam(cu, -1, REF_PIC_LIST_X);
>> diff -r 3cdbc62783e1 -r ac7aa89eae11 source/Lib/TLibEncoder/TEncSearch.h
>> --- a/source/Lib/TLibEncoder/TEncSearch.h       Wed Oct 16 12:17:21 2013
>> +0530
>> +++ b/source/Lib/TLibEncoder/TEncSearch.h       Wed Oct 16 17:18:19 2013
>> +0530
>> @@ -142,7 +142,7 @@
>>                                TComYuv* reconYuv, UInt precalcDistC);
>>
>>      /// encoder estimation - inter prediction (non-skip)
>> -    void predInterSearch(TComDataCU* cu, TComYuv* predYuv, bool bUseMRG
>> = false);
>> +    void predInterSearch(TComDataCU* cu, TComYuv* predYuv, bool bUseMRG
>> = false, bool bLuma = true, bool bChroma = true);
>>
>>      /// encode residual and compute rd-cost for inter mode
>>      void encodeResAndCalcRdInterCU(TComDataCU* cu, TComYuv* fencYuv,
>> TComYuv* predYuv, TShortYUV* resiYuv, TShortYUV* bestResiYuv,
>> _______________________________________________
>> x265-devel mailing list
>> x265-devel at videolan.org
>> https://mailman.videolan.org/listinfo/x265-devel
>>
>
>
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20131021/e2df311a/attachment-0001.html>


More information about the x265-devel mailing list