avcodec/frame_thread_encoder: Fix AV_OPT_TYPE_STRING handling in priv_data
authorMichael Niedermayer <michael@niedermayer.cc>
Sun, 25 Jun 2017 19:50:15 +0000 (21:50 +0200)
committerMichael Niedermayer <michael@niedermayer.cc>
Sun, 25 Jun 2017 23:06:04 +0000 (01:06 +0200)
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
libavcodec/frame_thread_encoder.c

index 6cf1a68..33928fe 100644 (file)
@@ -23,6 +23,7 @@
 #include "libavutil/fifo.h"
 #include "libavutil/avassert.h"
 #include "libavutil/imgutils.h"
+#include "libavutil/opt.h"
 #include "libavutil/thread.h"
 #include "avcodec.h"
 #include "internal.h"
@@ -197,7 +198,12 @@ int ff_frame_thread_encoder_init(AVCodecContext *avctx, AVDictionary *options){
         *thread_avctx = *avctx;
         thread_avctx->priv_data = tmpv;
         thread_avctx->internal = NULL;
-        memcpy(thread_avctx->priv_data, avctx->priv_data, avctx->codec->priv_data_size);
+        if (avctx->codec->priv_class) {
+            int ret = av_opt_copy(thread_avctx->priv_data, avctx->priv_data);
+            if (ret < 0)
+                goto fail;
+        } else
+            memcpy(thread_avctx->priv_data, avctx->priv_data, avctx->codec->priv_data_size);
         thread_avctx->thread_count = 1;
         thread_avctx->active_thread_type &= ~FF_THREAD_FRAME;