[x265-commits] [x265] ratecontrol: fix indentations

Steve Borho steve at borho.org
Tue Apr 15 22:03:21 CEST 2014


details:   http://hg.videolan.org/x265/rev/1cf67a7b362d
branches:  
changeset: 6711:1cf67a7b362d
user:      Steve Borho <steve at borho.org>
date:      Mon Apr 14 21:26:37 2014 -0500
description:
ratecontrol: fix indentations
Subject: [x265] fix: constrained intra

details:   http://hg.videolan.org/x265/rev/0a95a6bb0f8e
branches:  
changeset: 6712:0a95a6bb0f8e
user:      Satoshi Nakagawa <nakagawa424 at oki.com>
date:      Tue Apr 15 12:34:36 2014 +0900
description:
fix: constrained intra
Subject: [x265] vui: emit VUI w/ timing info unconditionally, remove timing info from VPS

details:   http://hg.videolan.org/x265/rev/8ebadea05bfe
branches:  
changeset: 6713:8ebadea05bfe
user:      Steve Borho <steve at borho.org>
date:      Mon Apr 14 23:25:07 2014 -0500
description:
vui: emit VUI w/ timing info unconditionally, remove timing info from VPS

Since many tools seem to only look in the VUI for timing info, it seems to be
best to output that info there, and remove it from the VPS (to avoid sending
redundant data in our headers)
Subject: [x265] fix: rdLevel <= 1

details:   http://hg.videolan.org/x265/rev/9735b037b461
branches:  
changeset: 6714:9735b037b461
user:      Satoshi Nakagawa <nakagawa424 at oki.com>
date:      Tue Apr 15 18:30:39 2014 +0900
description:
fix: rdLevel <= 1
Subject: [x265] vbv: clear row diagonal and cu SATD costs after vbv row reset was triggered

details:   http://hg.videolan.org/x265/rev/166e4d6e819e
branches:  
changeset: 6715:166e4d6e819e
user:      Aarthi Thirumalai
date:      Tue Apr 15 22:04:21 2014 +0530
description:
vbv: clear row diagonal and cu SATD costs after vbv row reset was triggered

