summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xine_input_vdr.c28
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;