[x265-commits] [x265] slicetype: Bidir cost estimation added to lookahead

Deepthi Devaki deepthidevaki at multicorewareinc.com
Tue Oct 8 21:48:01 CEST 2013


details:   http://hg.videolan.org/x265/rev/0204da76bdb6
branches:  
changeset: 4275:0204da76bdb6
user:      Deepthi Devaki <deepthidevaki at multicorewareinc.com>
date:      Tue Oct 08 12:47:30 2013 +0530
description:
slicetype: Bidir cost estimation added to lookahead
Subject: [x265] primitives: added C primitives to compute SSIM

details:   http://hg.videolan.org/x265/rev/279e050947cf
branches:  
changeset: 4276:279e050947cf
user:      Aarthi Thirumalai
date:      Tue Oct 08 17:06:57 2013 +0530
description:
primitives: added C primitives to compute SSIM
Subject: [x265] calculate SSIM for each Row after deblock, sao

details:   http://hg.videolan.org/x265/rev/349206daad1d
branches:  
changeset: 4277:349206daad1d
user:      Aarthi Thirumalai
date:      Tue Oct 08 17:12:22 2013 +0530
description:
calculate SSIM for each Row after deblock, sao
Subject: [x265] Update testbench for threadpool

details:   http://hg.videolan.org/x265/rev/57c15726158a
branches:  
changeset: 4278:57c15726158a
user:      Min Chen <chenm003 at 163.com>
date:      Tue Oct 08 17:34:51 2013 +0800
description:
Update testbench for threadpool
Subject: [x265] TComSlice: Removed un-used createExplicitReferencePictureSetFromReference() Method

details:   http://hg.videolan.org/x265/rev/268a34d4389f
branches:  
changeset: 4279:268a34d4389f
user:      Gopu Govindaswamy <gopu at multicorewareinc.com>
date:      Tue Oct 08 14:22:29 2013 +0530
description:
TComSlice: Removed un-used createExplicitReferencePictureSetFromReference() Method
Subject: [x265] tcomslice: removed un-used checkThatAllRefPicsAreAvailable() function

details:   http://hg.videolan.org/x265/rev/ed0d3fd544e6
branches:  
changeset: 4280:ed0d3fd544e6
user:      Gopu Govindaswamy <gopu at multicorewareinc.com>
date:      Tue Oct 08 14:25:32 2013 +0530
description:
tcomslice: removed un-used checkThatAllRefPicsAreAvailable() function
Subject: [x265] tcomslice: removed un-used sortPicList() function

details:   http://hg.videolan.org/x265/rev/91aea72a1de9
branches:  
changeset: 4281:91aea72a1de9
user:      Gopu Govindaswamy <gopu at multicorewareinc.com>
date:      Tue Oct 08 14:28:37 2013 +0530
description:
tcomslice: removed un-used sortPicList() function
Subject: [x265] pixel8.inc: replace calcRecons4 vector class function with intrinsic.

details:   http://hg.videolan.org/x265/rev/d2c8e7248f4a
branches:  
changeset: 4282:d2c8e7248f4a
user:      Dnyaneshwar Gorade <dnyaneshwar at multicorewareinc.com>
date:      Tue Oct 08 13:33:45 2013 +0530
description:
pixel8.inc: replace calcRecons4 vector class function with intrinsic.
Subject: [x265] pixel8.inc: replace calcRecons8 vector class function with intrinsic.

details:   http://hg.videolan.org/x265/rev/1d2e192467a8
branches:  
changeset: 4283:1d2e192467a8
user:      Dnyaneshwar Gorade <dnyaneshwar at multicorewareinc.com>
date:      Tue Oct 08 13:52:58 2013 +0530
description:
pixel8.inc: replace calcRecons8 vector class function with intrinsic.
Subject: [x265] pixel8.inc: replace calcRecons vector class function with intrinsic.

details:   http://hg.videolan.org/x265/rev/add71d9845a7
branches:  
changeset: 4284:add71d9845a7
user:      Dnyaneshwar Gorade <dnyaneshwar at multicorewareinc.com>
date:      Tue Oct 08 14:07:39 2013 +0530
description:
pixel8.inc: replace calcRecons vector class function with intrinsic.
Subject: [x265] pixel: replace getResidual16 from vector class to intrinsic

