22 #include <fdk-aac/aacenc_lib.h> 
   46     { 
"eld_sbr", 
"Enable SBR for ELD (for SBR in other configurations, use the -profile parameter)", offsetof(
AACContext, eld_sbr), 
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, 
AV_OPT_FLAG_AUDIO_PARAM | 
AV_OPT_FLAG_ENCODING_PARAM },
 
   47     { 
"signaling", 
"SBR/PS signaling style", offsetof(
AACContext, signaling), 
AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 2, 
AV_OPT_FLAG_AUDIO_PARAM | 
AV_OPT_FLAG_ENCODING_PARAM, 
"signaling" },
 
   48     { 
"default", 
"Choose signaling implicitly (explicit hierarchical by default, implicit if global header is disabled)", 0, 
AV_OPT_TYPE_CONST, { .i64 = -1 }, 0, 0, 
AV_OPT_FLAG_AUDIO_PARAM | 
AV_OPT_FLAG_ENCODING_PARAM, 
"signaling" },
 
   50     { 
"explicit_sbr", 
"Explicit SBR, implicit PS signaling", 0, 
AV_OPT_TYPE_CONST, { .i64 = 1 }, 0, 0, 
AV_OPT_FLAG_AUDIO_PARAM | 
AV_OPT_FLAG_ENCODING_PARAM, 
"signaling" },
 
   67     case AACENC_INVALID_HANDLE:
 
   68         return "Invalid handle";
 
   69     case AACENC_MEMORY_ERROR:
 
   70         return "Memory allocation error";
 
   71     case AACENC_UNSUPPORTED_PARAMETER:
 
   72         return "Unsupported parameter";
 
   73     case AACENC_INVALID_CONFIG:
 
   74         return "Invalid config";
 
   75     case AACENC_INIT_ERROR:
 
   76         return "Initialization error";
 
   77     case AACENC_INIT_AAC_ERROR:
 
   78         return "AAC library initialization error";
 
   79     case AACENC_INIT_SBR_ERROR:
 
   80         return "SBR library initialization error";
 
   81     case AACENC_INIT_TP_ERROR:
 
   82         return "Transport library initialization error";
 
   83     case AACENC_INIT_META_ERROR:
 
   84         return "Metadata library initialization error";
 
   85     case AACENC_ENCODE_ERROR:
 
   86         return "Encoding error";
 
   87     case AACENC_ENCODE_EOF:
 
   90         return "Unknown error";
 
  110     AACENC_InfoStruct info = { 0 };
 
  114     int sce = 0, cpe = 0;
 
  116     if ((err = aacEncOpen(&s->
handle, 0, avctx->
channels)) != AACENC_OK) {
 
  125     if ((err = aacEncoder_SetParam(s->
handle, AACENC_AOT, aot)) != AACENC_OK) {
 
  132         if ((err = aacEncoder_SetParam(s->
handle, AACENC_SBR_MODE,
 
  140     if ((err = aacEncoder_SetParam(s->
handle, AACENC_SAMPLERATE,
 
  148     case 1: mode = MODE_1;       sce = 1; cpe = 0; 
break;
 
  149     case 2: mode = MODE_2;       sce = 0; cpe = 1; 
break;
 
  150     case 3: mode = MODE_1_2;     sce = 1; cpe = 1; 
break;
 
  151     case 4: mode = MODE_1_2_1;   sce = 2; cpe = 1; 
break;
 
  152     case 5: mode = MODE_1_2_2;   sce = 1; cpe = 2; 
break;
 
  153     case 6: mode = MODE_1_2_2_1; sce = 2; cpe = 2; 
break;
 
  156                "Unsupported number of channels %d\n", avctx->
channels);
 
  160     if ((err = aacEncoder_SetParam(s->
handle, AACENC_CHANNELMODE,
 
  161                                    mode)) != AACENC_OK) {
 
  163                "Unable to set channel mode %d: %s\n", mode, 
aac_get_error(err));
 
  167     if ((err = aacEncoder_SetParam(s->
handle, AACENC_CHANNELORDER,
 
  170                "Unable to set wav channel order %d: %s\n",
 
  179                    "VBR quality %d out of range, should be 1-5\n", mode);
 
  180             mode = av_clip(mode, 1, 5);
 
  183                "Note, the VBR setting is unsupported and only works with " 
  184                "some parameter combinations\n");
 
  185         if ((err = aacEncoder_SetParam(s->
handle, AACENC_BITRATEMODE,
 
  186                                        mode)) != AACENC_OK) {
 
  204         if ((err = aacEncoder_SetParam(s->
handle, AACENC_BITRATE,
 
  214     if ((err = aacEncoder_SetParam(s->
handle, AACENC_TRANSMUX,
 
  222         if ((err = aacEncoder_SetParam(s->
handle, AACENC_HEADER_PERIOD,
 
  236     if ((err = aacEncoder_SetParam(s->
handle, AACENC_SIGNALING_MODE,
 
  243     if ((err = aacEncoder_SetParam(s->
handle, AACENC_AFTERBURNER,
 
  256         if ((err = aacEncoder_SetParam(s->
handle, AACENC_BANDWIDTH,
 
  257                                        avctx->
cutoff)) != AACENC_OK) {
 
  264     if ((err = aacEncEncode(s->
handle, NULL, NULL, NULL, NULL)) != AACENC_OK) {
 
  270     if ((err = aacEncInfo(s->
handle, &info)) != AACENC_OK) {
 
  277     avctx->
delay      = info.encoderDelay;
 
  289         memcpy(avctx->
extradata, info.confBuf, info.confSize);
 
  301     AACENC_BufDesc in_buf   = { 0 }, out_buf = { 0 };
 
  302     AACENC_InArgs  in_args  = { 0 };
 
  303     AACENC_OutArgs out_args = { 0 };
 
  304     int in_buffer_identifier = IN_AUDIO_DATA;
 
  305     int in_buffer_size, in_buffer_element_size;
 
  306     int out_buffer_identifier = OUT_BITSTREAM_DATA;
 
  307     int out_buffer_size, out_buffer_element_size;
 
  308     void *in_ptr, *out_ptr;
 
  314         in_args.numInSamples = -1;
 
  316         in_ptr                   = frame->
data[0];
 
  318         in_buffer_element_size   = 2;
 
  322         in_buf.bufs              = &in_ptr;
 
  323         in_buf.bufferIdentifiers = &in_buffer_identifier;
 
  324         in_buf.bufSizes          = &in_buffer_size;
 
  325         in_buf.bufElSizes        = &in_buffer_element_size;
 
  336     out_ptr                   = avpkt->
data;
 
  337     out_buffer_size           = avpkt->
size;
 
  338     out_buffer_element_size   = 1;
 
  340     out_buf.bufs              = &out_ptr;
 
  341     out_buf.bufferIdentifiers = &out_buffer_identifier;
 
  342     out_buf.bufSizes          = &out_buffer_size;
 
  343     out_buf.bufElSizes        = &out_buffer_element_size;
 
  345     if ((err = aacEncEncode(s->
handle, &in_buf, &out_buf, &in_args,
 
  346                             &out_args)) != AACENC_OK) {
 
  347         if (!frame && err == AACENC_ENCODE_EOF)
 
  354     if (!out_args.numOutBytes)
 
  361     avpkt->
size     = out_args.numOutBytes;
 
  391     96000, 88200, 64000, 48000, 44100, 32000,
 
  392     24000, 22050, 16000, 12000, 11025, 8000, 0
 
  396     .
name                  = 
"libfdk_aac",