refs #45
Subject: [x265] cli: help nits (closes #47)

details:   http://hg.videolan.org/x265/rev/0b696c7f46f2
branches:  
changeset: 6716:0b696c7f46f2
user:      Steve Borho <steve at borho.org>
date:      Tue Apr 15 14:07:33 2014 -0500
description:
cli: help nits (closes #47)

diffstat:

 doc/reST/cli.rst                      |   12 +---
 source/CMakeLists.txt                 |    2 +-
 source/Lib/TLibCommon/TComPattern.cpp |   48 ++++++++++++----
 source/Lib/TLibEncoder/TEncSearch.cpp |    8 +-
 source/common/param.cpp               |    5 -
 source/encoder/encoder.cpp            |  101 ++++++++++++++-------------------
 source/encoder/frameencoder.cpp       |   12 +++-
 source/encoder/ratecontrol.cpp        |    8 +-
 source/x265.cpp                       |    7 +-
 source/x265.h                         |    7 --
 10 files changed, 104 insertions(+), 106 deletions(-)

diffs (truncated from 409 to 300 lines):

diff -r 08d64a70594e -r 0b696c7f46f2 doc/reST/cli.rst
--- a/doc/reST/cli.rst	Mon Apr 14 13:18:18 2014 -0500
+++ b/doc/reST/cli.rst	Tue Apr 15 14:07:33 2014 -0500
@@ -621,9 +621,9 @@ Quality reporting metrics
 VUI (Video Usability Information) options
 =========================================
 
-By default x265 does not emit a VUI in the SPS, but if you specify any
-of the VUI fields (:option:`--sar`, :option:`--range`, etc) the VUI is
-implicitly enabled.
+x265 emits a VUI with only the timing info by default. If the SAR is
+specified (or read from a Y4M header) it is also included.  All other
+VUI fields must be manually specified.
 
 .. option:: --sar <integer|w:h>
 
@@ -736,12 +736,6 @@ implicitly enabled.
 	Specify chroma sample location for 4:2:0 inputs. Default undefined
 	Consult the HEVC specification for a description of these values.
 
-.. option:: --timinginfo, --no-timinginfo
-
-	Add timing information to the VUI. This is identical to the timing
-	info reported in the PPS header but is sometimes required.  Default
-	disabled
-
 Bitstream options
 =================
 
diff -r 08d64a70594e -r 0b696c7f46f2 source/CMakeLists.txt
--- a/source/CMakeLists.txt	Mon Apr 14 13:18:18 2014 -0500
+++ b/source/CMakeLists.txt	Tue Apr 15 14:07:33 2014 -0500
@@ -19,7 +19,7 @@ include(CheckSymbolExists)
 include(CheckCXXCompilerFlag)
 
 # X265_BUILD must be incremented each time the public API is changed
-set(X265_BUILD 15)
+set(X265_BUILD 16)
 configure_file("${PROJECT_SOURCE_DIR}/x265.def.in"
                "${PROJECT_BINARY_DIR}/x265.def")
 configure_file("${PROJECT_SOURCE_DIR}/x265_config.h.in"
diff -r 08d64a70594e -r 0b696c7f46f2 source/Lib/TLibCommon/TComPattern.cpp
--- a/source/Lib/TLibCommon/TComPattern.cpp	Mon Apr 14 13:18:18 2014 -0500
+++ b/source/Lib/TLibCommon/TComPattern.cpp	Tue Apr 15 14:07:33 2014 -0500
@@ -79,12 +79,24 @@ void TComPattern::initAdiPattern(TComDat
     int  leftUnits       = cuHeightInUnits << 1;
     partIdxLB            = g_rasterToZscan[g_zscanToRaster[partIdxLT] + ((cuHeightInUnits - 1) * partIdxStride)];
 
-    bNeighborFlags[leftUnits] = isAboveLeftAvailable(cu, partIdxLT);
-    numIntraNeighbor += (int)(bNeighborFlags[leftUnits]);
-    numIntraNeighbor += isAboveAvailable(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1));
-    numIntraNeighbor += isAboveRightAvailable(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1 + cuWidthInUnits));
-    numIntraNeighbor += isLeftAvailable(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits - 1));
-    numIntraNeighbor += isBelowLeftAvailable(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits   - 1 - cuHeightInUnits));
+    if (!cu->getSlice()->getPPS()->getConstrainedIntraPred())
+    {
+        bNeighborFlags[leftUnits] = isAboveLeftAvailable(cu, partIdxLT);
+        numIntraNeighbor += (int)(bNeighborFlags[leftUnits]);
+        numIntraNeighbor += isAboveAvailable(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1));
+        numIntraNeighbor += isAboveRightAvailable(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1 + cuWidthInUnits));
+        numIntraNeighbor += isLeftAvailable(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits - 1));
+        numIntraNeighbor += isBelowLeftAvailable(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits   - 1 - cuHeightInUnits));
+    }
+    else
+    {
+        bNeighborFlags[leftUnits] = isAboveLeftAvailableCIP(cu, partIdxLT);
+        numIntraNeighbor += (int)(bNeighborFlags[leftUnits]);
+        numIntraNeighbor += isAboveAvailableCIP(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1));
+        numIntraNeighbor += isAboveRightAvailableCIP(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1 + cuWidthInUnits));
+        numIntraNeighbor += isLeftAvailableCIP(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits - 1));
+        numIntraNeighbor += isBelowLeftAvailableCIP(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits   - 1 - cuHeightInUnits));
+    }
 
     width = cuWidth2 + 1;
     height = cuHeight2 + 1;
