[FFmpeg-devel] [PATCH] lavu: Adding hybrid-log gamma enum value and transfer function.

Neil Birkbeck neil.birkbeck at gmail.com
Fri Apr 22 02:04:24 CEST 2016


Thanks Hendrik.

For now, I've updated the patch with a better comment and commit
message, and will change name to the more intuitive _HLG or
(_HYBRID_LOG_GAMMA) if you feel this is better. Seems that the more
recent enums use a standard as the name for the enum (e.g.,
SMPTEST2084 is often referred to as Perceptual Quantizer or PQ).



On Thu, Apr 21, 2016 at 2:03 PM, Hendrik Leppkes <h.leppkes at gmail.com> wrote:
> On Thu, Apr 21, 2016 at 10:57 PM, Neil Birkbeck <neil.birkbeck at gmail.com> wrote:
>> The standard:
>> http://www.arib.or.jp/english/html/overview/doc/2-STD-B67v1_0.pdf
>>
>> The choice of enum value of 18 is consistent with HEVC:
>> http://phenix.it-sudparis.eu/jct/doc_end_user/current_document.php?id=10481
>>
>> and also with latest proposal for color trc in mkv:
>> https://mailarchive.ietf.org/arch/search/?email_list=cellar&gbt=1&q=Colour+Format+proposal
>>
>> Signed-off-by: Neil Birkbeck <neil.birkbeck at gmail.com>
>> ---
>>  libavutil/color_utils.c    | 16 ++++++++++++++++
>>  libavutil/pixdesc.c        |  2 +-
>>  libavutil/pixfmt.h         |  1 +
>>  tests/ref/fate/color_utils | 19 +++++++++++++++++++
>>  4 files changed, 37 insertions(+), 1 deletion(-)
>>
>> diff --git a/libavutil/color_utils.c b/libavutil/color_utils.c
>> index 6dba46a..87e5f5e 100644
>> --- a/libavutil/color_utils.c
>> +++ b/libavutil/color_utils.c
>> @@ -155,6 +155,18 @@ static double avpriv_trc_smpte_st428_1(double Lc)
>>           :              pow(48.0 * Lc / 52.37, 1.0 / 2.6);
>>  }
>>
>> +
>> +static double avpriv_trc_arib_std_b67(double Lc) {
>> +    // The function uses the definition from HEVC, which assumes that the peak
>> +    // white is input level = 1. (this is equivalent to scaling E = Lc * 12 and
>> +    // using the definition from the arib standard)
>> +    const double a = 0.17883277;
>> +    const double b = 0.28466892;
>> +    const double c = 0.55991073;
>> +    return (0.0 > Lc) ? 0.0 :
>> +        (Lc <= 1.0 / 12.0 ? sqrt(3.0 * Lc) : a * log(12.0 * Lc - b) + c);
>> +}
>> +
>>  avpriv_trc_function avpriv_get_trc_function_from_trc(enum AVColorTransferCharacteristic trc)
>>  {
>>      avpriv_trc_function func = NULL;
>> @@ -209,6 +221,10 @@ avpriv_trc_function avpriv_get_trc_function_from_trc(enum AVColorTransferCharact
>>              func = avpriv_trc_smpte_st428_1;
>>              break;
>>
>> +        case AVCOL_TRC_ARIB_STD_B67:
>> +            func = avpriv_trc_arib_std_b67;
>> +            break;
>> +
>>          case AVCOL_TRC_RESERVED0:
>>          case AVCOL_TRC_UNSPECIFIED:
>>          case AVCOL_TRC_RESERVED:
>> diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c
>> index 8a9475c..995244b 100644
>> --- a/libavutil/pixdesc.c
>> +++ b/libavutil/pixdesc.c
>> @@ -2080,6 +2080,7 @@ static const char *color_transfer_names[AVCOL_TRC_NB] = {
>>      "bt470bg", "smpte170m", "smpte240m", "linear", "log100",
>>      "log316", "iec61966-2-4", "bt1361e", "iec61966-2-1",
>>      "bt2020-10", "bt2020-20", "smpte2084", "smpte428-1",
>> +    "arib-std-b67"
>>  };
>>
>>  static const char *color_space_names[AVCOL_SPC_NB] = {
>> @@ -2560,4 +2561,3 @@ int main(void){
>>  }
>>
>>  #endif
>> -
>> diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h
>> index 546eb44..16bd5bc 100644
>> --- a/libavutil/pixfmt.h
>> +++ b/libavutil/pixfmt.h
>> @@ -420,6 +420,7 @@ enum AVColorTransferCharacteristic {
>>      AVCOL_TRC_BT2020_12    = 15, ///< ITU-R BT2020 for 12 bit system
>>      AVCOL_TRC_SMPTEST2084  = 16, ///< SMPTE ST 2084 for 10, 12, 14 and 16 bit systems
>>      AVCOL_TRC_SMPTEST428_1 = 17, ///< SMPTE ST 428-1
>> +    AVCOL_TRC_ARIB_STD_B67 = 18, ///< Hybrid log-gamma
>
> I find it odd that the name is seemingly unrelated to the comment, the
> comment should probably elaborate more.
> The commit message could probably also benefit from using the same name.
>
>>      AVCOL_TRC_NB,                ///< Not part of ABI
>>  };
>>
>> diff --git a/tests/ref/fate/color_utils b/tests/ref/fate/color_utils
>> index 6e80ebd..10f8055 100644
>> --- a/tests/ref/fate/color_utils
>> +++ b/tests/ref/fate/color_utils
>> @@ -283,3 +283,22 @@ AVColorTransferCharacteristic=17 calling func(15123.456700) expected=39.174525
>>  AVColorTransferCharacteristic=17 calling func(19845.889230) expected=43.490646
>>  AVColorTransferCharacteristic=17 calling func(98678.423100) expected=80.593559
>>  AVColorTransferCharacteristic=17 calling func(99999.899998) expected=81.006971
>> +AVColorTransferCharacteristic=18 calling func(-0.100000) expected=0.000000
>> +AVColorTransferCharacteristic=18 calling func(-0.018054) expected=0.000000
>> +AVColorTransferCharacteristic=18 calling func(-0.010000) expected=0.000000
>> +AVColorTransferCharacteristic=18 calling func(-0.004490) expected=0.000000
>> +AVColorTransferCharacteristic=18 calling func(0.000000) expected=0.000000
>> +AVColorTransferCharacteristic=18 calling func(0.003162) expected=0.097400
>> +AVColorTransferCharacteristic=18 calling func(0.005000) expected=0.122474
>> +AVColorTransferCharacteristic=18 calling func(0.009000) expected=0.164317
>> +AVColorTransferCharacteristic=18 calling func(0.015000) expected=0.212132
>> +AVColorTransferCharacteristic=18 calling func(0.100000) expected=0.544089
>> +AVColorTransferCharacteristic=18 calling func(1.000000) expected=1.000000
>> +AVColorTransferCharacteristic=18 calling func(52.370000) expected=1.712092
>> +AVColorTransferCharacteristic=18 calling func(125.098765) expected=1.867862
>> +AVColorTransferCharacteristic=18 calling func(1999.111230) expected=2.363502
>> +AVColorTransferCharacteristic=18 calling func(6945.443000) expected=2.586219
>> +AVColorTransferCharacteristic=18 calling func(15123.456700) expected=2.725380
>> +AVColorTransferCharacteristic=18 calling func(19845.889230) expected=2.773978
>> +AVColorTransferCharacteristic=18 calling func(98678.423100) expected=3.060803
>> +AVColorTransferCharacteristic=18 calling func(99999.899998) expected=3.063182
>> --
>> 2.8.0.rc3.226.g39d4020
>>
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at ffmpeg.org
>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-lavu-PATCH-lavu-Adding-ARIB-STD-B67-hybrid-log-gamma.patch
Type: text/x-patch
Size: 5459 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20160421/b07a1841/attachment.bin>


More information about the ffmpeg-devel mailing list