mirror of https://git.ffmpeg.org/ffmpeg.git
frame_thread_encoder: pass private options
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
028b6d2b5c
commit
097a909ea1
|
@ -113,7 +113,7 @@ end:
|
|||
return NULL;
|
||||
}
|
||||
|
||||
int ff_frame_thread_encoder_init(AVCodecContext *avctx){
|
||||
int ff_frame_thread_encoder_init(AVCodecContext *avctx, AVDictionary *options){
|
||||
int i=0;
|
||||
ThreadContext *c;
|
||||
|
||||
|
@ -151,6 +151,7 @@ int ff_frame_thread_encoder_init(AVCodecContext *avctx){
|
|||
pthread_cond_init(&c->finished_task_cond, NULL);
|
||||
|
||||
for(i=0; i<avctx->thread_count ; i++){
|
||||
AVDictionary *tmp = NULL;
|
||||
AVCodecContext *thread_avctx = avcodec_alloc_context3(avctx->codec);
|
||||
if(!thread_avctx)
|
||||
goto fail;
|
||||
|
@ -165,10 +166,13 @@ int ff_frame_thread_encoder_init(AVCodecContext *avctx){
|
|||
thread_avctx->thread_count = 1;
|
||||
thread_avctx->active_thread_type &= ~FF_THREAD_FRAME;
|
||||
|
||||
//FIXME pass private options to encoder
|
||||
if(avcodec_open2(thread_avctx, avctx->codec, NULL) < 0) {
|
||||
av_dict_copy(&tmp, options, 0);
|
||||
av_dict_set(&tmp, "threads", "1", 0);
|
||||
if(avcodec_open2(thread_avctx, avctx->codec, &tmp) < 0) {
|
||||
av_dict_free(&tmp);
|
||||
goto fail;
|
||||
}
|
||||
av_dict_free(&tmp);
|
||||
av_assert0(!thread_avctx->internal->frame_thread_encoder);
|
||||
thread_avctx->internal->frame_thread_encoder = c;
|
||||
if(pthread_create(&c->worker[i], NULL, worker, thread_avctx)) {
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
#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);
|
||||
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
|
|||
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
|
||||
ret = ff_frame_thread_encoder_init(avctx);
|
||||
ret = ff_frame_thread_encoder_init(avctx, options ? *options : NULL);
|
||||
entangled_thread_counter++;
|
||||
if (ret < 0)
|
||||
goto free_and_end;
|
||||
|
|
Loading…
Reference in New Issue