return ret;
if (ret > 0) {
- if ((!s->pad || (s->pad && frame->nb_samples == s->nb_out_samples)))
- return ff_filter_frame(outlink, frame);
+ if (!s->pad || frame->nb_samples == s->nb_out_samples) {
+ ret = ff_filter_frame(outlink, frame);
+ if (ff_inlink_queued_samples(inlink) >= s->nb_out_samples)
+ ff_filter_set_ready(ctx, 100);
+ return ret;
+ }
pad_frame = ff_get_audio_buffer(outlink, s->nb_out_samples);
- if (!pad_frame)
+ if (!pad_frame) {
+ av_frame_free(&frame);
return AVERROR(ENOMEM);
+ }
+
+ ret = av_frame_copy_props(pad_frame, frame);
+ if (ret < 0) {
+ av_frame_free(&pad_frame);
+ av_frame_free(&frame);
+ return ret;
+ }
av_samples_copy(pad_frame->extended_data, frame->extended_data,
0, 0, frame->nb_samples, frame->channels, frame->format);
{ NULL }
};
-AVFilter ff_af_asetnsamples = {
+const AVFilter ff_af_asetnsamples = {
.name = "asetnsamples",
.description = NULL_IF_CONFIG_SMALL("Set the number of samples for each output audio frames."),
.priv_size = sizeof(ASNSContext),