@@ -238,12 +250,24 @@ void TComPattern::initAdiPatternChroma(T
     int  leftUnits       = cuHeightInUnits << 1;
     partIdxLB            = g_rasterToZscan[g_zscanToRaster[partIdxLT] + ((cuHeightInUnits - 1) * partIdxStride)];
 
-    bNeighborFlags[leftUnits] = isAboveLeftAvailable(cu, partIdxLT);
-    numIntraNeighbor += (int)(bNeighborFlags[leftUnits]);
-    numIntraNeighbor += isAboveAvailable(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1));
-    numIntraNeighbor += isAboveRightAvailable(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1 + cuWidthInUnits));
-    numIntraNeighbor += isLeftAvailable(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits - 1));
-    numIntraNeighbor += isBelowLeftAvailable(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits   - 1 - cuHeightInUnits));
+    if (!cu->getSlice()->getPPS()->getConstrainedIntraPred())
+    {
+        bNeighborFlags[leftUnits] = isAboveLeftAvailable(cu, partIdxLT);
+        numIntraNeighbor += (int)(bNeighborFlags[leftUnits]);
+        numIntraNeighbor += isAboveAvailable(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1));
+        numIntraNeighbor += isAboveRightAvailable(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1 + cuWidthInUnits));
+        numIntraNeighbor += isLeftAvailable(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits - 1));
+        numIntraNeighbor += isBelowLeftAvailable(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits   - 1 - cuHeightInUnits));
+    }
+    else
+    {
+        bNeighborFlags[leftUnits] = isAboveLeftAvailableCIP(cu, partIdxLT);
+        numIntraNeighbor += (int)(bNeighborFlags[leftUnits]);
+        numIntraNeighbor += isAboveAvailableCIP(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1));
+        numIntraNeighbor += isAboveRightAvailableCIP(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1 + cuWidthInUnits));
+        numIntraNeighbor += isLeftAvailableCIP(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits - 1));
+        numIntraNeighbor += isBelowLeftAvailableCIP(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits   - 1 - cuHeightInUnits));
+    }
 
     width = cuWidth * 2 + 1;
     height = cuHeight * 2 + 1;
diff -r 08d64a70594e -r 0b696c7f46f2 source/Lib/TLibEncoder/TEncSearch.cpp
--- a/source/Lib/TLibEncoder/TEncSearch.cpp	Mon Apr 14 13:18:18 2014 -0500
+++ b/source/Lib/TLibEncoder/TEncSearch.cpp	Tue Apr 15 14:07:33 2014 -0500
@@ -1440,8 +1440,8 @@ void TEncSearch::residualQTIntrachroma(T
                 chromaPredMode = cu->getLumaIntraDir(0);
             }
             //===== init availability pattern =====
-            TComPattern::initAdiPatternChroma(cu, absPartIdx, trDepth, m_predBuf, m_predBufStride, m_predBufHeight, chromaId);
-            pixel* chromaPred = TComPattern::getAdiChromaBuf(chromaId, height, m_predBuf);
+            TComPattern::initAdiPatternChroma(cu, absPartIdx, trDepth, m_predBuf, m_predBufStride, m_predBufHeight, chromaId + 1);
+            pixel* chromaPred = TComPattern::getAdiChromaBuf(chromaId + 1, height, m_predBuf);
 
             //===== get prediction signal =====
             predIntraChromaAng(chromaPred, chromaPredMode, pred, stride, width, height, chFmt);
@@ -1807,8 +1807,8 @@ void TEncSearch::getBestIntraModeChroma(
         costShift = 2;
     }
 
-    TComPattern::initAdiPatternChroma(cu, absPartIdx, trDepth, m_predBuf, m_predBufStride, m_predBufHeight, 0);
     TComPattern::initAdiPatternChroma(cu, absPartIdx, trDepth, m_predBuf, m_predBufStride, m_predBufHeight, 1);
+    TComPattern::initAdiPatternChroma(cu, absPartIdx, trDepth, m_predBuf, m_predBufStride, m_predBufHeight, 2);
     cu->getAllowedChromaDir(0, modeList);
     //----- check chroma modes -----
     for (uint32_t mode = minMode; mode < maxMode; mode++)
