vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Fri Apr 24 21:55:00 2015 +0300| [327d631d0d1dc0269d78355f433aa8ab1bebff28] | committer: Rémi Denis-Courmont
vaapi: do not reuse still referenced surfaces > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=327d631d0d1dc0269d78355f433aa8ab1bebff28 --- modules/codec/avcodec/vaapi.c | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/modules/codec/avcodec/vaapi.c b/modules/codec/avcodec/vaapi.c index 010db6d..3087fe2 100644 --- a/modules/codec/avcodec/vaapi.c +++ b/modules/codec/avcodec/vaapi.c @@ -59,7 +59,6 @@ typedef struct { VASurfaceID i_id; int i_refcount; - unsigned int i_order; vlc_mutex_t *p_lock; } vlc_va_surface_t; @@ -81,7 +80,6 @@ struct vlc_va_sys_t /* */ vlc_mutex_t lock; int i_surface_count; - unsigned int i_surface_order; int i_surface_width; int i_surface_height; vlc_fourcc_t i_surface_chroma; @@ -155,7 +153,6 @@ static int CreateSurfaces( vlc_va_sys_t *sys, void **pp_hw_ctx, vlc_fourcc_t *pi p_surface->i_id = pi_surface_id[i]; p_surface->i_refcount = 0; - p_surface->i_order = 0; p_surface->p_lock = &sys->lock; } @@ -352,30 +349,24 @@ static int Extract( vlc_va_t *va, picture_t *p_picture, uint8_t *data ) static int Get( vlc_va_t *va, picture_t *pic, uint8_t **data ) { vlc_va_sys_t *sys = va->sys; - int i_old; int i; vlc_mutex_lock( &sys->lock ); - /* Grab an unused surface, in case none are, try the oldest - * XXX using the oldest is a workaround in case a problem happens with ffmpeg */ - for( i = 0, i_old = 0; i < sys->i_surface_count; i++ ) + for( i = 0; i < sys->i_surface_count; i++ ) { vlc_va_surface_t *p_surface = &sys->p_surface[i]; if( !p_surface->i_refcount ) break; - - if( p_surface->i_order < sys->p_surface[i_old].i_order ) - i_old = i; } - if( i >= sys->i_surface_count ) - i = i_old; vlc_mutex_unlock( &sys->lock ); + if( i == sys->i_surface_count ) + return VLC_ENOMEM; + vlc_va_surface_t *p_surface = &sys->p_surface[i]; p_surface->i_refcount = 1; - p_surface->i_order = sys->i_surface_order++; pic->context = p_surface; *data = (void *)(uintptr_t)p_surface->i_id; return VLC_SUCCESS; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
