[x265] [PATCH 2 of 2] Removing older code which initalizes RPS
Steve Borho
steve at borho.org
Thu Aug 22 21:34:28 CEST 2013
On Thu, Aug 22, 2013 at 7:54 AM, <shazeb at multicorewareinc.com> wrote:
> # HG changeset patch
> # User Shazeb N Khan
> # Date 1377173199 -19800
> # Thu Aug 22 17:36:39 2013 +0530
> # Node ID fae72778182c554fe25ff5a949b0249afd5b2525
> # Parent 34c63b8389c6f688cec7ac869943df32577fb28e
> Removing older code which initalizes RPS
>
I love patches like this. I can't wait till we can apply it.
> diff -r 34c63b8389c6 -r fae72778182c source/encoder/dpb.cpp
> --- a/source/encoder/dpb.cpp Thu Aug 22 17:34:01 2013 +0530
> +++ b/source/encoder/dpb.cpp Thu Aug 22 17:36:39 2013 +0530
> @@ -644,229 +644,6 @@
> _param->lookaheadDepth = m_gopSize;
> }
>
> - bool verifiedGOP = false;
> - bool errorGOP = false;
> - int checkGOP = 1;
> - int numRefs = 1;
> -
> - int refList[MAX_NUM_REF_PICS + 1];
> - refList[0] = 0;
> - bool isOK[MAX_GOP];
> - for (Int i = 0; i < MAX_GOP; i++)
> - {
> - isOK[i] = false;
> - }
> -
> - int numOK = 0;
> - if (_param->bOpenGOP == false)
> - CONFIRM(_param->keyframeMax % m_gopSize != 0, "Intra period must
> be a multiple of GOPSize");
> -
> - m_extraRPSs = 0;
> - // start looping through frames in coding order until we can verify
> that the GOP structure is correct.
> - while (!verifiedGOP && !errorGOP)
> - {
> - Int curGOP = (checkGOP - 1) % m_gopSize;
> - Int curPOC = ((checkGOP - 1) / m_gopSize) * m_gopSize +
> m_gopList[curGOP].m_POC;
> - if (m_gopList[curGOP].m_POC < 0)
> - {
> - printf("\nError: found fewer Reference Picture Sets than
> GOPSize\n");
> - errorGOP = true;
> - }
> - else
> - {
> - //check that all reference pictures are available, or have a
> POC < 0 meaning they might be available in the next GOP.
> - Bool beforeI = false;
> - for (Int i = 0; i < m_gopList[curGOP].m_numRefPics; i++)
> - {
> - Int absPOC = curPOC +
> m_gopList[curGOP].m_referencePics[i];
> - if (absPOC < 0)
> - {
> - beforeI = true;
> - }
> - else
> - {
> - Bool found = false;
> - for (Int j = 0; j < numRefs; j++)
> - {
> - if (refList[j] == absPOC)
> - {
> - found = true;
> - for (Int k = 0; k < m_gopSize; k++)
> - {
> - if (absPOC % m_gopSize ==
> m_gopList[k].m_POC % m_gopSize)
> - {
> - m_gopList[k].m_refPic = true;
> - m_gopList[curGOP].m_usedByCurrPic[i]
> = 1;
> - }
> - }
> - }
> - }
> -
> - if (!found)
> - {
> - printf("\nError: ref pic %d is not available for
> GOP frame %d\n", m_gopList[curGOP].m_referencePics[i], curGOP + 1);
> - errorGOP = true;
> - }
> - }
> - }
> -
> - if (!beforeI && !errorGOP)
> - {
> - //all ref frames were present
> - if (!isOK[curGOP])
> - {
> - numOK++;
> - isOK[curGOP] = true;
> - if (numOK == m_gopSize)
> - {
> - verifiedGOP = true;
> - }
> - }
> - }
> - else
> - {
> - //create a new GOPEntry for this frame containing all the
> reference pictures that were available (POC > 0)
> - m_gopList[m_gopSize + m_extraRPSs] = m_gopList[curGOP];
> - Int newRefs = 0;
> - for (Int i = 0; i < m_gopList[curGOP].m_numRefPics; i++)
> - {
> - Int absPOC = curPOC +
> m_gopList[curGOP].m_referencePics[i];
> - if (absPOC >= 0)
> - {
> - m_gopList[m_gopSize +
> m_extraRPSs].m_referencePics[newRefs] =
> m_gopList[curGOP].m_referencePics[i];
> - m_gopList[m_gopSize +
> m_extraRPSs].m_usedByCurrPic[newRefs] =
> m_gopList[curGOP].m_usedByCurrPic[i];
> - newRefs++;
> - }
> - }
> -
> - Int numPrefRefs = m_gopList[curGOP].m_numRefPicsActive;
> -
> - for (Int offset = -1; offset > -checkGOP; offset--)
> - {
> - //step backwards in coding order and include any
> extra available pictures we might find useful to replace the ones with POC
> < 0.
> - Int offGOP = (checkGOP - 1 + offset) % m_gopSize;
> - Int offPOC = ((checkGOP - 1 + offset) / m_gopSize) *
> m_gopSize + m_gopList[offGOP].m_POC;
> - if (offPOC >= 0)
> - {
> - Bool newRef = false;
> - for (Int i = 0; i < numRefs; i++)
> - {
> - if (refList[i] == offPOC)
> - {
> - newRef = true;
> - }
> - }
> -
> - for (Int i = 0; i < newRefs; i++)
> - {
> - if (m_gopList[m_gopSize +
> m_extraRPSs].m_referencePics[i] == offPOC - curPOC)
> - {
> - newRef = false;
> - }
> - }
> -
> - if (newRef)
> - {
> - Int insertPoint = newRefs;
> - //this picture can be added, find appropriate
> place in list and insert it.
> - m_gopList[offGOP].m_refPic = true;
> - for (Int j = 0; j < newRefs; j++)
> - {
> - if (m_gopList[m_gopSize +
> m_extraRPSs].m_referencePics[j] < offPOC - curPOC || m_gopList[m_gopSize +
> m_extraRPSs].m_referencePics[j] > 0)
> - {
> - insertPoint = j;
> - break;
> - }
> - }
> -
> - Int prev = offPOC - curPOC;
> - Int prevUsed = 1;
> - for (Int j = insertPoint; j < newRefs + 1;
> j++)
> - {
> - Int newPrev = m_gopList[m_gopSize +
> m_extraRPSs].m_referencePics[j];
> - Int newUsed = m_gopList[m_gopSize +
> m_extraRPSs].m_usedByCurrPic[j];
> - m_gopList[m_gopSize +
> m_extraRPSs].m_referencePics[j] = prev;
> - m_gopList[m_gopSize +
> m_extraRPSs].m_usedByCurrPic[j] = prevUsed;
> - prevUsed = newUsed;
> - prev = newPrev;
> - }
> -
> - newRefs++;
> - }
> - }
> - if (newRefs >= numPrefRefs)
> - {
> - break;
> - }
> - }
> -
> - m_gopList[m_gopSize + m_extraRPSs].m_numRefPics = newRefs;
> - m_gopList[m_gopSize + m_extraRPSs].m_POC = curPOC;
> - if (m_extraRPSs == 0)
> - {
> - m_gopList[m_gopSize +
> m_extraRPSs].m_interRPSPrediction = 0;
> - m_gopList[m_gopSize + m_extraRPSs].m_numRefIdc = 0;
> - }
> - else
> - {
> - Int rIdx = m_gopSize + m_extraRPSs - 1;
> - Int refPOC = m_gopList[rIdx].m_POC;
> - Int refPics = m_gopList[rIdx].m_numRefPics;
> - Int newIdc = 0;
> - for (Int i = 0; i <= refPics; i++)
> - {
> - Int deltaPOC = ((i != refPics) ?
> m_gopList[rIdx].m_referencePics[i] : 0); // check if the reference abs POC
> is >= 0
> - Int absPOCref = refPOC + deltaPOC;
> - Int refIdc = 0;
> - for (Int j = 0; j < m_gopList[m_gopSize +
> m_extraRPSs].m_numRefPics; j++)
> - {
> - if ((absPOCref - curPOC) ==
> m_gopList[m_gopSize + m_extraRPSs].m_referencePics[j])
> - {
> - if (m_gopList[m_gopSize +
> m_extraRPSs].m_usedByCurrPic[j])
> - {
> - refIdc = 1;
> - }
> - else
> - {
> - refIdc = 2;
> - }
> - }
> - }
> -
> - m_gopList[m_gopSize +
> m_extraRPSs].m_refIdc[newIdc] = refIdc;
> - newIdc++;
> - }
> -
> - m_gopList[m_gopSize +
> m_extraRPSs].m_interRPSPrediction = 1;
> - m_gopList[m_gopSize + m_extraRPSs].m_numRefIdc =
> newIdc;
> - m_gopList[m_gopSize + m_extraRPSs].m_deltaRPS =
> refPOC - m_gopList[m_gopSize + m_extraRPSs].m_POC;
> - }
> - curGOP = m_gopSize + m_extraRPSs;
> - m_extraRPSs++;
> - }
> - numRefs = 0;
> - for (Int i = 0; i < m_gopList[curGOP].m_numRefPics; i++)
> - {
> - Int absPOC = curPOC +
> m_gopList[curGOP].m_referencePics[i];
> - if (absPOC >= 0)
> - {
> - refList[numRefs] = absPOC;
> - numRefs++;
> - }
> - }
> -
> - refList[numRefs] = curPOC;
> - numRefs++;
> - }
> - checkGOP++;
> - }
> -
> - CONFIRM(errorGOP, "Invalid GOP structure given");
> - for (Int i = 0; i < m_gopSize; i++)
> - {
> - CONFIRM(m_gopList[i].m_sliceType != 'B' &&
> m_gopList[i].m_sliceType != 'P', "Slice type must be equal to B or P");
> - }
> -
> for (Int i = 0; i < MAX_TLAYER; i++)
> {
> m_numReorderPics[i] = 0;
> diff -r 34c63b8389c6 -r fae72778182c source/encoder/frameencoder.cpp
> --- a/source/encoder/frameencoder.cpp Thu Aug 22 17:34:01 2013 +0530
> +++ b/source/encoder/frameencoder.cpp Thu Aug 22 17:36:39 2013 +0530
> @@ -109,7 +109,6 @@
> m_pps.setSPS(&m_sps);
>
> top->xInitPPS(&m_pps);
> - top->xInitRPS(&m_sps);
>
This method of TEncTop can most surely go away as well.
--
Steve
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.videolan.org/private/x265-devel/attachments/20130822/0fcdbf1c/attachment-0001.html>
More information about the x265-devel
mailing list