[arch-commits] Commit in audacity/trunk (PKGBUILD audacity-1.3.13-ffmpeg.patch)

Eric Bélanger eric at archlinux.org
Tue Jan 17 05:10:44 UTC 2012


    Date: Tuesday, January 17, 2012 @ 00:10:44
  Author: eric
Revision: 146760

upgpkg: audacity 1.3.14-2

Fix ffmpeg support (close FS#27944)

Modified:
  audacity/trunk/PKGBUILD
  audacity/trunk/audacity-1.3.13-ffmpeg.patch

------------------------------+
 PKGBUILD                     |    6 
 audacity-1.3.13-ffmpeg.patch |  568 +++++++++++++++++++++++++++++------------
 2 files changed, 407 insertions(+), 167 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2012-01-17 03:41:24 UTC (rev 146759)
+++ PKGBUILD	2012-01-17 05:10:44 UTC (rev 146760)
@@ -3,7 +3,7 @@
 
 pkgname=audacity
 pkgver=1.3.14
-pkgrel=1
+pkgrel=2
 pkgdesc="A program that lets you manipulate digital audio waveforms"
 arch=('i686' 'x86_64')
 url="http://audacity.sourceforge.net/"
@@ -15,11 +15,11 @@
 source=(http://audacity.googlecode.com/files/${pkgname}-minsrc-${pkgver}-beta.tar.bz2 \
         audacity-1.3.13-ffmpeg.patch)
 sha1sums=('a0fb22a0cfbb8a72abac8bbc01b3ad8b0bb7e11e'
-          '26c2ad8e611705b2762a318e66312169f59cc218')
+          '67f209d362ece6961b154a7c62e23ac856c2fa94')
 
 build() {
   cd "${srcdir}/${pkgname}-src-${pkgver}-beta"
-  patch -p1 -i "${srcdir}/audacity-1.3.13-ffmpeg.patch"
+  patch -p0 -i "${srcdir}/audacity-1.3.13-ffmpeg.patch"
   WX_CONFIG=/usr/bin/wx-config ./configure --prefix=/usr \
     --with-portaudio --with-libsamplerate \
     --without-libresample --with-libmad \

Modified: audacity-1.3.13-ffmpeg.patch
===================================================================
--- audacity-1.3.13-ffmpeg.patch	2012-01-17 03:41:24 UTC (rev 146759)
+++ audacity-1.3.13-ffmpeg.patch	2012-01-17 05:10:44 UTC (rev 146760)
@@ -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);
+ 




More information about the arch-commits mailing list