|
|
|
@ -72,6 +72,7 @@ typedef struct PerThreadContext { |
|
|
|
|
struct FrameThreadContext *parent; |
|
|
|
|
|
|
|
|
|
pthread_t thread; |
|
|
|
|
int thread_created; |
|
|
|
|
pthread_cond_t input_cond; ///< Used to wait for a new packet from the main thread.
|
|
|
|
|
pthread_cond_t progress_cond; ///< Used by child threads to wait for progress to change.
|
|
|
|
|
pthread_cond_t output_cond; ///< Used by the main thread to wait for frames to finish.
|
|
|
|
@ -658,8 +659,9 @@ static void frame_thread_free(AVCodecContext *avctx, int thread_count) |
|
|
|
|
pthread_cond_signal(&p->input_cond); |
|
|
|
|
pthread_mutex_unlock(&p->mutex); |
|
|
|
|
|
|
|
|
|
if (p->thread) |
|
|
|
|
if (p->thread_created) |
|
|
|
|
pthread_join(p->thread, NULL); |
|
|
|
|
p->thread_created=0; |
|
|
|
|
|
|
|
|
|
if (codec->close) |
|
|
|
|
codec->close(p->avctx); |
|
|
|
@ -763,7 +765,7 @@ static int frame_thread_init(AVCodecContext *avctx) |
|
|
|
|
|
|
|
|
|
if (err) goto error; |
|
|
|
|
|
|
|
|
|
pthread_create(&p->thread, NULL, frame_worker_thread, p); |
|
|
|
|
p->thread_created= !pthread_create(&p->thread, NULL, frame_worker_thread, p); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|