Allows to set EOF timestamp.
Unified · Split
| @@ -29,6 +29,7 @@ · 28 unmodified lines | ||
| 29 | 29 | #include "libavutil/opt.h" |
| 30 | 30 | #include "libavutil/thread.h" |
| 31 | 31 | #include "avfilter.h" |
| 32 | +#include "filters.h" | |
| 32 | 33 | #include "audio.h" |
| 33 | 34 | #include "formats.h" |
| 34 | 35 | #include "internal.h" |
| @@ -256,14 +257,20 @@ static int config_props(AVFilterLink *outlink) · 221 unmodified lines | ||
| 256 | 257 | return 0; |
| 257 | 258 | } |
| 258 | 259 | |
| 259 | −static int request_frame(AVFilterLink *outlink) | |
| 260 | +static int activate(AVFilterContext *ctx) | |
| 260 | 261 | { |
| 261 | − AVFrame *samplesref; | |
| 262 | − FliteContext *flite = outlink->src->priv; | |
| 262 | + AVFilterLink *outlink = ctx->outputs[0]; | |
| 263 | + FliteContext *flite = ctx->priv; | |
| 263 | 264 | int nb_samples = FFMIN(flite->wave_nb_samples, flite->frame_nb_samples); |
| 265 | + AVFrame *samplesref; | |
| 264 | 266 | |
| 265 | − if (!nb_samples) | |
| 266 | − return AVERROR_EOF; | |
| 267 | + if (!ff_outlink_frame_wanted(outlink)) | |
| 268 | + return FFERROR_NOT_READY; | |
| 269 | + | |
| 270 | + if (!nb_samples) { | |
| 271 | + ff_outlink_set_status(outlink, AVERROR_EOF, flite->pts); | |
| 272 | + return 0; | |
| 273 | + } | |
| 267 | 274 | |
| 268 | 275 | samplesref = ff_get_audio_buffer(outlink, nb_samples); |
| 269 | 276 | if (!samplesref) |
| @@ -272,11 +279,6 @@ static int request_frame(AVFilterLink *outlink) · 2 unmodified lines | ||
| 272 | 279 | memcpy(samplesref->data[0], flite->wave_samples, |
| 273 | 280 | nb_samples * flite->wave->num_channels * 2); |
| 274 | 281 | samplesref->pts = flite->pts; |
| 275 | −#if FF_API_FRAME_PKT | |
| 276 | −FF_DISABLE_DEPRECATION_WARNINGS | |
| 277 | − samplesref->pkt_pos = -1; | |
| 278 | −FF_ENABLE_DEPRECATION_WARNINGS | |
| 279 | −#endif | |
| 280 | 282 | samplesref->sample_rate = flite->wave->sample_rate; |
| 281 | 283 | flite->pts += nb_samples; |
| 282 | 284 | flite->wave_samples += nb_samples * flite->wave->num_channels; |
| @@ -290,7 +292,6 @@ static const AVFilterPad flite_outputs[] = { · 7 unmodified lines | ||
| 290 | 292 | .name = "default", |
| 291 | 293 | .type = AVMEDIA_TYPE_AUDIO, |
| 292 | 294 | .config_props = config_props, |
| 293 | − .request_frame = request_frame, | |
| 294 | 295 | }, |
| 295 | 296 | }; |
| 296 | 297 | |
| @@ -300,6 +301,7 @@ const AVFilter ff_asrc_flite = { · 3 unmodified lines | ||
| 300 | 301 | .init = init, |
| 301 | 302 | .uninit = uninit, |
| 302 | 303 | .priv_size = sizeof(FliteContext), |
| 304 | + .activate = activate, | |
| 303 | 305 | .inputs = NULL, |
| 304 | 306 | FILTER_OUTPUTS(flite_outputs), |
| 305 | 307 | FILTER_QUERY_FUNC(query_formats), |