From 16e8ea0dde6c0de9bb94d1634e0ed0ad85fd642e Mon Sep 17 00:00:00 2001 From: Stephen Hutchinson Date: Sun, 3 Jan 2021 17:58:36 -0500 Subject: avisynth: fix audio on big endian AviSynth+ outputs audio in the same format as the OS, so assuming little endian formats as input on big endian OSes results in nothing but static. Signed-off-by: Stephen Hutchinson --- libavformat/avisynth.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'libavformat/avisynth.c') diff --git a/libavformat/avisynth.c b/libavformat/avisynth.c index 64fb6cc98f..21ae8c183a 100644 --- a/libavformat/avisynth.c +++ b/libavformat/avisynth.c @@ -42,6 +42,13 @@ #define AVISYNTH_LIB AVISYNTH_NAME SLIBSUF #endif +/* Endianness guards for audio */ +#if HAVE_BIGENDIAN + #define PCM(format) (AV_CODEC_ID_PCM_ ## format ## BE) +#else + #define PCM(format) (AV_CODEC_ID_PCM_ ## format ## LE) +#endif + #include typedef struct AviSynthLibrary { @@ -513,16 +520,16 @@ static int avisynth_create_stream_audio(AVFormatContext *s, AVStream *st) st->codecpar->codec_id = AV_CODEC_ID_PCM_U8; break; case AVS_SAMPLE_INT16: - st->codecpar->codec_id = AV_CODEC_ID_PCM_S16LE; + st->codecpar->codec_id = PCM(S16); break; case AVS_SAMPLE_INT24: - st->codecpar->codec_id = AV_CODEC_ID_PCM_S24LE; + st->codecpar->codec_id = PCM(S24); break; case AVS_SAMPLE_INT32: - st->codecpar->codec_id = AV_CODEC_ID_PCM_S32LE; + st->codecpar->codec_id = PCM(S32); break; case AVS_SAMPLE_FLOAT: - st->codecpar->codec_id = AV_CODEC_ID_PCM_F32LE; + st->codecpar->codec_id = PCM(F32); break; default: av_log(s, AV_LOG_ERROR, -- cgit v1.2.3