mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
avcodec: Remove libvo-aacenc support.
The internal encoder is superior to libvo-aacenc. Signed-off-by: Timothy Gu <timothygu99@gmail.com>
This commit is contained in:
parent
9ba54c1b82
commit
e07e88cd82
@ -60,7 +60,7 @@ version <next>:
|
||||
- convolution filter
|
||||
- libquvi support removed
|
||||
- support for dvaudio in wav and avi
|
||||
- libaacplus support removed
|
||||
- libaacplus and libvo-aacenc support removed
|
||||
|
||||
|
||||
version 2.8:
|
||||
|
6
configure
vendored
6
configure
vendored
@ -254,7 +254,6 @@ External library support:
|
||||
--enable-libutvideo enable Ut Video encoding and decoding via libutvideo [no]
|
||||
--enable-libv4l2 enable libv4l2/v4l-utils [no]
|
||||
--enable-libvidstab enable video stabilization using vid.stab [no]
|
||||
--enable-libvo-aacenc enable AAC encoding via libvo-aacenc [no]
|
||||
--enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no]
|
||||
--enable-libvorbis enable Vorbis en/decoding via libvorbis,
|
||||
native implementation exists [no]
|
||||
@ -1479,7 +1478,6 @@ EXTERNAL_LIBRARY_LIST="
|
||||
libutvideo
|
||||
libv4l2
|
||||
libvidstab
|
||||
libvo_aacenc
|
||||
libvo_amrwbenc
|
||||
libvorbis
|
||||
libvpx
|
||||
@ -2641,8 +2639,6 @@ libtheora_encoder_deps="libtheora"
|
||||
libtwolame_encoder_deps="libtwolame"
|
||||
libutvideo_decoder_deps="libutvideo"
|
||||
libutvideo_encoder_deps="libutvideo"
|
||||
libvo_aacenc_encoder_deps="libvo_aacenc"
|
||||
libvo_aacenc_encoder_select="audio_frame_queue"
|
||||
libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
|
||||
libvorbis_decoder_deps="libvorbis"
|
||||
libvorbis_encoder_deps="libvorbis"
|
||||
@ -4894,7 +4890,6 @@ die_license_disabled version3 gmp
|
||||
die_license_disabled version3 libopencore_amrnb
|
||||
die_license_disabled version3 libopencore_amrwb
|
||||
die_license_disabled version3 libsmbclient
|
||||
die_license_disabled version3 libvo_aacenc
|
||||
die_license_disabled version3 libvo_amrwbenc
|
||||
|
||||
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
|
||||
@ -5519,7 +5514,6 @@ enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame
|
||||
enabled libutvideo && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
|
||||
enabled libv4l2 && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
|
||||
enabled libvidstab && require_pkg_config "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit
|
||||
enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
|
||||
enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
|
||||
enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
|
||||
|
||||
|
@ -1075,31 +1075,6 @@ Set MPEG audio original flag when set to 1. The default value is 0
|
||||
|
||||
@end table
|
||||
|
||||
@anchor{libvo-aacenc}
|
||||
@section libvo-aacenc
|
||||
|
||||
VisualOn AAC encoder.
|
||||
|
||||
Requires the presence of the libvo-aacenc headers and library during
|
||||
configuration. You need to explicitly configure the build with
|
||||
@code{--enable-libvo-aacenc --enable-version3}.
|
||||
|
||||
This encoder is considered to be worse than the
|
||||
@ref{aacenc,,native FFmpeg AAC encoder}, according to
|
||||
multiple sources.
|
||||
|
||||
@subsection Options
|
||||
|
||||
The VisualOn AAC encoder only support encoding AAC-LC and up to 2
|
||||
channels. It is also CBR-only.
|
||||
|
||||
@table @option
|
||||
|
||||
@item b
|
||||
Set bit rate in bits/s.
|
||||
|
||||
@end table
|
||||
|
||||
@section libvo-amrwbenc
|
||||
|
||||
VisualOn Adaptive Multi-Rate Wideband encoder.
|
||||
|
@ -53,14 +53,6 @@ instructions for installing the libraries.
|
||||
Then pass @code{--enable-libopencore-amrnb} and/or
|
||||
@code{--enable-libopencore-amrwb} to configure to enable them.
|
||||
|
||||
@subsection VisualOn AAC encoder library
|
||||
|
||||
FFmpeg can make use of the VisualOn AACenc library for AAC encoding.
|
||||
|
||||
Go to @url{http://sourceforge.net/projects/opencore-amr/} and follow the
|
||||
instructions for installing the library.
|
||||
Then pass @code{--enable-libvo-aacenc} to configure to enable it.
|
||||
|
||||
@subsection VisualOn AMR-WB encoder library
|
||||
|
||||
FFmpeg can make use of the VisualOn AMR-WBenc library for AMR-WB encoding.
|
||||
@ -881,8 +873,8 @@ following image formats are supported:
|
||||
@item Name @tab Encoding @tab Decoding @tab Comments
|
||||
@item 8SVX exponential @tab @tab X
|
||||
@item 8SVX fibonacci @tab @tab X
|
||||
@item AAC @tab E @tab X
|
||||
@tab encoding supported through external library libfaac, libfdk-aac and libvo-aacenc
|
||||
@item AAC @tab EX @tab X
|
||||
@tab encoding supported through internal encoder and external libraries libfaac and libfdk-aac
|
||||
@item AAC+ @tab E @tab IX
|
||||
@tab encoding supported through external library libfdk-aac
|
||||
@item AC-3 @tab IX @tab IX
|
||||
|
@ -832,7 +832,6 @@ OBJS-$(CONFIG_LIBTHEORA_ENCODER) += libtheoraenc.o
|
||||
OBJS-$(CONFIG_LIBTWOLAME_ENCODER) += libtwolame.o
|
||||
OBJS-$(CONFIG_LIBUTVIDEO_DECODER) += libutvideodec.o
|
||||
OBJS-$(CONFIG_LIBUTVIDEO_ENCODER) += libutvideoenc.o
|
||||
OBJS-$(CONFIG_LIBVO_AACENC_ENCODER) += libvo-aacenc.o mpeg4audio.o
|
||||
OBJS-$(CONFIG_LIBVO_AMRWBENC_ENCODER) += libvo-amrwbenc.o
|
||||
OBJS-$(CONFIG_LIBVORBIS_DECODER) += libvorbisdec.o
|
||||
OBJS-$(CONFIG_LIBVORBIS_ENCODER) += libvorbisenc.o \
|
||||
|
@ -578,7 +578,6 @@ void avcodec_register_all(void)
|
||||
REGISTER_ENCODER(LIBTHEORA, libtheora);
|
||||
REGISTER_ENCODER(LIBTWOLAME, libtwolame);
|
||||
REGISTER_ENCDEC (LIBUTVIDEO, libutvideo);
|
||||
REGISTER_ENCODER(LIBVO_AACENC, libvo_aacenc);
|
||||
REGISTER_ENCODER(LIBVO_AMRWBENC, libvo_amrwbenc);
|
||||
REGISTER_ENCDEC (LIBVORBIS, libvorbis);
|
||||
REGISTER_ENCDEC (LIBVPX_VP8, libvpx_vp8);
|
||||
|
@ -1,200 +0,0 @@
|
||||
/*
|
||||
* AAC encoder wrapper
|
||||
* Copyright (c) 2010 Martin Storsjo
|
||||
*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* FFmpeg is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with FFmpeg; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <vo-aacenc/voAAC.h>
|
||||
#include <vo-aacenc/cmnMemory.h>
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "audio_frame_queue.h"
|
||||
#include "internal.h"
|
||||
#include "mpeg4audio.h"
|
||||
|
||||
#define FRAME_SIZE 1024
|
||||
#define ENC_DELAY 1600
|
||||
|
||||
typedef struct AACContext {
|
||||
VO_AUDIO_CODECAPI codec_api;
|
||||
VO_HANDLE handle;
|
||||
VO_MEM_OPERATOR mem_operator;
|
||||
VO_CODEC_INIT_USERDATA user_data;
|
||||
VO_PBYTE end_buffer;
|
||||
AudioFrameQueue afq;
|
||||
int last_frame;
|
||||
int last_samples;
|
||||
} AACContext;
|
||||
|
||||
|
||||
static int aac_encode_close(AVCodecContext *avctx)
|
||||
{
|
||||
AACContext *s = avctx->priv_data;
|
||||
|
||||
s->codec_api.Uninit(s->handle);
|
||||
av_freep(&avctx->extradata);
|
||||
ff_af_queue_close(&s->afq);
|
||||
av_freep(&s->end_buffer);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static av_cold int aac_encode_init(AVCodecContext *avctx)
|
||||
{
|
||||
AACContext *s = avctx->priv_data;
|
||||
AACENC_PARAM params = { 0 };
|
||||
int index, ret;
|
||||
|
||||
avctx->frame_size = FRAME_SIZE;
|
||||
avctx->initial_padding = ENC_DELAY;
|
||||
s->last_frame = 2;
|
||||
ff_af_queue_init(avctx, &s->afq);
|
||||
|
||||
s->end_buffer = av_mallocz_array(avctx->channels, avctx->frame_size * 2);
|
||||
if (!s->end_buffer) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
goto error;
|
||||
}
|
||||
|
||||
voGetAACEncAPI(&s->codec_api);
|
||||
|
||||
s->mem_operator.Alloc = cmnMemAlloc;
|
||||
s->mem_operator.Copy = cmnMemCopy;
|
||||
s->mem_operator.Free = cmnMemFree;
|
||||
s->mem_operator.Set = cmnMemSet;
|
||||
s->mem_operator.Check = cmnMemCheck;
|
||||
s->user_data.memflag = VO_IMF_USERMEMOPERATOR;
|
||||
s->user_data.memData = &s->mem_operator;
|
||||
s->codec_api.Init(&s->handle, VO_AUDIO_CodingAAC, &s->user_data);
|
||||
|
||||
params.sampleRate = avctx->sample_rate;
|
||||
params.bitRate = avctx->bit_rate;
|
||||
params.nChannels = avctx->channels;
|
||||
params.adtsUsed = !(avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER);
|
||||
if (s->codec_api.SetParam(s->handle, VO_PID_AAC_ENCPARAM, ¶ms)
|
||||
!= VO_ERR_NONE) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Unable to set encoding parameters\n");
|
||||
ret = AVERROR(EINVAL);
|
||||
goto error;
|
||||
}
|
||||
|
||||
for (index = 0; index < 16; index++)
|
||||
if (avctx->sample_rate == avpriv_mpeg4audio_sample_rates[index])
|
||||
break;
|
||||
if (index == 16) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Unsupported sample rate %d\n",
|
||||
avctx->sample_rate);
|
||||
ret = AVERROR(ENOSYS);
|
||||
goto error;
|
||||
}
|
||||
if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) {
|
||||
avctx->extradata_size = 2;
|
||||
avctx->extradata = av_mallocz(avctx->extradata_size +
|
||||
AV_INPUT_BUFFER_PADDING_SIZE);
|
||||
if (!avctx->extradata) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
goto error;
|
||||
}
|
||||
|
||||
avctx->extradata[0] = 0x02 << 3 | index >> 1;
|
||||
avctx->extradata[1] = (index & 0x01) << 7 | avctx->channels << 3;
|
||||
}
|
||||
return 0;
|
||||
error:
|
||||
aac_encode_close(avctx);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
|
||||
const AVFrame *frame, int *got_packet_ptr)
|
||||
{
|
||||
AACContext *s = avctx->priv_data;
|
||||
VO_CODECBUFFER input = { 0 }, output = { 0 };
|
||||
VO_AUDIO_OUTPUTINFO output_info = { { 0 } };
|
||||
VO_PBYTE samples;
|
||||
int ret;
|
||||
|
||||
/* handle end-of-stream small frame and flushing */
|
||||
if (!frame) {
|
||||
if (s->last_frame <= 0)
|
||||
return 0;
|
||||
if (s->last_samples > 0 && s->last_samples < ENC_DELAY - FRAME_SIZE) {
|
||||
s->last_samples = 0;
|
||||
s->last_frame--;
|
||||
}
|
||||
s->last_frame--;
|
||||
memset(s->end_buffer, 0, 2 * avctx->channels * avctx->frame_size);
|
||||
samples = s->end_buffer;
|
||||
} else {
|
||||
if (frame->nb_samples < avctx->frame_size) {
|
||||
s->last_samples = frame->nb_samples;
|
||||
memcpy(s->end_buffer, frame->data[0], 2 * avctx->channels * frame->nb_samples);
|
||||
samples = s->end_buffer;
|
||||
} else {
|
||||
samples = (VO_PBYTE)frame->data[0];
|
||||
}
|
||||
/* add current frame to the queue */
|
||||
if ((ret = ff_af_queue_add(&s->afq, frame)) < 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if ((ret = ff_alloc_packet2(avctx, avpkt, FFMAX(8192, 768 * avctx->channels), 0)) < 0)
|
||||
return ret;
|
||||
|
||||
input.Buffer = samples;
|
||||
input.Length = 2 * avctx->channels * avctx->frame_size;
|
||||
output.Buffer = avpkt->data;
|
||||
output.Length = avpkt->size;
|
||||
|
||||
s->codec_api.SetInputData(s->handle, &input);
|
||||
if (s->codec_api.GetOutputData(s->handle, &output, &output_info)
|
||||
!= VO_ERR_NONE) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Unable to encode frame\n");
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
|
||||
/* Get the next frame pts/duration */
|
||||
ff_af_queue_remove(&s->afq, avctx->frame_size, &avpkt->pts,
|
||||
&avpkt->duration);
|
||||
|
||||
avpkt->size = output.Length;
|
||||
*got_packet_ptr = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* duplicated from avpriv_mpeg4audio_sample_rates to avoid shared build
|
||||
* failures */
|
||||
static const int mpeg4audio_sample_rates[16] = {
|
||||
96000, 88200, 64000, 48000, 44100, 32000,
|
||||
24000, 22050, 16000, 12000, 11025, 8000, 7350
|
||||
};
|
||||
|
||||
AVCodec ff_libvo_aacenc_encoder = {
|
||||
.name = "libvo_aacenc",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Android VisualOn AAC (Advanced Audio Coding)"),
|
||||
.type = AVMEDIA_TYPE_AUDIO,
|
||||
.id = AV_CODEC_ID_AAC,
|
||||
.priv_data_size = sizeof(AACContext),
|
||||
.init = aac_encode_init,
|
||||
.encode2 = aac_encode_frame,
|
||||
.close = aac_encode_close,
|
||||
.supported_samplerates = mpeg4audio_sample_rates,
|
||||
.capabilities = AV_CODEC_CAP_SMALL_LAST_FRAME | AV_CODEC_CAP_DELAY,
|
||||
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
|
||||
AV_SAMPLE_FMT_NONE },
|
||||
};
|
@ -29,8 +29,8 @@
|
||||
#include "libavutil/version.h"
|
||||
|
||||
#define LIBAVCODEC_VERSION_MAJOR 57
|
||||
#define LIBAVCODEC_VERSION_MINOR 22
|
||||
#define LIBAVCODEC_VERSION_MICRO 102
|
||||
#define LIBAVCODEC_VERSION_MINOR 23
|
||||
#define LIBAVCODEC_VERSION_MICRO 100
|
||||
|
||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||
LIBAVCODEC_VERSION_MINOR, \
|
||||
|
Loading…
Reference in New Issue
Block a user