[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