summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-05-03 01:37:13 +0200
committerwm4 <wm4@nowhere>2013-05-04 01:34:29 +0200
commit2cb147a2f40bcde48f5db321840f4dbd36ca796b (patch)
tree6b9f86619157c2c482a4fb579b34a5ff2c067860 /video
parent872aefaa1521a8cf70c6e14f3356e9d00ed7efa3 (diff)
downloadmpv-2cb147a2f40bcde48f5db321840f4dbd36ca796b.tar.bz2
mpv-2cb147a2f40bcde48f5db321840f4dbd36ca796b.tar.xz
video: support YCgCo colorspace
YCgCo can be manually selected, but will also be used if the decoder reports YCgCo. To make things more fun, files are sometimes marked incorrectly, which will display such broken files incorrectly starting with this commit.
Diffstat (limited to 'video')
-rw-r--r--video/csputils.c12
-rw-r--r--video/csputils.h1
2 files changed, 13 insertions, 0 deletions
diff --git a/video/csputils.c b/video/csputils.c
index e7ea5a388b..d2793532df 100644
--- a/video/csputils.c
+++ b/video/csputils.c
@@ -41,6 +41,7 @@ char * const mp_csp_names[MP_CSP_COUNT] = {
"SMPTE-240M",
"RGB",
"XYZ",
+ "YCgCo",
};
char * const mp_csp_equalizer_names[MP_CSP_EQ_COUNT] = {
@@ -59,6 +60,7 @@ enum mp_csp avcol_spc_to_mp_csp(enum AVColorSpace colorspace)
case AVCOL_SPC_SMPTE170M: return MP_CSP_BT_601;
case AVCOL_SPC_SMPTE240M: return MP_CSP_SMPTE_240M;
case AVCOL_SPC_RGB: return MP_CSP_RGB;
+ case AVCOL_SPC_YCGCO: return MP_CSP_YCGCO;
default: return MP_CSP_AUTO;
}
}
@@ -79,6 +81,7 @@ enum AVColorSpace mp_csp_to_avcol_spc(enum mp_csp colorspace)
case MP_CSP_BT_601: return AVCOL_SPC_BT470BG;
case MP_CSP_SMPTE_240M: return AVCOL_SPC_SMPTE240M;
case MP_CSP_RGB: return AVCOL_SPC_RGB;
+ case MP_CSP_YCGCO: return AVCOL_SPC_YCGCO;
default: return AVCOL_SPC_UNSPECIFIED;
}
}
@@ -190,6 +193,15 @@ void mp_get_yuv2rgb_coeffs(struct mp_csp_params *params, float m[3][4])
levels_in = -1;
break;
}
+ case MP_CSP_YCGCO: {
+ static const float ycgco_to_rgb[3][4] = {
+ {1, -1, 1},
+ {1, 1, 0},
+ {1, -1, -1},
+ };
+ memcpy(m, ycgco_to_rgb, sizeof(ycgco_to_rgb));
+ break;
+ }
default:
abort();
};
diff --git a/video/csputils.h b/video/csputils.h
index 184e1ee76a..d11e85e38b 100644
--- a/video/csputils.h
+++ b/video/csputils.h
@@ -41,6 +41,7 @@ enum mp_csp {
MP_CSP_SMPTE_240M,
MP_CSP_RGB,
MP_CSP_XYZ,
+ MP_CSP_YCGCO,
MP_CSP_COUNT
};