diff options
-rw-r--r-- | xine_input_vdr.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/xine_input_vdr.c b/xine_input_vdr.c index 9d8dd929..8d16a81a 100644 --- a/xine_input_vdr.c +++ b/xine_input_vdr.c @@ -4,7 +4,7 @@ * See the main source file 'xineliboutput.c' for copyright information and * how to reach the author. * - * $Id: xine_input_vdr.c,v 1.330 2011-03-19 17:21:37 phintuka Exp $ + * $Id: xine_input_vdr.c,v 1.331 2011-03-19 20:31:45 phintuka Exp $ * */ @@ -72,6 +72,7 @@ #include "tools/mpeg.h" #include "tools/pes.h" #include "tools/ts.h" +#include "tools/rle.h" /***************************** DEFINES *********************************/ @@ -135,7 +136,7 @@ typedef struct { # include <linux/unistd.h> /* syscall(__NR_gettid) */ #endif -static const char module_revision[] = "$Id: xine_input_vdr.c,v 1.330 2011-03-19 17:21:37 phintuka Exp $"; +static const char module_revision[] = "$Id: xine_input_vdr.c,v 1.331 2011-03-19 20:31:45 phintuka Exp $"; static const char log_module_input_vdr[] = "[input_vdr] "; #define LOG_MODULENAME log_module_input_vdr #define SysLogLevel iSysLogLevel @@ -2702,10 +2703,25 @@ static int handle_control_osdcmd(vdr_input_plugin_t *this) LOGMSG("control: error reading OSDCMD bitmap"); err = CONTROL_DISCONNECTED; } else { - uint8_t *raw = osdcmd.raw_data; - osdcmd.data = uncompress_osd_net(raw, osdcmd.num_rle, osdcmd.datalen); - osdcmd.datalen = osdcmd.num_rle*4; - free(raw); + if (osdcmd.cmd == OSD_Set_HDMV) { + uint8_t *raw = osdcmd.raw_data; + int n = rle_uncompress_hdmv(&osdcmd.data, + osdcmd.w, osdcmd.h, + raw, osdcmd.num_rle, osdcmd.datalen); + if (n < 1) { + LOGMSG("HDMV mode OSD uncompress error"); + osdcmd.raw_data = raw; + } else { + osdcmd.cmd == OSD_Set_RLE; + osdcmd.datalen = osdcmd.num_rle*4; + free(raw); + } + } else if (osdcmd.cmd == OSD_Set_RLE) { + uint8_t *raw = osdcmd.raw_data; + osdcmd.data = uncompress_osd_net(raw, osdcmd.num_rle, osdcmd.datalen); + osdcmd.datalen = osdcmd.num_rle*4; + free(raw); + } } } else { osdcmd.data = NULL; |