[x265] [PATCH] add API and implementation for Region of Interest(ROI)

Santhoshini Sekar santhoshini at multicorewareinc.com
Tue Aug 11 05:42:46 CEST 2015


Ok, will modify the patch accordingly and send.

On Tue, Aug 11, 2015 at 8:57 AM, Deepthi Nandakumar <
deepthi at multicorewareinc.com> wrote:

> 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
>>
>
>
> _______________________________________________
> 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/b2020e16/attachment.html>


More information about the x265-devel mailing list