summaryrefslogtreecommitdiff
path: root/src/xine-engine
diff options
context:
space:
mode:
authorTorsten Jager <t.jager@gmx.de>2012-07-06 21:58:29 +0300
committerTorsten Jager <t.jager@gmx.de>2012-07-06 21:58:29 +0300
commitb31054e542aaacc2c4c83a5e6d398121793d1a37 (patch)
treed434e18f8279fa7a43c27b13108c08ed2a1a864f /src/xine-engine
parent97841e0e129d0708750789a28fbaf8cb67b9ce26 (diff)
downloadxine-lib-b31054e542aaacc2c4c83a5e6d398121793d1a37.tar.gz
xine-lib-b31054e542aaacc2c4c83a5e6d398121793d1a37.tar.bz2
yuv2rgb: added color matrix and fullrange support
Diffstat (limited to 'src/xine-engine')
-rw-r--r--src/xine-engine/video_out.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/xine-engine/video_out.c b/src/xine-engine/video_out.c
index 8a2cc4bc3..c934578ce 100644
--- a/src/xine-engine/video_out.c
+++ b/src/xine-engine/video_out.c
@@ -537,13 +537,17 @@ static int vo_grab_grab_video_frame (xine_grab_video_frame_t *frame_gen) {
/* initialize yuv2rgb factory */
if (!frame->yuv2rgb_factory) {
+ int cm = VO_GET_FLAGS_CM (vo_frame->flags);
frame->yuv2rgb_factory = yuv2rgb_factory_init(MODE_24_RGB, 0, NULL);
if (!frame->yuv2rgb_factory) {
vo_frame_dec_lock(vo_frame);
return -1; /* error happened */
}
- frame->yuv2rgb_factory->matrix_coefficients = 1; /* ITU-R Rec. 709 (1990) */
- frame->yuv2rgb_factory->set_csc_levels (frame->yuv2rgb_factory, 0, 128, 128);
+ if ((cm >> 1) == 2) /* color matrix undefined */
+ cm = (cm & 1) | (vo_frame->height - vo_frame->crop_top - vo_frame->crop_bottom >= 720 ? 2 : 10);
+ else if ((cm >> 1) == 0) /* converted RGB source, always ITU 601 */
+ cm = (cm & 1) | 10;
+ frame->yuv2rgb_factory->set_csc_levels (frame->yuv2rgb_factory, 0, 128, 128, cm);
}
/* retrieve a yuv2rgb converter */