Showing the changes to libavfilter (1 of 1 file). Show all
Unified · Split
| @@ -60,11 +60,12 @@ static void sdr(AVFilterContext *ctx, const AVFrame *u, const AVFrame *v) · 59 unmodified lines | ||
| 60 | 60 | static int activate(AVFilterContext *ctx) |
| 61 | 61 | { |
| 62 | 62 | AudioSDRContext *s = ctx->priv; |
| 63 | + AVFilterLink *outlink = ctx->outputs[0]; | |
| 63 | 64 | int ret, status; |
| 64 | 65 | int available; |
| 65 | 66 | int64_t pts; |
| 66 | 67 | |
| 67 | − FF_FILTER_FORWARD_STATUS_BACK_ALL(ctx->outputs[0], ctx); | |
| 68 | + FF_FILTER_FORWARD_STATUS_BACK_ALL(outlink, ctx); | |
| 68 | 69 | |
| 69 | 70 | available = FFMIN(ff_inlink_queued_samples(ctx->inputs[0]), ff_inlink_queued_samples(ctx->inputs[1])); |
| 70 | 71 | if (available > 0) { |
| @@ -83,21 +84,22 @@ static int activate(AVFilterContext *ctx) · 12 unmodified lines | ||
| 83 | 84 | av_frame_free(&s->cache[1]); |
| 84 | 85 | out = s->cache[0]; |
| 85 | 86 | out->nb_samples = available; |
| 86 | − out->pts = s->pts; | |
| 87 | + out->pts = av_rescale_q(s->pts, av_make_q(1, outlink->sample_rate), outlink->time_base); | |
| 88 | + out->duration = av_rescale_q(out->nb_samples, av_make_q(1, outlink->sample_rate), outlink->time_base); | |
| 87 | 89 | s->pts += available; |
| 88 | 90 | s->cache[0] = NULL; |
| 89 | 91 | |
| 90 | − return ff_filter_frame(ctx->outputs[0], out); | |
| 92 | + return ff_filter_frame(outlink, out); | |
| 91 | 93 | } |
| 92 | 94 | |
| 93 | 95 | for (int i = 0; i < 2; i++) { |
| 94 | 96 | if (ff_inlink_acknowledge_status(ctx->inputs[i], &status, &pts)) { |
| 95 | − ff_outlink_set_status(ctx->outputs[0], status, s->pts); | |
| 97 | + ff_outlink_set_status(outlink, status, s->pts); | |
| 96 | 98 | return 0; |
| 97 | 99 | } |
| 98 | 100 | } |
| 99 | 101 | |
| 100 | − if (ff_outlink_frame_wanted(ctx->outputs[0])) { | |
| 102 | + if (ff_outlink_frame_wanted(outlink)) { | |
| 101 | 103 | for (int i = 0; i < 2; i++) { |
| 102 | 104 | if (ff_inlink_queued_samples(ctx->inputs[i]) > 0) |
| 103 | 105 | continue; |