diff options
author | Petri Hintukainen <phintuka@users.sourceforge.net> | 2007-04-18 05:42:18 +0300 |
---|---|---|
committer | Petri Hintukainen <phintuka@users.sourceforge.net> | 2007-04-18 05:42:18 +0300 |
commit | 365a4bcbae8cd1a59304f9d07ee03f66a84e0f7c (patch) | |
tree | 83427214a8a8794eb7e73dcfe404355864c34041 /src/xine-engine/video_overlay.c | |
parent | 485dffa9be256aae3c7904ce4f05a66d5c24f089 (diff) | |
download | xine-lib-365a4bcbae8cd1a59304f9d07ee03f66a84e0f7c.tar.gz xine-lib-365a4bcbae8cd1a59304f9d07ee03f66a84e0f7c.tar.bz2 |
Alphablending optimizations:
- validate palette alpha values in overlay manager
(one check / overlay / palette index) instead of
checking every alpha value twice for every
blended pixel in every frame
- remove unneeded calculations
- approximiate expensive integer divisions with
multiplication and shift
Diffstat (limited to 'src/xine-engine/video_overlay.c')
-rw-r--r-- | src/xine-engine/video_overlay.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/xine-engine/video_overlay.c b/src/xine-engine/video_overlay.c index 7bd9292c8..231aa5a70 100644 --- a/src/xine-engine/video_overlay.c +++ b/src/xine-engine/video_overlay.c @@ -288,10 +288,18 @@ static int32_t video_overlay_add_event(video_overlay_manager_t *this_gen, void } if( event->object.overlay ) { + int i; + for(i = 0; i < OVL_PALETTE_SIZE; i++) { + if(event->object.overlay->trans[i] >= OVL_MAX_OPACITY) + event->object.overlay->trans[i] = OVL_MAX_OPACITY; + if(event->object.overlay->hili_trans[i] >= OVL_MAX_OPACITY) + event->object.overlay->hili_trans[i] = OVL_MAX_OPACITY; + } + this->events[new_event].event->object.overlay = xine_xmalloc (sizeof(vo_overlay_t)); xine_fast_memcpy(this->events[new_event].event->object.overlay, event->object.overlay, sizeof(vo_overlay_t)); - + /* We took the callers rle and data, therefore it will be our job to free it */ /* clear callers overlay so it will not be freed twice */ memset(event->object.overlay,0,sizeof(vo_overlay_t)); |