[x265] [PATCH] add API and implementation for Region of Interest(ROI)
Deepthi Nandakumar
deepthi at multicorewareinc.com
Tue Aug 11 05:27:01 CEST 2015
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 <steve at borho.org> wrote:
> On 08/07, santhoshini at multicorewareinc.com wrote:
> > # HG changeset patch
> > # User Santhoshini Sekar<santhoshini at 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 at videolan.org
> > https://mailman.videolan.org/listinfo/x265-devel
>
> --
> Steve Borho
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20150811/740984e1/attachment-0001.html>
More information about the x265-devel
mailing list