diff options
| author | Torsten Jager <t.jager@gmx.de> | 2012-07-06 21:58:29 +0300 |
|---|---|---|
| committer | Torsten Jager <t.jager@gmx.de> | 2012-07-06 21:58:29 +0300 |
| commit | b31054e542aaacc2c4c83a5e6d398121793d1a37 (patch) | |
| tree | d434e18f8279fa7a43c27b13108c08ed2a1a864f /src/xine-engine | |
| parent | 97841e0e129d0708750789a28fbaf8cb67b9ce26 (diff) | |
| download | xine-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.c | 8 |
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 */ |
