Thanks - this version is technically correct, can you send another patch without the callback functions?
On Fri, Aug 7, 2015 at 11:50 PM, Steve Borho <st...@borho.org> wrote: > On 08/07, santhosh...@multicorewareinc.com wrote: > > # HG changeset patch > > # User Santhoshini Sekar<santhosh...@multicorewareinc.com> > > # Date 1438839704 -19800 > > # Thu Aug 06 11:11:44 2015 +0530 > > # Node ID 450055cd2ef7e85ba8fff2d163161c0d0428b5fe > > # Parent 9982ac741d1850d2b2451985feef5e0de0790794 > > add API and implementation for Region of Interest(ROI) > > this version looks ok > > > diff -r 9982ac741d18 -r 450055cd2ef7 source/CMakeLists.txt > > --- a/source/CMakeLists.txt Thu Aug 06 10:29:06 2015 +0530 > > +++ b/source/CMakeLists.txt Thu Aug 06 11:11:44 2015 +0530 > > @@ -30,7 +30,7 @@ > > mark_as_advanced(FPROFILE_USE FPROFILE_GENERATE NATIVE_BUILD) > > > > # X265_BUILD must be incremented each time the public API is changed > > -set(X265_BUILD 68) > > +set(X265_BUILD 69) > > configure_file("${PROJECT_SOURCE_DIR}/x265.def.in" > > "${PROJECT_BINARY_DIR}/x265.def") > > configure_file("${PROJECT_SOURCE_DIR}/x265_config.h.in" > > diff -r 9982ac741d18 -r 450055cd2ef7 source/common/frame.h > > --- a/source/common/frame.h Thu Aug 06 10:29:06 2015 +0530 > > +++ b/source/common/frame.h Thu Aug 06 11:11:44 2015 +0530 > > @@ -59,6 +59,8 @@ > > bool m_lowresInit; // lowres init > complete (pre-analysis) > > bool m_bChromaExtended; // orig chroma planes > motion extended for weight analysis > > > > + float* m_quantOffsets; // points to > quantOffsets in x265_picture > > + > > /* Frame Parallelism - notification between FrameEncoders of > available motion reference rows */ > > ThreadSafeInteger m_reconRowCount; // count of CTU rows > completely reconstructed and extended for motion reference > > volatile uint32_t m_countRefEncoders; // count of > FrameEncoder threads monitoring m_reconRowCount > > @@ -73,6 +75,7 @@ > > bool allocEncodeData(x265_param *param, const SPS& sps); > > void reinit(const SPS& sps); > > void destroy(); > > + void (*quantOffsetsFree)(void*); > > }; > > } > > > > diff -r 9982ac741d18 -r 450055cd2ef7 source/encoder/encoder.cpp > > --- a/source/encoder/encoder.cpp Thu Aug 06 10:29:06 2015 +0530 > > +++ b/source/encoder/encoder.cpp Thu Aug 06 11:11:44 2015 +0530 > > @@ -465,6 +465,8 @@ > > inFrame->m_pts = pic_in->pts; > > inFrame->m_forceqp = pic_in->forceqp; > > inFrame->m_param = m_reconfigured ? m_latestParam : m_param; > > + inFrame->m_quantOffsets = pic_in->quantOffsets; > > + inFrame->quantOffsetsFree = pic_in->quantOffsets_free; > > > > if (m_pocLast == 0) > > m_firstPts = inFrame->m_pts; > > @@ -632,6 +634,9 @@ > > frameEnc = m_lookahead->getDecidedPicture(); > > if (frameEnc && !pass) > > { > > + if (frameEnc->quantOffsetsFree) > > + frameEnc->quantOffsetsFree(frameEnc->m_quantOffsets); > > + > > /* give this frame a FrameData instance before encoding */ > > if (m_dpb->m_picSymFreeList) > > { > > diff -r 9982ac741d18 -r 450055cd2ef7 source/encoder/slicetype.cpp > > --- a/source/encoder/slicetype.cpp Thu Aug 06 10:29:06 2015 +0530 > > +++ b/source/encoder/slicetype.cpp Thu Aug 06 11:11:44 2015 +0530 > > @@ -96,6 +96,7 @@ > > int maxRow = curFrame->m_fencPic->m_picHeight; > > int blockCount = curFrame->m_lowres.maxBlocksInRow * > curFrame->m_lowres.maxBlocksInCol; > > > > + float* quantOffsets = curFrame->m_quantOffsets; > > for (int y = 0; y < 3; y++) > > { > > curFrame->m_lowres.wp_ssd[y] = 0; > > @@ -113,10 +114,21 @@ > > > > if (param->rc.aqMode && param->rc.aqStrength == 0) > > { > > - memset(curFrame->m_lowres.qpCuTreeOffset, 0, cuCount * > sizeof(double)); > > - memset(curFrame->m_lowres.qpAqOffset, 0, cuCount * > sizeof(double)); > > - for (int cuxy = 0; cuxy < cuCount; cuxy++) > > - curFrame->m_lowres.invQscaleFactor[cuxy] = 256; > > + if (quantOffsets) > > + { > > + for (int cuxy = 0; cuxy < cuCount; cuxy++) > > + { > > + curFrame->m_lowres.qpCuTreeOffset[cuxy] = > curFrame->m_lowres.qpAqOffset[cuxy] = quantOffsets[cuxy]; > > + curFrame->m_lowres.invQscaleFactor[cuxy] = > x265_exp2fix8(curFrame->m_lowres.qpCuTreeOffset[cuxy]); > > + } > > + } > > + else > > + { > > + memset(curFrame->m_lowres.qpCuTreeOffset, 0, cuCount * > sizeof(double)); > > + memset(curFrame->m_lowres.qpAqOffset, 0, cuCount * > sizeof(double)); > > + for (int cuxy = 0; cuxy < cuCount; cuxy++) > > + curFrame->m_lowres.invQscaleFactor[cuxy] = 256; > > + } > > } > > > > /* Need variance data for weighted prediction */ > > @@ -177,6 +189,8 @@ > > uint32_t energy = acEnergyCu(curFrame, blockX, > blockY, param->internalCsp); > > qp_adj = strength * (X265_LOG2(X265_MAX(energy, 1)) > - (14.427f + 2 * (X265_DEPTH - 8))); > > } > > + if (quantOffsets) > > + qp_adj += quantOffsets[blockXY]; > > curFrame->m_lowres.qpAqOffset[blockXY] = qp_adj; > > curFrame->m_lowres.qpCuTreeOffset[blockXY] = qp_adj; > > curFrame->m_lowres.invQscaleFactor[blockXY] = > x265_exp2fix8(qp_adj); > > diff -r 9982ac741d18 -r 450055cd2ef7 source/x265.h > > --- a/source/x265.h Thu Aug 06 10:29:06 2015 +0530 > > +++ b/source/x265.h Thu Aug 06 11:11:44 2015 +0530 > > @@ -205,6 +205,17 @@ > > * this data structure */ > > x265_analysis_data analysisData; > > > > + /* An array of quantizer offsets to be applied to this image during > encoding. > > + * These are added on top of the decisions made by rateControl. > > + * Adaptive quantization must be enabled to use this feature. These > quantizer > > + * offsets should be given for each 16x16 block. Behavior if quant > > + * offsets differ between encoding passes is undefined. */ > > + float *quantOffsets; > > + > > + /* optional callback to free quant_offsets when used. > > + * Useful if one wants to use a different quant_offset array for > each frame. */ > > + void (*quantOffsets_free)(void*); > > + > > /* Frame level statistics */ > > x265_frame_stats frameData; > > > > _______________________________________________ > > x265-devel mailing list > > x265-devel@videolan.org > > https://mailman.videolan.org/listinfo/x265-devel > > -- > Steve Borho > _______________________________________________ > x265-devel mailing list > x265-devel@videolan.org > https://mailman.videolan.org/listinfo/x265-devel >
_______________________________________________ x265-devel mailing list x265-devel@videolan.org https://mailman.videolan.org/listinfo/x265-devel