Browse code

lavc: remove libfaac wrapper

There is really no need for two aac wrappers, we already have
libfdk-aac which is better. Not to mention that faac doesn't
even support HEv1, or HEv2. It's also under a license which is
unusable for distribution, so it would only be useful to people
who will compile their own ffmpeg, only use it themselves (which
at that point should just use fdk-aac).

Signed-off-by: Josh de Kock <josh@itanimul.li>

Josh de Kock authored on 2016/09/30 05:54:42
Showing 11 changed files
... ...
@@ -36,6 +36,7 @@ version <next>:
36 36
 - sdl2 support for ffplay
37 37
 - sdl1 output device and sdl1 support removed
38 38
 - extended mov edit list support
39
+- libfaac encoder removed
39 40
 
40 41
 
41 42
 version 3.1:
... ...
@@ -115,8 +115,6 @@ The Fraunhofer FDK AAC and OpenSSL libraries are under licenses which are
115 115
 incompatible with the GPLv2 and v3. To the best of our knowledge, they are
116 116
 compatible with the LGPL.
117 117
 
118
-The FAAC library is incompatible with all versions of GPL and LGPL.
119
-
120 118
 The NVENC library, while its header file is licensed under the compatible MIT
121 119
 license, requires a proprietary binary blob at run time, and is deemed to be
122 120
 incompatible with the GPL. We are not certain if it is compatible with the
... ...
@@ -225,7 +225,6 @@ External library support:
225 225
                            and libraw1394 [no]
226 226
   --enable-libebur128      enable libebur128 for EBU R128 measurement,
227 227
                            needed for loudnorm filter [no]
228
-  --enable-libfaac         enable AAC encoding via libfaac [no]
229 228
   --enable-libfdk-aac      enable AAC de/encoding via libfdk-aac [no]
230 229
   --enable-libflite        enable flite (voice synthesis) support via libflite [no]
231 230
   --enable-libfontconfig   enable libfontconfig, useful for drawtext filter [no]
... ...
@@ -1488,7 +1487,6 @@ EXTERNAL_LIBRARY_LIST="
1488 1488
     libcelt
1489 1489
     libdc1394
1490 1490
     libebur128
1491
-    libfaac
1492 1491
     libfdk_aac
1493 1492
     libflite
1494 1493
     libfontconfig
... ...
@@ -2773,8 +2771,6 @@ pcm_mulaw_at_encoder_select="audio_frame_queue"
2773 2773
 chromaprint_muxer_deps="chromaprint"
2774 2774
 h264_videotoolbox_encoder_deps="videotoolbox_encoder pthreads"
2775 2775
 libcelt_decoder_deps="libcelt"
2776
-libfaac_encoder_deps="libfaac"
2777
-libfaac_encoder_select="audio_frame_queue"
2778 2776
 libfdk_aac_decoder_deps="libfdk_aac"
2779 2777
 libfdk_aac_encoder_deps="libfdk_aac"
2780 2778
 libfdk_aac_encoder_select="audio_frame_queue"
... ...
@@ -5072,7 +5068,6 @@ die_license_disabled gpl x11grab
5072 5072
 
5073 5073
 die_license_disabled nonfree cuda
5074 5074
 die_license_disabled nonfree cuvid
5075
-die_license_disabled nonfree libfaac
5076 5075
 die_license_disabled nonfree libnpp
5077 5076
 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
5078 5077
 enabled gpl && die_license_disabled_gpl nonfree openssl
... ...
@@ -5682,7 +5677,6 @@ enabled libcelt           && require libcelt celt/celt.h celt_decode -lcelt0 &&
5682 5682
                                die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
5683 5683
 enabled libcaca           && require_pkg_config caca caca.h caca_create_canvas
5684 5684
 enabled libebur128        && require ebur128 ebur128.h ebur128_relative_threshold -lebur128
5685
-enabled libfaac           && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
5686 5685
 enabled libfdk_aac        && { use_pkg_config fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen ||
5687 5686
                                { require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac &&
5688 5687
                                  warn "using libfdk without pkg-config"; } }
... ...
@@ -612,111 +612,6 @@ and slightly improves compression.
612 612
 
613 613
 @end table
614 614
 
