[x265] [PATCH 1 of 3] Introduce structure needed for Intra-refresh

Santhoshini Sekar santhoshini at multicorewareinc.com
Wed Sep 9 12:02:04 CEST 2015


Will resend the patch with necessary changes.
On Wed, Sep 9, 2015 at 1:26 AM, Steve Borho <steve at borho.org> wrote:

> On 09/07, santhoshini at multicorewareinc.com wrote:
> > # HG changeset patch
> > # User Santhoshini Sekar<santhoshini at multicorewareinc.com>
> > # Date 1441619453 -19800
> > #      Mon Sep 07 15:20:53 2015 +0530
> > # Node ID 2ba81f60f111c12a8f668ece13b23123702f2582
> > # Parent  44cc2ce22c43ee04c67f669f2667a6e25747c4f9
> > Introduce structure needed for Intra-refresh
> >
> > diff -r 44cc2ce22c43 -r 2ba81f60f111 source/common/framedata.cpp
> > --- a/source/common/framedata.cpp     Thu Sep 03 22:26:21 2015 +0530
> > +++ b/source/common/framedata.cpp     Mon Sep 07 15:20:53 2015 +0530
> > @@ -43,6 +43,7 @@
> >
> >      CHECKED_MALLOC(m_cuStat, RCStatCU, sps.numCUsInFrame);
> >      CHECKED_MALLOC(m_rowStat, RCStatRow, sps.numCuInHeight);
> > +    CHECKED_MALLOC(m_pir, PeriodicIR, 1);
> >      reinit(sps);
> >      return true;
> >
> > @@ -54,6 +55,7 @@
> >  {
> >      memset(m_cuStat, 0, sps.numCUsInFrame * sizeof(*m_cuStat));
> >      memset(m_rowStat, 0, sps.numCuInHeight * sizeof(*m_rowStat));
> > +    memset(m_pir, 0, sizeof(*m_pir));
> >  }
> >
> >  void FrameData::destroy()
> > @@ -66,4 +68,5 @@
> >
> >      X265_FREE(m_cuStat);
> >      X265_FREE(m_rowStat);
> > +    X265_FREE(m_pir);
> >  }
> > diff -r 44cc2ce22c43 -r 2ba81f60f111 source/common/framedata.h
> > --- a/source/common/framedata.h       Thu Sep 03 22:26:21 2015 +0530
> > +++ b/source/common/framedata.h       Mon Sep 07 15:20:53 2015 +0530
> > @@ -134,7 +134,16 @@
> >      RCStatCU*      m_cuStat;
> >      RCStatRow*     m_rowStat;
> >      FrameStats     m_frameStats; // stats of current frame for
> multi-pass encodes
> > +    /* data needed for periodic intra refresh */
> > +    struct PeriodicIR
> > +    {
> > +        double    position;
> > +        uint32_t       pirStartPelX;
> > +        uint32_t       pirEndPelX;
> > +        int       framesSinceLastPir;
> > +    };
>
> w/s
>
> > +    PeriodicIR*    m_pir;
>
> is there a compelling reason for this to be malloc'd?
>
malloc is not necessary.

>
> >      double         m_avgQpRc;    /* avg QP as decided by rate-control */
> >      double         m_avgQpAq;    /* avg QP as decided by AQ in addition
> to rate-control */
> >      double         m_rateFactor; /* calculated based on the Frame QP */
> > diff -r 44cc2ce22c43 -r 2ba81f60f111 source/encoder/encoder.cpp
> > --- a/source/encoder/encoder.cpp      Thu Sep 03 22:26:21 2015 +0530
> > +++ b/source/encoder/encoder.cpp      Mon Sep 07 15:20:53 2015 +0530
> > @@ -1517,6 +1517,7 @@
> >          p->rc.cuTree = 0;
> >          p->bEnableWeightedPred = 0;
> >          p->bEnableWeightedBiPred = 0;
> > +        p->bIntraRefresh = 0;
> >
> >          /* SPSs shall have sps_max_dec_pic_buffering_minus1[
> sps_max_sub_layers_minus1 ] equal to 0 only */
> >          p->maxNumReferences = 1;
> > @@ -1607,6 +1608,24 @@
> >
> >      if (p->totalFrames && p->totalFrames <= 2 * ((float)p->fpsNum) /
> p->fpsDenom && p->rc.bStrictCbr)
> >          p->lookaheadDepth = p->totalFrames;
> > +    if (p->bIntraRefresh && p->maxNumReferences > 1)
> > +    {
> > +        x265_log(p,  X265_LOG_WARNING, "Max References > 1 +
> intra-refresh is not supported , setting max num references = 1\n");
> > +        p->maxNumReferences = 1;
> > +    }
> > +    if (p->bIntraRefresh && p->maxNumReferences == 1)
>
> checking maxNumReferences == 1 here is redundant
>
> > +    {
> > +        if (p->bBPyramid == 1 && p->bframes > 0)
>
> coding style nit, this could be:  if (p->bBPyramid && p->bframes)
>
> > +            x265_log(p,  X265_LOG_WARNING, "B pyramid cannot be enabled
> when max references is 1, Disabling B pyramid\n");
> > +        p->bBPyramid = 0;
> > +    }
> > +
> > +    if (p->bIntraRefresh && p->bOpenGOP)
> > +    {
> > +        x265_log(p,  X265_LOG_WARNING, "Open Gop disabled, Intra
> Refresh is not compatible with openGop\n");
> > +        p->bOpenGOP = 0;
> > +    }
> > +
> >
> >      if (p->scalingLists && p->internalCsp == X265_CSP_I444)
> >      {
> > diff -r 44cc2ce22c43 -r 2ba81f60f111 source/x265.h
> > --- a/source/x265.h   Thu Sep 03 22:26:21 2015 +0530
> > +++ b/source/x265.h   Mon Sep 07 15:20:53 2015 +0530
> > @@ -702,6 +702,11 @@
> >       * should detect scene cuts. The default (40) is recommended. */
> >      int       scenecutThreshold;
> >
> > +    /* Replace keyframes by using a column of intra blocks that move
> across the video
> > +     * from one side to the other, thereby "refreshing" the image. In
> effect, instead of a
> > +     * big keyframe, the keyframe is "spread" over many frames. */
> > +    int       bIntraRefresh;
> > +
> >      /*== Coding Unit (CU) definitions ==*/
> >
> >      /* Maximum CU width and height in pixels.  The size must be 64, 32,
> or 16.
> > _______________________________________________
> > 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/20150909/f2b6be49/attachment.html>


More information about the x265-devel mailing list