vlc | branch: master | Steve Lhomme <[email protected]> | Fri Oct 18 16:30:57 2019 +0200| [f6da761f7c954d8b8753a69e16d0b388c38bb320] | committer: Steve Lhomme
va_surface: fix reusing a pool already setup + simplify the va_pool_SetupDecoder() code > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f6da761f7c954d8b8753a69e16d0b388c38bb320 --- modules/codec/avcodec/va_surface.c | 41 +++++++++++++++----------------------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/modules/codec/avcodec/va_surface.c b/modules/codec/avcodec/va_surface.c index 411d85fa96..9ace60fcc8 100644 --- a/modules/codec/avcodec/va_surface.c +++ b/modules/codec/avcodec/va_surface.c @@ -85,48 +85,39 @@ static void ReleasePoolSurfaces(va_pool_t *va_pool) int va_pool_SetupDecoder(vlc_va_t *va, va_pool_t *va_pool, const AVCodecContext *avctx, const video_format_t *fmt, unsigned count) { - int err = VLC_ENOMEM; - if ( va_pool->surface_count >= count && va_pool->surface_width == fmt->i_width && va_pool->surface_height == fmt->i_height ) { msg_Dbg(va, "reusing surface pool"); - err = VLC_SUCCESS; goto done; } - /* */ - ReleasePoolSurfaces(va_pool); - /* */ msg_Dbg(va, "va_pool_SetupDecoder id %d %dx%d count: %d", avctx->codec_id, avctx->coded_width, avctx->coded_height, count); if (count > MAX_SURFACE_COUNT) return VLC_EGENERIC; - err = va_pool->callbacks.pf_create_decoder_surfaces(va, avctx->codec_id, fmt, count); - if (err == VLC_SUCCESS) - { - va_pool->surface_width = fmt->i_width; - va_pool->surface_height = fmt->i_height; - va_pool->surface_count = count; - } + int err = va_pool->callbacks.pf_create_decoder_surfaces(va, avctx->codec_id, fmt, count); + if (err != VLC_SUCCESS) + return err; -done: - if (err == VLC_SUCCESS) - { - for (unsigned i = 0; i < va_pool->surface_count; i++) { - vlc_va_surface_t *surface = &va_pool->surface[i]; - atomic_init(&surface->refcount, 1); - va_pool_AddRef(va_pool); - surface->index = i; - surface->va_pool = va_pool; - } - va_pool->callbacks.pf_setup_avcodec_ctx(va_pool->callbacks.opaque); + va_pool->surface_width = fmt->i_width; + va_pool->surface_height = fmt->i_height; + va_pool->surface_count = count; + + for (unsigned i = 0; i < va_pool->surface_count; i++) { + vlc_va_surface_t *surface = &va_pool->surface[i]; + atomic_init(&surface->refcount, 1); + va_pool_AddRef(va_pool); + surface->index = i; + surface->va_pool = va_pool; } +done: + va_pool->callbacks.pf_setup_avcodec_ctx(va_pool->callbacks.opaque); - return err; + return VLC_SUCCESS; } static vlc_va_surface_t *GetSurface(va_pool_t *va_pool) _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
