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 | static int activate(AVFilterContext *ctx) | 60 | static int activate(AVFilterContext *ctx) |
| 61 | { | 61 | { |
| 62 | AudioSDRContext *s = ctx->priv; | 62 | AudioSDRContext *s = ctx->priv; |
| 63 | AVFilterLink *outlink = ctx->outputs[0]; | ||
| 63 | int ret, status; | 64 | int ret, status; |
| 64 | int available; | 65 | int available; |
| 65 | int64_t pts; | 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 | available = FFMIN(ff_inlink_queued_samples(ctx->inputs[0]), ff_inlink_queued_samples(ctx->inputs[1])); | 70 | available = FFMIN(ff_inlink_queued_samples(ctx->inputs[0]), ff_inlink_queued_samples(ctx->inputs[1])); |
| 70 | if (available > 0) { | 71 | if (available > 0) { |
| @@ -83,21 +84,22 @@ static int activate(AVFilterContext *ctx) · 12 unmodified lines | |||
| 83 | av_frame_free(&s->cache[1]); | 84 | av_frame_free(&s->cache[1]); |
| 84 | out = s->cache[0]; | 85 | out = s->cache[0]; |
| 85 | out->nb_samples = available; | 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 | s->pts += available; | 89 | s->pts += available; |
| 88 | s->cache[0] = NULL; | 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 | for (int i = 0; i < 2; i++) { | 95 | for (int i = 0; i < 2; i++) { |
| 94 | if (ff_inlink_acknowledge_status(ctx->inputs[i], &status, &pts)) { | 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 | return 0; | 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 | for (int i = 0; i < 2; i++) { | 103 | for (int i = 0; i < 2; i++) { |
| 102 | if (ff_inlink_queued_samples(ctx->inputs[i]) > 0) | 104 | if (ff_inlink_queued_samples(ctx->inputs[i]) > 0) |
| 103 | continue; | 105 | continue; |