#include "libavutil/opt.h"
#include "avformat.h"
-typedef struct {
+typedef struct LATMContext {
+ AVClass *av_class;
int off;
int channel_conf;
int object_type;
static const AVOption options[] = {
{"smc-interval", "StreamMuxConfig interval.",
- offsetof(LATMContext, mod), FF_OPT_TYPE_INT, {.dbl = 0x0014}, 0x0001, 0xffff, AV_OPT_FLAG_ENCODING_PARAM},
+ offsetof(LATMContext, mod), AV_OPT_TYPE_INT, {.i64 = 0x0014}, 0x0001, 0xffff, AV_OPT_FLAG_ENCODING_PARAM},
{NULL},
};
MPEG4AudioConfig m4ac;
init_get_bits(&gb, buf, size * 8);
- ctx->off = ff_mpeg4audio_get_config(&m4ac, buf, size);
+ ctx->off = avpriv_mpeg4audio_get_config(&m4ac, buf, size * 8, 1);
if (ctx->off < 0)
return ctx->off;
skip_bits_long(&gb, ctx->off);
static int latm_write_header(AVFormatContext *s)
{
LATMContext *ctx = s->priv_data;
- AVCodecContext *avctx = s->streams[0]->codec;
+ AVCodecParameters *par = s->streams[0]->codecpar;
- if (avctx->extradata_size > 0 &&
- latm_decode_extradata(ctx, avctx->extradata, avctx->extradata_size) < 0)
+ if (par->extradata_size > 0 &&
+ latm_decode_extradata(ctx, par->extradata, par->extradata_size) < 0)
return AVERROR_INVALIDDATA;
return 0;
static int latm_write_frame_header(AVFormatContext *s, PutBitContext *bs)
{
LATMContext *ctx = s->priv_data;
- AVCodecContext *avctx = s->streams[0]->codec;
+ AVCodecParameters *par = s->streams[0]->codecpar;
GetBitContext gb;
int header_size;
put_bits(bs, 1, !!ctx->counter);
if (!ctx->counter) {
- init_get_bits(&gb, avctx->extradata, avctx->extradata_size * 8);
+ init_get_bits(&gb, par->extradata, par->extradata_size * 8);
/* StreamMuxConfig */
put_bits(bs, 1, 0); /* audioMuxVersion */
/* AudioSpecificConfig */
if (ctx->object_type == AOT_ALS) {
- header_size = avctx->extradata_size-(ctx->off + 7) >> 3;
- ff_copy_bits(bs, &avctx->extradata[ctx->off], header_size);
+ header_size = par->extradata_size-(ctx->off + 7) >> 3;
+ avpriv_copy_bits(bs, &par->extradata[ctx->off], header_size);
} else {
- ff_copy_bits(bs, avctx->extradata, ctx->off + 3);
+ avpriv_copy_bits(bs, par->extradata, ctx->off + 3);
if (!ctx->channel_conf) {
ff_copy_pce_data(bs, &gb);
}
put_bits(bs, 3, 0); /* frameLengthType */
- put_bits(bs, 8, 0); /* latmBufferFullness */
+ put_bits(bs, 8, 0xff); /* latmBufferFullness */
put_bits(bs, 1, 0); /* otherDataPresent */
put_bits(bs, 1, 0); /* crcCheckPresent */
for (i = 0; i < pkt->size; i++)
put_bits(&bs, 8, pkt->data[i]);
- align_put_bits(&bs);
+ avpriv_align_put_bits(&bs);
flush_put_bits(&bs);
len = put_bits_count(&bs) >> 3;
.mime_type = "audio/MP4A-LATM",
.extensions = "latm",
.priv_data_size = sizeof(LATMContext),
- .audio_codec = CODEC_ID_AAC,
- .video_codec = CODEC_ID_NONE,
+ .audio_codec = AV_CODEC_ID_AAC,
+ .video_codec = AV_CODEC_ID_NONE,
.write_header = latm_write_header,
.write_packet = latm_write_packet,
.priv_class = &latm_muxer_class,
+ .flags = AVFMT_NOTIMESTAMPS,
};