details:   http://hg.videolan.org/x265/rev/c27e9b8951d0
branches:  
changeset: 4285:c27e9b8951d0
user:      Yuvaraj Venkatesh <yuvaraj at multicorewareinc.com>
date:      Tue Oct 08 14:16:23 2013 +0530
description:
pixel: replace getResidual16 from vector class to intrinsic
Subject: [x265] pixel: replace getResidual32 from vector class to intrinsic

details:   http://hg.videolan.org/x265/rev/1e53142731ab
branches:  
changeset: 4286:1e53142731ab
user:      Yuvaraj Venkatesh <yuvaraj at multicorewareinc.com>
date:      Tue Oct 08 14:33:26 2013 +0530
description:
pixel: replace getResidual32 from vector class to intrinsic
Subject: [x265] pixel: replace getResidual64 from vector class to intrinsic

details:   http://hg.videolan.org/x265/rev/bb27ac985cb9
branches:  
changeset: 4287:bb27ac985cb9
user:      Yuvaraj Venkatesh <yuvaraj at multicorewareinc.com>
date:      Tue Oct 08 14:49:05 2013 +0530
description:
pixel: replace getResidual64 from vector class to intrinsic
Subject: [x265] piclist: add class PicList for picture list manipulations

details:   http://hg.videolan.org/x265/rev/df812d396499
branches:  
changeset: 4288:df812d396499
user:      Gopu Govindaswamy <gopu at multicorewareinc.com>
date:      Tue Oct 08 17:16:00 2013 +0530
description:
piclist: add class PicList for picture list manipulations

Created new file piclist.cpp and piclist.h for linked list manipulation, there
will be no intermediate storage in piclist, PicList just links TComPic objects
together.

PicList will be used to replace TComList<TComPic> and this will remove std::list
dependency in x265
Subject: [x265] piclist: pass non-optional pictures by reference to avoid NULL checks

details:   http://hg.videolan.org/x265/rev/71afca6c173b
branches:  
changeset: 4289:71afca6c173b
user:      Steve Borho <steve at borho.org>
date:      Tue Oct 08 13:55:25 2013 -0500
description:
piclist: pass non-optional pictures by reference to avoid NULL checks
Subject: [x265] Use unweighted pixels before interpolation for Luma in Motion Compensation

details:   http://hg.videolan.org/x265/rev/65f56d5e2ee7
branches:  
changeset: 4290:65f56d5e2ee7
user:      Shazeb Nawaz Khan <shazeb at multicorewareinc.com>
date:      Tue Oct 08 16:44:13 2013 +0530
description:
Use unweighted pixels before interpolation for Luma in Motion Compensation
Subject: [x265] Fix for possible memory access violation in applyWeight()

details:   http://hg.videolan.org/x265/rev/85cc6aaac7ec
branches:  
changeset: 4291:85cc6aaac7ec
user:      Shazeb Nawaz Khan <shazeb at multicorewareinc.com>
date:      Tue Oct 08 16:52:07 2013 +0530
description:
Fix for possible memory access violation in applyWeight()
Subject: [x265] Check against numRows in applyweight

details:   http://hg.videolan.org/x265/rev/7831bda44186
branches:  
changeset: 4292:7831bda44186
user:      Shazeb Nawaz Khan <shazeb at multicorewareinc.com>
date:      Tue Oct 08 16:56:39 2013 +0530
description:
Check against numRows in applyweight

applyWeight() processes rows a 'refLag' number of rows in advance as compared to
the current iteration in compressCTURows()

diffstat:

 source/Lib/TLibCommon/TComPic.cpp        |    2 +
 source/Lib/TLibCommon/TComPic.h          |    3 +
 source/Lib/TLibCommon/TComPrediction.cpp |    6 +-
 source/Lib/TLibCommon/TComSlice.cpp      |  279 -------------------------------
 source/Lib/TLibCommon/TComSlice.h        |    4 -
 source/Lib/TLibEncoder/TEncTop.cpp       |    9 +-
 source/common/CMakeLists.txt             |    3 +-
 source/common/piclist.cpp                |  137 +++++++++++++++
 source/common/piclist.h                  |   73 ++++++++
 source/common/pixel.cpp                  |   54 ++++++
 source/common/primitives.h               |    6 +
 source/common/reference.cpp              |    9 +-
 source/common/vec/pixel8.inc             |  243 +++++++++++++++------------
 source/encoder/frameencoder.cpp          |   65 +++++++-
 source/encoder/frameencoder.h            |    6 +
 source/encoder/slicetype.cpp             |   60 ++++++
 source/test/testpool.cpp                 |    7 +
 17 files changed, 567 insertions(+), 399 deletions(-)

