lavu: Adding ARIB STD-B67 (hybrid log-gamma) enum value and transfer function.
Adding hybrid log-gamma (https://en.wikipedia.org/wiki/Hybrid_Log-Gamma) based on the standardization in ARIB STD-B67: 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 format in mkv: https://mailarchive.ietf.org/arch/search/?email_list=cellar&gbt=1&q=Colour+Format+proposal The implementation assumes a nominal input range of [0, 1], which is consistent with HEVC. Signed-off-by: Neil Birkbeck <neil.birkbeck@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
committed by
Michael Niedermayer
parent
4c7d3e827c
commit
785038c92c
@@ -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 STD-B67 spec)
|
||||
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:
|
||||
|
||||
Reference in New Issue
Block a user