Re: [x265] [PATCH x265] Use the data structure of analysis-save/load for multi-pass-opt-analysis/multi-pass-opt-distortion
On Fri, Jun 8, 2018 at 5:44 PM, wrote: > # HG changeset patch > # User Aruna Matheswaran > # Date 1526883919 -19800 > # Mon May 21 11:55:19 2018 +0530 > # Node ID 00eec4796d233e72d6344c7f4c9d5c69a9c55501 > # Parent ed853c4af6710a991d0cdf4bf68e00fe32edaacb > Use the data structure of analysis-save/load for > multi-pass-opt-analysis/multi-pass-opt-distortion. > > diff -r ed853c4af671 -r 00eec4796d23 source/common/frame.cpp > --- a/source/common/frame.cpp Fri Apr 06 14:35:00 2018 +0530 > +++ b/source/common/frame.cpp Mon May 21 11:55:19 2018 +0530 > @@ -83,7 +83,7 @@ > m_analysisData.wt = NULL; > m_analysisData.intraData = NULL; > m_analysisData.interData = NULL; > -m_analysis2Pass.analysisFramedata = NULL; > +m_analysisData.distortionData = NULL; > } > > if (param->bDynamicRefine) > diff -r ed853c4af671 -r 00eec4796d23 source/common/frame.h > --- a/source/common/frame.h Fri Apr 06 14:35:00 2018 +0530 > +++ b/source/common/frame.h Mon May 21 11:55:19 2018 +0530 > @@ -109,7 +109,6 @@ > Frame* m_prev; > x265_param*m_param; // Points to the latest > param set for the frame. > x265_analysis_data m_analysisData; > -x265_analysis_2Passm_analysis2Pass; > RcStats* m_rcData; > > Event m_copyMVType; > diff -r ed853c4af671 -r 00eec4796d23 source/common/framedata.h > --- a/source/common/framedata.h Fri Apr 06 14:35:00 2018 +0530 > +++ b/source/common/framedata.h Mon May 21 11:55:19 2018 +0530 > @@ -203,13 +203,8 @@ > int64_t* sadCost; > }; > > -struct analysis2PassFrameData > +struct analysisDistortionData > { > -uint8_t* depth; > -MV* m_mv[2]; > -int* mvpIdx[2]; > -int32_t* ref[2]; > -uint8_t* modes; > sse_t*distortion; > sse_t*ctuDistortion; > double* scaledDistortion; > diff -r ed853c4af671 -r 00eec4796d23 source/encoder/analysis.cpp > --- a/source/encoder/analysis.cpp Fri Apr 06 14:35:00 2018 +0530 > +++ b/source/encoder/analysis.cpp Mon May 21 11:55:19 2018 +0530 > @@ -187,23 +187,20 @@ > for (uint32_t i = 0; i < cuGeom.numPartitions; i++) > ctu.m_log2CUSize[i] = (uint8_t)m_param->maxLog2CUSize - > ctu.m_cuDepth[i]; > } > -if (m_param->analysisMultiPassRefine && m_param->rc.bStatRead) > +if (m_param->analysisMultiPassRefine && m_param->rc.bStatRead && > (m_slice->m_sliceType != I_SLICE)) > { > -m_multipassAnalysis = (analysis2PassFrameData*)m_ > frame->m_analysis2Pass.analysisFramedata; > -m_multipassDepth = _multipassAnalysis->depth[ctu.m_cuAddr * > ctu.m_numPartitions]; > -if (m_slice->m_sliceType != I_SLICE) > +int numPredDir = m_slice->isInterP() ? 1 : 2; > +m_reuseInterDataCTU = (analysis_inter_data*)m_frame- > >m_analysisData.interData; > +for (int dir = 0; dir < numPredDir; dir++) > { > -int numPredDir = m_slice->isInterP() ? 1 : 2; > -for (int dir = 0; dir < numPredDir; dir++) > -{ > -m_multipassMv[dir] = > _multipassAnalysis->m_mv[dir][ctu.m_cuAddr > * ctu.m_numPartitions]; > -m_multipassMvpIdx[dir] = > _multipassAnalysis->mvpIdx[dir][ctu.m_cuAddr > * ctu.m_numPartitions]; > -m_multipassRef[dir] = > _multipassAnalysis->ref[dir][ctu.m_cuAddr > * ctu.m_numPartitions]; > -} > -m_multipassModes = _multipassAnalysis->modes[ctu.m_cuAddr > * ctu.m_numPartitions]; > +m_reuseMv[dir] = _reuseInterDataCTU->mv[dir][ctu.m_cuAddr > * ctu.m_numPartitions]; > +m_reuseMvpIdx[dir] = > _reuseInterDataCTU->mvpIdx[dir][ctu.m_cuAddr > * ctu.m_numPartitions]; > } > +m_reuseRef = _reuseInterDataCTU->ref[ctu.m_cuAddr * > ctu.m_numPartitions]; > +m_reuseModes = _reuseInterDataCTU->modes[ctu.m_cuAddr * > ctu.m_numPartitions]; > +m_reuseDepth = _reuseInterDataCTU->depth[ctu.m_cuAddr * > ctu.m_numPartitions]; > } > - > + > if ((m_param->analysisSave || m_param->analysisLoad) && > m_slice->m_sliceType != I_SLICE && m_param->analysisReuseLevel > 1 && > m_param->analysisReuseLevel < 10) > { > int numPredDir = m_slice->isInterP() ? 1 : 2; > @@ -1284,11 +1281,11 @@ > } > } > } > -if (m_param->analysisMultiPassRefine && m_param->rc.bStatRead && > m_multipassAnalysis) > +if (m_param->analysisMultiPassRefine && m_param->rc.bStatRead && > m_reuseInterDataCTU) > { > -if (mightNotSplit && depth == m_multipassDepth[cuGeom. > absPartIdx]) > +if (mightNotSplit && depth == m_reuseDepth[cuGeom. > absPartIdx]) > { > -if (m_multipassModes[cuGeom.absPartIdx] == MODE_SKIP) > +if (m_reuseModes[cuGeom.absPartIdx] == MODE_SKIP) > { >
[x265] [PATCH x265] Use the data structure of analysis-save/load for multi-pass-opt-analysis/multi-pass-opt-distortion
# HG changeset patch # User Aruna Matheswaran # Date 1526883919 -19800 # Mon May 21 11:55:19 2018 +0530 # Node ID 00eec4796d233e72d6344c7f4c9d5c69a9c55501 # Parent ed853c4af6710a991d0cdf4bf68e00fe32edaacb Use the data structure of analysis-save/load for multi-pass-opt-analysis/multi-pass-opt-distortion. diff -r ed853c4af671 -r 00eec4796d23 source/common/frame.cpp --- a/source/common/frame.cpp Fri Apr 06 14:35:00 2018 +0530 +++ b/source/common/frame.cpp Mon May 21 11:55:19 2018 +0530 @@ -83,7 +83,7 @@ m_analysisData.wt = NULL; m_analysisData.intraData = NULL; m_analysisData.interData = NULL; -m_analysis2Pass.analysisFramedata = NULL; +m_analysisData.distortionData = NULL; } if (param->bDynamicRefine) diff -r ed853c4af671 -r 00eec4796d23 source/common/frame.h --- a/source/common/frame.h Fri Apr 06 14:35:00 2018 +0530 +++ b/source/common/frame.h Mon May 21 11:55:19 2018 +0530 @@ -109,7 +109,6 @@ Frame* m_prev; x265_param*m_param; // Points to the latest param set for the frame. x265_analysis_data m_analysisData; -x265_analysis_2Passm_analysis2Pass; RcStats* m_rcData; Event m_copyMVType; diff -r ed853c4af671 -r 00eec4796d23 source/common/framedata.h --- a/source/common/framedata.h Fri Apr 06 14:35:00 2018 +0530 +++ b/source/common/framedata.h Mon May 21 11:55:19 2018 +0530 @@ -203,13 +203,8 @@ int64_t* sadCost; }; -struct analysis2PassFrameData +struct analysisDistortionData { -uint8_t* depth; -MV* m_mv[2]; -int* mvpIdx[2]; -int32_t* ref[2]; -uint8_t* modes; sse_t*distortion; sse_t*ctuDistortion; double* scaledDistortion; diff -r ed853c4af671 -r 00eec4796d23 source/encoder/analysis.cpp --- a/source/encoder/analysis.cpp Fri Apr 06 14:35:00 2018 +0530 +++ b/source/encoder/analysis.cpp Mon May 21 11:55:19 2018 +0530 @@ -187,23 +187,20 @@ for (uint32_t i = 0; i < cuGeom.numPartitions; i++) ctu.m_log2CUSize[i] = (uint8_t)m_param->maxLog2CUSize - ctu.m_cuDepth[i]; } -if (m_param->analysisMultiPassRefine && m_param->rc.bStatRead) +if (m_param->analysisMultiPassRefine && m_param->rc.bStatRead && (m_slice->m_sliceType != I_SLICE)) { -m_multipassAnalysis = (analysis2PassFrameData*)m_frame->m_analysis2Pass.analysisFramedata; -m_multipassDepth = _multipassAnalysis->depth[ctu.m_cuAddr * ctu.m_numPartitions]; -if (m_slice->m_sliceType != I_SLICE) +int numPredDir = m_slice->isInterP() ? 1 : 2; +m_reuseInterDataCTU = (analysis_inter_data*)m_frame->m_analysisData.interData; +for (int dir = 0; dir < numPredDir; dir++) { -int numPredDir = m_slice->isInterP() ? 1 : 2; -for (int dir = 0; dir < numPredDir; dir++) -{ -m_multipassMv[dir] = _multipassAnalysis->m_mv[dir][ctu.m_cuAddr * ctu.m_numPartitions]; -m_multipassMvpIdx[dir] = _multipassAnalysis->mvpIdx[dir][ctu.m_cuAddr * ctu.m_numPartitions]; -m_multipassRef[dir] = _multipassAnalysis->ref[dir][ctu.m_cuAddr * ctu.m_numPartitions]; -} -m_multipassModes = _multipassAnalysis->modes[ctu.m_cuAddr * ctu.m_numPartitions]; +m_reuseMv[dir] = _reuseInterDataCTU->mv[dir][ctu.m_cuAddr * ctu.m_numPartitions]; +m_reuseMvpIdx[dir] = _reuseInterDataCTU->mvpIdx[dir][ctu.m_cuAddr * ctu.m_numPartitions]; } +m_reuseRef = _reuseInterDataCTU->ref[ctu.m_cuAddr * ctu.m_numPartitions]; +m_reuseModes = _reuseInterDataCTU->modes[ctu.m_cuAddr * ctu.m_numPartitions]; +m_reuseDepth = _reuseInterDataCTU->depth[ctu.m_cuAddr * ctu.m_numPartitions]; } - + if ((m_param->analysisSave || m_param->analysisLoad) && m_slice->m_sliceType != I_SLICE && m_param->analysisReuseLevel > 1 && m_param->analysisReuseLevel < 10) { int numPredDir = m_slice->isInterP() ? 1 : 2; @@ -1284,11 +1281,11 @@ } } } -if (m_param->analysisMultiPassRefine && m_param->rc.bStatRead && m_multipassAnalysis) +if (m_param->analysisMultiPassRefine && m_param->rc.bStatRead && m_reuseInterDataCTU) { -if (mightNotSplit && depth == m_multipassDepth[cuGeom.absPartIdx]) +if (mightNotSplit && depth == m_reuseDepth[cuGeom.absPartIdx]) { -if (m_multipassModes[cuGeom.absPartIdx] == MODE_SKIP) +if (m_reuseModes[cuGeom.absPartIdx] == MODE_SKIP) { md.pred[PRED_MERGE].cu.initSubCU(parentCTU, cuGeom, qp); md.pred[PRED_SKIP].cu.initSubCU(parentCTU, cuGeom, qp); @@ -1977,11 +1974,11 @@ } } -if (m_param->analysisMultiPassRefine &&