diff options
author | Hendrik Leppkes <h.leppkes@gmail.com> | 2012-08-08 23:03:44 +0000 |
---|---|---|
committer | Janne Grunau <janne-libav@jannau.net> | 2012-08-09 10:50:27 +0200 |
commit | f9150c8ac040262c5b8bf01ab5449011a5984ef5 (patch) | |
tree | ec4fb842138ced6b399b7e2e3d882c2deb7a6a66 | |
parent | 36a8c43073114cffc6ea147178f227a95e40a59f (diff) | |
download | ffmpeg-f9150c8ac040262c5b8bf01ab5449011a5984ef5.tar.gz |
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 <janne-libav@jannau.net>
-rw-r--r-- | libavcodec/lagarith.c | 15 |
1 files 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"), }; |