summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarren Salt <linux@youmustbejoking.demon.co.uk>2007-09-11 16:53:32 +0100
committerDarren Salt <linux@youmustbejoking.demon.co.uk>2007-09-11 16:53:32 +0100
commitdd0af3480f28fcbe9e95dffd08dbd1a5c5117ee2 (patch)
treef5ef135973556286d0e4520d5d004b6234b0a22c
parent3689e8c96b7442293ab3365d9dd085135a9d7c6c (diff)
downloadxine-lib-dd0af3480f28fcbe9e95dffd08dbd1a5c5117ee2.tar.gz
xine-lib-dd0af3480f28fcbe9e95dffd08dbd1a5c5117ee2.tar.bz2
Fix DVB sub palette extraction when full_range_flag is clear.
Only build-tested due to lack of sample data.
-rw-r--r--src/libspudvb/xine_spudvb_decoder.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/libspudvb/xine_spudvb_decoder.c b/src/libspudvb/xine_spudvb_decoder.c
index 9da4607c8..dcccf6988 100644
--- a/src/libspudvb/xine_spudvb_decoder.c
+++ b/src/libspudvb/xine_spudvb_decoder.c
@@ -370,10 +370,10 @@ void process_CLUT_definition_segment(dvb_spu_decoder_t *this) {
Cb_value=dvbsub->buf[dvbsub->i++];
T_value=dvbsub->buf[dvbsub->i++];
} else {
- Y_value=(dvbsub->buf[dvbsub->i]&0xfc)>>2;
- Cr_value=(dvbsub->buf[dvbsub->i]&0x2<<2)|((dvbsub->buf[dvbsub->i+1]&0xc0)>>6);
- Cb_value=(dvbsub->buf[dvbsub->i+1]&0x2c)>>2;
- T_value=dvbsub->buf[dvbsub->i+1]&2;
+ Y_value = dvbsub->buf[dvbsub->i] & 0xfc;
+ Cr_value = (dvbsub->buf[dvbsub->i] << 6 | dvbsub->buf[dvbsub->i + 1] >> 2) & 0xf0;
+ Cb_value = (dvbsub->buf[dvbsub->i + 1] << 2) & 0xf0;
+ T_value = (dvbsub->buf[dvbsub->i + 1] & 3) * 0x55; /* expand only this one to full range! */
dvbsub->i+=2;
}
set_clut(this, CLUT_id,CLUT_entry_id,Y_value,Cr_value,Cb_value,T_value);