summaryrefslogtreecommitdiff
path: root/ffmpeg/libavcodec/libaacplus.c
diff options
context:
space:
mode:
Diffstat (limited to 'ffmpeg/libavcodec/libaacplus.c')
-rw-r--r--ffmpeg/libavcodec/libaacplus.c46
1 files changed, 23 insertions, 23 deletions
diff --git a/ffmpeg/libavcodec/libaacplus.c b/ffmpeg/libavcodec/libaacplus.c
index 05c9e38..545e240 100644
--- a/ffmpeg/libavcodec/libaacplus.c
+++ b/ffmpeg/libavcodec/libaacplus.c
@@ -43,42 +43,35 @@ static av_cold int aacPlus_encode_init(AVCodecContext *avctx)
/* number of channels */
if (avctx->channels < 1 || avctx->channels > 2) {
av_log(avctx, AV_LOG_ERROR, "encoding %d channel(s) is not allowed\n", avctx->channels);
- return -1;
+ return AVERROR(EINVAL);
+ }
+
+ if (avctx->profile != FF_PROFILE_AAC_LOW && avctx->profile != FF_PROFILE_UNKNOWN) {
+ av_log(avctx, AV_LOG_ERROR, "invalid AAC profile: %d, only LC supported\n", avctx->profile);
+ return AVERROR(EINVAL);
}
s->aacplus_handle = aacplusEncOpen(avctx->sample_rate, avctx->channels,
&s->samples_input, &s->max_output_bytes);
- if(!s->aacplus_handle) {
- av_log(avctx, AV_LOG_ERROR, "can't open encoder\n");
- return -1;
+ if (!s->aacplus_handle) {
+ av_log(avctx, AV_LOG_ERROR, "can't open encoder\n");
+ return AVERROR(EINVAL);
}
/* check aacplus version */
aacplus_cfg = aacplusEncGetCurrentConfiguration(s->aacplus_handle);
- /* put the options in the configuration struct */
- if(avctx->profile != FF_PROFILE_AAC_LOW && avctx->profile != FF_PROFILE_UNKNOWN) {
- av_log(avctx, AV_LOG_ERROR, "invalid AAC profile: %d, only LC supported\n", avctx->profile);
- aacplusEncClose(s->aacplus_handle);
- return -1;
- }
-
aacplus_cfg->bitRate = avctx->bit_rate;
aacplus_cfg->bandWidth = avctx->cutoff;
aacplus_cfg->outputFormat = !(avctx->flags & CODEC_FLAG_GLOBAL_HEADER);
- aacplus_cfg->inputFormat = AACPLUS_INPUT_16BIT;
+ aacplus_cfg->inputFormat = avctx->sample_fmt == AV_SAMPLE_FMT_FLT ? AACPLUS_INPUT_FLOAT : AACPLUS_INPUT_16BIT;
if (!aacplusEncSetConfiguration(s->aacplus_handle, aacplus_cfg)) {
av_log(avctx, AV_LOG_ERROR, "libaacplus doesn't support this output format!\n");
- return -1;
+ return AVERROR(EINVAL);
}
avctx->frame_size = s->samples_input / avctx->channels;
-#if FF_API_OLD_ENCODE_AUDIO
- avctx->coded_frame= avcodec_alloc_frame();
- avctx->coded_frame->key_frame= 1;
-#endif
-
/* Set decoder specific info */
avctx->extradata_size = 0;
if (avctx->flags & CODEC_FLAG_GLOBAL_HEADER) {
@@ -118,17 +111,20 @@ static av_cold int aacPlus_encode_close(AVCodecContext *avctx)
{
aacPlusAudioContext *s = avctx->priv_data;
-#if FF_API_OLD_ENCODE_AUDIO
- av_freep(&avctx->coded_frame);
-#endif
av_freep(&avctx->extradata);
-
aacplusEncClose(s->aacplus_handle);
+
return 0;
}
+static const AVProfile profiles[] = {
+ { FF_PROFILE_AAC_LOW, "LC" },
+ { FF_PROFILE_UNKNOWN },
+};
+
AVCodec ff_libaacplus_encoder = {
.name = "libaacplus",
+ .long_name = NULL_IF_CONFIG_SMALL("libaacplus AAC+ (Advanced Audio Codec with SBR+PS)"),
.type = AVMEDIA_TYPE_AUDIO,
.id = AV_CODEC_ID_AAC,
.priv_data_size = sizeof(aacPlusAudioContext),
@@ -136,6 +132,10 @@ AVCodec ff_libaacplus_encoder = {
.encode2 = aacPlus_encode_frame,
.close = aacPlus_encode_close,
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
+ AV_SAMPLE_FMT_FLT,
AV_SAMPLE_FMT_NONE },
- .long_name = NULL_IF_CONFIG_SMALL("libaacplus AAC+ (Advanced Audio Codec with SBR+PS)"),
+ .profiles = profiles,
+ .channel_layouts = (const uint64_t[]) { AV_CH_LAYOUT_MONO,
+ AV_CH_LAYOUT_STEREO,
+ 0 },
};