Including the queue status, because these will need to be re-queried inside output_frame_mix when that function is refactored to handle multiple inputs.
Unified · Split
| @@ -117,6 +117,8 @@ enum var_name { · 116 unmodified lines | ||
| 117 | 117 | typedef struct LibplaceboInput { |
| 118 | 118 | pl_renderer renderer; |
| 119 | 119 | pl_queue queue; |
| 120 | + enum pl_queue_status qstatus; | |
| 121 | + struct pl_frame_mix mix; ///< temporary storage | |
| 120 | 122 | AVFilterLink *link; |
| 121 | 123 | AVFifo *out_pts; ///< timestamps of wanted output frames |
| 122 | 124 | int64_t status_pts; |
| @@ -952,9 +954,6 @@ static int libplacebo_activate(AVFilterContext *ctx) · 829 unmodified lines | ||
| 952 | 954 | return ret; |
| 953 | 955 | |
| 954 | 956 | if (ff_outlink_frame_wanted(outlink)) { |
| 955 | − struct pl_frame_mix mix; | |
| 956 | − enum pl_queue_status ret; | |
| 957 | − | |
| 958 | 957 | if (s->fps.num) { |
| 959 | 958 | pts = outlink->frame_count_out; |
| 960 | 959 | } else if (av_fifo_peek(in->out_pts, &pts, 1, 0) < 0) { |
| @@ -972,20 +971,20 @@ static int libplacebo_activate(AVFilterContext *ctx) · 11 unmodified lines | ||
| 972 | 971 | return 0; |
| 973 | 972 | } |
| 974 | 973 | |
| 975 | − ret = pl_queue_update(in->queue, &mix, pl_queue_params( | |
| 974 | + in->qstatus = pl_queue_update(in->queue, &in->mix, pl_queue_params( | |
| 976 | 975 | .pts = pts * av_q2d(outlink->time_base), |
| 977 | 976 | .radius = pl_frame_mix_radius(&s->params), |
| 978 | 977 | .vsync_duration = av_q2d(av_inv_q(outlink->frame_rate)), |
| 979 | 978 | )); |
| 980 | 979 | |
| 981 | − switch (ret) { | |
| 980 | + switch (in->qstatus) { | |
| 982 | 981 | case PL_QUEUE_MORE: |
| 983 | 982 | ff_inlink_request_frame(in->link); |
| 984 | 983 | return 0; |
| 985 | 984 | case PL_QUEUE_OK: |
| 986 | 985 | if (!s->fps.num) |
| 987 | 986 | av_fifo_drain2(in->out_pts, 1); |
| 988 | − return output_frame_mix(ctx, &mix, pts); | |
| 987 | + return output_frame_mix(ctx, &in->mix, pts); | |
| 989 | 988 | case PL_QUEUE_ERR: |
| 990 | 989 | return AVERROR_EXTERNAL; |
| 991 | 990 | } |