mirror of
https://github.com/mpv-player/mpv
synced 2025-02-17 13:17:13 +00:00
The primary need for this change is the fact that the OOTF was incorrectly scaled, due to the fact that the application of the OOTF can itself change the required normalization peak. (Plus, an oversight in pass_inverse_ootf meant we forgot to normalize at the end of it) The linearize/delinearize functions still normalize the scale since it's used in a number of places throughout gpu/video.c, but the color management function now converts to absolute scale right away, instead of in an awkward way inside the tone mapping branch. The OOTF functions now work in absolute scale only. In addition, minor changes have been made to the way normalization is handled for tone mapping - we now divide out the dst_peak *after* peak detection, in order to make the scale of the peak detection buffer consistent even if the dst_peak were to (hypothetically) change mid-stream. In theory, we could also do this for desaturation, but doing the desaturation before tone mapping has the advantage of preserving much more brightness than the other way around - and even mid-stream changes are not that drastic here. Finally, some preparation work has been done for allowing the user to customize the `dst.sig_peak` in the future.
55 lines
2.2 KiB
C
55 lines
2.2 KiB
C
/*
|
|
* This file is part of mpv.
|
|
*
|
|
* mpv is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* mpv is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with mpv. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef MP_GL_VIDEO_SHADERS_H
|
|
#define MP_GL_VIDEO_SHADERS_H
|
|
|
|
#include <libavutil/lfg.h>
|
|
|
|
#include "utils.h"
|
|
#include "video.h"
|
|
|
|
extern const struct deband_opts deband_opts_def;
|
|
extern const struct m_sub_options deband_conf;
|
|
|
|
void sampler_prelude(struct gl_shader_cache *sc, int tex_num);
|
|
void pass_sample_separated_gen(struct gl_shader_cache *sc, struct scaler *scaler,
|
|
int d_x, int d_y);
|
|
void pass_sample_polar(struct gl_shader_cache *sc, struct scaler *scaler,
|
|
int components, bool sup_gather);
|
|
void pass_compute_polar(struct gl_shader_cache *sc, struct scaler *scaler,
|
|
int components, int bw, int bh, int iw, int ih);
|
|
void pass_sample_bicubic_fast(struct gl_shader_cache *sc);
|
|
void pass_sample_oversample(struct gl_shader_cache *sc, struct scaler *scaler,
|
|
int w, int h);
|
|
|
|
void pass_linearize(struct gl_shader_cache *sc, enum mp_csp_trc trc);
|
|
void pass_delinearize(struct gl_shader_cache *sc, enum mp_csp_trc trc);
|
|
|
|
void pass_color_map(struct gl_shader_cache *sc,
|
|
struct mp_colorspace src, struct mp_colorspace dst,
|
|
enum tone_mapping algo, float tone_mapping_param,
|
|
float tone_mapping_desat, bool use_detected_peak,
|
|
bool gamut_warning, bool is_linear);
|
|
|
|
void pass_sample_deband(struct gl_shader_cache *sc, struct deband_opts *opts,
|
|
AVLFG *lfg, enum mp_csp_trc trc);
|
|
|
|
void pass_sample_unsharp(struct gl_shader_cache *sc, float param);
|
|
|
|
#endif
|