You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
avfilter/f_loop: fix pts handling when timebase and 1/samplerate differ
This commit is contained in:
@@ -107,7 +107,7 @@ static int push_samples(AVFilterContext *ctx, int nb_samples)
|
|||||||
}
|
}
|
||||||
out->pts = s->pts;
|
out->pts = s->pts;
|
||||||
out->nb_samples = ret;
|
out->nb_samples = ret;
|
||||||
s->pts += out->nb_samples;
|
s->pts += av_rescale_q(out->nb_samples, (AVRational){1, outlink->sample_rate}, outlink->time_base);
|
||||||
i += out->nb_samples;
|
i += out->nb_samples;
|
||||||
s->current_sample += out->nb_samples;
|
s->current_sample += out->nb_samples;
|
||||||
|
|
||||||
@@ -145,7 +145,7 @@ static int afilter_frame(AVFilterLink *inlink, AVFrame *frame)
|
|||||||
drain = FFMAX(0, s->start - s->ignored_samples);
|
drain = FFMAX(0, s->start - s->ignored_samples);
|
||||||
s->pts = frame->pts;
|
s->pts = frame->pts;
|
||||||
av_audio_fifo_drain(s->fifo, drain);
|
av_audio_fifo_drain(s->fifo, drain);
|
||||||
s->pts += s->start - s->ignored_samples;
|
s->pts += av_rescale_q(s->start - s->ignored_samples, (AVRational){1, outlink->sample_rate}, outlink->time_base);
|
||||||
}
|
}
|
||||||
s->nb_samples += ret - drain;
|
s->nb_samples += ret - drain;
|
||||||
drain = frame->nb_samples - written;
|
drain = frame->nb_samples - written;
|
||||||
@@ -158,7 +158,7 @@ static int afilter_frame(AVFilterLink *inlink, AVFrame *frame)
|
|||||||
av_audio_fifo_drain(s->left, drain);
|
av_audio_fifo_drain(s->left, drain);
|
||||||
}
|
}
|
||||||
frame->nb_samples = ret;
|
frame->nb_samples = ret;
|
||||||
s->pts += ret;
|
s->pts += av_rescale_q(ret, (AVRational){1, outlink->sample_rate}, outlink->time_base);
|
||||||
ret = ff_filter_frame(outlink, frame);
|
ret = ff_filter_frame(outlink, frame);
|
||||||
} else {
|
} else {
|
||||||
int nb_samples = frame->nb_samples;
|
int nb_samples = frame->nb_samples;
|
||||||
@@ -169,7 +169,7 @@ static int afilter_frame(AVFilterLink *inlink, AVFrame *frame)
|
|||||||
} else {
|
} else {
|
||||||
s->ignored_samples += frame->nb_samples;
|
s->ignored_samples += frame->nb_samples;
|
||||||
frame->pts = s->pts;
|
frame->pts = s->pts;
|
||||||
s->pts += frame->nb_samples;
|
s->pts += av_rescale_q(frame->nb_samples, (AVRational){1, outlink->sample_rate}, outlink->time_base);
|
||||||
ret = ff_filter_frame(outlink, frame);
|
ret = ff_filter_frame(outlink, frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -195,7 +195,7 @@ static int arequest_frame(AVFilterLink *outlink)
|
|||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
av_audio_fifo_read(s->left, (void **)out->extended_data, nb_samples);
|
av_audio_fifo_read(s->left, (void **)out->extended_data, nb_samples);
|
||||||
out->pts = s->pts;
|
out->pts = s->pts;
|
||||||
s->pts += nb_samples;
|
s->pts += av_rescale_q(nb_samples, (AVRational){1, outlink->sample_rate}, outlink->time_base);
|
||||||
ret = ff_filter_frame(outlink, out);
|
ret = ff_filter_frame(outlink, out);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
Reference in New Issue
Block a user