diff options
-rw-r--r-- | xine_input_vdr.c | 49 |
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); |