[x265] [PATCH] zone: Fix memory handling for zones

Pradeep Ramachandran pradeep at multicorewareinc.com
Tue Mar 5 09:55:49 CET 2019


On Fri, Mar 1, 2019 at 5:21 PM <pooja at multicorewareinc.com> wrote:

> # HG changeset patch
> # User Pooja Venkatesan <pooja at multicorewareinc.com>
> # Date 1551424899 -19800
> #      Fri Mar 01 12:51:39 2019 +0530
> # Node ID b758e88462f0110207db6e3a3eaf69e7cfd130a3
> # Parent  cb3e172a5f51c6a4bf8adb7953fe53277f5a1979
> zone: Fix memory handling for zones
>
> This patch does the following:
> Allocate and free memory for zones
> Copy of zone and zone params
>

Patch missed out on increasing build # due to API change.
Added the fix, and pushed patch to default branch.


> diff -r cb3e172a5f51 -r b758e88462f0 source/common/param.cpp
> --- a/source/common/param.cpp   Tue Feb 19 20:20:35 2019 +0530
> +++ b/source/common/param.cpp   Fri Mar 01 12:51:39 2019 +0530
> @@ -102,6 +102,7 @@
>
>  void x265_param_free(x265_param* p)
>  {
> +    x265_zone_free(p);
>  #ifdef SVT_HEVC
>       x265_free(p->svtHevcParam);
>  #endif
> @@ -2240,13 +2241,24 @@
>      dst->rc.zoneCount = src->rc.zoneCount;
>      dst->rc.zonefileCount = src->rc.zonefileCount;
>
> -    if (src->rc.zones)
> +    if (src->rc.zonefileCount && src->rc.zones)
>      {
> -        dst->rc.zones->startFrame = src->rc.zones->startFrame;
> -        dst->rc.zones->endFrame = src->rc.zones->endFrame;
> -        dst->rc.zones->bForceQp = src->rc.zones->bForceQp;
> -        dst->rc.zones->qp = src->rc.zones->qp;
> -        dst->rc.zones->bitrateFactor = src->rc.zones->bitrateFactor;
> +        for (int i = 0; i < src->rc.zonefileCount; i++)
> +        {
> +            dst->rc.zones[i].startFrame = src->rc.zones[i].startFrame;
> +            memcpy(dst->rc.zones[i].zoneParam,
> src->rc.zones[i].zoneParam, sizeof(x265_param));
> +        }
> +    }
> +    else if (src->rc.zoneCount && src->rc.zones)
> +    {
> +        for (int i = 0; i < src->rc.zoneCount; i++)
> +        {
> +            dst->rc.zones[i].startFrame = src->rc.zones[i].startFrame;
> +            dst->rc.zones[i].endFrame = src->rc.zones[i].endFrame;
> +            dst->rc.zones[i].bForceQp = src->rc.zones[i].bForceQp;
> +            dst->rc.zones[i].qp = src->rc.zones[i].qp;
> +            dst->rc.zones[i].bitrateFactor =
> src->rc.zones[i].bitrateFactor;
> +        }
>      }
>      else
>          dst->rc.zones = NULL;
> diff -r cb3e172a5f51 -r b758e88462f0 source/encoder/api.cpp
> --- a/source/encoder/api.cpp    Tue Feb 19 20:20:35 2019 +0530
> +++ b/source/encoder/api.cpp    Fri Mar 01 12:51:39 2019 +0530
> @@ -98,6 +98,12 @@
>      x265_param* zoneParam = PARAM_NS::x265_param_alloc();
>      if (!param || !latestParam)
>          goto fail;
> +    if (p->rc.zoneCount || p->rc.zonefileCount)
> +    {
> +        int zoneCount = p->rc.zonefileCount ? p->rc.zonefileCount :
> p->rc.zoneCount;
> +        param->rc.zones = x265_zone_alloc(zoneCount, p->rc.zonefileCount
> ? true : false);
> +        latestParam->rc.zones = x265_zone_alloc(zoneCount,
> p->rc.zonefileCount ? true : false);
> +    }
>
>      x265_copy_params(param, p);
>      x265_log(param, X265_LOG_INFO, "HEVC encoder version %s\n",
> PFX(version_str));
> @@ -287,6 +293,11 @@
>      bool isReconfigureRc =
> encoder->isReconfigureRc(encoder->m_latestParam, param_in);
>      if ((encoder->m_reconfigure && !isReconfigureRc) ||
> (encoder->m_reconfigureRc && isReconfigureRc)) /* Reconfigure in progress */
>          return 1;
> +    if (encoder->m_latestParam->rc.zoneCount ||
> encoder->m_latestParam->rc.zonefileCount)
> +    {
> +        int zoneCount = encoder->m_latestParam->rc.zonefileCount ?
> encoder->m_latestParam->rc.zonefileCount :
> encoder->m_latestParam->rc.zoneCount;
> +        save.rc.zones = x265_zone_alloc(zoneCount,
> encoder->m_latestParam->rc.zonefileCount ? true : false);
> +    }
>      x265_copy_params(&save, encoder->m_latestParam);
>      int ret = encoder->reconfigureParam(encoder->m_latestParam, param_in);
>      if (ret)
> @@ -922,6 +933,26 @@
>      return x265_free(p);
>  }
>
> +x265_zone *x265_zone_alloc(int zoneCount, bool isZoneFile)
> +{
> +    x265_zone* zone = (x265_zone*)x265_malloc(sizeof(x265_zone) *
> zoneCount);
> +    if (isZoneFile) {
> +        for (int i = 0; i < zoneCount; i++)
> +            zone[i].zoneParam =
> (x265_param*)x265_malloc(sizeof(x265_param));
> +    }
> +    return zone;
> +}
> +
> +void x265_zone_free(x265_param *param)
> +{
> +    if (param->rc.zonefileCount) {
> +        for (int i = 0; i < param->rc.zonefileCount; i++)
> +            x265_free(param->rc.zones[i].zoneParam);
> +    }
> +    if (param->rc.zoneCount || param->rc.zonefileCount)
> +        x265_free(param->rc.zones);
> +}
> +
>  static const x265_api libapi =
>  {
>      X265_MAJOR_VERSION,
> diff -r cb3e172a5f51 -r b758e88462f0 source/encoder/encoder.cpp
> --- a/source/encoder/encoder.cpp        Tue Feb 19 20:20:35 2019 +0530
> +++ b/source/encoder/encoder.cpp        Fri Mar 01 12:51:39 2019 +0530
> @@ -3356,6 +3356,12 @@
>      if (p->dolbyProfile)     // Default disabled.
>          configureDolbyVisionParams(p);
>
> +    if (p->rc.zonefileCount && p->rc.zoneCount)
> +    {
> +        p->rc.zoneCount = 0;
> +        x265_log(p, X265_LOG_WARNING, "Only zone or zonefile can be used.
> Enabling only zonefile\n");
> +    }
> +
>      if (m_param->rc.zonefileCount && p->bOpenGOP)
>      {
>          p->bOpenGOP = 0;
> diff -r cb3e172a5f51 -r b758e88462f0 source/x265.h
> --- a/source/x265.h     Tue Feb 19 20:20:35 2019 +0530
> +++ b/source/x265.h     Fri Mar 01 12:51:39 2019 +0530
> @@ -1798,6 +1798,10 @@
>  #define X265_PARAM_BAD_VALUE (-2)
>  int x265_param_parse(x265_param *p, const char *name, const char *value);
>
> +x265_zone *x265_zone_alloc(int zoneCount, bool isZoneFile);
> +
> +void x265_zone_free(x265_param *param);
> +
>  int x265_zone_param_parse(x265_param* p, const char* name, const char*
> value);
>
>  static const char * const x265_profile_names[] = {
> _______________________________________________
> 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/20190305/3bc2a692/attachment-0001.html>


More information about the x265-devel mailing list