*/
#include <limits.h>
-#include "libavutil/avassert.h"
#include "libavutil/channel_layout.h"
#include "libavutil/opt.h"
+
#include "avcodec.h"
+#include "bitstream.h"
#include "internal.h"
-#include "get_bits.h"
#include "put_bits.h"
/**
- * G.726 11bit float.
- * G.726 Standard uses rather odd 11bit floating point arithmentic for
+ * G.726 11-bit float.
+ * G.726 Standard uses rather odd 11-bit floating point arithmetic for
* numerous occasions. It's a mystery to me why they did it this way
- * instead of simply using 32bit integer arithmetic.
+ * instead of simply using 32-bit integer arithmetic.
*/
typedef struct Float11 {
- uint8_t sign; /**< 1bit sign */
- uint8_t exp; /**< 4bit exponent */
- uint8_t mant; /**< 6bit mantissa */
+ uint8_t sign; /**< 1 bit sign */
+ uint8_t exp; /**< 4 bits exponent */
+ uint8_t mant; /**< 6 bits mantissa */
} Float11;
static inline Float11* i2f(int i, Float11* f)
int code_size;
} G726Context;
-static const int quant_tbl16[] = /**< 16kbit/s 2bits per sample */
+static const int quant_tbl16[] = /**< 16kbit/s 2 bits per sample */
{ 260, INT_MAX };
static const int16_t iquant_tbl16[] =
{ 116, 365, 365, 116 };
static const uint8_t F_tbl16[] =
{ 0, 7, 7, 0 };
-static const int quant_tbl24[] = /**< 24kbit/s 3bits per sample */
+static const int quant_tbl24[] = /**< 24kbit/s 3 bits per sample */
{ 7, 217, 330, INT_MAX };
static const int16_t iquant_tbl24[] =
{ INT16_MIN, 135, 273, 373, 373, 273, 135, INT16_MIN };
static const uint8_t F_tbl24[] =
{ 0, 1, 2, 7, 7, 2, 1, 0 };
-static const int quant_tbl32[] = /**< 32kbit/s 4bits per sample */
+static const int quant_tbl32[] = /**< 32kbit/s 4 bits per sample */
{ -125, 79, 177, 245, 299, 348, 399, INT_MAX };
static const int16_t iquant_tbl32[] =
{ INT16_MIN, 4, 135, 213, 273, 323, 373, 425,
static const uint8_t F_tbl32[] =
{ 0, 0, 0, 1, 1, 1, 3, 7, 7, 3, 1, 1, 1, 0, 0, 0 };
-static const int quant_tbl40[] = /**< 40kbit/s 5bits per sample */
+static const int quant_tbl40[] = /**< 40kbit/s 5 bits per sample */
{ -122, -16, 67, 138, 197, 249, 297, 338,
377, 412, 444, 474, 501, 527, 552, INT_MAX };
static const int16_t iquant_tbl40[] =
/**
- * Para 4.2.2 page 18: Adaptive quantizer.
+ * Paragraph 4.2.2 page 18: Adaptive quantizer.
*/
static inline uint8_t quant(G726Context* c, int d)
{
}
/**
- * Para 4.2.3 page 22: Inverse adaptive quantizer.
+ * Paragraph 4.2.3 page 22: Inverse adaptive quantizer.
*/
static inline int16_t inverse_quant(G726Context* c, int i)
{
int dql, dex, dqt;
dql = c->tbls.iquant[i] + (c->y >> 2);
- dex = (dql>>7) & 0xf; /* 4bit exponent */
+ dex = (dql>>7) & 0xf; /* 4-bit exponent */
dqt = (1<<7) + (dql & 0x7f); /* log2 -> linear */
return (dql < 0) ? 0 : ((dqt<<dex) >> 7);
}
c->b[i] = 0;
} else {
/* This is a bit crazy, but it really is +255 not +256 */
- fa1 = av_clip((-c->a[0]*c->pk[0]*pk0)>>5, -256, 255);
+ fa1 = av_clip_intp2((-c->a[0]*c->pk[0]*pk0)>>5, 8);
c->a[1] += 128*pk0*c->pk[1] + fa1 - (c->a[1]>>7);
c->a[1] = av_clip(c->a[1], -12288, 12288);
"Resample or reduce the compliance level.\n");
return AVERROR(EINVAL);
}
- av_assert0(avctx->sample_rate > 0);
+ if (avctx->sample_rate <= 0) {
+ av_log(avctx, AV_LOG_ERROR, "Invalid sample rate %d\n",
+ avctx->sample_rate);
+ return AVERROR(EINVAL);
+ }
if(avctx->channels != 1){
av_log(avctx, AV_LOG_ERROR, "Only mono is supported\n");
g726_reset(c);
-#if FF_API_OLD_ENCODE_AUDIO
- avctx->coded_frame = avcodec_alloc_frame();
- if (!avctx->coded_frame)
- return AVERROR(ENOMEM);
- avctx->coded_frame->key_frame = 1;
-#endif
-
/* select a frame size that will end on a byte boundary and have a size of
approximately 1024 bytes */
avctx->frame_size = ((int[]){ 4096, 2736, 2048, 1640 })[c->code_size - 2];
return 0;
}
-#if FF_API_OLD_ENCODE_AUDIO
-static av_cold int g726_encode_close(AVCodecContext *avctx)
-{
- av_freep(&avctx->coded_frame);
- return 0;
-}
-#endif
-
static int g726_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
const AVFrame *frame, int *got_packet_ptr)
{
AVCodec ff_adpcm_g726_encoder = {
.name = "g726",
+ .long_name = NULL_IF_CONFIG_SMALL("G.726 ADPCM"),
.type = AVMEDIA_TYPE_AUDIO,
.id = AV_CODEC_ID_ADPCM_G726,
.priv_data_size = sizeof(G726Context),
.init = g726_encode_init,
.encode2 = g726_encode_frame,
-#if FF_API_OLD_ENCODE_AUDIO
- .close = g726_encode_close,
-#endif
- .capabilities = CODEC_CAP_SMALL_LAST_FRAME,
+ .capabilities = AV_CODEC_CAP_SMALL_LAST_FRAME,
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
AV_SAMPLE_FMT_NONE },
- .long_name = NULL_IF_CONFIG_SMALL("G.726 ADPCM"),
.priv_class = &class,
.defaults = defaults,
};
int buf_size = avpkt->size;
G726Context *c = avctx->priv_data;
int16_t *samples;
- GetBitContext gb;
+ BitstreamContext bc;
int out_samples, ret;
out_samples = buf_size * 8 / c->code_size;
}
samples = (int16_t *)frame->data[0];
- init_get_bits(&gb, buf, buf_size * 8);
+ bitstream_init8(&bc, buf, buf_size);
while (out_samples--)
- *samples++ = g726_decode(c, get_bits(&gb, c->code_size));
+ *samples++ = g726_decode(c, bitstream_read(&bc, c->code_size));
- if (get_bits_left(&gb) > 0)
+ if (bitstream_bits_left(&bc) > 0)
av_log(avctx, AV_LOG_ERROR, "Frame invalidly split, missing parser?\n");
*got_frame_ptr = 1;
AVCodec ff_adpcm_g726_decoder = {
.name = "g726",
+ .long_name = NULL_IF_CONFIG_SMALL("G.726 ADPCM"),
.type = AVMEDIA_TYPE_AUDIO,
.id = AV_CODEC_ID_ADPCM_G726,
.priv_data_size = sizeof(G726Context),
.init = g726_decode_init,
.decode = g726_decode_frame,
.flush = g726_decode_flush,
- .capabilities = CODEC_CAP_DR1,
- .long_name = NULL_IF_CONFIG_SMALL("G.726 ADPCM"),
+ .capabilities = AV_CODEC_CAP_DR1,
};
#endif