[FFmpeg-cvslog] r19117 - in trunk: Changelog LICENSE configure doc/general.texi libavcodec/Makefile libavcodec/allcodecs.c libavcodec/libopencore-amr.c

diego subversion
Fri Jun 5 14:32:40 CEST 2009


Author: diego
Date: Fri Jun  5 14:32:40 2009
New Revision: 19117

Log:
Add support for external OpenCORE libraries for AMR-NB/WB support.

Added:
   trunk/libavcodec/libopencore-amr.c
      - copied, changed from r18880, trunk/libavcodec/libamr.c
Modified:
   trunk/Changelog
   trunk/LICENSE
   trunk/configure
   trunk/doc/general.texi
   trunk/libavcodec/Makefile
   trunk/libavcodec/allcodecs.c

Modified: trunk/Changelog
==============================================================================
--- trunk/Changelog	Fri Jun  5 13:04:03 2009	(r19116)
+++ trunk/Changelog	Fri Jun  5 14:32:40 2009	(r19117)
@@ -22,6 +22,7 @@ version <next>:
 - remaining GPL parts in AC-3 decoder converted to LGPL
 - QCP demuxer
 - SoX native format muxer and demuxer
+- AMR-NB decoding/encoding, AMR-WB decoding via OpenCORE libraries
 
 
 

Modified: trunk/LICENSE
==============================================================================
--- trunk/LICENSE	Fri Jun  5 13:04:03 2009	(r19116)
+++ trunk/LICENSE	Fri Jun  5 14:32:40 2009	(r19117)
@@ -39,6 +39,11 @@ Some external libraries, e.g. libx264, a
 conjunction with FFmpeg. They require --enable-gpl to be passed to configure
 as well.
 
+The OpenCORE external libraries are under the Apache License 2.0. That license
+is incompatible with the LGPL v2.1 and the GPL v2, but not with version 3 of
+those licenses. So to combine the OpenCORE libraries with FFmpeg, the license
+version needs to be upgraded by passing --enable-version3 to configure.
+
 The nonfree external libraries libamrnb, libamrwb and libfaac can be hooked up
 in FFmpeg. You need to pass --enable-nonfree to configure to enable them. Employ
 this option with care as FFmpeg then becomes nonfree and unredistributable.

