From patchwork Thu Mar 5 21:50:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Reid X-Patchwork-Id: 18065 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 8FF2544A1DF for ; Fri, 6 Mar 2020 01:25:34 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 672EA68AC2C; Fri, 6 Mar 2020 01:25:34 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f66.google.com (mail-qv1-f66.google.com [209.85.219.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E939D68A857 for ; Fri, 6 Mar 2020 01:25:27 +0200 (EET) Received: by mail-qv1-f66.google.com with SMTP id r15so143874qve.3 for ; Thu, 05 Mar 2020 15:25:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=DJOdYzlDL8ILcZGKOnHB7+mqnJyuCvDrHMp6z2oqGmo=; b=AnOWIMXME+7l5XGMrGyR3nMCwUe+QwwdgupDhuO0ByZTVwQds8l0wcJp7l5yUxldA+ roZtAByWxsamKwN0KD/gUtJiC7qJa6TOgCqFlZvBwOiVJxUEqcaG7DuGKg7h3Cb7TDl5 zUF/Lhkec1o7qsvPTkKOffhb5SVeUxrDBklmooOkzYvwBDBVkc+fxaRgcy/Qqv8oHy32 bN0z6heNq8eDXux2pwfG1vXkAXQ8sY8r3DVLcEhsHds7BSb48VVuRS57LfkeIdKdkUv4 lB8r3s8n2sBlJxALhLKZHGiuB97YOVjYTeMLSP/td41UfqeBphNPCSrGUllDta9OWOni BJDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=DJOdYzlDL8ILcZGKOnHB7+mqnJyuCvDrHMp6z2oqGmo=; b=Hj8Ot2GiyDkk/FPMCIeRBCm9zkfWvPv5PFt2LuAfYSNSTpQ4YQI89JJ3Kdp7zZtCq9 QIOKAZ1TFJL1jWKWuGbZTSW9S9pvLmthVq1UYS4fJAomH6CQPsREDTjWBVQ1eQK6UZcZ JSB7cSdYe3ZB/yr2s+5wBY8XJMabH5qH5zAq2nncvrmK3V10T58eUjM6T0bITPlUPpXP yQkb7hD5KO5Yuaix9zMfn1HgYGVDTuJcFKduyZXFcRv6qCft07bE7DkFnNRHfXVHL7aK BnRN02gNCTFT3Ch+dOGz5t9ZzoXbTA42T4sY0TAtj1pLnJ06dGlEJBXk7lXuTH71ZepO vGmA== X-Gm-Message-State: ANhLgQ1eKfc+1Gz1UZCPs9FpGQCxMz6IuDpgN8wc1CXmbyFwBwEO4s4k SsBQF7Ta2W/dlMKH3Nc4u6SFIzpD X-Google-Smtp-Source: ADFU+vvXRrDQEFQ0g8cavNJfiep9dbDx/noPGhwY8YlGmrH8EXJS34a7fn1zJiAfwT4FHwASMyqA0A== X-Received: by 2002:a17:902:6504:: with SMTP id b4mr9997086plk.291.1583445043415; Thu, 05 Mar 2020 13:50:43 -0800 (PST) Received: from localhost.localdomain ([104.255.9.53]) by smtp.gmail.com with ESMTPSA id k20sm10850265pfk.123.2020.03.05.13.50.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 05 Mar 2020 13:50:42 -0800 (PST) From: mindmark@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Thu, 5 Mar 2020 13:50:39 -0800 Message-Id: <20200305215039.79647-1-mindmark@gmail.com> X-Mailer: git-send-email 2.25.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/exr: add cineon lin2log trc X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Mark Reid Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Mark Reid Hi, The following patch adds a cineon lin2log color transfer characteristic to exr. The purpose of this patch is to allow preserving of the dynamic range of an exr file when converting to DPX or when using video filter such as 3d luts. I wasn't sure if adding it to the AVColorTransferCharacteristic enum was the correct approach as this might be a exr specific thing but I figured it was a good starting point. --- libavcodec/exr.c | 2 ++ libavutil/color_utils.c | 14 ++++++++++++++ libavutil/pixfmt.h | 1 + 3 files changed, 17 insertions(+) -- 2.21.0 diff --git a/libavcodec/exr.c b/libavcodec/exr.c index 1db30a1ae0..f2900a7921 100644 --- a/libavcodec/exr.c +++ b/libavcodec/exr.c @@ -1938,6 +1938,8 @@ static const AVOption options[] = { AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTEST2084 }, INT_MIN, INT_MAX, VD, "apply_trc_type"}, { "smpte428_1", "SMPTE ST 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTEST428_1 }, INT_MIN, INT_MAX, VD, "apply_trc_type"}, + { "lin2log", "Default Cineon/DPX log", 0, + AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_CINE_LIN2LOG }, INT_MIN, INT_MAX, VD, "apply_trc_type"}, { NULL }, }; diff --git a/libavutil/color_utils.c b/libavutil/color_utils.c index eb8bc7b5fc..e33c019d4a 100644 --- a/libavutil/color_utils.c +++ b/libavutil/color_utils.c @@ -167,6 +167,16 @@ static double avpriv_trc_arib_std_b67(double Lc) { (Lc <= 1.0 / 12.0 ? sqrt(3.0 * Lc) : a * log(12.0 * Lc - b) + c); } +static double avpriv_trc_cine_lin2log(double Lc) { + const double blackpoint = 95.0; + const double whitepoint = 685.0; + const double gamma = 0.6; + const double offset = pow(10, (blackpoint - whitepoint) * 0.002 / gamma); + const double gain = 1.0 / (1.0 - offset); + + return (log10((Lc + offset) / gain) / (0.002 / gamma) + whitepoint ) / 1023.0; +} + avpriv_trc_function avpriv_get_trc_function_from_trc(enum AVColorTransferCharacteristic trc) { avpriv_trc_function func = NULL; @@ -225,6 +235,10 @@ avpriv_trc_function avpriv_get_trc_function_from_trc(enum AVColorTransferCharact func = avpriv_trc_arib_std_b67; break; + case AVCOL_TRC_CINE_LIN2LOG: + func = avpriv_trc_cine_lin2log; + break; + case AVCOL_TRC_RESERVED0: case AVCOL_TRC_UNSPECIFIED: case AVCOL_TRC_RESERVED: diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h index 1c625cfc8a..1f3f9988d7 100644 --- a/libavutil/pixfmt.h +++ b/libavutil/pixfmt.h @@ -499,6 +499,7 @@ enum AVColorTransferCharacteristic { AVCOL_TRC_SMPTE428 = 17, ///< SMPTE ST 428-1 AVCOL_TRC_SMPTEST428_1 = AVCOL_TRC_SMPTE428, AVCOL_TRC_ARIB_STD_B67 = 18, ///< ARIB STD-B67, known as "Hybrid log-gamma" + AVCOL_TRC_CINE_LIN2LOG = 19, ///< Default Cineon/DPX linear to log 1D curve AVCOL_TRC_NB ///< Not part of ABI };