@@ -1822,7 +1822,7 @@ void TEncSearch::getBestIntraModeChroma(
                 chromaPredMode = cu->getLumaIntraDir(0);
             pixel* fenc = (chromaId > 0 ? fencYuv->getCrAddr(absPartIdx) : fencYuv->getCbAddr(absPartIdx));
             pixel* pred = (chromaId > 0 ? predYuv->getCrAddr(absPartIdx) : predYuv->getCbAddr(absPartIdx));
-            pixel* chromaPred = TComPattern::getAdiChromaBuf(chromaId, height, m_predBuf);
+            pixel* chromaPred = TComPattern::getAdiChromaBuf(chromaId + 1, height, m_predBuf);
 
             //===== get prediction signal =====
             predIntraChromaAng(chromaPred, chromaPredMode, pred, stride, width, height, chFmt);
diff -r 08d64a70594e -r 0b696c7f46f2 source/common/param.cpp
--- a/source/common/param.cpp	Mon Apr 14 13:18:18 2014 -0500
+++ b/source/common/param.cpp	Tue Apr 15 14:07:33 2014 -0500
@@ -197,7 +197,6 @@ void x265_param_default(x265_param *para
     param->vui.defDispWinRightOffset = 0;
     param->vui.defDispWinTopOffset = 0;
     param->vui.defDispWinBottomOffset = 0;
-    param->vui.bEnableVuiTimingInfoPresentFlag = 0;
 }
 
 extern "C"
@@ -688,10 +687,6 @@ int x265_param_parse(x265_param *p, cons
                          &p->vui.defDispWinRightOffset,
                          &p->vui.defDispWinBottomOffset) != 4;
     }
-    OPT("timinginfo")
-    {
-        p->vui.bEnableVuiTimingInfoPresentFlag = atobool(value);
-    }
     else
         return X265_PARAM_BAD_NAME;
 #undef OPT
diff -r 08d64a70594e -r 0b696c7f46f2 source/encoder/encoder.cpp
--- a/source/encoder/encoder.cpp	Mon Apr 14 13:18:18 2014 -0500
+++ b/source/encoder/encoder.cpp	Tue Apr 15 14:07:33 2014 -0500
@@ -999,11 +999,15 @@ void Encoder::initSPS(TComSPS *sps)
         /* A Profile::MAIN10 decoder can always decode Profile::MAIN */
         profileTierLevel.setProfileCompatibilityFlag(Profile::MAIN10, 1);
     }
+
     /* XXX: should Main be marked as compatible with still picture? */
 
     /* XXX: may be a good idea to refactor the above into a function
      * that chooses the actual compatibility based upon options */
 
+    /* set the VPS profile information */
+    *m_vps.getPTL() = *sps->getPTL();
+
     sps->setPicWidthInLumaSamples(param->sourceWidth);
     sps->setPicHeightInLumaSamples(param->sourceHeight);
     sps->setConformanceWindow(m_conformanceWindow);
@@ -1068,74 +1072,55 @@ void Encoder::initSPS(TComSPS *sps)
     // TODO: it is recommended for this to match the input bit depth
     sps->setPCMBitDepthLuma(X265_DEPTH);
     sps->setPCMBitDepthChroma(X265_DEPTH);
-
     sps->setPCMFilterDisableFlag(m_bPCMFilterDisableFlag);
-
     sps->setScalingListFlag((m_useScalingListId == 0) ? 0 : 1);
-
     sps->setUseStrongIntraSmoothing(param->bEnableStrongIntraSmoothing);
 
-    bool bVui = param->vui.aspectRatioIdc ||
-        param->vui.bEnableVideoSignalTypePresentFlag ||
-        param->vui.bEnableOverscanInfoPresentFlag ||
-        param->vui.bEnableVuiTimingInfoPresentFlag ||
-        param->interlaceMode;
-    sps->setVuiParametersPresentFlag(bVui);
+    sps->setVuiParametersPresentFlag(true);
+    TComVUI* vui = sps->getVuiParameters();
+    vui->setAspectRatioInfoPresentFlag(!!param->vui.aspectRatioIdc);
+    vui->setAspectRatioIdc(param->vui.aspectRatioIdc);
+    vui->setSarWidth(param->vui.sarWidth);
+    vui->setSarHeight(param->vui.sarHeight);
 
