# HG changeset patch # User Kavitha Sampath <kavi...@multicorewareinc.com> # Date 1487828698 -19800 # Thu Feb 23 11:14:58 2017 +0530 # Node ID 727bd2d8128a99d2dcd1c4dbd3d571a662eade6a # Parent fec542968fecc4cda76264fe9b746952718a64f7 multi-level: increase maximum level from 5 to 10
diff -r fec542968fec -r 727bd2d8128a doc/reST/cli.rst --- a/doc/reST/cli.rst Sat Feb 04 22:12:22 2017 +0530 +++ b/doc/reST/cli.rst Thu Feb 23 11:14:58 2017 +0530 @@ -816,26 +816,24 @@ Specify a filename for analysis data (see :option:`--analysis-mode`) If no filename is specified, x265_analysis.dat is used. -.. option:: --refine-level <1..5> +.. option:: --refine-level <1..10> Amount of information stored/reused in :option:`--analysis-mode` is distributed across levels. - Higher the value, higher the information stored/reused, faster the encode. Default 3. + Higher the value, higher the information stored/reused, faster the encode. Default 5. Note that --refine-level must be paired with analysis-mode. - +-------+-----------------------------------------+ - | Level | Description | - +=======+=========================================+ - | 1 | Lookahead information | - +-------+-----------------------------------------+ - | 2 | Level 1 + intra/inter modes, ref's | - +-------+-----------------------------------------+ - | 3 | Level 2 + rect-amp | - +-------+-----------------------------------------+ - | 4 | Currently same as 3 | - +-------+-----------------------------------------+ - | 5 | Level 4 + Entire CU analysis-info | - +-------+-----------------------------------------+ + +--------+-----------------------------------------+ + | Level | Description | + +========+=========================================+ + | 1 | Lookahead information | + +--------+-----------------------------------------+ + | 2 to 4 | Level 1 + intra/inter modes, ref's | + +--------+-----------------------------------------+ + | 5 to 9 | Level 2 + rect-amp | + +--------+-----------------------------------------+ + | 10 | Level 5 + Full CU analysis-info | + +--------+-----------------------------------------+ Options which affect the transform unit quad-tree, sometimes referred to as the residual quad-tree (RQT). diff -r fec542968fec -r 727bd2d8128a source/common/param.cpp --- a/source/common/param.cpp Sat Feb 04 22:12:22 2017 +0530 +++ b/source/common/param.cpp Thu Feb 23 11:14:58 2017 +0530 @@ -271,7 +271,7 @@ param->bOptCUDeltaQP = 0; param->bAQMotion = 0; param->bHDROpt = 0; - param->analysisRefineLevel = 3; + param->analysisRefineLevel = 5; } @@ -1279,8 +1279,8 @@ "Strict-cbr cannot be applied without specifying target bitrate or vbv bufsize"); CHECK(param->analysisMode && (param->analysisMode < X265_ANALYSIS_OFF || param->analysisMode > X265_ANALYSIS_LOAD), "Invalid analysis mode. Analysis mode 0: OFF 1: SAVE : 2 LOAD"); - CHECK(param->analysisMode && (param->analysisRefineLevel < 1 || param->analysisRefineLevel > 5), - "Invalid analysis refine level. Value must be between 1 and 5 (inclusive)"); + CHECK(param->analysisMode && (param->analysisRefineLevel < 1 || param->analysisRefineLevel > 10), + "Invalid analysis refine level. Value must be between 1 and 10 (inclusive)"); CHECK(param->rc.qpMax < QP_MIN || param->rc.qpMax > QP_MAX_MAX, "qpmax exceeds supported range (0 to 69)"); CHECK(param->rc.qpMin < QP_MIN || param->rc.qpMin > QP_MAX_MAX, diff -r fec542968fec -r 727bd2d8128a source/encoder/analysis.cpp --- a/source/encoder/analysis.cpp Sat Feb 04 22:12:22 2017 +0530 +++ b/source/encoder/analysis.cpp Thu Feb 23 11:14:58 2017 +0530 @@ -167,14 +167,14 @@ } } - if (m_param->analysisMode && m_slice->m_sliceType != I_SLICE && m_param->analysisRefineLevel > 1 && m_param->analysisRefineLevel < 5) + if (m_param->analysisMode && m_slice->m_sliceType != I_SLICE && m_param->analysisRefineLevel > 1 && m_param->analysisRefineLevel < 10) { int numPredDir = m_slice->isInterP() ? 1 : 2; m_reuseInterDataCTU = (analysis_inter_data*)m_frame->m_analysisData.interData; m_reuseRef = &m_reuseInterDataCTU->ref[ctu.m_cuAddr * X265_MAX_PRED_MODE_PER_CTU * numPredDir]; m_reuseDepth = &m_reuseInterDataCTU->depth[ctu.m_cuAddr * ctu.m_numPartitions]; m_reuseModes = &m_reuseInterDataCTU->modes[ctu.m_cuAddr * ctu.m_numPartitions]; - if (m_param->analysisRefineLevel > 2) + if (m_param->analysisRefineLevel > 4) { m_reusePartSize = &m_reuseInterDataCTU->partSize[ctu.m_cuAddr * ctu.m_numPartitions]; m_reuseMergeFlag = &m_reuseInterDataCTU->mergeFlag[ctu.m_cuAddr * ctu.m_numPartitions]; @@ -214,7 +214,7 @@ /* generate residual for entire CTU at once and copy to reconPic */ encodeResidue(ctu, cuGeom); } - else if (m_param->analysisMode == X265_ANALYSIS_LOAD && m_param->analysisRefineLevel == 5) + else if (m_param->analysisMode == X265_ANALYSIS_LOAD && m_param->analysisRefineLevel == 10) { analysis_inter_data* interDataCTU = (analysis_inter_data*)m_frame->m_analysisData.interData; int posCTU = ctu.m_cuAddr * numPartition; @@ -336,7 +336,7 @@ int lambdaQP = lqp; bool doQPRefine = (bDecidedDepth && depth <= m_slice->m_pps->maxCuDQPDepth) || (!bDecidedDepth && depth == m_slice->m_pps->maxCuDQPDepth); - if (m_param->analysisRefineLevel == 5) + if (m_param->analysisRefineLevel == 10) doQPRefine = false; if (doQPRefine) @@ -1054,7 +1054,7 @@ if (m_param->rdLevel) skipModes = m_param->bEnableEarlySkip && md.bestMode; } - if (m_param->analysisRefineLevel > 2 && m_reusePartSize[cuGeom.absPartIdx] == SIZE_2Nx2N) + if (m_param->analysisRefineLevel > 4 && m_reusePartSize[cuGeom.absPartIdx] == SIZE_2Nx2N) { if (m_reuseModes[cuGeom.absPartIdx] != MODE_INTRA && m_reuseModes[cuGeom.absPartIdx] != 4) { @@ -1625,7 +1625,7 @@ if (m_param->bEnableRecursionSkip && depth && m_modeDepth[depth - 1].bestMode) skipRecursion = md.bestMode && !md.bestMode->cu.getQtRootCbf(0); } - if (m_param->analysisRefineLevel > 2 && m_reusePartSize[cuGeom.absPartIdx] == SIZE_2Nx2N) + if (m_param->analysisRefineLevel > 4 && m_reusePartSize[cuGeom.absPartIdx] == SIZE_2Nx2N) skipRectAmp = true && !!md.bestMode; } } @@ -2033,7 +2033,7 @@ for (uint32_t part = 0; part < numPU; part++) { PredictionUnit pu(mode.cu, cuGeom, part); - if (m_param->analysisRefineLevel == 5) + if (m_param->analysisRefineLevel == 10) { analysis_inter_data* interDataCTU = (analysis_inter_data*)m_frame->m_analysisData.interData; int cuIdx = (mode.cu.m_cuAddr * parentCTU.m_numPartitions) + cuGeom.absPartIdx; @@ -2109,7 +2109,7 @@ if (m_slice->m_pps->bUseDQP && nextDepth <= m_slice->m_pps->maxCuDQPDepth) nextQP = setLambdaFromQP(parentCTU, calculateQpforCuSize(parentCTU, childGeom)); - int lamdaQP = m_param->analysisRefineLevel == 5 ? nextQP : lqp; + int lamdaQP = m_param->analysisRefineLevel == 10 ? nextQP : lqp; qprdRefine(parentCTU, childGeom, nextQP, lamdaQP); // Save best CU and pred data for this sub CU diff -r fec542968fec -r 727bd2d8128a source/encoder/encoder.cpp --- a/source/encoder/encoder.cpp Sat Feb 04 22:12:22 2017 +0530 +++ b/source/encoder/encoder.cpp Thu Feb 23 11:14:58 2017 +0530 @@ -2021,9 +2021,6 @@ p->rc.cuTree = 0; } - if (p->analysisMode == X265_ANALYSIS_OFF && p->analysisRefineLevel) - x265_log(p, X265_LOG_WARNING, "refine-level option works only with analysis-mode load/save\n"); - if (p->analysisMode && (p->analysisMultiPassRefine || p->analysisMultiPassDistortion)) { x265_log(p, X265_LOG_WARNING, "Cannot use Analysis load/save option and multi-pass-opt-analysis/multi-pass-opt-distortion together," @@ -2346,13 +2343,13 @@ CHECKED_MALLOC_ZERO(interData, analysis_inter_data, 1); CHECKED_MALLOC(interData->depth, uint8_t, analysis->numPartitions * analysis->numCUsInFrame); CHECKED_MALLOC(interData->modes, uint8_t, analysis->numPartitions * analysis->numCUsInFrame); - if (m_param->analysisRefineLevel > 2) + if (m_param->analysisRefineLevel > 4) { CHECKED_MALLOC(interData->partSize, uint8_t, analysis->numPartitions * analysis->numCUsInFrame); CHECKED_MALLOC(interData->mergeFlag, uint8_t, analysis->numPartitions * analysis->numCUsInFrame); } - if (m_param->analysisRefineLevel == 5) + if (m_param->analysisRefineLevel == 10) { CHECKED_MALLOC(interData->interDir, uint8_t, analysis->numPartitions * analysis->numCUsInFrame); for (int dir = 0; dir < numDir; dir++) @@ -2405,16 +2402,15 @@ } else if (analysis->interData) { - X265_FREE(((analysis_inter_data*)analysis->interData)->ref); X265_FREE(((analysis_inter_data*)analysis->interData)->depth); X265_FREE(((analysis_inter_data*)analysis->interData)->modes); - if (m_param->analysisRefineLevel > 2) + if (m_param->analysisRefineLevel > 4) { X265_FREE(((analysis_inter_data*)analysis->interData)->mergeFlag); X265_FREE(((analysis_inter_data*)analysis->interData)->partSize); } - if (m_param->analysisRefineLevel == 5) + if (m_param->analysisRefineLevel == 10) { X265_FREE(((analysis_inter_data*)analysis->interData)->interDir); int numDir = analysis->sliceType == X265_TYPE_P ? 1 : 2; @@ -2431,6 +2427,8 @@ X265_FREE(analysis->intraData); } } + else + X265_FREE(((analysis_inter_data*)analysis->interData)->ref); X265_FREE(analysis->interData); } @@ -2596,9 +2594,9 @@ MV* mv[2]; int8_t* refIdx[2]; - int numBuf = m_param->analysisRefineLevel > 2 ? 4 : 2; + int numBuf = m_param->analysisRefineLevel > 4 ? 4 : 2; bool bIntraInInter = false; - if (m_param->analysisRefineLevel == 5) + if (m_param->analysisRefineLevel == 10) { numBuf++; bIntraInInter = (analysis->sliceType == X265_TYPE_P || m_param->bIntraInBFrames); @@ -2610,11 +2608,11 @@ depthBuf = tempBuf; modeBuf = tempBuf + depthBytes; - if (m_param->analysisRefineLevel > 2) + if (m_param->analysisRefineLevel > 4) { partSize = modeBuf + depthBytes; mergeFlag = partSize + depthBytes; - if (m_param->analysisRefineLevel == 5) + if (m_param->analysisRefineLevel == 10) { interDir = mergeFlag + depthBytes; if (bIntraInInter) chromaDir = interDir + depthBytes; @@ -2636,7 +2634,7 @@ int bytes = analysis->numPartitions >> (depthBuf[d] * 2); memset(&((analysis_inter_data *)analysis->interData)->depth[count], depthBuf[d], bytes); memset(&((analysis_inter_data *)analysis->interData)->modes[count], modeBuf[d], bytes); - if (m_param->analysisRefineLevel > 2) + if (m_param->analysisRefineLevel > 4) { memset(&((analysis_inter_data *)analysis->interData)->partSize[count], partSize[d], bytes); int numPU = nbPartsTable[(int)partSize[d]]; @@ -2644,7 +2642,7 @@ { if (pu) d++; ((analysis_inter_data *)analysis->interData)->mergeFlag[count + pu] = mergeFlag[d]; - if (m_param->analysisRefineLevel == 5) + if (m_param->analysisRefineLevel == 10) { ((analysis_inter_data *)analysis->interData)->interDir[count + pu] = interDir[d]; for (uint32_t i = 0; i < numDir; i++) @@ -2655,7 +2653,7 @@ } } } - if (m_param->analysisRefineLevel == 5 && bIntraInInter) + if (m_param->analysisRefineLevel == 10 && bIntraInInter) memset(&((analysis_intra_data *)analysis->intraData)->chromaModes[count], chromaDir[d], bytes); } count += bytes; @@ -2663,7 +2661,7 @@ X265_FREE(tempBuf); - if (m_param->analysisRefineLevel == 5) + if (m_param->analysisRefineLevel == 10) { for (uint32_t i = 0; i < numDir; i++) { @@ -2822,7 +2820,7 @@ }\ uint32_t depthBytes = 0; - int numDir, numPlanes; + uint32_t numDir, numPlanes; bool bIntraInInter = false; /* calculate frameRecordSize */ @@ -2883,12 +2881,12 @@ interDataCTU->depth[depthBytes] = depth; predMode = ctu->m_predMode[absPartIdx]; - if (m_param->analysisRefineLevel != 5 && ctu->m_refIdx[1][absPartIdx] != -1) + if (m_param->analysisRefineLevel != 10 && ctu->m_refIdx[1][absPartIdx] != -1) predMode = 4; // used as indiacator if the block is coded as bidir interDataCTU->modes[depthBytes] = predMode; - if (m_param->analysisRefineLevel > 2) + if (m_param->analysisRefineLevel > 4) { partSize = ctu->m_partSize[absPartIdx]; interDataCTU->partSize[depthBytes] = partSize; @@ -2901,10 +2899,10 @@ if (puIdx) depthBytes++; interDataCTU->mergeFlag[depthBytes] = ctu->m_mergeFlag[puabsPartIdx]; - if (m_param->analysisRefineLevel == 5) + if (m_param->analysisRefineLevel == 10) { interDataCTU->interDir[depthBytes] = ctu->m_interDir[puabsPartIdx]; - for (int dir = 0; dir < numDir; dir++) + for (uint32_t dir = 0; dir < numDir; dir++) { interDataCTU->mvpIdx[dir][depthBytes] = ctu->m_mvpIdx[dir][puabsPartIdx]; interDataCTU->refIdx[dir][depthBytes] = ctu->m_refIdx[dir][puabsPartIdx]; @@ -2912,12 +2910,12 @@ } } } - if (m_param->analysisRefineLevel == 5 && bIntraInInter) + if (m_param->analysisRefineLevel == 10 && bIntraInInter) intraDataCTU->chromaModes[depthBytes] = ctu->m_chromaIntraDir[absPartIdx]; } absPartIdx += ctu->m_numPartitions >> (depth * 2); } - if (m_param->analysisRefineLevel == 5 && bIntraInInter) + if (m_param->analysisRefineLevel == 10 && bIntraInInter) memcpy(&intraDataCTU->modes[ctu->m_cuAddr * ctu->m_numPartitions], ctu->m_lumaIntraDir, sizeof(uint8_t)* ctu->m_numPartitions); } } @@ -2928,10 +2926,10 @@ { /* Add sizeof depth, modes, partSize, mergeFlag */ analysis->frameRecordSize += depthBytes * 2; - if (m_param->analysisRefineLevel > 2) + if (m_param->analysisRefineLevel > 4) analysis->frameRecordSize += (depthBytes * 2); - if (m_param->analysisRefineLevel == 5) + if (m_param->analysisRefineLevel == 10) { /* Add Size of interDir, mvpIdx, refIdx, mv, luma and chroma modes */ analysis->frameRecordSize += depthBytes; @@ -2970,15 +2968,15 @@ { X265_FWRITE(((analysis_inter_data*)analysis->interData)->depth, sizeof(uint8_t), depthBytes, m_analysisFile); X265_FWRITE(((analysis_inter_data*)analysis->interData)->modes, sizeof(uint8_t), depthBytes, m_analysisFile); - if (m_param->analysisRefineLevel > 2) + if (m_param->analysisRefineLevel > 4) { X265_FWRITE(((analysis_inter_data*)analysis->interData)->partSize, sizeof(uint8_t), depthBytes, m_analysisFile); X265_FWRITE(((analysis_inter_data*)analysis->interData)->mergeFlag, sizeof(uint8_t), depthBytes, m_analysisFile); - if (m_param->analysisRefineLevel == 5) + if (m_param->analysisRefineLevel == 10) { X265_FWRITE(((analysis_inter_data*)analysis->interData)->interDir, sizeof(uint8_t), depthBytes, m_analysisFile); if (bIntraInInter) X265_FWRITE(((analysis_intra_data*)analysis->intraData)->chromaModes, sizeof(uint8_t), depthBytes, m_analysisFile); - for (int dir = 0; dir < numDir; dir++) + for (uint32_t dir = 0; dir < numDir; dir++) { X265_FWRITE(((analysis_inter_data*)analysis->interData)->mvpIdx[dir], sizeof(uint8_t), depthBytes, m_analysisFile); X265_FWRITE(((analysis_inter_data*)analysis->interData)->refIdx[dir], sizeof(int8_t), depthBytes, m_analysisFile); @@ -2988,7 +2986,7 @@ X265_FWRITE(((analysis_intra_data*)analysis->intraData)->modes, sizeof(uint8_t), analysis->numCUsInFrame * analysis->numPartitions, m_analysisFile); } } - if (m_param->analysisRefineLevel != 5) + if (m_param->analysisRefineLevel != 10) X265_FWRITE(((analysis_inter_data*)analysis->interData)->ref, sizeof(int32_t), analysis->numCUsInFrame * X265_MAX_PRED_MODE_PER_CTU * numDir, m_analysisFile); } diff -r fec542968fec -r 727bd2d8128a source/x265.h --- a/source/x265.h Sat Feb 04 22:12:22 2017 +0530 +++ b/source/x265.h Thu Feb 23 11:14:58 2017 +0530 @@ -1385,9 +1385,9 @@ * Default is disabled */ int bHDROpt; - /* A value between 1 and 5 (both inclusive) determines the level of + /* A value between 1 and 10 (both inclusive) determines the level of * information stored/reused in save/load analysis-mode. Higher the refine - * level higher the informtion stored/reused. Default is 3 */ + * level higher the informtion stored/reused. Default is 5 */ int analysisRefineLevel; } x265_param; diff -r fec542968fec -r 727bd2d8128a source/x265cli.h --- a/source/x265cli.h Sat Feb 04 22:12:22 2017 +0530 +++ b/source/x265cli.h Thu Feb 23 11:14:58 2017 +0530 @@ -424,7 +424,7 @@ H0(" --[no-]strict-cbr Enable stricter conditions and tolerance for bitrate deviations in CBR mode. Default %s\n", OPT(param->rc.bStrictCbr)); H0(" --analysis-mode <string|int> save - Dump analysis info into file, load - Load analysis buffers from the file. Default %d\n", param->analysisMode); H0(" --analysis-file <filename> Specify file name used for either dumping or reading analysis data.\n"); - H0(" --refine-level <1..5> Level of analyis refinement indicates amount of info stored/reused in save/load mode, 1:least....5:most. Default %d\n", param->analysisRefineLevel); + H0(" --refine-level <1..10> Level of analyis refinement indicates amount of info stored/reused in save/load mode, 1:least....10:most. Default %d\n", param->analysisRefineLevel); H0(" --aq-mode <integer> Mode for Adaptive Quantization - 0:none 1:uniform AQ 2:auto variance 3:auto variance with bias to dark scenes. Default %d\n", param->rc.aqMode); H0(" --aq-strength <float> Reduces blocking and blurring in flat and textured areas (0 to 3.0). Default %.2f\n", param->rc.aqStrength); H0(" --[no-]aq-motion Adaptive Quantization based on the relative motion of each CU w.r.t., frame. Default %s\n", OPT(param->bOptCUDeltaQP)); _______________________________________________ x265-devel mailing list x265-devel@videolan.org https://mailman.videolan.org/listinfo/x265-devel