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
107107 }
108108 out->pts = s->pts;
109109 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);
111111 i += out->nb_samples;
112112 s->current_sample += out->nb_samples;
113113
@@ -145,7 +145,7 @@ static int afilter_frame(AVFilterLink *inlink, AVFrame *frame) · 31 unmodified lines
145145 drain = FFMAX(0, s->start - s->ignored_samples);
146146 s->pts = frame->pts;
147147 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);
149149 }
150150 s->nb_samples += ret - drain;
151151 drain = frame->nb_samples - written;
@@ -158,7 +158,7 @@ static int afilter_frame(AVFilterLink *inlink, AVFrame *frame) · 6 unmodified lines
158158 av_audio_fifo_drain(s->left, drain);
159159 }
160160 frame->nb_samples = ret;
161− s->pts += ret;
161+ s->pts += av_rescale_q(ret, (AVRational){1, outlink->sample_rate}, outlink->time_base);
162162 ret = ff_filter_frame(outlink, frame);
163163 } else {
164164 int nb_samples = frame->nb_samples;
@@ -169,7 +169,7 @@ static int afilter_frame(AVFilterLink *inlink, AVFrame *frame) · 4 unmodified lines
169169 } else {
170170 s->ignored_samples += frame->nb_samples;
171171 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);
173173 ret = ff_filter_frame(outlink, frame);
174174 }
175175
@@ -195,7 +195,7 @@ static int arequest_frame(AVFilterLink *outlink) · 19 unmodified lines
195195 return AVERROR(ENOMEM);
196196 av_audio_fifo_read(s->left, (void **)out->extended_data, nb_samples);
197197 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);
199199 ret = ff_filter_frame(outlink, out);
200200 if (ret < 0)
201201 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