[FFmpeg-devel] [PATCH] exr: frame multithreading support

Paul B Mahol onemda at gmail.com
Thu Jul 12 22:42:11 CEST 2012


Signed-off-by: Paul B Mahol <onemda at gmail.com>
---

It would be nice if someone could measure any performance gains
on real hardware.

This should be mostly helpfull for compressed files.

---
 libavcodec/exr.c |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/libavcodec/exr.c b/libavcodec/exr.c
index 905d389..4a43821 100644
--- a/libavcodec/exr.c
+++ b/libavcodec/exr.c
@@ -35,6 +35,7 @@
 #include "avcodec.h"
 #include "bytestream.h"
 #include "mathops.h"
+#include "thread.h"
 #include "libavutil/imgutils.h"
 
 enum ExrCompr {
@@ -478,7 +479,7 @@ static int decode_frame(AVCodecContext *avctx,
     }
 
     if (s->picture.data[0])
-        avctx->release_buffer(avctx, &s->picture);
+        ff_thread_release_buffer(avctx, &s->picture);
     if (av_image_check_size(w, h, 0, avctx))
         return AVERROR_INVALIDDATA;
 
@@ -505,7 +506,7 @@ static int decode_frame(AVCodecContext *avctx,
             return AVERROR(ENOMEM);
     }
 
-    if ((ret = avctx->get_buffer(avctx, p)) < 0) {
+    if ((ret = ff_thread_get_buffer(avctx, p)) < 0) {
         av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
         return ret;
     }
@@ -660,6 +661,6 @@ AVCodec ff_exr_decoder = {
     .init               = decode_init,
     .close              = decode_end,
     .decode             = decode_frame,
-    .capabilities       = CODEC_CAP_DR1,
+    .capabilities       = CODEC_CAP_DR1 | CODEC_CAP_FRAME_THREADS,
     .long_name          = NULL_IF_CONFIG_SMALL("OpenEXR image"),
 };
-- 
1.7.7



More information about the ffmpeg-devel mailing list