[FFmpeg-devel] [PATCH] avfilter/af_atempo: fix assertion failure on empty input
Pavel Koshevoy
pkoshevoy at gmail.com
Thu Dec 15 07:10:49 EET 2016
On Wed, Dec 14, 2016 at 7:27 PM, Marton Balint <cus at passwd.hu> wrote:
> Signed-off-by: Marton Balint <cus at passwd.hu>
> ---
> libavfilter/af_atempo.c | 10 +++++++---
> 1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/libavfilter/af_atempo.c b/libavfilter/af_atempo.c
> index 59b08ec..93a9c05 100644
> --- a/libavfilter/af_atempo.c
> +++ b/libavfilter/af_atempo.c
> @@ -74,6 +74,7 @@ typedef struct {
> * Filter state machine states
> */
> typedef enum {
> + YAE_NEW,
> YAE_LOAD_FRAGMENT,
> YAE_ADJUST_POSITION,
> YAE_RELOAD_FRAGMENT,
> @@ -180,7 +181,7 @@ static void yae_clear(ATempoContext *atempo)
> atempo->tail = 0;
>
> atempo->nfrag = 0;
> - atempo->state = YAE_LOAD_FRAGMENT;
> + atempo->state = YAE_NEW;
>
> atempo->position[0] = 0;
> atempo->position[1] = 0;
> @@ -828,6 +829,9 @@ yae_apply(ATempoContext *atempo,
> uint8_t *dst_end)
> {
> while (1) {
> + if (atempo->state == YAE_NEW)
> + atempo->state = YAE_LOAD_FRAGMENT;
> +
> if (atempo->state == YAE_LOAD_FRAGMENT) {
> // load additional data for the current fragment:
> if (yae_load_frag(atempo, src_ref, src_end) != 0) {
> @@ -983,7 +987,7 @@ static av_cold int init(AVFilterContext *ctx)
> {
> ATempoContext *atempo = ctx->priv;
> atempo->format = AV_SAMPLE_FMT_NONE;
> - atempo->state = YAE_LOAD_FRAGMENT;
> + atempo->state = YAE_NEW;
> return 0;
> }
>
> @@ -1123,7 +1127,7 @@ static int request_frame(AVFilterLink *outlink)
>
> ret = ff_request_frame(ctx->inputs[0]);
>
> - if (ret == AVERROR_EOF) {
> + if (ret == AVERROR_EOF && atempo->state != YAE_NEW) {
> // flush the filter:
> int n_max = atempo->ring;
> int n_out;
I'd like to understand these changes a little better ... how can I
reproduce the problem this is trying to fix?
Pavel.
More information about the ffmpeg-devel
mailing list