summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-01-06 15:21:26 +0100
committerwm4 <wm4@nowhere>2015-01-06 16:51:02 +0100
commit5410a5b2c55b5c7d9889451c1d6e56c697325a2c (patch)
treee7989451ced95a879a1d92b9037db86fa6b4c9e0 /video
parenta52ca8a2b075388dc7dd5012e4e3f4871e26b133 (diff)
downloadmpv-5410a5b2c55b5c7d9889451c1d6e56c697325a2c.tar.bz2
mpv-5410a5b2c55b5c7d9889451c1d6e56c697325a2c.tar.xz
csputils: move image_params -> csp_params into a function
Although the line count increases, this is better for making sure everything is handled consistently for all users of the mp_csp_params stuff. This also makes sure mp_csp_params is always initialized with MP_CSP_PARAMS_DEFAULTS (for consistency).
Diffstat (limited to 'video')
-rw-r--r--video/csputils.c12
-rw-r--r--video/csputils.h4
-rw-r--r--video/out/gl_video.c11
-rw-r--r--video/out/vo_direct3d.c4
-rw-r--r--video/out/vo_opengl_old.c7
-rw-r--r--video/vdpau_mixer.c4
6 files changed, 24 insertions, 18 deletions
diff --git a/video/csputils.c b/video/csputils.c
index db206330bd..70edbfa6a3 100644
--- a/video/csputils.c
+++ b/video/csputils.c
@@ -35,6 +35,7 @@
#include <libavutil/common.h>
#include <libavcodec/avcodec.h>
+#include "mp_image.h"
#include "csputils.h"
const char *const mp_csp_names[MP_CSP_COUNT] = {
@@ -682,6 +683,17 @@ void mp_gen_yuv2rgb_map(struct mp_csp_params *params, unsigned char *map, int si
}
}
+// Set colorspace related fields in p from f. Don't touch other fields.
+void mp_csp_set_image_params(struct mp_csp_params *params,
+ const struct mp_image_params *imgparams)
+{
+ struct mp_image_params p = *imgparams;
+ mp_image_params_guess_csp(&p); // ensure consistency
+ params->colorspace = p.colorspace;
+ params->levels_in = p.colorlevels;
+ params->levels_out = p.outputlevels;
+}
+
// Copy settings from eq into params.
void mp_csp_copy_equalizer_values(struct mp_csp_params *params,
const struct mp_csp_equalizer *eq)
diff --git a/video/csputils.h b/video/csputils.h
index 4e2fe611b3..51de50c4b6 100644
--- a/video/csputils.h
+++ b/video/csputils.h
@@ -133,6 +133,10 @@ struct mp_csp_params {
.rgamma = 1, .ggamma = 1, .bgamma = 1, \
.texture_bits = 8, .input_bits = 8}
+struct mp_image_params;
+void mp_csp_set_image_params(struct mp_csp_params *params,
+ const struct mp_image_params *imgparams);
+
enum mp_chroma_location {
MP_CHROMA_AUTO,
MP_CHROMA_LEFT, // mpeg2/4, h264
diff --git a/video/out/gl_video.c b/video/out/gl_video.c
index 1ff0d9d333..672fb5dafb 100644
--- a/video/out/gl_video.c
+++ b/video/out/gl_video.c
@@ -638,13 +638,10 @@ static void update_uniforms(struct gl_video *p, GLuint program)
gl->UseProgram(program);
- struct mp_csp_params cparams = {
- .colorspace = p->image_params.colorspace,
- .levels_in = p->image_params.colorlevels,
- .levels_out = p->image_params.outputlevels,
- .input_bits = p->plane_bits,
- .texture_bits = (p->plane_bits + 7) & ~7,
- };
+ struct mp_csp_params cparams = MP_CSP_PARAMS_DEFAULTS;
+ cparams.input_bits = p->plane_bits;
+ cparams.texture_bits = (p->plane_bits + 7) & ~7;
+ mp_csp_set_image_params(&cparams, &p->image_params);
mp_csp_copy_equalizer_values(&cparams, &p->video_eq);
if (p->image_desc.flags & MP_IMGFLAG_XYZ) {
cparams.colorspace = MP_CSP_XYZ;
diff --git a/video/out/vo_direct3d.c b/video/out/vo_direct3d.c
index 4a2c86aab7..7183f7d555 100644
--- a/video/out/vo_direct3d.c
+++ b/video/out/vo_direct3d.c
@@ -1152,9 +1152,7 @@ static void update_colorspace(d3d_priv *priv)
{
float coeff[3][4];
struct mp_csp_params csp = MP_CSP_PARAMS_DEFAULTS;
- csp.colorspace = priv->params.colorspace;
- csp.levels_in = priv->params.colorlevels;
- csp.levels_out = priv->params.outputlevels;
+ mp_csp_set_image_params(&csp, &priv->params);
mp_csp_copy_equalizer_values(&csp, &priv->video_eq);
if (priv->use_shaders) {
diff --git a/video/out/vo_opengl_old.c b/video/out/vo_opengl_old.c
index b88b36e5d1..6c9bfb62a0 100644
--- a/video/out/vo_opengl_old.c
+++ b/video/out/vo_opengl_old.c
@@ -1346,11 +1346,8 @@ static void update_yuvconv(struct vo *vo)
if (!vo->params)
return;
- struct mp_csp_params cparams = {
- .colorspace = vo->params->colorspace,
- .levels_in = vo->params->colorlevels,
- .levels_out = vo->params->outputlevels,
- };
+ struct mp_csp_params cparams = MP_CSP_PARAMS_DEFAULTS;
+ mp_csp_set_image_params(&cparams, vo->params);
mp_csp_copy_equalizer_values(&cparams, &p->video_eq);
gl_conversion_params_t params = {
p->target, p->yuvconvtype, cparams,
diff --git a/video/vdpau_mixer.c b/video/vdpau_mixer.c
index 7b45ca7f55..182e1fd40a 100644
--- a/video/vdpau_mixer.c
+++ b/video/vdpau_mixer.c
@@ -197,9 +197,7 @@ static int create_vdp_mixer(struct mp_vdpau_mixer *mixer)
VdpCSCMatrix matrix;
struct mp_csp_params cparams = MP_CSP_PARAMS_DEFAULTS;
- cparams.colorspace = mixer->image_params.colorspace;
- cparams.levels_in = mixer->image_params.colorlevels;
- cparams.levels_out = mixer->image_params.outputlevels;
+ mp_csp_set_image_params(&cparams, &mixer->image_params);
mp_csp_copy_equalizer_values(&cparams, &mixer->video_eq);
mp_get_yuv2rgb_coeffs(&cparams, matrix);