113 IIS_XHEAACENC_CONFIG_INSTANCE_HANDLE config_handle =
NULL;
114 IIS_XHEAACENC_CHANNELCONFIG channel_config;
115 IIS_XHEAACENC_BITRATEMODE bitrate_mode;
116 IIS_XHEAACENC_RETURN_CODE err;
117 int out_framesize, out_max_bitrate, out_avg_bitrate;
126 case 1: channel_config = IIS_XHEAACENC_CHANNELCONFIG_MONO;
break;
127 case 2: channel_config = IIS_XHEAACENC_CHANNELCONFIG_STEREO;
break;
134 err = IIS_xHEAACEnc_Config_Open(&config_handle, avctx->
sample_rate, channel_config);
135 if (err != IIS_XHEAACENC_NO_ERROR) {
143 case 0: bitrate_mode = IIS_XHEAACENC_BITRATEMODE_AAC_VBR0;
break;
144 case 1: bitrate_mode = IIS_XHEAACENC_BITRATEMODE_AAC_VBR1;
break;
145 case 2: bitrate_mode = IIS_XHEAACENC_BITRATEMODE_AAC_VBR2;
break;
146 case 3: bitrate_mode = IIS_XHEAACENC_BITRATEMODE_AAC_VBR3;
break;
147 case 4: bitrate_mode = IIS_XHEAACENC_BITRATEMODE_AAC_VBR4;
break;
148 case 5: bitrate_mode = IIS_XHEAACENC_BITRATEMODE_AAC_VBR5;
break;
149 case 6: bitrate_mode = IIS_XHEAACENC_BITRATEMODE_AAC_VBR6;
break;
152 bitrate_mode = IIS_XHEAACENC_BITRATEMODE_CBR;
154 int orig_bit_rate = avctx->
bit_rate;
164 if (orig_bit_rate > 0 && orig_bit_rate != avctx->
bit_rate)
166 "Bitrate %d is not a multiple of 2000, using %"PRId64
"\n",
169 err = IIS_xHEAACEnc_Config_AddParamValueInt(config_handle,
170 IIS_XHEAACENC_PARAMETER_BITRATE, avctx->
bit_rate);
171 if (err != IIS_XHEAACENC_NO_ERROR) {
177 err = IIS_xHEAACEnc_Config_AddParamValueInt(config_handle,
178 IIS_XHEAACENC_PARAMETER_BITRATEMODE, bitrate_mode);
179 if (err != IIS_XHEAACENC_NO_ERROR) {
190 err = IIS_xHEAACEnc_Config_AddParamValueInt(config_handle,
191 IIS_XHEAACENC_PARAMETER_TRANSPORTFORMAT,
192 IIS_XHEAACENC_TRANSPORTFORMAT_RAW);
193 if (err != IIS_XHEAACENC_NO_ERROR) {
199 err = IIS_xHEAACEnc_Config_AddParamValueInt(config_handle,
200 IIS_XHEAACENC_PARAMETER_AOT, IIS_XHEAACENC_AOT_USAC);
201 if (err != IIS_XHEAACENC_NO_ERROR) {
207 if (
s->stream_id < 0) {
212 s->stream_id =
s->vbr;
216 err = IIS_xHEAACEnc_Config_AddParamValueInt(config_handle,
217 IIS_XHEAACENC_PARAMETER_STREAMID,
s->stream_id);
218 if (err != IIS_XHEAACENC_NO_ERROR) {
223 err = IIS_xHEAACEnc_Config_AddParamValueInt(config_handle,
224 IIS_XHEAACENC_PARAMETER_RAP_OCCURRENCE,
225 IIS_XHEAACENC_RAP_OCCURRENCE_CONSTANT_INTERVAL);
226 if (err != IIS_XHEAACENC_NO_ERROR) {
231 if (
s->rap_interval > 0) {
232 err = IIS_xHEAACEnc_Config_AddParamValueInt(config_handle,
233 IIS_XHEAACENC_PARAMETER_RAP_INTERVAL_MS,
s->rap_interval / 1000);
234 if (err != IIS_XHEAACENC_NO_ERROR) {
240 err = IIS_xHEAACEnc_Config_AddParamValueFloat(config_handle,
241 IIS_XHEAACENC_PARAMETER_LIVE_LOUDNESS_LEVEL,
s->live_loudness_level);
242 if (err != IIS_XHEAACENC_NO_ERROR) {
248 err = IIS_xHEAACEnc_Config_Finalize(config_handle);
249 if (err != IIS_XHEAACENC_NO_ERROR) {
255 err = IIS_xHEAACEnc_Open(&
s->handle, config_handle);
256 if (err != IIS_XHEAACENC_NO_ERROR) {
262 err = IIS_xHEAACEnc_Config_Delete(config_handle);
263 if (err != IIS_XHEAACENC_NO_ERROR) {
268 config_handle =
NULL;
270 err = IIS_xHEAACEnc_GetParam(
s->handle, IIS_XHEAACENC_PARAMETER_OUTSAMPLERATE,
271 IIS_XHEAACENC_PARAM_INT,
272 &
s->sample_rate,
sizeof(
s->sample_rate));
273 if (err != IIS_XHEAACENC_NO_ERROR) {
284 err = IIS_xHEAACEnc_GetParam(
s->handle, IIS_XHEAACENC_PARAMETER_FRAMESAMPLES,
285 IIS_XHEAACENC_PARAM_INT,
286 &out_framesize,
sizeof(out_framesize));
287 if (err != IIS_XHEAACENC_NO_ERROR) {
301 IIS_XHEAACENC_ASCINFO asc_info;
302 err = IIS_xHEAACEnc_GetAscInfo(
s->handle, &asc_info);
303 if (err != IIS_XHEAACENC_NO_ERROR) {
324 err = IIS_xHEAACEnc_GetParam(
s->handle, IIS_XHEAACENC_PARAMETER_BITRATELIMIT,
325 IIS_XHEAACENC_PARAM_INT,
326 &out_max_bitrate,
sizeof(out_max_bitrate));
327 if (err != IIS_XHEAACENC_NO_ERROR) {
333 err = IIS_xHEAACEnc_GetParam(
s->handle, IIS_XHEAACENC_PARAMETER_BITRATE,
334 IIS_XHEAACENC_PARAM_INT,
335 &out_avg_bitrate,
sizeof(out_avg_bitrate));
336 if (err != IIS_XHEAACENC_NO_ERROR) {
346 s->sample_queue_size = 4096*20;
347 s->sample_queue =
av_malloc(
s->sample_queue_size *
sizeof(*
s->sample_queue));
348 if (!
s->sample_queue) {
356 err = IIS_xHEAACEnc_Config_Delete(config_handle);
357 if (err != IIS_XHEAACENC_NO_ERROR)
368 IIS_XHEAACENC_RETURN_CODE err;
378 if (
s->nb_sample_queue + nb_new_samples >
s->sample_queue_size) {
379 int size =
s->nb_sample_queue + nb_new_samples + 4096;
383 s->sample_queue = ptr;
384 s->sample_queue_size =
size;
399 memcpy(
s->sample_queue +
s->nb_sample_queue,
frame->data[0],
400 nb_new_samples *
sizeof(*
s->sample_queue));
401 s->nb_sample_queue += nb_new_samples;
404 err = IIS_xHEAACEnc_GetParam(
s->handle, IIS_XHEAACENC_PARAMETER_SAMPLES_NEXT,
405 IIS_XHEAACENC_PARAM_INT,
406 &samples_next,
sizeof(samples_next));
407 if (err != IIS_XHEAACENC_NO_ERROR) {
413 if (
s->nb_sample_queue < samples_next &&
frame) {
420 err = IIS_xHEAACEnc_GetParam(
s->handle, IIS_XHEAACENC_PARAMETER_MIN_OUTBUF_SIZE,
421 IIS_XHEAACENC_PARAM_INT,
422 &min_outbuf_size,
sizeof(min_outbuf_size));
423 if (err != IIS_XHEAACENC_NO_ERROR) {
432 int nb_samples =
FFMIN(
s->nb_sample_queue, samples_next);
436 err = IIS_xHEAACEnc_EncodeFrame(
s->handle,
s->sample_queue, nb_samples,
437 (
unsigned char *)avpkt->
data, &out_bytes,
439 if (err != IIS_XHEAACENC_NO_ERROR) {
444 s->nb_sample_queue -= nb_samples;
445 memmove(
s->sample_queue,
s->sample_queue + nb_samples,
446 s->nb_sample_queue *
sizeof(*
s->sample_queue));
448 IIS_XHEAACENC_ENCODER_STATE
state;
449 err = IIS_xHEAACEnc_GetEncoderState(
s->handle, &
state);
450 if (err != IIS_XHEAACENC_NO_ERROR) {
458 if (out_bytes <= 0 && !
frame &&
state != IIS_XHEAACENC_ENCODER_STATE_READY_TO_CLOSE) {
459 while (
state != IIS_XHEAACENC_ENCODER_STATE_FLUSHING &&
460 state != IIS_XHEAACENC_ENCODER_STATE_READY_TO_CLOSE) {
461 err = IIS_xHEAACEnc_EncodeFrame(
s->handle,
NULL, 0,
462 (
unsigned char *)avpkt->
data,
464 if (err != IIS_XHEAACENC_NO_ERROR) {
470 err = IIS_xHEAACEnc_GetEncoderState(
s->handle, &
state);
471 if (err != IIS_XHEAACENC_NO_ERROR) {
479 avpkt->
size = out_bytes;
485 "Encoder reports auOffset of %d. This is currently not implemented.\n",
491 case IIS_XHEAACENC_SYNCFRAME_NO:
492 case IIS_XHEAACENC_SYNCFRAME_INDEPENDENT_FRAME:
493 case IIS_XHEAACENC_SYNCFRAME_STREAM_MUX_CONFIG_IF:
495 case IIS_XHEAACENC_SYNCFRAME_IMMEDIATE_PLAY_OUT_FRAME:
496 case IIS_XHEAACENC_SYNCFRAME_STREAM_MUX_CONFIG_IPF:
499 case IIS_XHEAACENC_SYNCFRAME_INVALID:
main external API structure.
AVChannelLayout ch_layout
Audio channel layout.
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
int frame_size
Number of samples per channel in an audio frame.