-    if (sps->getVuiParametersPresentFlag())
-    {
-        TComVUI* vui = sps->getVuiParameters();
-        vui->setAspectRatioInfoPresentFlag(!!param->vui.aspectRatioIdc);
-        vui->setAspectRatioIdc(param->vui.aspectRatioIdc);
-        vui->setSarWidth(param->vui.sarWidth);
-        vui->setSarHeight(param->vui.sarHeight);
+    vui->setOverscanInfoPresentFlag(param->vui.bEnableOverscanInfoPresentFlag);
+    vui->setOverscanAppropriateFlag(param->vui.bEnableOverscanAppropriateFlag);
 
-        vui->setOverscanInfoPresentFlag(param->vui.bEnableOverscanInfoPresentFlag);
-        vui->setOverscanAppropriateFlag(param->vui.bEnableOverscanAppropriateFlag);
+    vui->setVideoSignalTypePresentFlag(param->vui.bEnableVideoSignalTypePresentFlag);
+    vui->setVideoFormat(param->vui.videoFormat);
+    vui->setVideoFullRangeFlag(param->vui.bEnableVideoFullRangeFlag);
+    vui->setColourDescriptionPresentFlag(param->vui.bEnableColorDescriptionPresentFlag);
+    vui->setColourPrimaries(param->vui.colorPrimaries);
+    vui->setTransferCharacteristics(param->vui.transferCharacteristics);
+    vui->setMatrixCoefficients(param->vui.matrixCoeffs);
+    vui->setChromaLocInfoPresentFlag(param->vui.bEnableChromaLocInfoPresentFlag);
+    vui->setChromaSampleLocTypeTopField(param->vui.chromaSampleLocTypeTopField);
+    vui->setChromaSampleLocTypeBottomField(param->vui.chromaSampleLocTypeBottomField);
+    vui->setNeutralChromaIndicationFlag(m_neutralChromaIndicationFlag);
+    vui->setDefaultDisplayWindow(m_defaultDisplayWindow);
 
-        vui->setVideoSignalTypePresentFlag(param->vui.bEnableVideoSignalTypePresentFlag);
-        vui->setVideoFormat(param->vui.videoFormat);
-        vui->setVideoFullRangeFlag(param->vui.bEnableVideoFullRangeFlag);
-        vui->setColourDescriptionPresentFlag(param->vui.bEnableColorDescriptionPresentFlag);
-        vui->setColourPrimaries(param->vui.colorPrimaries);
-        vui->setTransferCharacteristics(param->vui.transferCharacteristics);
-        vui->setMatrixCoefficients(param->vui.matrixCoeffs);
-        vui->setChromaLocInfoPresentFlag(param->vui.bEnableChromaLocInfoPresentFlag);
-        vui->setChromaSampleLocTypeTopField(param->vui.chromaSampleLocTypeTopField);
-        vui->setChromaSampleLocTypeBottomField(param->vui.chromaSampleLocTypeBottomField);
-        vui->setNeutralChromaIndicationFlag(m_neutralChromaIndicationFlag);
-        vui->setDefaultDisplayWindow(m_defaultDisplayWindow);
+    vui->setFrameFieldInfoPresentFlag(!!param->interlaceMode);
+    vui->setFieldSeqFlag(!!param->interlaceMode);
 
-        vui->setFrameFieldInfoPresentFlag(!!param->interlaceMode);
-        vui->setFieldSeqFlag(!!param->interlaceMode);
+    vui->setHrdParametersPresentFlag(false);
+    vui->getHrdParameters()->setNalHrdParametersPresentFlag(false);
+    vui->getHrdParameters()->setSubPicHrdParamsPresentFlag(false);
 
-        vui->setHrdParametersPresentFlag(false);
-        vui->getHrdParameters()->setNalHrdParametersPresentFlag(false);
-        vui->getHrdParameters()->setSubPicHrdParamsPresentFlag(false);
+    vui->getTimingInfo()->setTimingInfoPresentFlag(true);
+    vui->getTimingInfo()->setNumUnitsInTick(param->fpsDenom);
+    vui->getTimingInfo()->setTimeScale(param->fpsNum);
+    vui->getTimingInfo()->setPocProportionalToTimingFlag(m_pocProportionalToTimingFlag);
+    vui->getTimingInfo()->setNumTicksPocDiffOneMinus1(m_numTicksPocDiffOneMinus1);
 
-        vui->getTimingInfo()->setTimingInfoPresentFlag(param->vui.bEnableVuiTimingInfoPresentFlag);
-        vui->getTimingInfo()->setNumUnitsInTick(param->fpsDenom);
-        vui->getTimingInfo()->setTimeScale(param->fpsNum);
-        vui->getTimingInfo()->setPocProportionalToTimingFlag(m_pocProportionalToTimingFlag);
-        vui->getTimingInfo()->setNumTicksPocDiffOneMinus1(m_numTicksPocDiffOneMinus1);
-
-        vui->setBitstreamRestrictionFlag(false);
-        vui->setTilesFixedStructureFlag(m_tilesFixedStructureFlag);
-        vui->setMotionVectorsOverPicBoundariesFlag(m_motionVectorsOverPicBoundariesFlag);
-        vui->setRestrictedRefPicListsFlag(m_restrictedRefPicListsFlag);
-        vui->setMinSpatialSegmentationIdc(m_minSpatialSegmentationIdc);
-        vui->setMaxBytesPerPicDenom(m_maxBytesPerPicDenom);
-        vui->setMaxBitsPerMinCuDenom(m_maxBitsPerMinCuDenom);
-        vui->setLog2MaxMvLengthHorizontal(m_log2MaxMvLengthHorizontal);
-        vui->setLog2MaxMvLengthVertical(m_log2MaxMvLengthVertical);
-    }
-
-    /* set the VPS profile information */
-    *m_vps.getPTL() = *sps->getPTL();
-    TimingInfo *t = m_vps.getTimingInfo();
-    t->setTimingInfoPresentFlag(true);
-    t->setNumUnitsInTick(param->fpsDenom);
-    t->setTimeScale(param->fpsNum);
+    vui->setBitstreamRestrictionFlag(false);
+    vui->setTilesFixedStructureFlag(m_tilesFixedStructureFlag);
+    vui->setMotionVectorsOverPicBoundariesFlag(m_motionVectorsOverPicBoundariesFlag);
+    vui->setRestrictedRefPicListsFlag(m_restrictedRefPicListsFlag);
+    vui->setMinSpatialSegmentationIdc(m_minSpatialSegmentationIdc);
+    vui->setMaxBytesPerPicDenom(m_maxBytesPerPicDenom);
+    vui->setMaxBitsPerMinCuDenom(m_maxBitsPerMinCuDenom);
+    vui->setLog2MaxMvLengthHorizontal(m_log2MaxMvLengthHorizontal);
+    vui->setLog2MaxMvLengthVertical(m_log2MaxMvLengthVertical);
 }
 
 void Encoder::initPPS(TComPPS *pps)
diff -r 08d64a70594e -r 0b696c7f46f2 source/encoder/frameencoder.cpp
--- a/source/encoder/frameencoder.cpp	Mon Apr 14 13:18:18 2014 -0500
+++ b/source/encoder/frameencoder.cpp	Tue Apr 15 14:07:33 2014 -0500
@@ -1192,6 +1192,8 @@ void FrameEncoder::processRowEncoder(int
                         m_pic->m_qpaRc[r] = 0;
                         m_pic->m_rowEncodedBits[r] = 0;


More information about the x265-commits mailing list