summaryrefslogtreecommitdiff
path: root/xine_input_vdr.c
diff options
context:
space:
mode:
Diffstat (limited to 'xine_input_vdr.c')
-rw-r--r--xine_input_vdr.c49
1 files changed, 21 insertions, 28 deletions
diff --git a/xine_input_vdr.c b/xine_input_vdr.c
index fb8ff3d8..95bd6898 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.196 2008-11-16 21:36:46 phintuka Exp $
+ * $Id: xine_input_vdr.c,v 1.197 2008-11-21 20:14:23 phintuka Exp $
*
*/
@@ -2012,6 +2012,14 @@ static xine_rle_elem_t *scale_rle_image(osd_command_t *osdcmd,
return tmp;
}
+static void clear_osdcmd(osd_command_t *cmd)
+{
+ free(cmd->data);
+ cmd->data = NULL;
+ free(cmd->palette);
+ cmd->palette = NULL;
+}
+
static int exec_osd_command(vdr_input_plugin_t *this, osd_command_t *cmd)
{
video_overlay_event_t ov_event;
@@ -2091,20 +2099,12 @@ static int exec_osd_command(vdr_input_plugin_t *this, osd_command_t *cmd)
ov_event.event_type = OVERLAY_EVENT_FREE_HANDLE;
ov_event.object.handle = handle;
this->osdhandle[cmd->wnd] = -1;
- free(this->osddata[cmd->wnd].data);
- this->osddata[cmd->wnd].data = NULL;
- free(this->osddata[cmd->wnd].palette);
- this->osddata[cmd->wnd].palette = NULL;
-
- do {
- int r = ovl_manager->add_event(ovl_manager, (void *)&ov_event);
- if(r<0) {
- LOGDBG("OSD_Close(%d): overlay manager queue full !", cmd->wnd);
- ovl_manager->flush_events(ovl_manager);
- continue;
- }
- break;
- } while(1);
+ clear_osdcmd(&this->osddata[cmd->wnd]);
+
+ while (ovl_manager->add_event(ovl_manager, (void *)&ov_event) < 0) {
+ LOGDBG("OSD_Close(%d): overlay manager queue full !", cmd->wnd);
+ ovl_manager->flush_events(ovl_manager);
+ }
this->last_changed_vpts[cmd->wnd] = 0;
@@ -2159,10 +2159,7 @@ static int exec_osd_command(vdr_input_plugin_t *this, osd_command_t *cmd)
use_unscaled = 1;
/* store osd for later rescaling (done if video size changes) */
- free(this->osddata[cmd->wnd].data);
- this->osddata[cmd->wnd].data = NULL;
- free(this->osddata[cmd->wnd].palette);
- this->osddata[cmd->wnd].palette = NULL;
+ clear_osdcmd(&this->osddata[cmd->wnd]);
memcpy(&this->osddata[cmd->wnd], cmd, sizeof(osd_command_t));
this->osddata[cmd->wnd].data = NULL;
@@ -2281,15 +2278,11 @@ static int exec_osd_command(vdr_input_plugin_t *this, osd_command_t *cmd)
cmd->data = NULL;/* we 'consume' data (ownership goes for osd manager) */
/* send event to overlay manager */
- do {
- int r = ovl_manager->add_event(ovl_manager, (void *)&ov_event);
- if(r<0) {
- LOGDBG("OSD_Set_RLE(%d): overlay manager queue full !", cmd->wnd);
- ovl_manager->flush_events(ovl_manager);
- continue;
- }
- break;
- } while(1);
+ while (ovl_manager->add_event(ovl_manager, (void *)&ov_event) < 0) {
+ LOGDBG("OSD_Set_RLE(%d): overlay manager queue full !", cmd->wnd);
+ ovl_manager->flush_events(ovl_manager);
+ continue;
+ }
this->last_changed_vpts[cmd->wnd] = xine_get_current_vpts(stream);