summaryrefslogtreecommitdiff
path: root/extra/audacity/audacity-1.3.13-ffmpeg.patch
diff options
context:
space:
mode:
Diffstat (limited to 'extra/audacity/audacity-1.3.13-ffmpeg.patch')
-rw-r--r--extra/audacity/audacity-1.3.13-ffmpeg.patch568
1 files changed, 404 insertions, 164 deletions
diff --git a/extra/audacity/audacity-1.3.13-ffmpeg.patch b/extra/audacity/audacity-1.3.13-ffmpeg.patch
index 675470913..e76d2422b 100644
--- a/extra/audacity/audacity-1.3.13-ffmpeg.patch
+++ b/extra/audacity/audacity-1.3.13-ffmpeg.patch
@@ -1,164 +1,404 @@
---- audacity-src-1.3.13-beta.orig/src/export/ExportFFmpeg.cpp
-+++ audacity-src-1.3.13-beta/src/export/ExportFFmpeg.cpp
-@@ -352,7 +352,7 @@
- avcodec_get_context_defaults(mEncAudioCodecCtx);
-
- mEncAudioCodecCtx->codec_id = ExportFFmpegOptions::fmts[mSubFormat].codecid;
-- mEncAudioCodecCtx->codec_type = CODEC_TYPE_AUDIO;
-+ mEncAudioCodecCtx->codec_type = AVMEDIA_TYPE_AUDIO;
- mEncAudioCodecCtx->codec_tag = av_codec_get_tag((const AVCodecTag **)mEncFormatCtx->oformat->codec_tag,mEncAudioCodecCtx->codec_id);
- mSampleRate = (int)project->GetRate();
- mEncAudioCodecCtx->global_quality = -99999; //quality mode is off by default;
-@@ -403,7 +403,6 @@
- mEncAudioCodecCtx->flags2 = 0;
- if (gPrefs->Read(wxT("/FileFormats/FFmpegBitReservoir"),true)) mEncAudioCodecCtx->flags2 |= CODEC_FLAG2_BIT_RESERVOIR;
- if (gPrefs->Read(wxT("/FileFormats/FFmpegVariableBlockLen"),true)) mEncAudioCodecCtx->flags2 |= 0x0004; //WMA only?
-- mEncAudioCodecCtx->use_lpc = gPrefs->Read(wxT("/FileFormats/FFmpegUseLPC"),true);
- mEncAudioCodecCtx->compression_level = gPrefs->Read(wxT("/FileFormats/FFmpegCompLevel"),-1);
- mEncAudioCodecCtx->frame_size = gPrefs->Read(wxT("/FileFormats/FFmpegFrameSize"),(long)0);
- mEncAudioCodecCtx->lpc_coeff_precision = gPrefs->Read(wxT("/FileFormats/FFmpegLPCCoefPrec"),(long)0);
-@@ -569,7 +569,7 @@
- pkt.stream_index = mEncAudioStream->index;
- pkt.data = mEncAudioEncodedBuf;
- pkt.size = nEncodedBytes;
-- pkt.flags |= PKT_FLAG_KEY;
-+ pkt.flags |= AV_PKT_FLAG_KEY;
-
- // Set presentation time of frame (currently in the codec's timebase) in the stream timebase.
- if(mEncAudioCodecCtx->coded_frame && mEncAudioCodecCtx->coded_frame->pts != int64_t(AV_NOPTS_VALUE))
-@@ -656,7 +656,7 @@
-
- pkt.stream_index = mEncAudioStream->index;
- pkt.data = mEncAudioEncodedBuf;
-- pkt.flags |= PKT_FLAG_KEY;
-+ pkt.flags |= AV_PKT_FLAG_KEY;
-
- // Write the encoded audio frame to the output file.
- if ((ret = av_interleaved_write_frame(mEncFormatCtx, &pkt)) != 0)
---- audacity-src-1.3.13-beta.orig/src/export/ExportFFmpegDialogs.cpp
-+++ audacity-src-1.3.13-beta/src/export/ExportFFmpegDialogs.cpp
-@@ -1288,7 +1288,7 @@
- while ((codec = av_codec_next(codec)))
- {
- // We're only interested in audio and only in encoders
-- if (codec->type == CODEC_TYPE_AUDIO && codec->encode)
-+ if (codec->type == AVMEDIA_TYPE_AUDIO && codec->encode)
- {
- mCodecNames.Add(wxString::FromUTF8(codec->name));
- mCodecLongNames.Add(wxString::Format(wxT("%s - %s"),mCodecNames.Last().c_str(),wxString::FromUTF8(codec->long_name).c_str()));
-@@ -1528,7 +1528,7 @@
- // Find the codec, that is claimed to be compatible
- AVCodec *codec = avcodec_find_encoder(CompatibilityList[i].codec);
- // If it exists, is audio and has encoder
-- if (codec != NULL && (codec->type == CODEC_TYPE_AUDIO) && codec->encode)
-+ if (codec != NULL && (codec->type == AVMEDIA_TYPE_AUDIO) && codec->encode)
- {
- // If it was selected - remember it's new index
- if ((id >= 0) && codec->id == id) index = mShownCodecNames.GetCount();
-@@ -1543,7 +1543,7 @@
- AVCodec *codec = NULL;
- while ((codec = av_codec_next(codec)))
- {
-- if (codec->type == CODEC_TYPE_AUDIO && codec->encode)
-+ if (codec->type == AVMEDIA_TYPE_AUDIO && codec->encode)
- {
- if (mShownCodecNames.Index(wxString::FromUTF8(codec->name)) < 0)
- {
-@@ -1563,7 +1563,7 @@
- if (format != NULL)
- {
- AVCodec *codec = avcodec_find_encoder(format->audio_codec);
-- if (codec != NULL && (codec->type == CODEC_TYPE_AUDIO) && codec->encode)
-+ if (codec != NULL && (codec->type == AVMEDIA_TYPE_AUDIO) && codec->encode)
- {
- if ((id >= 0) && codec->id == id) index = mShownCodecNames.GetCount();
- mShownCodecNames.Add(wxString::FromUTF8(codec->name));
---- audacity-src-1.3.13-beta.orig/src/FFmpeg.cpp
-+++ audacity-src-1.3.13-beta/src/FFmpeg.cpp
-@@ -316,7 +316,7 @@
- pd.buf_size = 0;
- pd.buf = (unsigned char *) av_malloc(PROBE_BUF_MAX + AVPROBE_PADDING_SIZE);
- if (pd.buf == NULL) {
-- err = AVERROR_NOMEM;
-+ err = AVERROR(ENOMEM);
- goto fail;
- }
-
-@@ -381,7 +381,7 @@
-
- // Didn't find a suitable format, so bail
- if (!fmt) {
-- err = AVERROR_NOFMT;
-+ err = AVERROR(EILSEQ);
- goto fail;
- }
-
-@@ -855,7 +855,6 @@
- FFMPEG_INITDYN(codec, avcodec_find_decoder);
- FFMPEG_INITDYN(codec, avcodec_get_context_defaults);
- FFMPEG_INITDYN(codec, avcodec_open);
-- FFMPEG_INITDYN(codec, avcodec_decode_audio2);
- FFMPEG_INITDYN(codec, avcodec_decode_audio3);
- FFMPEG_INITDYN(codec, avcodec_encode_audio);
- FFMPEG_INITDYN(codec, avcodec_close);
---- audacity-src-1.3.13-beta.orig/src/FFmpeg.h
-+++ audacity-src-1.3.13-beta/src/FFmpeg.h
-@@ -559,7 +559,11 @@
- FFMPEG_FUNCTION_WITH_RETURN(
- void*,
- av_fast_realloc,
-+#if LIBAVUTIL_VERSION_MAJOR < 51
- (void *ptr, unsigned int *size, unsigned int min_size),
-+#else
-+ (void *ptr, unsigned int *size, size_t min_size),
-+#endif
- (ptr, size, min_size)
- );
- FFMPEG_FUNCTION_WITH_RETURN(
-@@ -747,7 +751,11 @@
- FFMPEG_FUNCTION_WITH_RETURN(
- void*,
- av_malloc,
-+#if LIBAVUTIL_VERSION_MAJOR < 51
- (unsigned int size),
-+#else
-+ (size_t size),
-+#endif
- (size)
- );
- FFMPEG_FUNCTION_NO_RETURN(
---- audacity-src-1.3.13-beta.orig/src/import/ImportFFmpeg.cpp
-+++ audacity-src-1.3.13-beta/src/import/ImportFFmpeg.cpp
-@@ -416,7 +416,7 @@
- // Fill the stream contexts
- for (unsigned int i = 0; i < mFormatContext->nb_streams; i++)
- {
-- if (mFormatContext->streams[i]->codec->codec_type == CODEC_TYPE_AUDIO)
-+ if (mFormatContext->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO)
- {
- //Create a context
- streamContext *sc = new streamContext;
---- audacity-src-1.3.13-beta.orig/src/ondemand/ODDecodeFFmpegTask.cpp
-+++ audacity-src-1.3.13-beta/src/ondemand/ODDecodeFFmpegTask.cpp
-@@ -156,7 +156,7 @@
- //test the audio stream(s)
- for (unsigned int i = 0; i < ic->nb_streams; i++)
- {
-- if (ic->streams[i]->codec->codec_type == CODEC_TYPE_AUDIO)
-+ if (ic->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO)
- {
- audioStreamExists = true;
- st = ic->streams[i];
-@@ -573,10 +573,10 @@
- }
- }
-
-- // avcodec_decode_audio2() expects the size of the output buffer as the 3rd parameter but
-+ // avcodec_decode_audio3() expects the size of the output buffer as the 3rd parameter but
- // also returns the number of bytes it decoded in the same parameter.
- sc->m_decodedAudioSamplesValidSiz = sc->m_decodedAudioSamplesSiz;
-- nBytesDecoded = avcodec_decode_audio2(sc->m_codecCtx,
-+ nBytesDecoded = avcodec_decode_audio3(sc->m_codecCtx,
- sc->m_decodedAudioSamples, // out
- &sc->m_decodedAudioSamplesValidSiz, // in/out
- pDecode, nDecodeSiz); // in
+Index: src/FFmpeg.h
+===================================================================
+--- src/FFmpeg.h (revision 11286)
++++ src/FFmpeg.h (working copy)
+@@ -47,6 +47,21 @@
+ #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(52, 94, 1)
+ #define AVSampleFormat SampleFormat
+ #endif
++
++ #if LIBAVCODEC_VERSION_INT > AV_VERSION_INT(52, 120, 0)
++ #define CodecType AVMediaType
++ #define CODEC_TYPE_UNKNOWN AVMEDIA_TYPE_UNKNOWN
++ #define CODEC_TYPE_VIDEO AVMEDIA_TYPE_VIDEO
++ #define CODEC_TYPE_AUDIO AVMEDIA_TYPE_AUDIO
++ #define CODEC_TYPE_DATA AVMEDIA_TYPE_DATA
++ #define CODEC_TYPE_SUBTITLE AVMEDIA_TYPE_SUBTITLE
++ #define CODEC_TYPE_ATTACHMENT AVMEDIA_TYPE_ATTACHMENT
++ #define CODEC_TYPE_NB AVMEDIA_TYPE_NB
++ #endif
++
++ #ifndef PKT_FLAG_KEY
++ #define PKT_FLAG_KEY AV_PKT_FLAG_KEY
++ #endif
+ }
+ #endif
+
+@@ -505,20 +520,23 @@
+ (AVCodecContext *avctx, AVCodec *codec),
+ (avctx, codec);
+ );
++#if LIBAVCODEC_VERSION_INT > AV_VERSION_INT(52, 25, 0)
+ FFMPEG_FUNCTION_WITH_RETURN(
+ int,
++ avcodec_decode_audio3,
++ (AVCodecContext *avctx, int16_t *samples, int *frame_size_ptr, AVPacket *avpkt),
++ (avctx, samples, frame_size_ptr, avpkt)
++ );
++#else
++ FFMPEG_FUNCTION_WITH_RETURN(
++ int,
+ avcodec_decode_audio2,
+ (AVCodecContext *avctx, int16_t *samples, int *frame_size_ptr, const uint8_t *buf, int buf_size),
+ (avctx, samples, frame_size_ptr, buf, buf_size)
+ );
++#endif
+ FFMPEG_FUNCTION_WITH_RETURN(
+ int,
+- avcodec_decode_audio3,
+- (AVCodecContext *avctx, int16_t *samples, int *frame_size_ptr, AVPacket *avpkt),
+- (avctx, samples, frame_size_ptr, avpkt)
+- );
+- FFMPEG_FUNCTION_WITH_RETURN(
+- int,
+ avcodec_encode_audio,
+ (AVCodecContext *avctx, uint8_t *buf, int buf_size, const short *samples),
+ (avctx, buf, buf_size, samples)
+@@ -556,13 +574,22 @@
+ (void),
+ ()
+ );
++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(53, 0, 0)
+ FFMPEG_FUNCTION_WITH_RETURN(
+ void*,
+ av_fast_realloc,
+ (void *ptr, unsigned int *size, unsigned int min_size),
+ (ptr, size, min_size)
+ );
++#else
+ FFMPEG_FUNCTION_WITH_RETURN(
++ void*,
++ av_fast_realloc,
++ (void *ptr, unsigned int *size, size_t min_size),
++ (ptr, size, min_size)
++ );
++#endif
++ FFMPEG_FUNCTION_WITH_RETURN(
+ int,
+ av_open_input_stream,
+ (AVFormatContext **ic_ptr, AVIOContext *pb, const char *filename, AVInputFormat *fmt, AVFormatParameters *ap),
+@@ -744,12 +771,21 @@
+ (AVFifoBuffer *f),
+ (f)
+ );
++#if LIBAVUTIL_VERSION_INT < AV_VERSION_INT(51, 0, 0)
+ FFMPEG_FUNCTION_WITH_RETURN(
+ void*,
+ av_malloc,
+ (unsigned int size),
+ (size)
+ );
++#else
++ FFMPEG_FUNCTION_WITH_RETURN(
++ void*,
++ av_malloc,
++ (size_t size),
++ (size)
++ );
++#endif
+ FFMPEG_FUNCTION_NO_RETURN(
+ av_freep,
+ (void *ptr),
+@@ -761,11 +797,16 @@
+ (int64_t a, AVRational bq, AVRational cq),
+ (a, bq, cq)
+ );
++
++#if LIBAVFORMAT_VERSION_INT > AV_VERSION_INT(52, 31, 0)
+ FFMPEG_FUNCTION_NO_RETURN(
+ av_free_packet,
+ (AVPacket *pkt),
+ (pkt)
+ );
++#endif
++
++#if LIBAVUTIL_VERSION_INT > AV_VERSION_INT(49, 15, 0)
+ FFMPEG_FUNCTION_WITH_RETURN(
+ AVFifoBuffer*,
+ av_fifo_alloc,
+@@ -778,8 +819,22 @@
+ (AVFifoBuffer *f, void *buf, int buf_size, void (*func)(void*, void*, int)),
+ (f, buf, buf_size, func)
+ );
++#else
+ FFMPEG_FUNCTION_WITH_RETURN(
+ int,
++ av_fifo_init,
++ (AVFifoBuffer *f, unsigned int size),
++ (f, size)
++ );
++ FFMPEG_FUNCTION_WITH_RETURN(
++ int,
++ av_fifo_generic_read,
++ (AVFifoBuffer *f, int buf_size, void (*func)(void*, void*, int), void* dest),
++ (f, buf_size, func, dest)
++ );
++#endif
++ FFMPEG_FUNCTION_WITH_RETURN(
++ int,
+ av_fifo_realloc2,
+ (AVFifoBuffer *f, unsigned int size),
+ (f, size)
+Index: src/FFmpeg.cpp
+===================================================================
+--- src/FFmpeg.cpp (revision 11286)
++++ src/FFmpeg.cpp (working copy)
+@@ -186,9 +186,15 @@
+ return AVERROR(ENOMEM);
+ }
+
+- if (flags & URL_RDWR) {
++ // LLL: These really should be logical AND tests, but on 2011/04/28, the URL_ open flags
++ // changed in the FFmpeg source to values that were not compatible with previous
++ // values.
++ //
++ // Since Audacity doesn't use any other open flags (there aren't any others defined
++ // anyway), making equality tests works for older and new FFmpeg headers.
++ if (flags == URL_RDWR) {
+ mode = wxFile::read_write;
+- } else if (flags & URL_WRONLY) {
++ } else if (flags == URL_WRONLY) {
+ mode = wxFile::write;
+ } else {
+ mode = wxFile::read;
+@@ -222,6 +228,10 @@
+ {
+ wxSeekMode mode = wxFromStart;
+
++#if !defined(AVSEEK_FORCE)
++#define AVSEEK_FORCE 0
++#endif
++
+ switch (whence & ~AVSEEK_FORCE)
+ {
+ case (SEEK_SET):
+@@ -316,7 +326,7 @@
+ pd.buf_size = 0;
+ pd.buf = (unsigned char *) av_malloc(PROBE_BUF_MAX + AVPROBE_PADDING_SIZE);
+ if (pd.buf == NULL) {
+- err = AVERROR_NOMEM;
++ err = AVERROR(ENOMEM);
+ goto fail;
+ }
+
+@@ -381,7 +391,7 @@
+
+ // Didn't find a suitable format, so bail
+ if (!fmt) {
+- err = AVERROR_NOFMT;
++ err = AVERROR(EILSEQ);
+ goto fail;
+ }
+
+@@ -847,39 +857,53 @@
+ FFMPEG_INITALT(avformat, av_guess_format, guess_format);
+ FFMPEG_INITALT(avformat, av_match_ext, match_ext);
+
+- FFMPEG_INITDYN(codec, av_init_packet);
+- FFMPEG_INITDYN(codec, av_free_packet);
+- FFMPEG_INITDYN(codec, avcodec_init);
+- FFMPEG_INITDYN(codec, avcodec_find_encoder);
+- FFMPEG_INITDYN(codec, avcodec_find_encoder_by_name);
+- FFMPEG_INITDYN(codec, avcodec_find_decoder);
+- FFMPEG_INITDYN(codec, avcodec_get_context_defaults);
+- FFMPEG_INITDYN(codec, avcodec_open);
+- FFMPEG_INITDYN(codec, avcodec_decode_audio2);
+- FFMPEG_INITDYN(codec, avcodec_decode_audio3);
+- FFMPEG_INITDYN(codec, avcodec_encode_audio);
+- FFMPEG_INITDYN(codec, avcodec_close);
+- FFMPEG_INITDYN(codec, avcodec_register_all);
+- FFMPEG_INITDYN(codec, avcodec_version);
+- FFMPEG_INITDYN(codec, av_fast_realloc);
+- FFMPEG_INITDYN(codec, av_codec_next);
+- FFMPEG_INITDYN(codec, av_get_bits_per_sample_format);
++#if LIBAVCODEC_VERSION_INT > AV_VERSION_INT(52, 58, 0)
++ FFMPEG_INITDYN(avcodec, av_init_packet);
++#else
++ FFMPEG_INITDYN(avformat, av_init_packet);
++#endif
+
++#if LIBAVFORMAT_VERSION_INT > AV_VERSION_INT(52, 31, 0)
++ FFMPEG_INITDYN(avcodec, av_free_packet);
++#endif
++ FFMPEG_INITDYN(avcodec, avcodec_init);
++ FFMPEG_INITDYN(avcodec, avcodec_find_encoder);
++ FFMPEG_INITDYN(avcodec, avcodec_find_encoder_by_name);
++ FFMPEG_INITDYN(avcodec, avcodec_find_decoder);
++ FFMPEG_INITDYN(avcodec, avcodec_get_context_defaults);
++ FFMPEG_INITDYN(avcodec, avcodec_open);
++#if LIBAVCODEC_VERSION_INT > AV_VERSION_INT(52, 25, 0)
++ FFMPEG_INITDYN(avcodec, avcodec_decode_audio3);
++#else
++ FFMPEG_INITDYN(avcodec, avcodec_decode_audio2);
++#endif
++ FFMPEG_INITDYN(avcodec, avcodec_encode_audio);
++ FFMPEG_INITDYN(avcodec, avcodec_close);
++ FFMPEG_INITDYN(avcodec, avcodec_register_all);
++ FFMPEG_INITDYN(avcodec, avcodec_version);
++ FFMPEG_INITDYN(avcodec, av_fast_realloc);
++ FFMPEG_INITDYN(avcodec, av_codec_next);
++ FFMPEG_INITDYN(avcodec, av_get_bits_per_sample_format);
++
+ FFMPEG_INITALT(avcodec, av_get_bits_per_sample_fmt, av_get_bits_per_sample_format);
+
+- FFMPEG_INITDYN(util, av_free);
+- FFMPEG_INITDYN(util, av_log_set_callback);
+- FFMPEG_INITDYN(util, av_log_default_callback);
+- FFMPEG_INITDYN(util, av_fifo_alloc);
+- FFMPEG_INITDYN(util, av_fifo_generic_read);
+- FFMPEG_INITDYN(util, av_fifo_realloc2);
+- FFMPEG_INITDYN(util, av_fifo_free);
+- FFMPEG_INITDYN(util, av_fifo_size);
+- FFMPEG_INITDYN(util, av_malloc);
+- FFMPEG_INITDYN(util, av_fifo_generic_write);
+- FFMPEG_INITDYN(util, av_freep);
+- FFMPEG_INITDYN(util, av_rescale_q);
+- FFMPEG_INITDYN(util, avutil_version);
++ FFMPEG_INITDYN(avutil, av_free);
++ FFMPEG_INITDYN(avutil, av_log_set_callback);
++ FFMPEG_INITDYN(avutil, av_log_default_callback);
++#if LIBAVUTIL_VERSION_INT > AV_VERSION_INT(49, 15, 0)
++ FFMPEG_INITDYN(avutil, av_fifo_alloc);
++#else
++ FFMPEG_INITDYN(avutil, av_fifo_init);
++#endif
++ FFMPEG_INITDYN(avutil, av_fifo_generic_read);
++ FFMPEG_INITDYN(avutil, av_fifo_realloc2);
++ FFMPEG_INITDYN(avutil, av_fifo_free);
++ FFMPEG_INITDYN(avutil, av_fifo_size);
++ FFMPEG_INITDYN(avutil, av_malloc);
++ FFMPEG_INITDYN(avutil, av_fifo_generic_write);
++ FFMPEG_INITDYN(avutil, av_freep);
++ FFMPEG_INITDYN(avutil, av_rescale_q);
++ FFMPEG_INITDYN(avutil, avutil_version);
+
+ //FFmpeg initialization
+ wxLogMessage(wxT("All symbols loaded successfully. Initializing the library."));
+Index: src/import/ImportFFmpeg.cpp
+===================================================================
+--- src/import/ImportFFmpeg.cpp (revision 11286)
++++ src/import/ImportFFmpeg.cpp (working copy)
+@@ -808,9 +808,12 @@
+ }
+ }
+
++
++ sc->m_decodedAudioSamplesValidSiz = sc->m_decodedAudioSamplesSiz;
++
++#if LIBAVCODEC_VERSION_INT > AV_VERSION_INT(52, 25, 0)
+ // avcodec_decode_audio3() expects the size of the output buffer as the 3rd parameter but
+ // also returns the number of bytes it decoded in the same parameter.
+- sc->m_decodedAudioSamplesValidSiz = sc->m_decodedAudioSamplesSiz;
+ AVPacket avpkt;
+ av_init_packet(&avpkt);
+ avpkt.data = pDecode;
+@@ -820,7 +823,16 @@
+ (int16_t *)sc->m_decodedAudioSamples, // out
+ &sc->m_decodedAudioSamplesValidSiz, // in/out
+ &avpkt); // in
+-
++#else
++ // avcodec_decode_audio2() expects the size of the output buffer as the 3rd parameter but
++ // also returns the number of bytes it decoded in the same parameter.
++ nBytesDecoded =
++ avcodec_decode_audio2(sc->m_codecCtx,
++ (int16_t *) sc->m_decodedAudioSamples, // out
++ &sc->m_decodedAudioSamplesValidSiz, // in/out
++ pDecode, // in
++ nDecodeSiz); // in
++#endif
+ if (nBytesDecoded < 0)
+ {
+ // Decoding failed. Don't stop.
+Index: src/export/ExportFFmpeg.cpp
+===================================================================
+--- src/export/ExportFFmpeg.cpp (revision 11286)
++++ src/export/ExportFFmpeg.cpp (working copy)
+@@ -154,6 +154,10 @@
+ AVFifoBuffer * mEncAudioFifo; // FIFO to write incoming audio samples into
+ uint8_t * mEncAudioFifoOutBuf; // buffer to read _out_ of the FIFO into
+
++#if LIBAVUTIL_VERSION_INT < AV_VERSION_INT(50, 0, 0)
++ AVFifoBuffer mEncAudioFifoBuffer; // FIFO to write incoming audio samples into
++#endif
++
+ wxString mName;
+
+ int mSubFormat;
+@@ -174,6 +178,11 @@
+ #define MAX_AUDIO_PACKET_SIZE (128 * 1024)
+ mEncAudioEncodedBufSiz = 4*MAX_AUDIO_PACKET_SIZE;
+ mEncAudioFifoOutBuf = NULL; // buffer to read _out_ of the FIFO into
++
++#if LIBAVUTIL_VERSION_INT < AV_VERSION_INT(50, 0, 0)
++ mEncAudioFifo = &mEncAudioFifoBuffer;
++#endif
++
+ mSampleRate = 0;
+ mSupportsUTF8 = true;
+
+@@ -350,7 +359,6 @@
+ mEncAudioCodecCtx = mEncAudioStream->codec;
+
+ avcodec_get_context_defaults(mEncAudioCodecCtx);
+-
+ mEncAudioCodecCtx->codec_id = ExportFFmpegOptions::fmts[mSubFormat].codecid;
+ mEncAudioCodecCtx->codec_type = CODEC_TYPE_AUDIO;
+ mEncAudioCodecCtx->codec_tag = av_codec_get_tag((const AVCodecTag **)mEncFormatCtx->oformat->codec_tag,mEncAudioCodecCtx->codec_id);
+@@ -403,7 +411,9 @@
+ mEncAudioCodecCtx->flags2 = 0;
+ if (gPrefs->Read(wxT("/FileFormats/FFmpegBitReservoir"),true)) mEncAudioCodecCtx->flags2 |= CODEC_FLAG2_BIT_RESERVOIR;
+ if (gPrefs->Read(wxT("/FileFormats/FFmpegVariableBlockLen"),true)) mEncAudioCodecCtx->flags2 |= 0x0004; //WMA only?
++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(53, 0, 0)
+ mEncAudioCodecCtx->use_lpc = gPrefs->Read(wxT("/FileFormats/FFmpegUseLPC"),true);
++#endif
+ mEncAudioCodecCtx->compression_level = gPrefs->Read(wxT("/FileFormats/FFmpegCompLevel"),-1);
+ mEncAudioCodecCtx->frame_size = gPrefs->Read(wxT("/FileFormats/FFmpegFrameSize"),(long)0);
+ mEncAudioCodecCtx->lpc_coeff_precision = gPrefs->Read(wxT("/FileFormats/FFmpegLPCCoefPrec"),(long)0);
+@@ -487,7 +497,11 @@
+ // The encoder may require a minimum number of raw audio samples for each encoding but we can't
+ // guarantee we'll get this minimum each time an audio frame is decoded from the input file so
+ // we use a FIFO to store up incoming raw samples until we have enough for one call to the codec.
++#if LIBAVUTIL_VERSION_INT > AV_VERSION_INT(49, 15, 0)
+ mEncAudioFifo = av_fifo_alloc(1024);
++#else
++ av_fifo_init(mEncAudioFifo, 1024);
++#endif
+
+ // Allocate a buffer to read OUT of the FIFO into. The FIFO maintains its own buffer internally.
+ if ((mEncAudioFifoOutBuf = (uint8_t*)av_malloc(2*MAX_AUDIO_PACKET_SIZE)) == NULL)
+@@ -544,7 +558,11 @@
+ nFifoBytes, mEncAudioCodecCtx->frame_size);
+
+ // Pull the bytes out from the FIFO and feed them to the encoder.
++#if LIBAVUTIL_VERSION_INT > AV_VERSION_INT(49, 15, 0)
+ if (av_fifo_generic_read(mEncAudioFifo, mEncAudioFifoOutBuf, nFifoBytes, NULL) == 0)
++#else
++ if (av_fifo_generic_read(mEncAudioFifo, nFifoBytes, NULL, mEncAudioFifoOutBuf) == 0)
++#endif
+ {
+ if (mEncAudioCodecCtx->frame_size != 1)
+ nEncodedBytes = avcodec_encode_audio(mEncAudioCodecCtx, mEncAudioEncodedBuf, mEncAudioEncodedBufSiz, (int16_t*)mEncAudioFifoOutBuf);
+@@ -609,7 +627,10 @@
+ av_free(mEncAudioFifoOutBuf);
+
+ av_fifo_free(mEncAudioFifo);
++
++#if LIBAVUTIL_VERSION_INT > AV_VERSION_INT(49, 15, 0)
+ mEncAudioFifo = NULL;
++#endif
+
+ return true;
+ }
+@@ -635,7 +656,11 @@
+ // Read raw audio samples out of the FIFO in nAudioFrameSizeOut byte-sized groups to encode.
+ while ((ret = av_fifo_size(mEncAudioFifo)) >= nAudioFrameSizeOut)
+ {
++#if LIBAVUTIL_VERSION_INT > AV_VERSION_INT(49, 15, 0)
+ ret = av_fifo_generic_read(mEncAudioFifo, mEncAudioFifoOutBuf, nAudioFrameSizeOut, NULL);
++#else
++ ret = av_fifo_generic_read(mEncAudioFifo, nAudioFrameSizeOut, NULL, mEncAudioFifoOutBuf);
++#endif
+
+ av_init_packet(&pkt);
+