* Simple free lossless/lossy audio codec
* Copyright (c) 2004 Alex Beregszaszi
*
- * This library is free software; you can redistribute it and/or
+ * 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 of the License, or (at your option) any later version.
+ * version 2.1 of the License, or (at your option) any later version.
*
- * This library is distributed in the hope that it will be useful,
+ * 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 this library; if not, write to the Free Software
+ * License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "avcodec.h"
return x;
}
+#if defined(CONFIG_SONIC_ENCODER) || defined(CONFIG_SONIC_LS_ENCODER)
// Heavily modified Levinson-Durbin algorithm which
// copes better with quantization, and calculates the
// actual whitened result as it goes.
av_free(state);
}
+#endif /* defined(CONFIG_SONIC_ENCODER) || defined(CONFIG_SONIC_LS_ENCODER) */
-static int samplerate_table[] =
+static const int samplerate_table[] =
{ 44100, 22050, 11025, 96000, 48000, 32000, 24000, 16000, 8000 };
-#ifdef CONFIG_ENCODERS
-
+#if defined(CONFIG_SONIC_ENCODER) || defined(CONFIG_SONIC_LS_ENCODER)
static inline int code_samplerate(int samplerate)
{
switch (samplerate)
return -1;
}
-static int sonic_encode_init(AVCodecContext *avctx)
+static av_cold int sonic_encode_init(AVCodecContext *avctx)
{
SonicContext *s = avctx->priv_data;
PutBitContext pb;
avctx->coded_frame = avcodec_alloc_frame();
if (!avctx->coded_frame)
- return -ENOMEM;
+ return AVERROR(ENOMEM);
avctx->coded_frame->key_frame = 1;
avctx->frame_size = s->block_align*s->downsampling;
return 0;
}
-static int sonic_encode_close(AVCodecContext *avctx)
+static av_cold int sonic_encode_close(AVCodecContext *avctx)
{
SonicContext *s = avctx->priv_data;
int i;
flush_put_bits(&pb);
return (put_bits_count(&pb)+7)/8;
}
-#endif //CONFIG_ENCODERS
+#endif /* defined(CONFIG_SONIC_ENCODER) || defined(CONFIG_SONIC_LS_ENCODER) */
-static int sonic_decode_init(AVCodecContext *avctx)
+#ifdef CONFIG_SONIC_DECODER
+static av_cold int sonic_decode_init(AVCodecContext *avctx)
{
SonicContext *s = avctx->priv_data;
GetBitContext gb;
}
s->int_samples = av_mallocz(4* s->frame_size);
+ avctx->sample_fmt = SAMPLE_FMT_S16;
return 0;
}
-static int sonic_decode_close(AVCodecContext *avctx)
+static av_cold int sonic_decode_close(AVCodecContext *avctx)
{
SonicContext *s = avctx->priv_data;
int i;
static int sonic_decode_frame(AVCodecContext *avctx,
void *data, int *data_size,
- uint8_t *buf, int buf_size)
+ const uint8_t *buf, int buf_size)
{
SonicContext *s = avctx->priv_data;
GetBitContext gb;
// internal -> short
for (i = 0; i < s->frame_size; i++)
- {
- if (s->int_samples[i] > 32767)
- samples[i] = 32767;
- else if (s->int_samples[i] < -32768)
- samples[i] = -32768;
- else
- samples[i] = s->int_samples[i];
- }
+ samples[i] = av_clip_int16(s->int_samples[i]);
align_get_bits(&gb);
return (get_bits_count(&gb)+7)/8;
}
+#endif /* CONFIG_SONIC_DECODER */
-#ifdef CONFIG_ENCODERS
+#ifdef CONFIG_SONIC_ENCODER
AVCodec sonic_encoder = {
"sonic",
CODEC_TYPE_AUDIO,
sonic_encode_frame,
sonic_encode_close,
NULL,
+ .long_name = NULL_IF_CONFIG_SMALL("Sonic"),
};
+#endif
+#ifdef CONFIG_SONIC_LS_ENCODER
AVCodec sonic_ls_encoder = {
"sonicls",
CODEC_TYPE_AUDIO,
sonic_encode_frame,
sonic_encode_close,
NULL,
+ .long_name = NULL_IF_CONFIG_SMALL("Sonic lossless"),
};
#endif
-#ifdef CONFIG_DECODERS
+#ifdef CONFIG_SONIC_DECODER
AVCodec sonic_decoder = {
"sonic",
CODEC_TYPE_AUDIO,
NULL,
sonic_decode_close,
sonic_decode_frame,
+ .long_name = NULL_IF_CONFIG_SMALL("Sonic"),
};
#endif