615
-@anchor{libfaac}
616
-@section libfaac
617
-
618
-libfaac AAC (Advanced Audio Coding) encoder wrapper.
619
-
620
-This encoder is of much lower quality and is more unstable than any other AAC
621
-encoders, so it's highly recommended to instead use other encoders, like
622
-@ref{aacenc,,the native FFmpeg AAC encoder}.
623
-
624
-This encoder also requires the presence of the libfaac headers and library
625
-during configuration. You need to explicitly configure the build with
626
-@code{--enable-libfaac --enable-nonfree}.
627
-
628
-@subsection Options
629
-
630
-The following shared FFmpeg codec options are recognized.
631
-
632
-The following options are supported by the libfaac wrapper. The
633
-@command{faac}-equivalent of the options are listed in parentheses.
634
-
635
-@table @option
636
-@item b (@emph{-b})
637
-Set bit rate in bits/s for ABR (Average Bit Rate) mode. If the bit rate
638
-is not explicitly specified, it is automatically set to a suitable
639
-value depending on the selected profile. @command{faac} bitrate is
640
-expressed in kilobits/s.
641
-
642
-Note that libfaac does not support CBR (Constant Bit Rate) but only
643
-ABR (Average Bit Rate).
644
-
645
-If VBR mode is enabled this option is ignored.
646
-
647
-@item ar (@emph{-R})
648
-Set audio sampling rate (in Hz).
649
-
650
-@item ac (@emph{-c})
651
-Set the number of audio channels.
652
-
653
-@item cutoff (@emph{-C})
654
-Set cutoff frequency. If not specified (or explicitly set to 0) it
655
-will use a value automatically computed by the library. Default value
656
-is 0.
657
-
658
-@item profile
659
-Set audio profile.
660
-
661
-The following profiles are recognized:
662
-@table @samp
663
-@item aac_main
664
-Main AAC (Main)
665
-
666
-@item aac_low
667
-Low Complexity AAC (LC)
668
-
669
-@item aac_ssr
670
-Scalable Sample Rate (SSR)
671
-
672
-@item aac_ltp
673
-Long Term Prediction (LTP)
674
-@end table
675
-
676
-If not specified it is set to @samp{aac_low}.
677
-
678
-@item flags +qscale
679
-Set constant quality VBR (Variable Bit Rate) mode.
680
-
681
-@item global_quality
682
-Set quality in VBR mode as an integer number of lambda units.
683
-
684
-Only relevant when VBR mode is enabled with @code{flags +qscale}.  The
685
-value is converted to QP units by dividing it by @code{FF_QP2LAMBDA},
686
-and used to set the quality value used by libfaac. A reasonable range
687
-for the option value in QP units is [10-500], the higher the value the
688
-higher the quality.
689
-
690
-@item q (@emph{-q})
691
-Enable VBR mode when set to a non-negative value, and set constant
692
-quality value as a double floating point value in QP units.
693
-
694
-The value sets the quality value used by libfaac. A reasonable range
695
-for the option value is [10-500], the higher the value the higher the
696
-quality.
697
-
698
-This option is valid only using the @command{ffmpeg} command-line
699
-tool. For library interface users, use @option{global_quality}.
700
-@end table
701
-
702
-@subsection Examples
703
-
704
-@itemize
705
-@item
706
-Use @command{ffmpeg} to convert an audio file to ABR 128 kbps AAC in an M4A (MP4)
707
-container:
708
-@example
709
-ffmpeg -i input.wav -codec:a libfaac -b:a 128k -output.m4a
710
-@end example
711
-
712
-@item
713
-Use @command{ffmpeg} to convert an audio file to VBR AAC, using the
714
-LTP AAC profile:
715
-@example
716
-ffmpeg -i input.wav -c:a libfaac -profile:a aac_ltp -q:a 100 output.m4a
717
-@end example
718
-@end itemize
719
-
720 615
 @anchor{libfdk-aac-enc}
721 616
 @section libfdk_aac
722 617
 
... ...
@@ -317,7 +317,7 @@ StartSendOnKey
317 317
 #AVPresetVideo baseline
318 318
 #AVOptionVideo flags +global_header
319 319
 #
320
-#AudioCodec libfaac
320
+#AudioCodec aac
321 321
 #AudioBitRate 32
322 322
 #AudioChannels 2
323 323
 #AudioSampleRate 22050
... ...
@@ -887,7 +887,7 @@ following image formats are supported:
887 887
 @item 8SVX exponential       @tab     @tab  X
888 888
 @item 8SVX fibonacci         @tab     @tab  X
889 889
 @item AAC                    @tab EX  @tab  X
890
-    @tab encoding supported through internal encoder and external libraries libfaac and libfdk-aac
890
+    @tab encoding supported through internal encoder and external library libfdk-aac
891 891
 @item AAC+                   @tab  E  @tab  IX
892 892
     @tab encoding supported through external library libfdk-aac
893 893
 @item AC-3                   @tab IX  @tab  IX
... ...
@@ -1437,9 +1437,9 @@ ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_fr
1437 1437
 