Modified: trunk/configure
==============================================================================
--- trunk/configure	Fri Jun  5 13:04:03 2009	(r19116)
+++ trunk/configure	Fri Jun  5 14:32:40 2009	(r19117)
@@ -152,6 +152,8 @@ show_help(){
   echo "  --enable-bzlib           enable bzlib [autodetect]"
   echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec [no]"
   echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec [no]"
+  echo "  --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]"
+  echo "  --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]"
   echo "  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394"
   echo "                           and libraw1394 [no]"
   echo "  --enable-libdirac        enable Dirac support via libdirac [no]"
@@ -792,6 +794,8 @@ CONFIG_LIST="
     libgsm
     libmp3lame
     libnut
+    libopencore_amrnb
+    libopencore_amrwb
     libopenjpeg
     libschroedinger
     libspeex
@@ -1099,6 +1103,9 @@ libgsm_encoder_deps="libgsm"
 libgsm_ms_decoder_deps="libgsm"
 libgsm_ms_encoder_deps="libgsm"
 libmp3lame_encoder_deps="libmp3lame"
+libopencore_amrnb_decoder_deps="libopencore_amrnb"
+libopencore_amrnb_encoder_deps="libopencore_amrnb"
+libopencore_amrwb_decoder_deps="libopencore_amrwb"
 libopenjpeg_decoder_deps="libopenjpeg"
 libschroedinger_decoder_deps="libschroedinger"
 libschroedinger_encoder_deps="libschroedinger"
@@ -1761,6 +1768,9 @@ die_license_disabled nonfree libamr_nb
 die_license_disabled nonfree libamr_wb
 die_license_disabled nonfree libfaac
 
+die_license_disabled version3 libopencore_amrnb
+die_license_disabled version3 libopencore_amrwb
+
 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
 
 check_deps $ARCH_EXT_LIST
@@ -2065,6 +2075,8 @@ enabled libfaad    && require2 libfaad f
 enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
 enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
+enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
+enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
@@ -2373,6 +2385,8 @@ echo "libfaad dlopened          ${libfaa
 echo "libgsm enabled            ${libgsm-no}"
 echo "libmp3lame enabled        ${libmp3lame-no}"
 echo "libnut enabled            ${libnut-no}"
+echo "libopencore-amrnb support ${libopencore_amrnb-no}"
+echo "libopencore-amrwb support ${libopencore_amrwb-no}"
 echo "libopenjpeg enabled       ${libopenjpeg-no}"
 echo "libschroedinger enabled   ${libschroedinger-no}"
 echo "libspeex enabled          ${libspeex-no}"

Modified: trunk/doc/general.texi
==============================================================================
--- trunk/doc/general.texi	Fri Jun  5 13:04:03 2009	(r19116)
+++ trunk/doc/general.texi	Fri Jun  5 14:32:40 2009	(r19117)
@@ -18,7 +18,22 @@ explicitly requested by passing the appr
 
 AMR comes in two different flavors, wideband and narrowband. FFmpeg can make
 use of the AMR wideband (floating-point mode) and the AMR narrowband
-(floating-point mode) reference decoders and encoders.
+(floating-point mode) reference decoders and encoders (libamr) as well as
+the OpenCORE libraries for AMR-NB decoding/encoding and AMR-WB decoding.
+
+ at subsection OpenCORE
+
+Go to @url{http://gitorious.org/opencore-amr/} and follow the instructions for
+installing the libraries. Then pass @code{--enable-libopencore-amrnb} and/or
+ at code{--enable-libopencore-amrwb} to configure to enable the libraries.
+
+Note that OpenCORE is under the Apache License 2.0 (see
+ at url{http://www.apache.org/licenses/LICENSE-2.0} for details), which is
+incompatible with the LGPL version 2.1 and GPL version 2. You have to
+upgrade FFmpeg's license to LGPL version 3 (or if you have enabled
+GPL components, GPL version 3) to use it.
+
+ at subsection libamr
 
 Go to @url{http://www.penguin.cz/~utx/amr} and follow the instructions for
 installing the libraries. Then pass @code{--enable-libamr-nb} and/or
@@ -519,9 +534,10 @@ following image formats are supported:
     @tab Used in Westwood Studios games like Command and Conquer.
 @item ADPCM Yamaha           @tab  X  @tab  X
 @item AMR-NB                 @tab  E  @tab  E
-    @tab supported through external library libamrnb
+    @tab supported through external libraries libamrnb and libopencore-amrnb
 @item AMR-WB                 @tab  E  @tab  E
-    @tab supported through external library libamrwb
+    @tab decoding supported through external libraries libamrwb and libopencore-amrwb,
+         encoding supported through external library libamrwb
 @item Apple lossless audio   @tab  X  @tab  X
     @tab QuickTime fourcc 'alac'
 @item Atrac 3                @tab     @tab  X

Modified: trunk/libavcodec/Makefile
==============================================================================
--- trunk/libavcodec/Makefile	Fri Jun  5 13:04:03 2009	(r19116)
+++ trunk/libavcodec/Makefile	Fri Jun  5 14:32:40 2009	(r19117)
@@ -385,6 +385,8 @@ OBJS-$(CONFIG_LIBFAAC)                 +
 OBJS-$(CONFIG_LIBFAAD)                 += libfaad.o
 OBJS-$(CONFIG_LIBGSM)                  += libgsm.o
 OBJS-$(CONFIG_LIBMP3LAME)              += libmp3lame.o
+OBJS-$(CONFIG_LIBOPENCORE_AMRNB)       += libopencore-amr.o
+OBJS-$(CONFIG_LIBOPENCORE_AMRWB)       += libopencore-amr.o
 OBJS-$(CONFIG_LIBOPENJPEG)             += libopenjpeg.o
 OBJS-$(CONFIG_LIBSCHROEDINGER_DECODER) += libschroedingerdec.o libschroedinger.o libdirac_libschro.o
 OBJS-$(CONFIG_LIBSCHROEDINGER_ENCODER) += libschroedingerenc.o libschroedinger.o libdirac_libschro.o

Modified: trunk/libavcodec/allcodecs.c
==============================================================================
--- trunk/libavcodec/allcodecs.c	Fri Jun  5 13:04:03 2009	(r19116)
+++ trunk/libavcodec/allcodecs.c	Fri Jun  5 14:32:40 2009	(r19117)
@@ -309,6 +309,8 @@ void avcodec_register_all(void)
     REGISTER_ENCDEC  (LIBGSM, libgsm);
     REGISTER_ENCDEC  (LIBGSM_MS, libgsm_ms);
     REGISTER_ENCODER (LIBMP3LAME, libmp3lame);
+    REGISTER_ENCDEC  (LIBOPENCORE_AMRNB, libopencore_amrnb);
+    REGISTER_DECODER (LIBOPENCORE_AMRWB, libopencore_amrwb);
     REGISTER_DECODER (LIBOPENJPEG, libopenjpeg);
     REGISTER_ENCDEC  (LIBSCHROEDINGER, libschroedinger);
     REGISTER_DECODER (LIBSPEEX, libspeex);

Copied and modified: trunk/libavcodec/libopencore-amr.c (from r18880, trunk/libavcodec/libamr.c)
==============================================================================
--- trunk/libavcodec/libamr.c	Wed May 20 10:57:32 2009	(r18880, copy source)
+++ trunk/libavcodec/libopencore-amr.c	Fri Jun  5 14:32:40 2009	(r19117)
@@ -19,42 +19,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
- /** @file
- * Adaptive Multi-Rate (AMR) Audio decoder stub.
- *
- * This code implements both an AMR-NarrowBand (AMR-NB) and an AMR-WideBand
- * (AMR-WB) audio encoder/decoder through external reference code from
- * http://www.3gpp.org/. The license of the code from 3gpp is unclear so you
- * have to download the code separately. Two versions exists: One fixed-point
- * and one floating-point. For some reason the float encoder is significantly
- * faster at least on a P4 1.5GHz (0.9s instead of 9.9s on a 30s audio clip
- * at MR102). Both float and fixed point are supported for AMR-NB, but only
- * float for AMR-WB.
- *
- * \section AMR-NB
- *
- * \subsection Float
- * The float version (default) can be downloaded from:
- * http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-610.zip
- *
- * \subsection Specification
- * The specification for AMR-NB can be found in TS 26.071
- * (http://www.3gpp.org/ftp/Specs/html-info/26071.htm) and some other
- * info at http://www.3gpp.org/ftp/Specs/html-info/26-series.htm.
- *
- * \section AMR-WB
- *
- * \subsection Float
- * The reference code can be downloaded from:
- * http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-600.zip
- *
- * \subsection Specification
- * The specification for AMR-WB can be found in TS 26.171
- * (http://www.3gpp.org/ftp/Specs/html-info/26171.htm) and some other
- * info at http://www.3gpp.org/ftp/Specs/html-info/26-series.htm.
- *
- */
-
 #include "avcodec.h"
 
 static void amr_decode_fix_avctx(AVCodecContext *avctx)
@@ -71,10 +35,10 @@ static void amr_decode_fix_avctx(AVCodec
     avctx->sample_fmt = SAMPLE_FMT_S16;
 }
 
-#if CONFIG_LIBAMR_NB
+#if CONFIG_LIBOPENCORE_AMRNB
 
-#include <amrnb/interf_dec.h>
-#include <amrnb/interf_enc.h>
+#include <opencore-amrnb/interf_dec.h>
+#include <opencore-amrnb/interf_enc.h>
 
 static const char nb_bitrate_unsupported[] =
     "bitrate not supported: use one of 4.75k, 5.15k, 5.9k, 6.7k, 7.4k, 7.95k, 10.2k or 12.2k\n";
@@ -175,8 +139,8 @@ static int amr_nb_decode_frame(AVCodecCo
     return packet_size;
 }
 
-AVCodec libamr_nb_decoder = {
-    "libamr_nb",
+AVCodec libopencore_amrnb_decoder = {
+    "libopencore_amrnb",
     CODEC_TYPE_AUDIO,
     CODEC_ID_AMR_NB,
     sizeof(AMRContext),
@@ -184,7 +148,7 @@ AVCodec libamr_nb_decoder = {
     NULL,
     amr_nb_decode_close,
     amr_nb_decode_frame,
-    .long_name = NULL_IF_CONFIG_SMALL("libamr-nb Adaptive Multi-Rate (AMR) Narrow-Band"),
+    .long_name = NULL_IF_CONFIG_SMALL("OpenCORE Adaptive Multi-Rate (AMR) Narrow-Band"),
 };
 
 static av_cold int amr_nb_encode_init(AVCodecContext *avctx)
@@ -249,8 +213,8 @@ static int amr_nb_encode_frame(AVCodecCo
     return written;
 }
 
-AVCodec libamr_nb_encoder = {
-    "libamr_nb",
+AVCodec libopencore_amrnb_encoder = {
+    "libopencore_amrnb",
     CODEC_TYPE_AUDIO,
     CODEC_ID_AMR_NB,
     sizeof(AMRContext),
@@ -259,21 +223,21 @@ AVCodec libamr_nb_encoder = {
     amr_nb_encode_close,
     NULL,
     .sample_fmts = (enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_NONE},
-    .long_name = NULL_IF_CONFIG_SMALL("libamr-nb Adaptive Multi-Rate (AMR) Narrow-Band"),
+    .long_name = NULL_IF_CONFIG_SMALL("OpenCORE Adaptive Multi-Rate (AMR) Narrow-Band"),
 };
 
 #endif
 
 /* -----------AMR wideband ------------*/
-#if CONFIG_LIBAMR_WB
+#if CONFIG_LIBOPENCORE_AMRWB
 
 #ifdef _TYPEDEF_H
 //To avoid duplicate typedefs from typedef in amr-nb
 #define typedef_h
 #endif
 
-#include <amrwb/dec_if.h>
-#include <amrwb/if_rom.h>
+#include <opencore-amrwb/dec_if.h>
+#include <opencore-amrwb/if_rom.h>
 
 static const char wb_bitrate_unsupported[] =
     "bitrate not supported: use one of 6.6k, 8.85k, 12.65k, 14.25k, 15.85k, 18.25k, 19.85k, 23.05k, or 23.85k\n";
@@ -291,101 +255,6 @@ typedef struct AMRWBContext {
     Word16 allow_dtx;
 } AMRWBContext;
 
-#if CONFIG_LIBAMR_WB_ENCODER
-
-#include <amrwb/enc_if.h>
-
-static int getWBBitrateMode(int bitrate)
-{
-    /* make the correspondance between bitrate and mode */
-    AMRWB_bitrates rates[] = { { 6600, 0},
-                               { 8850, 1},
-                               {12650, 2},
-                               {14250, 3},
-                               {15850, 4},
-                               {18250, 5},
-                               {19850, 6},
-                               {23050, 7},
-                               {23850, 8}, };
-    int i;
-
-    for (i = 0; i < 9; i++)
-        if (rates[i].rate == bitrate)
-            return rates[i].mode;
-    /* no bitrate matching, return an error */
-    return -1;
-}
-
-static av_cold int amr_wb_encode_init(AVCodecContext *avctx)
-{
-    AMRWBContext *s = avctx->priv_data;
-
-    s->frameCount = 0;
-
-    if (avctx->sample_rate != 16000) {
-        av_log(avctx, AV_LOG_ERROR, "Only 16000Hz sample rate supported\n");
-        return -1;
-    }
-
-    if (avctx->channels != 1) {
-        av_log(avctx, AV_LOG_ERROR, "Only mono supported\n");
-        return -1;
-    }
-
-    if ((s->mode = getWBBitrateMode(avctx->bit_rate)) < 0) {
-        av_log(avctx, AV_LOG_ERROR, wb_bitrate_unsupported);
-        return -1;
-    }
-
-    avctx->frame_size  = 320;
-    avctx->coded_frame = avcodec_alloc_frame();
-
-    s->state     = E_IF_init();
-    s->allow_dtx = 0;
-
-    return 0;
-}
-
-static int amr_wb_encode_close(AVCodecContext *avctx)
-{
-    AMRWBContext *s = avctx->priv_data;
-
-    E_IF_exit(s->state);
-    av_freep(&avctx->coded_frame);
-    s->frameCount++;
-    return 0;
-}
-
-static int amr_wb_encode_frame(AVCodecContext *avctx,
-                               unsigned char *frame/*out*/,
-                               int buf_size, void *data/*in*/)
-{
-    AMRWBContext *s = avctx->priv_data;
-    int size;
-
-    if ((s->mode = getWBBitrateMode(avctx->bit_rate)) < 0) {
-        av_log(avctx, AV_LOG_ERROR, wb_bitrate_unsupported);
-        return -1;
-    }
-    size = E_IF_encode(s->state, s->mode, data, frame, s->allow_dtx);
-    return size;
-}
-
-AVCodec libamr_wb_encoder = {
-    "libamr_wb",
-    CODEC_TYPE_AUDIO,
-    CODEC_ID_AMR_WB,
-    sizeof(AMRWBContext),
-    amr_wb_encode_init,
-    amr_wb_encode_frame,
-    amr_wb_encode_close,
-    NULL,
-    .sample_fmts = (enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_NONE},
-    .long_name = NULL_IF_CONFIG_SMALL("libamr-wb Adaptive Multi-Rate (AMR) Wide-Band"),
-};
-
-#endif
-
 static av_cold int amr_wb_decode_init(AVCodecContext *avctx)
 {
     AMRWBContext *s = avctx->priv_data;
@@ -441,8 +310,8 @@ static int amr_wb_decode_close(AVCodecCo
     return 0;
 }
 
-AVCodec libamr_wb_decoder = {
-    "libamr_wb",
+AVCodec libopencore_amrwb_decoder = {
+    "libopencore_amrwb",
     CODEC_TYPE_AUDIO,
     CODEC_ID_AMR_WB,
     sizeof(AMRWBContext),
@@ -450,7 +319,7 @@ AVCodec libamr_wb_decoder = {
     NULL,
     amr_wb_decode_close,
     amr_wb_decode_frame,
-    .long_name = NULL_IF_CONFIG_SMALL("libamr-wb Adaptive Multi-Rate (AMR) Wide-Band"),
+    .long_name = NULL_IF_CONFIG_SMALL("OpenCORE Adaptive Multi-Rate (AMR) Wide-Band"),
 };
 
-#endif //CONFIG_LIBAMR_WB
+#endif /* CONFIG_LIBOPENCORE_AMRWB */



More information about the ffmpeg-cvslog mailing list