GlintAacEncoder constructor

GlintAacEncoder({
  1. int sampleRate = 44100,
  2. int channels = 2,
  3. int bitrate = 128,
  4. int quality = 1,
  5. int? vbrQuality,
})

quality: 0 = speed, 1 = normal (default), 2 = best. vbrQuality 0..9 selects constant-quality VBR (null = CBR at bitrate).

Implementation

GlintAacEncoder({
  int sampleRate = 44100,
  int channels = 2,
  int bitrate = 128,
  int quality = 1,
  int? vbrQuality,
}) : channels = channels {
  _lib = _loadLibrary();

  final create = _lib.lookupFunction<GlintAacCreateNative, GlintAacCreate>(
      'glint_aac_create');
  final spfFn =
      _lib.lookupFunction<GlintSamplesPerFrameNative, GlintSamplesPerFrame>(
          'glint_aac_samples_per_frame');
  _aacEncode =
      _lib.lookupFunction<GlintEncodeNative, GlintEncode>('glint_aac_encode');
  _aacFlush =
      _lib.lookupFunction<GlintFlushNative, GlintFlush>('glint_aac_flush');
  _aacDestroy = _lib
      .lookupFunction<GlintDestroyNative, GlintDestroy>('glint_aac_destroy');

  final cfgPtr = calloc<GlintAacConfig>(); // calloc zeroes reserved[]
  cfgPtr.ref.sampleRate = sampleRate;
  cfgPtr.ref.numChannels = channels;
  cfgPtr.ref.bitrate = bitrate;
  cfgPtr.ref.quality = quality;
  if (vbrQuality != null) {
    cfgPtr.ref.vbr = 1;
    cfgPtr.ref.vbrQuality = vbrQuality;
  }

  _handle = create(cfgPtr);
  calloc.free(cfgPtr);

  if (_handle == nullptr) {
    throw StateError('glint_aac_create returned null');
  }
  samplesPerFrame = spfFn(_handle);
}