1438 1438
 @item
1439 1439
 Convert the @file{in.mkv} to TS segments using the @code{libx264}
1440
-and @code{libfaac} encoders:
1440
+and @code{aac} encoders:
1441 1441
 @example
1442
-ffmpeg -i in.mkv -map 0 -codec:v libx264 -codec:a libfaac -f ssegment -segment_list out.list out%03d.ts
1442
+ffmpeg -i in.mkv -map 0 -codec:v libx264 -codec:a aac -f ssegment -segment_list out.list out%03d.ts
1443 1443
 @end example
1444 1444
 
1445 1445
 @item
... ...
@@ -314,7 +314,7 @@ These library packages are only available from
314 314
 @uref{http://sourceware.org/cygwinports/, Cygwin Ports}:
315 315
 
316 316
 @example
317
-yasm, libSDL-devel, libfaac-devel, libgsm-devel, libmp3lame-devel,
317
+yasm, libSDL-devel, libgsm-devel, libmp3lame-devel,
318 318
 libschroedinger1.0-devel, speex-devel, libtheora-devel, libxvidcore-devel
319 319
 @end example
320 320
 
... ...
@@ -862,7 +862,6 @@ OBJS-$(CONFIG_ILBC_AT_ENCODER)            += audiotoolboxenc.o
862 862
 OBJS-$(CONFIG_PCM_ALAW_AT_ENCODER)        += audiotoolboxenc.o
863 863
 OBJS-$(CONFIG_PCM_MULAW_AT_ENCODER)       += audiotoolboxenc.o
864 864
 OBJS-$(CONFIG_LIBCELT_DECODER)            += libcelt_dec.o
865
-OBJS-$(CONFIG_LIBFAAC_ENCODER)            += libfaac.o
866 865
 OBJS-$(CONFIG_LIBFDK_AAC_DECODER)         += libfdk-aacdec.o
867 866
 OBJS-$(CONFIG_LIBFDK_AAC_ENCODER)         += libfdk-aacenc.o
868 867
 OBJS-$(CONFIG_LIBGSM_DECODER)             += libgsmdec.o
... ...
@@ -594,7 +594,6 @@ void avcodec_register_all(void)
594 594
     REGISTER_DECODER(QDMC_AT,           qdmc_at);
595 595
     REGISTER_DECODER(QDM2_AT,           qdm2_at);
596 596
     REGISTER_DECODER(LIBCELT,           libcelt);
597
-    REGISTER_ENCODER(LIBFAAC,           libfaac);
598 597
     REGISTER_ENCDEC (LIBFDK_AAC,        libfdk_aac);
599 598
     REGISTER_ENCDEC (LIBGSM,            libgsm);
600 599
     REGISTER_ENCDEC (LIBGSM_MS,         libgsm_ms);
601 600
deleted file mode 100644
... ...
@@ -1,248 +0,0 @@
1
-/*
2
- * Interface to libfaac for aac encoding
3
- * Copyright (c) 2002 Gildas Bazin <gbazin@netcourrier.com>
4
- *
5
- * This file is part of FFmpeg.
6
- *
7
- * FFmpeg is free software; you can redistribute it and/or
8
- * modify it under the terms of the GNU Lesser General Public
9
- * License as published by the Free Software Foundation; either
10
- * version 2.1 of the License, or (at your option) any later version.
11
- *
12
- * FFmpeg is distributed in the hope that it will be useful,
13
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
- * Lesser General Public License for more details.
16
- *
17
- * You should have received a copy of the GNU Lesser General Public
18
- * License along with FFmpeg; if not, write to the Free Software
19
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
- */
21
-
22
-/**
23
- * @file
24
- * Interface to libfaac for aac encoding.
25
- */
26
-
27
-#include <faac.h>
28
-
29
-#include "libavutil/channel_layout.h"
30
-#include "libavutil/common.h"
31
-#include "avcodec.h"
32
-#include "audio_frame_queue.h"
33
-#include "internal.h"
34
-
35
-
36
-/* libfaac has an encoder delay of 1024 samples */
37
-#define FAAC_DELAY_SAMPLES 1024
38
-
39
-typedef struct FaacAudioContext {
40
-    faacEncHandle faac_handle;
41
-    AudioFrameQueue afq;
42
-} FaacAudioContext;
43
-
44
-static av_cold int Faac_encode_close(AVCodecContext *avctx)
45
-{
46
-    FaacAudioContext *s = avctx->priv_data;
47
-
48
-    av_freep(&avctx->extradata);
49
-    ff_af_queue_close(&s->afq);
50
-
51
-    if (s->faac_handle)
52
-        faacEncClose(s->faac_handle);
53
-
54
-    return 0;
55
-}
56
-
57
-static const int channel_maps[][6] = {
58
-    { 2, 0, 1 },          //< C L R
59
-    { 2, 0, 1, 3 },       //< C L R Cs
60
-    { 2, 0, 1, 3, 4 },    //< C L R Ls Rs
61
-    { 2, 0, 1, 4, 5, 3 }, //< C L R Ls Rs LFE
62
-};
63
-
64
-static av_cold int Faac_encode_init(AVCodecContext *avctx)
65
-{
66
-    FaacAudioContext *s = avctx->priv_data;
67
-    faacEncConfigurationPtr faac_cfg;
68
-    unsigned long samples_input, max_bytes_output;
69
-    int ret;
70
-
71
-    /* number of channels */
72
-    if (avctx->channels < 1 || avctx->channels > 6) {
73
-        av_log(avctx, AV_LOG_ERROR, "encoding %d channel(s) is not allowed\n", avctx->channels);
74
-        ret = AVERROR(EINVAL);
75
-        goto error;
76
-    }
77
-
78
-    s->faac_handle = faacEncOpen(avctx->sample_rate,
79
-                                 avctx->channels,
80
-                                 &samples_input, &max_bytes_output);
81
-    if (!s->faac_handle) {
82
-        av_log(avctx, AV_LOG_ERROR, "error in faacEncOpen()\n");
83
-        ret = AVERROR_UNKNOWN;
84
-        goto error;
85
-    }
86
-
87
-    /* check faac version */
88
-    faac_cfg = faacEncGetCurrentConfiguration(s->faac_handle);
89
-    if (faac_cfg->version != FAAC_CFG_VERSION) {
90
-        av_log(avctx, AV_LOG_ERROR, "wrong libfaac version (compiled for: %d, using %d)\n", FAAC_CFG_VERSION, faac_cfg->version);
91
-        ret = AVERROR(EINVAL);
92
-        goto error;
93
-    }
94
-
95
-    /* put the options in the configuration struct */
96
-    switch(avctx->profile) {
97
-        case FF_PROFILE_AAC_MAIN:
98
-            faac_cfg->aacObjectType = MAIN;
99
-            break;
100
-        case FF_PROFILE_UNKNOWN:
101
-        case FF_PROFILE_AAC_LOW:
102
-            faac_cfg->aacObjectType = LOW;
103
-            break;
104
-        case FF_PROFILE_AAC_SSR:
105
-            faac_cfg->aacObjectType = SSR;
106
-            break;
107
-        case FF_PROFILE_AAC_LTP:
108
-            faac_cfg->aacObjectType = LTP;
109
-            break;
110
-        default:
111
-            av_log(avctx, AV_LOG_ERROR, "invalid AAC profile\n");
112
-            ret = AVERROR(EINVAL);
113
-            goto error;
114
-    }
115
-    faac_cfg->mpegVersion = MPEG4;
116
-    faac_cfg->useTns = 0;
117
-    faac_cfg->allowMidside = 1;
118
-    faac_cfg->bitRate = avctx->bit_rate / avctx->channels;
119
-    faac_cfg->bandWidth = avctx->cutoff;
120
-    if(avctx->flags & AV_CODEC_FLAG_QSCALE) {
121
-        faac_cfg->bitRate = 0;
122
-        faac_cfg->quantqual = avctx->global_quality / FF_QP2LAMBDA;
123
-    }
124
-    faac_cfg->outputFormat = 1;
125
-    faac_cfg->inputFormat = FAAC_INPUT_16BIT;
126
-    if (avctx->channels > 2)
127
-        memcpy(faac_cfg->channel_map, channel_maps[avctx->channels-3],
128
-               avctx->channels * sizeof(int));
129
-
130
-    avctx->frame_size = samples_input / avctx->channels;
131
-
132
-    /* Set decoder specific info */
133
-    avctx->extradata_size = 0;
134
-    if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) {
135
-
136
-        unsigned char *buffer = NULL;
137
-        unsigned long decoder_specific_info_size;
138
-
139
-        if (!faacEncGetDecoderSpecificInfo(s->faac_handle, &buffer,
140
-                                           &decoder_specific_info_size)) {
141
-            avctx->extradata = av_malloc(decoder_specific_info_size + AV_INPUT_BUFFER_PADDING_SIZE);
142
-            if (!avctx->extradata) {
143
-                ret = AVERROR(ENOMEM);
144
-                goto error;
145
-            }
146
-            avctx->extradata_size = decoder_specific_info_size;
147
-            memcpy(avctx->extradata, buffer, avctx->extradata_size);
148
-            faac_cfg->outputFormat = 0;
149
-        }
150
-        free(buffer);
151
-    }
152
-
153
-    if (!faacEncSetConfiguration(s->faac_handle, faac_cfg)) {
154
-        int i;
155
-        for (i = avctx->bit_rate/1000; i ; i--) {
156
-            faac_cfg->bitRate = 1000*i / avctx->channels;
157
-            if (faacEncSetConfiguration(s->faac_handle, faac_cfg))
158
-                break;
159
-        }
160
-        if (!i) {
161
-            av_log(avctx, AV_LOG_ERROR, "libfaac doesn't support this output format!\n");
162
-            ret = AVERROR(EINVAL);
163
-            goto error;
164
-        } else {
165
-            avctx->bit_rate = 1000*i;
166
-            av_log(avctx, AV_LOG_WARNING, "libfaac doesn't support the specified bitrate, using %dkbit/s instead\n", i);
167
-        }
168
-    }
169
-
170
-    avctx->initial_padding = FAAC_DELAY_SAMPLES;
171
-    ff_af_queue_init(avctx, &s->afq);
172
-
173
-    return 0;
174
-error:
175
-    Faac_encode_close(avctx);
176
-    return ret;
177
-}
178
-
179
-static int Faac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
180
-                             const AVFrame *frame, int *got_packet_ptr)
181
-{
182
-    FaacAudioContext *s = avctx->priv_data;
183
-    int bytes_written, ret;
184
-    int num_samples  = frame ? frame->nb_samples : 0;
185
-    void *samples    = frame ? frame->data[0]    : NULL;
186
-
187
-    if ((ret = ff_alloc_packet2(avctx, avpkt, (7 + 768) * avctx->channels, 0)) < 0)
188
-        return ret;
189
-
190
-    bytes_written = faacEncEncode(s->faac_handle, samples,
191
-                                  num_samples * avctx->channels,
192
-                                  avpkt->data, avpkt->size);
193
-    if (bytes_written < 0) {
194
-        av_log(avctx, AV_LOG_ERROR, "faacEncEncode() error\n");
195
-        return bytes_written;
196
-    }
197
-
198
-    /* add current frame to the queue */
199
-    if (frame) {
200
-        if ((ret = ff_af_queue_add(&s->afq, frame)) < 0)
201
-            return ret;
202
-    }
203
-
204
-    if (!bytes_written)
205
-        return 0;
206
-
207
-    /* Get the next frame pts/duration */
208
-    ff_af_queue_remove(&s->afq, avctx->frame_size, &avpkt->pts,
209
-                       &avpkt->duration);
210
-
211
-    avpkt->size = bytes_written;
212
-    *got_packet_ptr = 1;
213
-    return 0;
214
-}
215
-
216
-static const AVProfile profiles[] = {
217
-    { FF_PROFILE_AAC_MAIN, "Main" },
218
-    { FF_PROFILE_AAC_LOW,  "LC"   },
219
-    { FF_PROFILE_AAC_SSR,  "SSR"  },
220
-    { FF_PROFILE_AAC_LTP,  "LTP"  },
221
-    { FF_PROFILE_UNKNOWN },
222
-};
223
-
224
-static const uint64_t faac_channel_layouts[] = {
225
-    AV_CH_LAYOUT_MONO,
226
-    AV_CH_LAYOUT_STEREO,
227
-    AV_CH_LAYOUT_SURROUND,
228
-    AV_CH_LAYOUT_4POINT0,
229
-    AV_CH_LAYOUT_5POINT0_BACK,
230
-    AV_CH_LAYOUT_5POINT1_BACK,
231
-    0
232
-};
233
-
234
-AVCodec ff_libfaac_encoder = {
235
-    .name           = "libfaac",
236
-    .long_name      = NULL_IF_CONFIG_SMALL("libfaac AAC (Advanced Audio Coding)"),
237
-    .type           = AVMEDIA_TYPE_AUDIO,
238
-    .id             = AV_CODEC_ID_AAC,
239
-    .priv_data_size = sizeof(FaacAudioContext),
240
-    .init           = Faac_encode_init,
241
-    .encode2        = Faac_encode_frame,
242
-    .close          = Faac_encode_close,
243
-    .capabilities   = AV_CODEC_CAP_SMALL_LAST_FRAME | AV_CODEC_CAP_DELAY,
244
-    .sample_fmts    = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
245
-                                                     AV_SAMPLE_FMT_NONE },
246
-    .profiles       = NULL_IF_CONFIG_SMALL(profiles),
247
-    .channel_layouts = faac_channel_layouts,
248
-};