History

avfilter/f_loop: fix pts handling when timebase and 1/samplerate differ

Paul B Mahol committed 6 years ago

Commit 2e7ccd41 parent f7ad9a61 file · +5 −5Browse files

Unified · Split

libavfilter/f_loop.c+5−5
@@ -107,7 +107,7 @@ static int push_samples(AVFilterContext *ctx, int nb_samples) · 106 unmodified lines
107 }107 }
108 out->pts = s->pts;108 out->pts = s->pts;
109 out->nb_samples = ret;109 out->nb_samples = ret;
110 s->pts += out->nb_samples;110 s->pts += av_rescale_q(out->nb_samples, (AVRational){1, outlink->sample_rate}, outlink->time_base);
111 i += out->nb_samples;111 i += out->nb_samples;
112 s->current_sample += out->nb_samples;112 s->current_sample += out->nb_samples;
113 113
@@ -145,7 +145,7 @@ static int afilter_frame(AVFilterLink *inlink, AVFrame *frame) · 31 unmodified lines
145 drain = FFMAX(0, s->start - s->ignored_samples);145 drain = FFMAX(0, s->start - s->ignored_samples);
146 s->pts = frame->pts;146 s->pts = frame->pts;
147 av_audio_fifo_drain(s->fifo, drain);147 av_audio_fifo_drain(s->fifo, drain);
148 s->pts += s->start - s->ignored_samples;148 s->pts += av_rescale_q(s->start - s->ignored_samples, (AVRational){1, outlink->sample_rate}, outlink->time_base);
149 }149 }
150 s->nb_samples += ret - drain;150 s->nb_samples += ret - drain;
151 drain = frame->nb_samples - written;151 drain = frame->nb_samples - written;
@@ -158,7 +158,7 @@ static int afilter_frame(AVFilterLink *inlink, AVFrame *frame) · 6 unmodified lines
158 av_audio_fifo_drain(s->left, drain);158 av_audio_fifo_drain(s->left, drain);
159 }159 }
160 frame->nb_samples = ret;160 frame->nb_samples = ret;
161 s->pts += ret;161 s->pts += av_rescale_q(ret, (AVRational){1, outlink->sample_rate}, outlink->time_base);
162 ret = ff_filter_frame(outlink, frame);162 ret = ff_filter_frame(outlink, frame);
163 } else {163 } else {
164 int nb_samples = frame->nb_samples;164 int nb_samples = frame->nb_samples;
@@ -169,7 +169,7 @@ static int afilter_frame(AVFilterLink *inlink, AVFrame *frame) · 4 unmodified lines
169 } else {169 } else {
170 s->ignored_samples += frame->nb_samples;170 s->ignored_samples += frame->nb_samples;
171 frame->pts = s->pts;171 frame->pts = s->pts;
172 s->pts += frame->nb_samples;172 s->pts += av_rescale_q(frame->nb_samples, (AVRational){1, outlink->sample_rate}, outlink->time_base);
173 ret = ff_filter_frame(outlink, frame);173 ret = ff_filter_frame(outlink, frame);
174 }174 }
175 175
@@ -195,7 +195,7 @@ static int arequest_frame(AVFilterLink *outlink) · 19 unmodified lines
195 return AVERROR(ENOMEM);195 return AVERROR(ENOMEM);
196 av_audio_fifo_read(s->left, (void **)out->extended_data, nb_samples);196 av_audio_fifo_read(s->left, (void **)out->extended_data, nb_samples);
197 out->pts = s->pts;197 out->pts = s->pts;
198 s->pts += nb_samples;198 s->pts += av_rescale_q(nb_samples, (AVRational){1, outlink->sample_rate}, outlink->time_base);
199 ret = ff_filter_frame(outlink, out);199 ret = ff_filter_frame(outlink, out);
200 if (ret < 0)200 if (ret < 0)
201 return ret;201 return ret;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t