summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel Freitas <miguelfreitas@users.sourceforge.net>2004-10-27 23:03:22 +0000
committerMiguel Freitas <miguelfreitas@users.sourceforge.net>2004-10-27 23:03:22 +0000
commit93bd0cbcce8218d7aaf88530ec6f5f07e5e43b3f (patch)
treeea3e738ada6a7006415512e05535b340853654c4
parent848f806c696246abae325d2bf33fea182b93b51e (diff)
downloadxine-lib-93bd0cbcce8218d7aaf88530ec6f5f07e5e43b3f.tar.gz
xine-lib-93bd0cbcce8218d7aaf88530ec6f5f07e5e43b3f.tar.bz2
minor osd fix: hide empty (cleared) osd. thanks Stefan for noticing it.
CVS patchset: 7083 CVS date: 2004/10/27 23:03:22
-rw-r--r--src/xine-engine/osd.c31
1 files changed, 24 insertions, 7 deletions
diff --git a/src/xine-engine/osd.c b/src/xine-engine/osd.c
index 8264d1cd8..79c870fe4 100644
--- a/src/xine-engine/osd.c
+++ b/src/xine-engine/osd.c
@@ -168,6 +168,8 @@ static osd_object_t *osd_new_object (osd_renderer_t *this, int width, int height
#define DEBUG_RLE
*/
+static int _osd_hide (osd_object_t *osd, int64_t vpts);
+
/*
* send the osd to be displayed at given pts (0=now)
* the object is not changed. there may be subsequent drawing on it.
@@ -289,6 +291,9 @@ static int _osd_show (osd_object_t *osd, int64_t vpts, int unscaled ) {
this->event.event_type = OVERLAY_EVENT_SHOW;
this->event.vpts = vpts;
ovl_manager->add_event(ovl_manager, (void *)&this->event);
+ } else {
+ /* osd empty - hide it */
+ _osd_hide(osd, vpts);
}
pthread_mutex_unlock (&this->osd_mutex);
@@ -315,17 +320,15 @@ static int osd_show_unscaled (osd_object_t *osd, int64_t vpts) {
* send event to hide osd at given pts (0=now)
* the object is not changed. there may be subsequent drawing on it.
*/
-static int osd_hide (osd_object_t *osd, int64_t vpts) {
+static int _osd_hide (osd_object_t *osd, int64_t vpts) {
osd_renderer_t *this = osd->renderer;
video_overlay_manager_t *ovl_manager;
lprintf("osd=%p vpts=%lld\n",osd, vpts);
-
+
if( osd->handle < 0 )
return 0;
-
- pthread_mutex_lock (&this->osd_mutex);
this->event.object.handle = osd->handle;
@@ -335,13 +338,27 @@ static int osd_hide (osd_object_t *osd, int64_t vpts) {
this->event.event_type = OVERLAY_EVENT_HIDE;
this->event.vpts = vpts;
- this->stream->xine->port_ticket->acquire(this->stream->xine->port_ticket, 1);
ovl_manager = this->stream->video_out->get_overlay_manager(this->stream->video_out);
ovl_manager->add_event(ovl_manager, (void *)&this->event);
+
+ return 1;
+}
+
+static int osd_hide (osd_object_t *osd, int64_t vpts) {
+
+ osd_renderer_t *this = osd->renderer;
+ int ret;
+
+ this->stream->xine->port_ticket->acquire(this->stream->xine->port_ticket, 1);
+
+ pthread_mutex_lock (&this->osd_mutex);
+
+ ret = _osd_hide(osd, vpts);
+
+ pthread_mutex_unlock (&this->osd_mutex);
+
this->stream->xine->port_ticket->release(this->stream->xine->port_ticket, 1);
- pthread_mutex_unlock (&this->osd_mutex);
-
return 1;
}