Based on ffmpeg patch: From: Martin Storsjö Date: Fri, 31 Aug 2018 11:25:30 +0000 (+0300) Subject: libfdk-aacenc: Fix building with libfdk-aac v2 X-Git-Url: https://git.libav.org/?p=libav.git;a=commitdiff_plain;h=141c960e21d2860e354f9b90df136184dd00a9a8;hp=c8bca9fe466f810fd484e2c6db7ef7bc83b5a943 libfdk-aacenc: Fix building with libfdk-aac v2 When flushing the encoder, we now need to provide non-null buffer parameters for everything, even if they are unused. The encoderDelay parameter has been replaced by two, nDelay and nDelayCore. --- vlc-3.0.7.1/modules/codec/fdkaac.c.orig 2019-08-04 19:40:15.759796884 +0200 +++ vlc-3.0.7.1/modules/codec/fdkaac.c 2019-08-04 19:50:16.323210020 +0200 @@ -59,6 +59,11 @@ #include #include +#define FDKENC_VER_AT_LEAST(vl0, vl1) \ + (defined(AACENCODER_LIB_VL0) && \ + ((AACENCODER_LIB_VL0 > vl0) || \ + (AACENCODER_LIB_VL0 == vl0 && AACENCODER_LIB_VL1 >= vl1))) + static int OpenEncoder(vlc_object_t *); static void CloseEncoder(vlc_object_t *); @@ -288,7 +293,11 @@ p_sys->i_maxoutputsize = 768*p_enc->fmt_in.audio.i_channels; p_enc->fmt_in.audio.i_bitspersample = 16; p_sys->i_frame_size = info.frameLength; +#if FDKENC_VER_AT_LEAST(4, 0) + p_sys->i_encoderdelay = info.nDelay; +#else p_sys->i_encoderdelay = info.encoderDelay; +#endif p_enc->fmt_out.i_extra = info.confSize; if (p_enc->fmt_out.i_extra) { @@ -353,21 +362,26 @@ int out_identifier = OUT_BITSTREAM_DATA; int out_size, out_elem_size; void *in_ptr, *out_ptr; + char dummy_buf[1]; if (unlikely(i_samples == 0)) { + /* Must be a non-null pointer, even if it's a dummy. */ + in_ptr = dummy_buf; + in_size = 0; // this forces the encoder to purge whatever is left in the internal buffer in_args.numInSamples = -1; } else { in_ptr = p_buffer + (i_samples - i_samples_left)*p_enc->fmt_in.audio.i_channels; in_size = 2*p_enc->fmt_in.audio.i_channels*i_samples_left; - in_elem_size = 2; in_args.numInSamples = p_enc->fmt_in.audio.i_channels*i_samples_left; - in_buf.numBufs = 1; - in_buf.bufs = &in_ptr; - in_buf.bufferIdentifiers = &in_identifier; - in_buf.bufSizes = &in_size; - in_buf.bufElSizes = &in_elem_size; } + in_elem_size = 2; + in_buf.numBufs = 1; + in_buf.bufs = &in_ptr; + in_buf.bufferIdentifiers = &in_identifier; + in_buf.bufSizes = &in_size; + in_buf.bufElSizes = &in_elem_size; + block_t *p_block; p_block = block_Alloc(p_sys->i_maxoutputsize); p_block->i_buffer = p_sys->i_maxoutputsize;