diffs (truncated from 1291 to 300 lines):

diff -r 9b3a427a1009 -r 7831bda44186 source/Lib/TLibCommon/TComPic.cpp
--- a/source/Lib/TLibCommon/TComPic.cpp	Tue Oct 08 11:12:12 2013 +0530
+++ b/source/Lib/TLibCommon/TComPic.cpp	Tue Oct 08 16:56:39 2013 +0530
@@ -59,6 +59,8 @@ TComPic::TComPic()
     m_reconRowCount = 0;
     m_countRefEncoders = 0;
     memset(&m_lowres, 0, sizeof(m_lowres));
+    m_next = NULL;
+    m_prev = NULL;
 }
 
 TComPic::~TComPic()
diff -r 9b3a427a1009 -r 7831bda44186 source/Lib/TLibCommon/TComPic.h
--- a/source/Lib/TLibCommon/TComPic.h	Tue Oct 08 11:12:12 2013 +0530
+++ b/source/Lib/TLibCommon/TComPic.h	Tue Oct 08 16:56:39 2013 +0530
@@ -81,6 +81,9 @@ public:
 
     Lowres                m_lowres;
 
+    TComPic*              m_next;
+    TComPic*              m_prev;
+
     TComPic();
     virtual ~TComPic();
 
diff -r 9b3a427a1009 -r 7831bda44186 source/Lib/TLibCommon/TComPrediction.cpp
--- a/source/Lib/TLibCommon/TComPrediction.cpp	Tue Oct 08 11:12:12 2013 +0530
+++ b/source/Lib/TLibCommon/TComPrediction.cpp	Tue Oct 08 16:56:39 2013 +0530
@@ -265,7 +265,7 @@ void TComPrediction::motionCompensation(
                 MV mv = cu->getCUMvField(picList)->getMv(partAddr);
                 cu->clipMv(mv);
 
-                xPredInterLumaBlk(cu, cu->getSlice()->m_mref[picList][refId], partAddr, &mv, width, height, predYuv);
+                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);
@@ -305,7 +305,7 @@ void TComPrediction::motionCompensation(
                 MV mv = cu->getCUMvField(picList)->getMv(partAddr);
                 cu->clipMv(mv);
 
-                xPredInterLumaBlk(cu, cu->getSlice()->m_mref[picList][refId], partAddr, &mv, width, height, predYuv);
+                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);
@@ -422,7 +422,7 @@ void TComPrediction::xPredInterBi(TComDa
             MV mv = cu->getCUMvField(picList)->getMv(partAddr);
             cu->clipMv(mv);
 
-            xPredInterLumaBlk(cu, cu->getSlice()->m_mref[picList][refId], partAddr, &mv, width, height, outPredYuv);
+            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);
diff -r 9b3a427a1009 -r 7831bda44186 source/Lib/TLibCommon/TComSlice.cpp
--- a/source/Lib/TLibCommon/TComSlice.cpp	Tue Oct 08 11:12:12 2013 +0530
+++ b/source/Lib/TLibCommon/TComSlice.cpp	Tue Oct 08 16:56:39 2013 +0530
@@ -153,45 +153,6 @@ void  TComSlice::allocSubstreamSizes(UIn
     m_substreamSizes = new UInt[numSubstreams > 0 ? numSubstreams - 1 : 0];
 }
 
