[FFmpeg-cvslog] avcodec/pthread_slice: Allow calling ff_alloc_entries() multiple times to readjust the entry count

Michael Niedermayer git at videolan.org
Fri Nov 27 23:56:20 CET 2015


ffmpeg | branch: master | Michael Niedermayer <michael at niedermayer.cc> | Fri Nov 27 23:32:04 2015 +0100| [36205501ba2f003c6b319a6d20e39fe991ee7511] | committer: Michael Niedermayer

avcodec/pthread_slice: Allow calling ff_alloc_entries() multiple times to readjust the entry count

Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=36205501ba2f003c6b319a6d20e39fe991ee7511
---

 libavcodec/pthread_slice.c |   13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/libavcodec/pthread_slice.c b/libavcodec/pthread_slice.c
index e887428..b2a15c6 100644
--- a/libavcodec/pthread_slice.c
+++ b/libavcodec/pthread_slice.c
@@ -37,6 +37,7 @@
 #include "pthread_internal.h"
 #include "thread.h"
 
+#include "libavutil/avassert.h"
 #include "libavutil/common.h"
 #include "libavutil/cpu.h"
 #include "libavutil/mem.h"
@@ -276,11 +277,19 @@ int ff_alloc_entries(AVCodecContext *avctx, int count)
 
     if (avctx->active_thread_type & FF_THREAD_SLICE)  {
         SliceThreadContext *p = avctx->internal->thread_ctx;
+
+        if (p->entries) {
+            av_assert0(p->thread_count == avctx->thread_count);
+            av_freep(&p->entries);
+        }
+
         p->thread_count  = avctx->thread_count;
         p->entries       = av_mallocz_array(count, sizeof(int));
 
-        p->progress_mutex = av_malloc_array(p->thread_count, sizeof(pthread_mutex_t));
-        p->progress_cond  = av_malloc_array(p->thread_count, sizeof(pthread_cond_t));
+        if (!p->progress_mutex) {
+            p->progress_mutex = av_malloc_array(p->thread_count, sizeof(pthread_mutex_t));
+            p->progress_cond  = av_malloc_array(p->thread_count, sizeof(pthread_cond_t));
+        }
 
         if (!p->entries || !p->progress_mutex || !p->progress_cond) {
             av_freep(&p->entries);



More information about the ffmpeg-cvslog mailing list