#include <speex/speex_header.h>
#include <speex/speex_stereo.h>
-#include "libavutil/audioconvert.h"
+#include "libavutil/channel_layout.h"
#include "libavutil/common.h"
#include "libavutil/opt.h"
#include "avcodec.h"
#include "internal.h"
#include "audio_frame_queue.h"
-typedef struct {
+typedef struct LibSpeexEncContext {
AVClass *class; ///< AVClass for private options
SpeexBits bits; ///< libspeex bitwriter context
SpeexHeader header; ///< libspeex header struct
s->header.frames_per_packet = s->frames_per_packet;
/* set encoding delay */
- speex_encoder_ctl(s->enc_state, SPEEX_GET_LOOKAHEAD, &avctx->delay);
+ speex_encoder_ctl(s->enc_state, SPEEX_GET_LOOKAHEAD, &avctx->initial_padding);
ff_af_queue_init(avctx, &s->afq);
/* create header packet bytes from header struct */
av_log(avctx, AV_LOG_ERROR, "memory allocation error\n");
return AVERROR(ENOMEM);
}
-#if FF_API_OLD_ENCODE_AUDIO
- avctx->coded_frame = avcodec_alloc_frame();
- if (!avctx->coded_frame) {
- av_freep(&avctx->extradata);
- speex_header_free(header_data);
- speex_encoder_destroy(s->enc_state);
- av_log(avctx, AV_LOG_ERROR, "memory allocation error\n");
- return AVERROR(ENOMEM);
- }
-#endif
/* copy header packet to extradata */
memcpy(avctx->extradata, header_data, header_size);
speex_encode_stereo_int(samples, s->header.frame_size, &s->bits);
speex_encode_int(s->enc_state, samples, &s->bits);
s->pkt_frame_count++;
- if ((ret = ff_af_queue_add(&s->afq, frame) < 0))
+ if ((ret = ff_af_queue_add(&s->afq, frame)) < 0)
return ret;
} else {
/* handle end-of-stream */
speex_encoder_destroy(s->enc_state);
ff_af_queue_close(&s->afq);
-#if FF_API_OLD_ENCODE_AUDIO
- av_freep(&avctx->coded_frame);
-#endif
av_freep(&avctx->extradata);
return 0;
AVCodec ff_libspeex_encoder = {
.name = "libspeex",
+ .long_name = NULL_IF_CONFIG_SMALL("libspeex Speex"),
.type = AVMEDIA_TYPE_AUDIO,
.id = AV_CODEC_ID_SPEEX,
.priv_data_size = sizeof(LibSpeexEncContext),
AV_CH_LAYOUT_STEREO,
0 },
.supported_samplerates = (const int[]){ 8000, 16000, 32000, 0 },
- .long_name = NULL_IF_CONFIG_SMALL("libspeex Speex"),
.priv_class = &class,
.defaults = defaults,
};