From f9150c8ac040262c5b8bf01ab5449011a5984ef5 Mon Sep 17 00:00:00 2001 From: Hendrik Leppkes Date: Wed, 8 Aug 2012 23:03:44 +0000 Subject: [PATCH] lagarith: frame multithreading About 2x speedup going from 1 to 2 threads. 1.7s to 0.85s on foreman CIF. Signed-off-by: Janne Grunau --- libavcodec/lagarith.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/libavcodec/lagarith.c b/libavcodec/lagarith.c index 665bd963b9..e365610410 100644 --- a/libavcodec/lagarith.c +++ b/libavcodec/lagarith.c @@ -30,6 +30,7 @@ #include "mathops.h" #include "dsputil.h" #include "lagarithrac.h" +#include "thread.h" enum LagarithFrameType { FRAME_RAW = 1, /**< uncompressed */ @@ -506,7 +507,7 @@ static int lag_decode_frame(AVCodecContext *avctx, AVFrame *picture = data; if (p->data[0]) - avctx->release_buffer(avctx, p); + ff_thread_release_buffer(avctx, p); p->reference = 0; p->key_frame = 1; @@ -520,7 +521,7 @@ static int lag_decode_frame(AVCodecContext *avctx, case FRAME_SOLID_RGBA: avctx->pix_fmt = PIX_FMT_RGB32; - if (avctx->get_buffer(avctx, p) < 0) { + if (ff_thread_get_buffer(avctx, p) < 0) { av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); return -1; } @@ -542,7 +543,7 @@ static int lag_decode_frame(AVCodecContext *avctx, if (frametype == FRAME_ARITH_RGB24 || frametype == FRAME_U_RGB24) avctx->pix_fmt = PIX_FMT_RGB24; - if (avctx->get_buffer(avctx, p) < 0) { + if (ff_thread_get_buffer(avctx, p) < 0) { av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); return -1; } @@ -602,7 +603,7 @@ static int lag_decode_frame(AVCodecContext *avctx, case FRAME_ARITH_YUY2: avctx->pix_fmt = PIX_FMT_YUV422P; - if (avctx->get_buffer(avctx, p) < 0) { + if (ff_thread_get_buffer(avctx, p) < 0) { av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); return -1; } @@ -628,7 +629,7 @@ static int lag_decode_frame(AVCodecContext *avctx, case FRAME_ARITH_YV12: avctx->pix_fmt = PIX_FMT_YUV420P; - if (avctx->get_buffer(avctx, p) < 0) { + if (ff_thread_get_buffer(avctx, p) < 0) { av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); return -1; } @@ -678,7 +679,7 @@ static av_cold int lag_decode_end(AVCodecContext *avctx) LagarithContext *l = avctx->priv_data; if (l->picture.data[0]) - avctx->release_buffer(avctx, &l->picture); + ff_thread_release_buffer(avctx, &l->picture); av_freep(&l->rgb_planes); return 0; @@ -692,6 +693,6 @@ AVCodec ff_lagarith_decoder = { .init = lag_decode_init, .close = lag_decode_end, .decode = lag_decode_frame, - .capabilities = CODEC_CAP_DR1, + .capabilities = CODEC_CAP_DR1 | CODEC_CAP_FRAME_THREADS, .long_name = NULL_IF_CONFIG_SMALL("Lagarith lossless"), };