* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <stdint.h>
+
#include "libavresample/avresample.h"
+#include "libavutil/attributes.h"
#include "libavutil/audio_fifo.h"
#include "libavutil/common.h"
#include "libavutil/mathematics.h"
.version = LIBAVUTIL_VERSION_INT,
};
-static int init(AVFilterContext *ctx, const char *args)
+static av_cold int init(AVFilterContext *ctx)
{
ASyncContext *s = ctx->priv;
- int ret;
-
- s->class = &async_class;
- av_opt_set_defaults(s);
-
- if ((ret = av_set_options_string(s, args, "=", ":")) < 0) {
- av_log(ctx, AV_LOG_ERROR, "Error parsing options string '%s'.\n", args);
- return ret;
- }
- av_opt_free(s);
s->pts = AV_NOPTS_VALUE;
s->first_frame = 1;
return 0;
}
-static void uninit(AVFilterContext *ctx)
+static av_cold void uninit(AVFilterContext *ctx)
{
ASyncContext *s = ctx->priv;
delta = pts - s->pts - get_delay(s);
out_size = avresample_available(s->avr);
- if (labs(delta) > s->min_delta ||
+ if (llabs(delta) > s->min_delta ||
(s->first_frame && delta && s->first_pts != AV_NOPTS_VALUE)) {
av_log(ctx, AV_LOG_VERBOSE, "Discontinuity - %"PRId64" samples.\n", delta);
out_size = av_clipl_int32((int64_t)out_size + delta);
}
if (s->first_frame && delta > 0) {
+ int planar = av_sample_fmt_is_planar(buf_out->format);
+ int planes = planar ? nb_channels : 1;
+ int block_size = av_get_bytes_per_sample(buf_out->format) *
+ (planar ? 1 : nb_channels);
+
int ch;
av_samples_set_silence(buf_out->extended_data, 0, delta,
nb_channels, buf->format);
- for (ch = 0; ch < nb_channels; ch++)
- buf_out->extended_data[ch] += delta;
+ for (ch = 0; ch < planes; ch++)
+ buf_out->extended_data[ch] += delta * block_size;
avresample_read(s->avr, buf_out->extended_data, out_size);
- for (ch = 0; ch < nb_channels; ch++)
- buf_out->extended_data[ch] -= delta;
+ for (ch = 0; ch < planes; ch++)
+ buf_out->extended_data[ch] -= delta * block_size;
} else {
avresample_read(s->avr, buf_out->extended_data, out_size);
{ NULL }
};
-AVFilter avfilter_af_asyncts = {
+AVFilter ff_af_asyncts = {
.name = "asyncts",
.description = NULL_IF_CONFIG_SMALL("Sync audio data to timestamps"),
.uninit = uninit,
.priv_size = sizeof(ASyncContext),
+ .priv_class = &async_class,
.inputs = avfilter_af_asyncts_inputs,
.outputs = avfilter_af_asyncts_outputs,