avfilter/vf_libvmaf: the libvmaf filter tried to join on an invalid thread id
The thread id was invalid because it was not initialised during the calls to init_complex_filtergraph. This adds a flag to check for initialisation before trying to peform the join. Reviewed-by: Ronald S. Bultje <rsbultje@gmail.com> Signed-off-by: Kevin Wheatley <kevin.j.wheatley@gmail.com>
This commit is contained in:
committed by
James Almer
parent
244d4ba0da
commit
51775bc1cd
@@ -43,6 +43,7 @@ typedef struct LIBVMAFContext {
|
|||||||
int width;
|
int width;
|
||||||
int height;
|
int height;
|
||||||
double vmaf_score;
|
double vmaf_score;
|
||||||
|
int vmaf_thread_created;
|
||||||
pthread_t vmaf_thread;
|
pthread_t vmaf_thread;
|
||||||
pthread_mutex_t lock;
|
pthread_mutex_t lock;
|
||||||
pthread_cond_t cond;
|
pthread_cond_t cond;
|
||||||
@@ -228,6 +229,7 @@ static av_cold int init(AVFilterContext *ctx)
|
|||||||
s->gmain = av_frame_alloc();
|
s->gmain = av_frame_alloc();
|
||||||
s->error = 0;
|
s->error = 0;
|
||||||
|
|
||||||
|
s->vmaf_thread_created = 0;
|
||||||
pthread_mutex_init(&s->lock, NULL);
|
pthread_mutex_init(&s->lock, NULL);
|
||||||
pthread_cond_init (&s->cond, NULL);
|
pthread_cond_init (&s->cond, NULL);
|
||||||
|
|
||||||
@@ -275,6 +277,7 @@ static int config_input_ref(AVFilterLink *inlink)
|
|||||||
av_log(ctx, AV_LOG_ERROR, "Thread creation failed.\n");
|
av_log(ctx, AV_LOG_ERROR, "Thread creation failed.\n");
|
||||||
return AVERROR(EINVAL);
|
return AVERROR(EINVAL);
|
||||||
}
|
}
|
||||||
|
s->vmaf_thread_created = 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -317,7 +320,11 @@ static av_cold void uninit(AVFilterContext *ctx)
|
|||||||
pthread_cond_signal(&s->cond);
|
pthread_cond_signal(&s->cond);
|
||||||
pthread_mutex_unlock(&s->lock);
|
pthread_mutex_unlock(&s->lock);
|
||||||
|
|
||||||
pthread_join(s->vmaf_thread, NULL);
|
if (s->vmaf_thread_created)
|
||||||
|
{
|
||||||
|
pthread_join(s->vmaf_thread, NULL);
|
||||||
|
s->vmaf_thread_created = 0;
|
||||||
|
}
|
||||||
|
|
||||||
av_frame_free(&s->gref);
|
av_frame_free(&s->gref);
|
||||||
av_frame_free(&s->gmain);
|
av_frame_free(&s->gmain);
|
||||||
|
|||||||
Reference in New Issue
Block a user