diff options
author | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2002-03-21 16:21:01 +0000 |
---|---|---|
committer | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2002-03-21 16:21:01 +0000 |
commit | 891fb0a646780b715e4f8d53b49e4615917a13e8 (patch) | |
tree | ef2c1525f9d4567bb6083fc305f3b3fc65a9e27b /src/xine-engine/video_overlay.c | |
parent | be7a8b70ff25d405dbaa8fc082fc9349f65bf26b (diff) | |
download | xine-lib-891fb0a646780b715e4f8d53b49e4615917a13e8.tar.gz xine-lib-891fb0a646780b715e4f8d53b49e4615917a13e8.tar.bz2 |
- only draw still frame/logo if needed
- fix syncfb driver
CVS patchset: 1605
CVS date: 2002/03/21 16:21:01
Diffstat (limited to 'src/xine-engine/video_overlay.c')
-rw-r--r-- | src/xine-engine/video_overlay.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/xine-engine/video_overlay.c b/src/xine-engine/video_overlay.c index 52b01beb8..2101cc455 100644 --- a/src/xine-engine/video_overlay.c +++ b/src/xine-engine/video_overlay.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_overlay.c,v 1.16 2002/03/14 13:57:15 miguelfreitas Exp $ + * $Id: video_overlay.c,v 1.17 2002/03/21 16:21:03 miguelfreitas Exp $ * */ @@ -328,16 +328,19 @@ static void video_overlay_print_overlay( vo_overlay_t *ovl ) { /* process overlay events if vpts == 0 will process everything now (used in flush) + return true if something has been processed */ -static void video_overlay_event( video_overlay_t *this, int64_t vpts ) { +static int video_overlay_event( video_overlay_t *this, int64_t vpts ) { int32_t handle; uint32_t this_event; + int processed = 0; pthread_mutex_lock (&this->video_overlay_events_mutex); this_event=this->video_overlay_events[0].next_event; while ( this_event && (vpts > this->video_overlay_events[this_event].event->vpts || vpts == 0) ) { + processed++; handle=this->video_overlay_events[this_event].event->object.handle; switch( this->video_overlay_events[this_event].event->event_type ) { case EVENT_SHOW_SPU: @@ -597,6 +600,8 @@ static void video_overlay_event( video_overlay_t *this, int64_t vpts ) { } pthread_mutex_unlock (&this->video_overlay_events_mutex); + + return processed; } /* This is called from video_out.c @@ -636,6 +641,17 @@ static void video_overlay_flush_events(video_overlay_instance_t *this_gen ) video_overlay_event( this, 0 ); } +/* this is called from video_out.c on still frames to check + if a redraw is needed. +*/ +static int video_overlay_redraw_needed(video_overlay_instance_t *this_gen, int64_t vpts ) +{ + video_overlay_t *this = (video_overlay_t *) this_gen; + + return video_overlay_event( this, vpts ); +} + + static void video_overlay_dispose(video_overlay_instance_t *this_gen) { video_overlay_t *this = (video_overlay_t *) this_gen; @@ -663,6 +679,7 @@ video_overlay_instance_t *video_overlay_new_instance () { this->video_overlay.free_handle = video_overlay_free_handle; this->video_overlay.add_event = video_overlay_add_event; this->video_overlay.flush_events = video_overlay_flush_events; + this->video_overlay.redraw_needed = video_overlay_redraw_needed; this->video_overlay.multiple_overlay_blend = video_overlay_multiple_overlay_blend; return (video_overlay_instance_t *) &this->video_overlay; |