Commit 097a909e authored by Michael Niedermayer's avatar Michael Niedermayer

frame_thread_encoder: pass private options

Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent 028b6d2b
...@@ -113,7 +113,7 @@ end: ...@@ -113,7 +113,7 @@ end:
return NULL; return NULL;
} }
int ff_frame_thread_encoder_init(AVCodecContext *avctx){ int ff_frame_thread_encoder_init(AVCodecContext *avctx, AVDictionary *options){
int i=0; int i=0;
ThreadContext *c; ThreadContext *c;
...@@ -151,6 +151,7 @@ int ff_frame_thread_encoder_init(AVCodecContext *avctx){ ...@@ -151,6 +151,7 @@ int ff_frame_thread_encoder_init(AVCodecContext *avctx){
pthread_cond_init(&c->finished_task_cond, NULL); pthread_cond_init(&c->finished_task_cond, NULL);
for(i=0; i<avctx->thread_count ; i++){ for(i=0; i<avctx->thread_count ; i++){
AVDictionary *tmp = NULL;
AVCodecContext *thread_avctx = avcodec_alloc_context3(avctx->codec); AVCodecContext *thread_avctx = avcodec_alloc_context3(avctx->codec);
if(!thread_avctx) if(!thread_avctx)
goto fail; goto fail;
...@@ -165,10 +166,13 @@ int ff_frame_thread_encoder_init(AVCodecContext *avctx){ ...@@ -165,10 +166,13 @@ int ff_frame_thread_encoder_init(AVCodecContext *avctx){
thread_avctx->thread_count = 1; thread_avctx->thread_count = 1;
thread_avctx->active_thread_type &= ~FF_THREAD_FRAME; thread_avctx->active_thread_type &= ~FF_THREAD_FRAME;
//FIXME pass private options to encoder av_dict_copy(&tmp, options, 0);
if(avcodec_open2(thread_avctx, avctx->codec, NULL) < 0) { av_dict_set(&tmp, "threads", "1", 0);
if(avcodec_open2(thread_avctx, avctx->codec, &tmp) < 0) {
av_dict_free(&tmp);
goto fail; goto fail;
} }
av_dict_free(&tmp);
av_assert0(!thread_avctx->internal->frame_thread_encoder); av_assert0(!thread_avctx->internal->frame_thread_encoder);
thread_avctx->internal->frame_thread_encoder = c; thread_avctx->internal->frame_thread_encoder = c;
if(pthread_create(&c->worker[i], NULL, worker, thread_avctx)) { if(pthread_create(&c->worker[i], NULL, worker, thread_avctx)) {
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#include "avcodec.h" #include "avcodec.h"
int ff_frame_thread_encoder_init(AVCodecContext *avctx); int ff_frame_thread_encoder_init(AVCodecContext *avctx, AVDictionary *options);
void ff_frame_thread_encoder_free(AVCodecContext *avctx); void ff_frame_thread_encoder_free(AVCodecContext *avctx);
int ff_thread_video_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *frame, int *got_packet_ptr); int ff_thread_video_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *frame, int *got_packet_ptr);
...@@ -874,7 +874,7 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *code ...@@ -874,7 +874,7 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *code
av_log(avctx, AV_LOG_WARNING, "Warning: not compiled with thread support, using thread emulation\n"); av_log(avctx, AV_LOG_WARNING, "Warning: not compiled with thread support, using thread emulation\n");
entangled_thread_counter--; //we will instanciate a few encoders thus kick the counter to prevent false detection of a problem entangled_thread_counter--; //we will instanciate a few encoders thus kick the counter to prevent false detection of a problem
ret = ff_frame_thread_encoder_init(avctx); ret = ff_frame_thread_encoder_init(avctx, options ? *options : NULL);
entangled_thread_counter++; entangled_thread_counter++;
if (ret < 0) if (ret < 0)
goto free_and_end; goto free_and_end;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment