History

avfilter/aeval: trim last frame's number of samples to match requested duration

Fixes #6181.

Paul B Mahol committed 9 years ago

Commit dbc7f021 parent 353f5093 files · +1544 −1156Browse files

Showing the changes to libavfilter (1 of 3 files). Show all

Unified · Split

libavfilter/aeval.c+11−3
@@ -277,16 +277,24 @@ static int request_frame(AVFilterLink *outlink) · 276 unmodified lines
277 AVFrame *samplesref;277 AVFrame *samplesref;
278 int i, j;278 int i, j;
279 int64_t t = av_rescale(eval->n, AV_TIME_BASE, eval->sample_rate);279 int64_t t = av_rescale(eval->n, AV_TIME_BASE, eval->sample_rate);
280 int nb_samples;
280 281
281 if (eval->duration >= 0 && t >= eval->duration)282 if (eval->duration >= 0 && t >= eval->duration)
282 return AVERROR_EOF;283 return AVERROR_EOF;
283 284
284 samplesref = ff_get_audio_buffer(outlink, eval->nb_samples);285 if (eval->duration >= 0) {
286 nb_samples = FFMIN(eval->nb_samples, av_rescale(eval->duration, eval->sample_rate, AV_TIME_BASE) - eval->pts);
287 if (!nb_samples)
288 return AVERROR_EOF;
289 } else {
290 nb_samples = eval->nb_samples;
291 }
292 samplesref = ff_get_audio_buffer(outlink, nb_samples);
285 if (!samplesref)293 if (!samplesref)
286 return AVERROR(ENOMEM);294 return AVERROR(ENOMEM);
287 295
288 /* evaluate expression for each single sample and for each channel */296 /* evaluate expression for each single sample and for each channel */
289 for (i = 0; i < eval->nb_samples; i++, eval->n++) {297 for (i = 0; i < nb_samples; i++, eval->n++) {
290 eval->var_values[VAR_N] = eval->n;298 eval->var_values[VAR_N] = eval->n;
291 eval->var_values[VAR_T] = eval->var_values[VAR_N] * (double)1/eval->sample_rate;299 eval->var_values[VAR_T] = eval->var_values[VAR_N] * (double)1/eval->sample_rate;
292 300
@@ -298,7 +306,7 @@ static int request_frame(AVFilterLink *outlink) · 5 unmodified lines
298 306
299 samplesref->pts = eval->pts;307 samplesref->pts = eval->pts;
300 samplesref->sample_rate = eval->sample_rate;308 samplesref->sample_rate = eval->sample_rate;
301 eval->pts += eval->nb_samples;309 eval->pts += nb_samples;
302 310
303 return ff_filter_frame(outlink, samplesref);311 return ff_filter_frame(outlink, samplesref);
304}312}

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