[x265] [PATCH] Add: Fix for VMAF Exceptions

Dakshinya T R S dakshinya at multicorewareinc.com
Thu Apr 15 12:38:10 UTC 2021


Sure. I have noted it and I am working on the changes.

Thanks & Regards,
Dakshinya T R S,
Intern at Multicoreware,
Bannari Amman Institute of Technology,
Sathyamangalam.




On Mon, Apr 12, 2021 at 4:44 PM Pooja Venkatesan <pooja at multicorewareinc.com>
wrote:

> FYI
> Regards,
> *Pooja Venkatesan*,
> Video Codec Engineer,
> Media & AI analytics BU
>
>
>
> ---------- Forwarded message ---------
> From: Aruna Matheswaran <aruna at multicorewareinc.com>
> Date: Mon, Apr 12, 2021 at 3:54 PM
> Subject: Re: [x265] [PATCH] Add: Fix for VMAF Exceptions
> To: Development for x265 <x265-devel at videolan.org>
>
>
>
>
> On Fri, Apr 9, 2021 at 12:35 PM Dakshinya T R S <
> dakshinya at multicorewareinc.com> wrote:
>
>> From bf71142a6b22d33b2b2b8ebc8d80a019dbdf0a1d Mon Sep 17 00:00:00 2001
>> From: Dakshinya T R S <dakshinya at multicorewareinc.com>
>> Date: Wed, 7 Apr 2021 23:32:15 -0700
>> Subject: [PATCH] Fix VMAF exceptions
>>
>> ---
>>  source/encoder/api.cpp          | 38 ++++++++++++++++++++++++++++++---
>>  source/encoder/frameencoder.cpp |  1 +
>>  source/x265.h                   | 10 +++++----
>>  3 files changed, 42 insertions(+), 7 deletions(-)
>>
>> diff --git a/source/encoder/api.cpp b/source/encoder/api.cpp
>> index a986355e0..9374bbc38 100644
>> --- a/source/encoder/api.cpp
>> +++ b/source/encoder/api.cpp
>> @@ -1903,22 +1903,34 @@ double x265_calculate_vmafscore(x265_param
>> *param, x265_vmaf_data *data)
>>      data->width = param->sourceWidth;
>>      data->height = param->sourceHeight;
>>      data->internalBitDepth = param->internalBitDepth;
>> +    data->format = (char *)malloc(11 * sizeof(char));
>>  [AM] Repeated malloc shall be avoided if the format is captured in
>> encoder handle or in m_cliopt.vmafData after input file info parsing.
>>      if (param->internalCsp == X265_CSP_I420)
>>      {
>>          if ((param->sourceWidth * param->sourceHeight) % 2 != 0)
>>              x265_log(NULL, X265_LOG_ERROR, "Invalid file size\n");
>>          data->offset = param->sourceWidth * param->sourceHeight / 2;
>> +        memcpy(data->format, "yuv420p", 7);
>>      }
>>      else if (param->internalCsp == X265_CSP_I422)
>> +    {
>>          data->offset = param->sourceWidth * param->sourceHeight;
>> +        memcpy(data->format, "yuv422p", 7);
>> +    }
>>      else if (param->internalCsp == X265_CSP_I444)
>> +    {
>>          data->offset = param->sourceWidth * param->sourceHeight * 2;
>> +        memcpy(data->format, "yuv444p", 7);
>> +    }
>>      else
>>          x265_log(NULL, X265_LOG_ERROR, "Invalid format\n");
>> +    if (param->internalBitDepth == 10)
>> +        strcat(data->format, "10le");
>> +    else if (param->internalBitDepth == 12)
>> +        strcat(data->format, "12le");
>>
>> -    compute_vmaf(&score, vcd->format, data->width, data->height,
>> read_frame, data, vcd->model_path, vcd->log_path, vcd->log_fmt,
>> vcd->disable_clip, vcd->disable_avx, vcd->enable_transform,
>> vcd->phone_model, vcd->psnr, vcd->ssim, vcd->ms_ssim, vcd->pool,
>> vcd->thread, vcd->subsample, vcd->enable_conf_interval);
>> -
>> +    compute_vmaf(&score, data->format, data->width, data->height,
>> read_frame, data, vcd->model_path, vcd->log_path, vcd->log_fmt,
>> vcd->disable_clip, vcd->disable_avx, vcd->enable_transform,
>> vcd->phone_model, vcd->psnr, vcd->ssim, vcd->ms_ssim, vcd->pool,
>> vcd->thread, vcd->subsample, vcd->enable_conf_interval);
>> +    free(data->format);
>>      return score;
>>  }
>>
>> @@ -2019,8 +2031,28 @@ double
>> x265_calculate_vmaf_framelevelscore(x265_vmaf_framedata *vmafframedata)
>>          read_frame = read_frame_8bit;
>>      else
>>          read_frame = read_frame_10bit;
>> -    compute_vmaf(&score, vcd->format, vmafframedata->width,
>> vmafframedata->height, read_frame, vmafframedata, vcd->model_path,
>> vcd->log_path, vcd->log_fmt, vcd->disable_clip, vcd->disable_avx,
>> vcd->enable_transform, vcd->phone_model, vcd->psnr, vcd->ssim,
>> vcd->ms_ssim, vcd->pool, vcd->thread, vcd->subsample,
>> vcd->enable_conf_interval);
>> +    vmafframedata->format = (char *)malloc(11 * sizeof(char));
>>
>> +    if (vmafframedata->internalCsp == X265_CSP_I420)
>> +    {
>> +        memcpy(vmafframedata->format, "yuv420p", 7);
>> +    }
>> +    else if (vmafframedata->internalCsp == X265_CSP_I422)
>> +    {
>> +        memcpy(vmafframedata->format, "yuv422p", 7);
>> +    }
>> +    else if (vmafframedata->internalCsp == X265_CSP_I444)
>> +    {
>> +        memcpy(vmafframedata->format, "yuv444p", 7);
>> +    }
>> +    else
>> +        x265_log(NULL, X265_LOG_ERROR, "Invalid format\n");
>> +    if (vmafframedata->internalBitDepth == 10)
>> +        strcat(vmafframedata->format, "10le");
>> +    else if (vmafframedata->internalBitDepth == 12)
>> +        strcat(vmafframedata->format, "12le");
>>
>  [AM] Same comment as above.
>
>> +    compute_vmaf(&score, vmafframedata->format, vmafframedata->width,
>> vmafframedata->height, read_frame, vmafframedata, vcd->model_path,
>> vcd->log_path, vcd->log_fmt, vcd->disable_clip, vcd->disable_avx,
>> vcd->enable_transform, vcd->phone_model, vcd->psnr, vcd->ssim,
>> vcd->ms_ssim, vcd->pool, vcd->thread, vcd->subsample,
>> vcd->enable_conf_interval);
>> +    free(vmafframedata->format);
>>      return score;
>>  }
>>  #endif
>> diff --git a/source/encoder/frameencoder.cpp
>> b/source/encoder/frameencoder.cpp
>> index 2086a15a5..05c1d93a5 100644
>> --- a/source/encoder/frameencoder.cpp
>> +++ b/source/encoder/frameencoder.cpp
>> @@ -2143,6 +2143,7 @@ void FrameEncoder::vmafFrameLevelScore()
>>      vmafframedata->internalBitDepth = m_param->internalBitDepth;
>>      vmafframedata->reference_frame = fenc;
>>      vmafframedata->distorted_frame = recon;
>> +    vmafframedata->internalCsp = m_param->internalCsp;
>>
>>      fenc->m_vmafScore =
>> x265_calculate_vmaf_framelevelscore(vmafframedata);
>>
>> diff --git a/source/x265.h b/source/x265.h
>> index f44040ba7..0e572e468 100644
>> --- a/source/x265.h
>> +++ b/source/x265.h
>> @@ -709,6 +709,7 @@ typedef struct x265_vmaf_data
>>      int internalBitDepth;
>>      FILE *reference_file; /* FILE pointer for input file */
>>      FILE *distorted_file; /* FILE pointer for recon file generated*/
>> +    char *format;
>>  }x265_vmaf_data;
>>  [AM] Update X265_BUILD.
>>  /* data to calculate frame level VMAF score */
>> @@ -716,16 +717,17 @@ typedef struct x265_vmaf_framedata
>>  {
>>      int width;
>>      int height;
>> -    int frame_set;
>> -    int internalBitDepth;
>> +    int frame_set;
>> +    int internalBitDepth;
>>      void *reference_frame; /* points to fenc of particular frame */
>>      void *distorted_frame; /* points to recon of particular frame */
>> +    char *format;
>> +    int internalCsp;
>>  }x265_vmaf_framedata;
>>
>>  /* common data needed to calculate both frame level and video level VMAF
>> scores */
>>  typedef struct x265_vmaf_commondata
>>  {
>> -    char *format;
>>      char *model_path;
>>      char *log_path;
>>      char *log_fmt;
>> @@ -742,7 +744,7 @@ typedef struct x265_vmaf_commondata
>>      int enable_conf_interval;
>>  }x265_vmaf_commondata;
>>
>> -static const x265_vmaf_commondata vcd[] = { { NULL, (char
>> *)"/usr/local/share/model/vmaf_v0.6.1.pkl", NULL, NULL, 0, 0, 0, 0, 0, 0,
>> 0, NULL, 0, 1, 0 } };
>> +static const x265_vmaf_commondata vcd[] = { { (char
>> *)"/usr/local/share/model/vmaf_v0.6.1.json", NULL, NULL, 0, 0, 0, 0, 0, 0,
>> 0, NULL, 0, 1, 0 } };
>>
>>  /* x265 input parameters
>>
> [AM] Please mention the VMAF version with the integration works fine in
> VMAF documentation.
>
>>   *
>> --
>> 2.17.1
>>
>>
>> Thanks & Regards,
>> Dakshinya T R S,
>> Intern at Multicoreware,
>> Bannari Amman Institute of Technology,
>> Sathyamangalam.
>> ______________________________________
>>
>> 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
>>
>
>
> --
> Regards,
> *Aruna Matheswaran,*
> Video Codec Engineer,
> Media & AI analytics BU,
>
>
>
> _______________________________________________
> 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/20210415/d716f122/attachment.html>


More information about the x265-devel mailing list