[x265] [PATCH 5 of 5] zone: Add support for RADL pictures

Kalyan Goswami kalyan at multicorewareinc.com
Wed Dec 26 10:09:26 CET 2018


pushed

Thanks,
Kalyan Goswami, PhD
Video Architect @ MulticoreWare
http: <http://www.multicorewareinc.com/>//www.multicorewareinc.com
<http://www.multicorewareinc.com/>
+91 9884989331


On Thu, Dec 20, 2018 at 11:10 AM Pooja Venkatesan <
pooja at multicorewareinc.com> wrote:

> # HG changeset patch
> # User Pooja Venkatesan <pooja at multicorewareinc.com>
> # Date 1544770885 -19800
> #      Fri Dec 14 12:31:25 2018 +0530
> # Node ID d5d79e22bfddda8c103da2182a68137757340425
> # Parent  1a62483c0b7549ef677ce2f343e9c7f1fcd45c44
> zone: Add support for RADL pictures
>
> diff -r 1a62483c0b75 -r d5d79e22bfdd source/common/param.cpp
> --- a/source/common/param.cpp Fri Dec 14 12:28:56 2018 +0530
> +++ b/source/common/param.cpp Fri Dec 14 12:31:25 2018 +0530
> @@ -624,6 +624,7 @@
>      OPT("amp") p->bEnableAMP = atobool(value);
>      OPT("max-merge") p->maxNumMergeCand = (uint32_t)atoi(value);
>      OPT("rd") p->rdLevel = atoi(value);
> +    OPT("radl") p->radl = atoi(value);
>      OPT2("rdoq", "rdoq-level")
>      {
>          int bval = atobool(value);
> diff -r 1a62483c0b75 -r d5d79e22bfdd source/encoder/dpb.h
> --- a/source/encoder/dpb.h Fri Dec 14 12:28:56 2018 +0530
> +++ b/source/encoder/dpb.h Fri Dec 14 12:31:25 2018 +0530
> @@ -52,6 +52,14 @@
>          m_lastIDR = 0;
>          m_pocCRA = 0;
>          m_bhasLeadingPicture = param->radl;
> +        for (int i = 0; i < param->rc.zonefileCount; i++)
> +        {
> +            if (param->rc.zones[i].zoneParam->radl)
> +            {
> +                m_bhasLeadingPicture = param->rc.zones[i].zoneParam->radl;
> +                break;
> +            }
> +        }
>          m_bRefreshPending = false;
>          m_frameDataFreeList = NULL;
>          m_bOpenGOP = param->bOpenGOP;
> diff -r 1a62483c0b75 -r d5d79e22bfdd source/encoder/encoder.cpp
> --- a/source/encoder/encoder.cpp Fri Dec 14 12:28:56 2018 +0530
> +++ b/source/encoder/encoder.cpp Fri Dec 14 12:31:25 2018 +0530
> @@ -2652,6 +2652,7 @@
>          p->rc.qp = zone->rc.qp;
>          p->rc.aqMode = X265_AQ_NONE;
>      }
> +    p->radl = zone->radl;
>
>      memcpy(zone, p, sizeof(x265_param));
>  }
> diff -r 1a62483c0b75 -r d5d79e22bfdd source/encoder/slicetype.cpp
> --- a/source/encoder/slicetype.cpp Fri Dec 14 12:28:56 2018 +0530
> +++ b/source/encoder/slicetype.cpp Fri Dec 14 12:31:25 2018 +0530
> @@ -1117,7 +1117,9 @@
>              }
>              for (int i = 0; i < m_param->rc.zonefileCount; i++)
>              {
> -                if (m_param->rc.zones[i].startFrame == frm.frameNum)
> +                int curZoneStart = m_param->rc.zones[i].startFrame;
> +                curZoneStart += curZoneStart ?
> m_param->rc.zones[i].zoneParam->radl : 0;
> +                if (curZoneStart == frm.frameNum)
>                      frm.sliceType = X265_TYPE_IDR;
>              }
>              if ((frm.sliceType == X265_TYPE_I && frm.frameNum -
> m_lastKeyframe >= m_param->keyframeMin) || (frm.frameNum ==
> (m_param->chunkStart - 1)) || (frm.frameNum == m_param->chunkEnd))
> @@ -1135,7 +1137,20 @@
>                  /* Closed GOP */
>                  m_lastKeyframe = frm.frameNum;
>                  frm.bKeyframe = true;
> -                if (bframes > 0 && !m_param->radl)
> +                int zoneRadl = 0;
> +                for (int i = 0; i < m_param->rc.zonefileCount; i++)
> +                {
> +                    int zoneStart = m_param->rc.zones[i].startFrame;
> +                    zoneStart += zoneStart ?
> m_param->rc.zones[i].zoneParam->radl : 0;
> +                    if (zoneStart == frm.frameNum)
> +                    {
> +                        zoneRadl = m_param->rc.zones[i].zoneParam->radl;
> +                        m_param->radl = 0;
> +                        m_param->rc.zones->zoneParam->radl = i <
> m_param->rc.zonefileCount - 1? m_param->rc.zones[i + 1].zoneParam->radl : 0;
> +                        break;
> +                    }
> +                }
> +                if (bframes > 0 && !m_param->radl && !zoneRadl)
>                  {
>                      list[bframes - 1]->m_lowres.sliceType = X265_TYPE_P;
>                      bframes--;
> @@ -1423,6 +1438,14 @@
>      }
>      frames[framecnt + 1] = NULL;
>
> +    for (int i = 0; i < m_param->rc.zonefileCount; i++)
> +    {
> +        int curZoneStart = m_param->rc.zones[i].startFrame, nextZoneStart
> = 0;
> +        curZoneStart += curZoneStart ?
> m_param->rc.zones[i].zoneParam->radl : 0;
> +        nextZoneStart += (i + 1 < m_param->rc.zonefileCount) ?
> m_param->rc.zones[i + 1].startFrame + m_param->rc.zones[i +
> 1].zoneParam->radl : m_param->totalFrames;
> +        if (curZoneStart <= frames[0]->frameNum && nextZoneStart >
> frames[0]->frameNum)
> +            m_param->keyframeMax = nextZoneStart - curZoneStart;
> +    }
>      int keylimit = m_param->keyframeMax;
>      if (frames[0]->frameNum < m_param->chunkEnd)
>      {
> @@ -1632,14 +1655,16 @@
>              frames[numFrames]->sliceType = X265_TYPE_P;
>          }
>
> -        bool bForceRADL = m_param->radl && !m_param->bOpenGOP;
> +        int zoneRadl = m_param->rc.zonefileCount ?
> m_param->rc.zones->zoneParam->radl : 0;
> +        bool bForceRADL = (m_param->radl || zoneRadl) &&
> !m_param->bOpenGOP;
>          bool bLastMiniGop = (framecnt >= m_param->bframes + 1) ? false :
> true;
> -        int preRADL = m_lastKeyframe + m_param->keyframeMax -
> m_param->radl - 1; /*Frame preceeding RADL in POC order*/
> +        int radl = m_param->radl ? m_param->radl : zoneRadl;
> +        int preRADL = m_lastKeyframe + m_param->keyframeMax - radl - 1;
> /*Frame preceeding RADL in POC order*/
>          if (bForceRADL && (frames[0]->frameNum == preRADL) &&
> !bLastMiniGop)
>          {
>              int j = 1;
> -            numBFrames = m_param->radl;
> -            for (; j <= m_param->radl; j++)
> +            numBFrames = m_param->radl ? m_param->radl : zoneRadl;
> +            for (; j <= numBFrames; j++)
>                  frames[j]->sliceType = X265_TYPE_B;
>              frames[j]->sliceType = X265_TYPE_I;
>          }
>
> _______________________________________________
> 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/20181226/6eaf2617/attachment-0001.html>


More information about the x265-devel mailing list