| @@ -131,12 +131,13 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *buf) | |||||
| AVFilterContext *ctx = inlink->dst; | AVFilterContext *ctx = inlink->dst; | ||||
| AlphaMergeContext *merge = ctx->priv; | AlphaMergeContext *merge = ctx->priv; | ||||
| int ret = 0; | |||||
| int is_alpha = (inlink == ctx->inputs[1]); | int is_alpha = (inlink == ctx->inputs[1]); | ||||
| struct FFBufQueue *queue = | struct FFBufQueue *queue = | ||||
| (is_alpha ? &merge->queue_alpha : &merge->queue_main); | (is_alpha ? &merge->queue_alpha : &merge->queue_main); | ||||
| ff_bufqueue_add(ctx, queue, buf); | ff_bufqueue_add(ctx, queue, buf); | ||||
| while (1) { | |||||
| do { | |||||
| AVFrame *main_buf, *alpha_buf; | AVFrame *main_buf, *alpha_buf; | ||||
| if (!ff_bufqueue_peek(&merge->queue_main, 0) || | if (!ff_bufqueue_peek(&merge->queue_main, 0) || | ||||
| @@ -147,10 +148,10 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *buf) | |||||
| merge->frame_requested = 0; | merge->frame_requested = 0; | ||||
| draw_frame(ctx, main_buf, alpha_buf); | draw_frame(ctx, main_buf, alpha_buf); | ||||
| ff_filter_frame(ctx->outputs[0], main_buf); | |||||
| ret = ff_filter_frame(ctx->outputs[0], main_buf); | |||||
| av_frame_free(&alpha_buf); | av_frame_free(&alpha_buf); | ||||
| } | |||||
| return 0; | |||||
| } while (ret >= 0); | |||||
| return ret; | |||||
| } | } | ||||
| static int request_frame(AVFilterLink *outlink) | static int request_frame(AVFilterLink *outlink) | ||||