Allows to set EOF timestamp.
Showing the changes to libavfilter (1 of 1 file). Show all
Unified · Split
| @@ -29,6 +29,7 @@ · 28 unmodified lines | |||
| 29 | #include "libavutil/opt.h" | 29 | #include "libavutil/opt.h" |
| 30 | #include "libavutil/thread.h" | 30 | #include "libavutil/thread.h" |
| 31 | #include "avfilter.h" | 31 | #include "avfilter.h" |
| 32 | #include "filters.h" | ||
| 32 | #include "audio.h" | 33 | #include "audio.h" |
| 33 | #include "formats.h" | 34 | #include "formats.h" |
| 34 | #include "internal.h" | 35 | #include "internal.h" |
| @@ -256,14 +257,20 @@ static int config_props(AVFilterLink *outlink) · 221 unmodified lines | |||
| 256 | return 0; | 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 | AVFilterLink *outlink = ctx->outputs[0]; |
| 262 | FliteContext *flite = outlink->src->priv; | 263 | FliteContext *flite = ctx->priv; |
| 263 | int nb_samples = FFMIN(flite->wave_nb_samples, flite->frame_nb_samples); | 264 | int nb_samples = FFMIN(flite->wave_nb_samples, flite->frame_nb_samples); |
| 265 | AVFrame *samplesref; | ||
| 264 | 266 | ||
| 265 | if (!nb_samples) | 267 | if (!ff_outlink_frame_wanted(outlink)) |
| 266 | return AVERROR_EOF; | 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 | samplesref = ff_get_audio_buffer(outlink, nb_samples); | 275 | samplesref = ff_get_audio_buffer(outlink, nb_samples); |
| 269 | if (!samplesref) | 276 | if (!samplesref) |
| @@ -272,11 +279,6 @@ static int request_frame(AVFilterLink *outlink) · 2 unmodified lines | |||
| 272 | memcpy(samplesref->data[0], flite->wave_samples, | 279 | memcpy(samplesref->data[0], flite->wave_samples, |
| 273 | nb_samples * flite->wave->num_channels * 2); | 280 | nb_samples * flite->wave->num_channels * 2); |
| 274 | samplesref->pts = flite->pts; | 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 | samplesref->sample_rate = flite->wave->sample_rate; | 282 | samplesref->sample_rate = flite->wave->sample_rate; |
| 281 | flite->pts += nb_samples; | 283 | flite->pts += nb_samples; |
| 282 | flite->wave_samples += nb_samples * flite->wave->num_channels; | 284 | flite->wave_samples += nb_samples * flite->wave->num_channels; |
| @@ -290,7 +292,6 @@ static const AVFilterPad flite_outputs[] = { · 7 unmodified lines | |||
| 290 | .name = "default", | 292 | .name = "default", |
| 291 | .type = AVMEDIA_TYPE_AUDIO, | 293 | .type = AVMEDIA_TYPE_AUDIO, |
| 292 | .config_props = config_props, | 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 | .init = init, | 301 | .init = init, |
| 301 | .uninit = uninit, | 302 | .uninit = uninit, |
| 302 | .priv_size = sizeof(FliteContext), | 303 | .priv_size = sizeof(FliteContext), |
| 304 | .activate = activate, | ||
| 303 | .inputs = NULL, | 305 | .inputs = NULL, |
| 304 | FILTER_OUTPUTS(flite_outputs), | 306 | FILTER_OUTPUTS(flite_outputs), |
| 305 | FILTER_QUERY_FUNC(query_formats), | 307 | FILTER_QUERY_FUNC(query_formats), |