summaryrefslogtreecommitdiff
path: root/libavfilter/vf_tonemap.c
diff options
context:
space:
mode:
authorVittorio Giovara <vittorio.giovara@gmail.com>2018-07-25 16:44:50 +0200
committerVittorio Giovara <vittorio.giovara@gmail.com>2018-08-06 18:35:52 +0200
commite467179cfbe270c4b59b10f859b6925668d59583 (patch)
tree0966e8ab8d44bdbe65e15dc83f6ce1361d587f5b /libavfilter/vf_tonemap.c
parentce7ca726b2cae0eeb4a4e688c5c7d0ea05776832 (diff)
vf_tonemap[_opencl]: Move determine_signal_peak() to a shared file
The two functions are identical. Use the shared LumaCoeffients type too.
Diffstat (limited to 'libavfilter/vf_tonemap.c')
-rw-r--r--libavfilter/vf_tonemap.c38
1 files changed, 3 insertions, 35 deletions
diff --git a/libavfilter/vf_tonemap.c b/libavfilter/vf_tonemap.c
index 10fd7ea016..b62532946b 100644
--- a/libavfilter/vf_tonemap.c
+++ b/libavfilter/vf_tonemap.c
@@ -30,17 +30,15 @@
#include "libavutil/imgutils.h"
#include "libavutil/internal.h"
#include "libavutil/intreadwrite.h"
-#include "libavutil/mastering_display_metadata.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "avfilter.h"
+#include "colorspace.h"
#include "formats.h"
#include "internal.h"
#include "video.h"
-#define REFERENCE_WHITE 100.0f
-
enum TonemapAlgorithm {
TONEMAP_NONE,
TONEMAP_LINEAR,
@@ -52,11 +50,6 @@ enum TonemapAlgorithm {
TONEMAP_MAX,
};
-typedef struct LumaCoefficients {
- double cr, cg, cb;
-} LumaCoefficients;
-
-
static const struct LumaCoefficients luma_coefficients[AVCOL_SPC_NB] = {
[AVCOL_SPC_FCC] = { 0.30, 0.59, 0.11 },
[AVCOL_SPC_BT470BG] = { 0.299, 0.587, 0.114 },
@@ -75,7 +68,7 @@ typedef struct TonemapContext {
double desat;
double peak;
- const LumaCoefficients *coeffs;
+ const struct LumaCoefficients *coeffs;
} TonemapContext;
static const enum AVPixelFormat pix_fmts[] = {
@@ -114,31 +107,6 @@ static av_cold int init(AVFilterContext *ctx)
return 0;
}
-static double determine_signal_peak(AVFrame *in)
-{
- AVFrameSideData *sd = av_frame_get_side_data(in, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL);
- double peak = 0;
-
- if (sd) {
- AVContentLightMetadata *clm = (AVContentLightMetadata *)sd->data;
- peak = clm->MaxCLL / REFERENCE_WHITE;
- }
-
- sd = av_frame_get_side_data(in, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA);
- if (!peak && sd) {
- AVMasteringDisplayMetadata *metadata = (AVMasteringDisplayMetadata *)sd->data;
- if (metadata->has_luminance)
- peak = av_q2d(metadata->max_luminance) / REFERENCE_WHITE;
- }
-
- // For untagged source, use peak of 10000 if SMPTE ST.2084
- // otherwise assume HLG with reference display peak 1000.
- if (!peak)
- peak = in->color_trc == AVCOL_TRC_SMPTE2084 ? 100.0f : 10.0f;
-
- return peak;
-}
-
static float hable(float in)
{
float a = 0.15f, b = 0.50f, c = 0.10f, d = 0.20f, e = 0.02f, f = 0.30f;
@@ -260,7 +228,7 @@ static int filter_frame(AVFilterLink *link, AVFrame *in)
/* read peak from side data if not passed in */
if (!peak) {
- peak = determine_signal_peak(in);
+ peak = ff_determine_signal_peak(in);
av_log(s, AV_LOG_DEBUG, "Computed signal peak: %f\n", peak);
}