Signed-off-by: Paul B Mahol <onemda@gmail.com>
Paul B Mahol authored on 2015/09/30 20:02:03... | ... |
@@ -175,29 +175,31 @@ static int request_frame(AVFilterLink *outlink) |
175 | 175 |
ret = ff_request_frame(ctx->inputs[0]); |
176 | 176 |
|
177 | 177 |
if (ret == AVERROR_EOF && !s->flushed) { |
178 |
- AVFrame *out = ff_get_audio_buffer(inlink, 1); |
|
179 |
- int nb_samples; |
|
178 |
+ if (rubberband_available(s->rbs) > 0) { |
|
179 |
+ AVFrame *out = ff_get_audio_buffer(inlink, 1); |
|
180 |
+ int nb_samples; |
|
180 | 181 |
|
181 |
- if (!out) |
|
182 |
- return AVERROR(ENOMEM); |
|
183 |
- |
|
184 |
- rubberband_process(s->rbs, (const float *const *)out->data, 1, 1); |
|
185 |
- av_frame_free(&out); |
|
186 |
- s->flushed = 1; |
|
187 |
- nb_samples = rubberband_available(s->rbs); |
|
188 |
- |
|
189 |
- if (nb_samples > 0) { |
|
190 |
- out = ff_get_audio_buffer(inlink, nb_samples); |
|
191 | 182 |
if (!out) |
192 | 183 |
return AVERROR(ENOMEM); |
193 |
- out->pts = av_rescale_q(s->nb_samples_out, |
|
194 |
- (AVRational){ 1, outlink->sample_rate }, |
|
195 |
- outlink->time_base); |
|
196 |
- nb_samples = rubberband_retrieve(s->rbs, (float *const *)out->data, nb_samples); |
|
197 |
- out->nb_samples = nb_samples; |
|
198 |
- ret = ff_filter_frame(outlink, out); |
|
199 |
- s->nb_samples_out += nb_samples; |
|
184 |
+ |
|
185 |
+ rubberband_process(s->rbs, (const float *const *)out->data, 1, 1); |
|
186 |
+ av_frame_free(&out); |
|
187 |
+ nb_samples = rubberband_available(s->rbs); |
|
188 |
+ |
|
189 |
+ if (nb_samples > 0) { |
|
190 |
+ out = ff_get_audio_buffer(inlink, nb_samples); |
|
191 |
+ if (!out) |
|
192 |
+ return AVERROR(ENOMEM); |
|
193 |
+ out->pts = av_rescale_q(s->nb_samples_out, |
|
194 |
+ (AVRational){ 1, outlink->sample_rate }, |
|
195 |
+ outlink->time_base); |
|
196 |
+ nb_samples = rubberband_retrieve(s->rbs, (float *const *)out->data, nb_samples); |
|
197 |
+ out->nb_samples = nb_samples; |
|
198 |
+ ret = ff_filter_frame(outlink, out); |
|
199 |
+ s->nb_samples_out += nb_samples; |
|
200 |
+ } |
|
200 | 201 |
} |
202 |
+ s->flushed = 1; |
|
201 | 203 |
av_log(ctx, AV_LOG_DEBUG, "nb_samples_in %"PRId64" nb_samples_out %"PRId64"\n", |
202 | 204 |
s->nb_samples_in, s->nb_samples_out); |
203 | 205 |
} |