-void  TComSlice::sortPicList(TComList<TComPic*>& picList)
-{
-    TComPic* picExtract;
-    TComPic* picInsert;
-
-    TComList<TComPic*>::iterator iterPicExtract;
-    TComList<TComPic*>::iterator iterPicExtract_1;
-    TComList<TComPic*>::iterator iterPicInsert;
-
-    for (int i = 1; i < (int)(picList.size()); i++)
-    {
-        iterPicExtract = picList.begin();
-        for (int j = 0; j < i; j++)
-        {
-            iterPicExtract++;
-        }
-
-        picExtract = *(iterPicExtract);
-        iterPicInsert = picList.begin();
-        while (iterPicInsert != iterPicExtract)
-        {
-            picInsert = *(iterPicInsert);
-            if (picInsert->getPOC() >= picExtract->getPOC())
-            {
-                break;
-            }
-
-            iterPicInsert++;
-        }
-
-        iterPicExtract_1 = iterPicExtract;
-        iterPicExtract_1++;
-
-        //  swap iterPicExtract and iterPicInsert, iterPicExtract = curr. / iterPicInsert = insertion position
-        picList.insert(iterPicInsert, iterPicExtract, iterPicExtract_1);
-        picList.erase(iterPicExtract);
-    }
-}
-
 TComPic* TComSlice::xGetRefPic(TComList<TComPic*>& picList, int poc)
 {
     TComList<TComPic*>::iterator iterPic = picList.begin();
@@ -611,246 +572,6 @@ void TComSlice::copySliceInfo(TComSlice 
     m_maxNumMergeCand = src->m_maxNumMergeCand;
 }
 
-/** Function for applying picture marking based on the Reference Picture Set in pReferencePictureSet.
-*/
-int TComSlice::checkThatAllRefPicsAreAvailable(TComList<TComPic*>& picList, TComReferencePictureSet *rps, bool printErrors, int pocRandomAccess)
-{
-    TComPic* outPic;
-    int i, isAvailable;
-    int atLeastOneLost = 0;
-    int atLeastOneRemoved = 0;
-    int iPocLost = 0;
-
-    // loop through all long-term pictures in the Reference Picture Set
-    // to see if the picture should be kept as reference picture
-    for (i = rps->getNumberOfNegativePictures() + rps->getNumberOfPositivePictures(); i < rps->getNumberOfPictures(); i++)
-    {
-        isAvailable = 0;
-        // loop through all pictures in the reference picture buffer
-        TComList<TComPic*>::iterator iterPic = picList.begin();
-        while (iterPic != picList.end())
-        {
-            outPic = *(iterPic++);
-            if (rps->getCheckLTMSBPresent(i) == true)
-            {
-                if (outPic->getIsLongTerm() && (outPic->getPicSym()->getSlice()->getPOC()) == rps->getPOC(i) && outPic->getSlice()->isReferenced())
-                {
-                    isAvailable = 1;
-                }
-            }
-            else
-            {
-                if (outPic->getIsLongTerm() && (outPic->getPicSym()->getSlice()->getPOC() % (1 << outPic->getPicSym()->getSlice()->getSPS()->getBitsForPOC())) == rps->getPOC(i) % (1 << outPic->getPicSym()->getSlice()->getSPS()->getBitsForPOC()) && outPic->getSlice()->isReferenced())
-                {
-                    isAvailable = 1;
-                }
-            }
-        }
-
-        // if there was no such long-term check the short terms
-        if (!isAvailable)
-        {
-            iterPic = picList.begin();
-            while (iterPic != picList.end())
-            {
-                outPic = *(iterPic++);
-
-                int pocCycle = 1 << outPic->getPicSym()->getSlice()->getSPS()->getBitsForPOC();
-                int curPoc = outPic->getPicSym()->getSlice()->getPOC();
-                int refPoc = rps->getPOC(i);
-                if (!rps->getCheckLTMSBPresent(i))
-                {
-                    curPoc = curPoc % pocCycle;
-                    refPoc = refPoc % pocCycle;
-                }
-
-                if (outPic->getSlice()->isReferenced() && curPoc == refPoc)
-                {
-                    isAvailable = 1;
-                    outPic->setIsLongTerm(1);
-                    break;
-                }
-            }
-        }
-        // report that a picture is lost if it is in the Reference Picture Set
-        // but not available as reference picture
-        if (isAvailable == 0)
-        {
-            if (this->getPOC() + rps->getDeltaPOC(i) >= pocRandomAccess)
-            {
-                if (!rps->getUsed(i))
-                {
-                    if (printErrors)
-                    {
-                        printf("\nLong-term reference picture with POC = %3d seems to have been removed or not correctly decoded.", this->getPOC() + rps->getDeltaPOC(i));
-                    }
-                    atLeastOneRemoved = 1;
-                }
-                else
-                {
-                    if (printErrors)
-                    {
-                        printf("\nLong-term reference picture with POC = %3d is lost or not correctly decoded!", this->getPOC() + rps->getDeltaPOC(i));
-                    }
-                    atLeastOneLost = 1;
-                    iPocLost = this->getPOC() + rps->getDeltaPOC(i);
-                }
-            }
-        }
-    }
-
-    // loop through all short-term pictures in the Reference Picture Set
-    // to see if the picture should be kept as reference picture
-    for (i = 0; i < rps->getNumberOfNegativePictures() + rps->getNumberOfPositivePictures(); i++)
-    {
-        isAvailable = 0;
-        // loop through all pictures in the reference picture buffer
-        TComList<TComPic*>::iterator iterPic = picList.begin();
-        while (iterPic != picList.end())
-        {
-            outPic = *(iterPic++);
-
-            if (!outPic->getIsLongTerm() && outPic->getPicSym()->getSlice()->getPOC() == this->getPOC() + rps->getDeltaPOC(i) &&
-                outPic->getSlice()->isReferenced())
-            {
-                isAvailable = 1;
-            }
-        }
-
-        // report that a picture is lost if it is in the Reference Picture Set
-        // but not available as reference picture
-        if (isAvailable == 0)
-        {
-            if (this->getPOC() + rps->getDeltaPOC(i) >= pocRandomAccess)
-            {
-                if (!rps->getUsed(i))
-                {
-                    if (printErrors)
-                    {
-                        printf("\nShort-term reference picture with POC = %3d seems to have been removed or not correctly decoded.",
-                               this->getPOC() + rps->getDeltaPOC(i));
-                    }
-                    atLeastOneRemoved = 1;
-                }
-                else
-                {
-                    if (printErrors)
-                    {
-                        printf("\nShort-term reference picture with POC = %3d is lost or not correctly decoded!", this->getPOC() + rps->getDeltaPOC(i));
-                    }
-                    atLeastOneLost = 1;
-                    iPocLost = this->getPOC() + rps->getDeltaPOC(i);
-                }
-            }
-        }
-    }
-
-    if (atLeastOneLost)
-    {
-        return iPocLost + 1;
-    }
-    if (atLeastOneRemoved)
-    {
-        return -2;
-    }
-    else
-    {
-        return 0;
-    }
-}
-
-/** Function for constructing an explicit Reference Picture Set out of the available pictures in a referenced Reference Picture Set
-*/
-void TComSlice::createExplicitReferencePictureSetFromReference(TComList<TComPic*>& picList, TComReferencePictureSet *rps, bool isRAP)
-{
-    TComPic* outPic;
-    int i, j;
-    int k = 0;
-    int nrOfNegativePictures = 0;
-    int nrOfPositivePictures = 0;
-    TComReferencePictureSet* refRPS = this->getLocalRPS();
-
-    // loop through all pictures in the Reference Picture Set
-    for (i = 0; i < rps->getNumberOfPictures(); i++)
-    {
-        j = 0;
-        // loop through all pictures in the reference picture buffer
-        TComList<TComPic*>::iterator iterPic = picList.begin();
-        while (iterPic != picList.end())
-        {
-            j++;
-            outPic = *(iterPic++);
-
-            if (outPic->getPicSym()->getSlice()->getPOC() == this->getPOC() + rps->getDeltaPOC(i) && outPic->getSlice()->isReferenced())
-            {
-                // This picture exists as a reference picture
-                // and should be added to the explicit Reference Picture Set
-                refRPS->setDeltaPOC(k, rps->getDeltaPOC(i));
-                refRPS->setUsed(k, rps->getUsed(i) && (!isRAP));
-                if (refRPS->getDeltaPOC(k) < 0)
-                {
-                    nrOfNegativePictures++;
-                }
-                else
-                {
-                    nrOfPositivePictures++;
-                }
-                k++;
-            }
-        }
-    }
-
-    refRPS->setNumberOfNegativePictures(nrOfNegativePictures);
-    refRPS->setNumberOfPositivePictures(nrOfPositivePictures);
-    refRPS->setNumberOfPictures(nrOfNegativePictures + nrOfPositivePictures);


More information about the x265-commits mailing list