bcg729DecoderChannelContextStruct *initBcg729DecoderChannel() { /* create the context structure */ bcg729DecoderChannelContextStruct *decoderChannelContext = malloc(sizeof(bcg729DecoderChannelContextStruct)); /* intialise statics buffers and variables */ memcpy(decoderChannelContext->previousqLSP, previousqLSPInitialValues, NB_LSP_COEFF*sizeof(word16_t)); /* initialise the previousqLSP buffer */ memset(decoderChannelContext->excitationVector, 0, L_PAST_EXCITATION*sizeof(word16_t)); /* initialise the part of the excitationVector containing the past excitation */ decoderChannelContext->boundedAdaptativeCodebookGain = BOUNDED_PITCH_GAIN_MIN; decoderChannelContext->pseudoRandomSeed = 21845; /* initialise pseudo Random seed according to spec 4.4.4 */ decoderChannelContext->adaptativeCodebookGain = 0; /* gains are initialised at 0 */ decoderChannelContext->fixedCodebookGain = 0; memset(decoderChannelContext->reconstructedSpeech, 0, NB_LSP_COEFF*sizeof(word16_t)); /* initialise to zero all the values used from previous frame to get the current frame reconstructed speech */ /* initialisation of the differents blocs which need to be initialised */ initDecodeLSP(decoderChannelContext); initDecodeAdaptativeCodeVector(decoderChannelContext); initDecodeGains(decoderChannelContext); initPostFilter(decoderChannelContext); initPostProcessing(decoderChannelContext); return decoderChannelContext; }
status_t AudioALSAPlaybackHandlerNormal::open() { ALOGD("+%s(), mDevice = 0x%x", __FUNCTION__, mStreamAttributeSource->output_devices); AudioAutoTimeoutLock _l(*AudioALSADriverUtility::getInstance()->getStreamSramDramLock()); // debug pcm dump OpenPCMDump(LOG_TAG); // acquire pmic clk mHardwareResourceManager->EnableAudBufClk(true); HpImpeDanceDetect(); int pcmindex = AudioALSADeviceParser::getInstance()->GetPcmIndexByString(keypcmI2S0Dl1Playback); int cardindex = AudioALSADeviceParser::getInstance()->GetCardIndexByString(keypcmI2S0Dl1Playback); ALOGD("AudioALSAPlaybackHandlerNormal::open() pcmindex = %d", pcmindex); ListPcmDriver(cardindex, pcmindex); struct pcm_params *params; params = pcm_params_get(cardindex, pcmindex, PCM_OUT); if (params == NULL) { ALOGD("Device does not exist.\n"); } mStreamAttributeTarget.buffer_size = pcm_params_get_max(params, PCM_PARAM_BUFFER_BYTES); pcm_params_free(params); // HW attribute config // TODO(Harvey): query this #ifdef PLAYBACK_USE_24BITS_ONLY mStreamAttributeTarget.audio_format = AUDIO_FORMAT_PCM_8_24_BIT; #else mStreamAttributeTarget.audio_format = (mStreamAttributeSource->audio_format == AUDIO_FORMAT_PCM_32_BIT) ? AUDIO_FORMAT_PCM_8_24_BIT : AUDIO_FORMAT_PCM_16_BIT; #endif mStreamAttributeTarget.audio_channel_mask = AUDIO_CHANNEL_IN_STEREO; mStreamAttributeTarget.num_channels = android_audio_legacy::AudioSystem::popCount(mStreamAttributeTarget.audio_channel_mask); mStreamAttributeTarget.sample_rate = ChooseTargetSampleRate(mStreamAttributeSource->sample_rate,mStreamAttributeSource->output_devices); // HW pcm config mConfig.channels = mStreamAttributeTarget.num_channels; mConfig.rate = mStreamAttributeTarget.sample_rate; // Buffer size: 1536(period_size) * 2(ch) * 4(byte) * 2(period_count) = 24 kb mConfig.period_count = 2; mConfig.period_size = (mStreamAttributeTarget.buffer_size / (mConfig.channels * mConfig.period_count)) / ((mStreamAttributeTarget.audio_format == AUDIO_FORMAT_PCM_16_BIT) ? 2 : 4); mConfig.format = transferAudioFormatToPcmFormat(mStreamAttributeTarget.audio_format); mConfig.start_threshold = 0; mConfig.stop_threshold = 0; mConfig.silence_threshold = 0; ALOGD("%s(), mConfig: channels = %d, rate = %d, period_size = %d, period_count = %d, format = %d", __FUNCTION__, mConfig.channels, mConfig.rate, mConfig.period_size, mConfig.period_count, mConfig.format); // post processing initPostProcessing(); #if defined(MTK_SPEAKER_MONITOR_SUPPORT) unsigned int fc, bw; int th; if (mAudioFilterManagerHandler) { AudioALSASpeakerMonitor::getInstance()->GetFilterParam(&fc, &bw, &th); ALOGD("%s(), fc %d bw %d, th %d", __FUNCTION__, fc, bw, th); mAudioFilterManagerHandler->setSpkFilterParam(fc, bw, th); } #endif // SRC initBliSrc(); // bit conversion initBitConverter(); initDataPending(); // disable lowjitter mode SetLowJitterMode(true, mStreamAttributeTarget.sample_rate); // open pcm driver openPcmDriver(pcmindex); // open codec driver mHardwareResourceManager->startOutputDevice(mStreamAttributeSource->output_devices, mStreamAttributeTarget.sample_rate); //============Voice UI&Unlock REFERECE============= AudioVUnlockDL *VUnlockhdl = AudioVUnlockDL::getInstance(); if (VUnlockhdl != NULL) { VUnlockhdl->SetInputStandBy(false); VUnlockhdl-> GetSRCInputParameter(mStreamAttributeTarget.sample_rate, mStreamAttributeTarget.num_channels, mStreamAttributeTarget.audio_format); VUnlockhdl->GetFirstDLTime(); } //=========================================== ALOGD("-%s()", __FUNCTION__); return NO_ERROR; }
status_t AudioALSAPlaybackHandlerOffload::open() { ALOGD("+%s(), mDevice = 0x%x", __FUNCTION__, mStreamAttributeSource->output_devices); ALOGD("%s(), mStreamAttributeSource: format = %d",__FUNCTION__, mStreamAttributeSource->audio_format); AudioAutoTimeoutLock _l(*AudioALSADriverUtility::getInstance()->getStreamSramDramLock()); // debug pcm dump OpenPCMDump(LOG_TAG); // acquire pmic clk mHardwareResourceManager->EnableAudBufClk(true); //doug to check //HpImpeDanceDetect(); //doug to check #if 1 int pcmindex = AudioALSADeviceParser::getInstance()->GetPcmIndexByString(keypcmDl1Meida); int cardindex = AudioALSADeviceParser::getInstance()->GetCardIndexByString(keypcmDl1Meida); ALOGD("AudioALSAPlaybackHandlerOffload::open() pcmindex = %d", pcmindex); ListPcmDriver(cardindex, pcmindex); struct pcm_params *params; params = pcm_params_get(cardindex, pcmindex, PCM_OUT); if (params == NULL) { ALOGD("Device does not exist.\n"); } mStreamAttributeTarget.buffer_size = pcm_params_get_max(params, PCM_PARAM_BUFFER_BYTES); ALOGD("%s buffersizemax = %d", __FUNCTION__, mStreamAttributeTarget.buffer_size); pcm_params_free(params); #endif //mStreamAttributeTarget.buffer_size = 32768; //#ifdef PLAYBACK_USE_24BITS_ONLY //mStreamAttributeTarget.audio_format = AUDIO_FORMAT_PCM_32_BIT; mStreamAttributeTarget.audio_format = AUDIO_FORMAT_PCM_8_24_BIT; //mStreamAttributeTarget.audio_format = AUDIO_FORMAT_PCM_16_BIT; //#else // mStreamAttributeTarget.audio_format = (mStreamAttributeSource->audio_format == AUDIO_FORMAT_PCM_32_BIT) ? AUDIO_FORMAT_PCM_8_24_BIT : AUDIO_FORMAT_PCM_16_BIT; //#endif mStreamAttributeTarget.audio_channel_mask = AUDIO_CHANNEL_IN_STEREO; mStreamAttributeTarget.num_channels = android_audio_legacy::AudioSystem::popCount(mStreamAttributeTarget.audio_channel_mask); mStreamAttributeTarget.sample_rate = ChooseTargetSampleRate(mStreamAttributeSource->sample_rate); // HW pcm config mConfig.channels = mStreamAttributeTarget.num_channels; mConfig.rate = mStreamAttributeTarget.sample_rate; // Buffer size: 1536(period_size) * 2(ch) * 4(byte) * 2(period_count) = 24 kb mConfig.period_count = 2; mConfig.period_size = (mStreamAttributeTarget.buffer_size / (mConfig.channels * mConfig.period_count)) / ((mStreamAttributeTarget.audio_format == AUDIO_FORMAT_PCM_16_BIT) ? 2 : 4); mConfig.format = transferAudioFormatToPcmFormat(mStreamAttributeTarget.audio_format); mConfig.start_threshold = 0; mConfig.stop_threshold = 0; mConfig.silence_threshold = 0; ALOGD("%s(), mConfig: channels = %d, rate = %d, period_size = %d, period_count = %d, format = %d", __FUNCTION__, mConfig.channels, mConfig.rate, mConfig.period_size, mConfig.period_count, mConfig.format); mComprConfig.codec = (struct snd_codec*)malloc(sizeof(struct snd_codec)); if(mComprConfig.codec == NULL) ALOGE("%s(), allocate mComprConfig.codec fail"); mComprConfig.fragments = 1024; mComprConfig.fragment_size = 8192; //mComprConfig.fragment_size = mStreamAttributeTarget.buffer_size; mComprConfig.codec->sample_rate = mStreamAttributeTarget.sample_rate; mComprConfig.codec->reserved[0] = mConfig.period_size; mComprConfig.codec->reserved[1] = mComprConfig.fragments*mComprConfig.fragment_size; if(mConfig.format == PCM_FORMAT_S16_LE) mComprConfig.codec->format = SNDRV_PCM_FORMAT_S16_LE; else mComprConfig.codec->format = SNDRV_PCM_FORMAT_S32_LE; mComprConfig.codec->id = SND_AUDIOCODEC_MP3; mComprConfig.codec->ch_in = 2; mComprConfig.codec->ch_out = 2; //init decoder mDecHandler = AudioDecHandlerCreate(); if(mDecHandler == NULL) { ALOGE("+%s(), DecHandler create fail", __FUNCTION__); ASSERT(false); return -ENOSYS; } if(!mDecHandler->InitAudioDecoder()) { ALOGE("+%s(), Decoder IP init fail", __FUNCTION__); ASSERT(false); return -ENOSYS; } // post processing initPostProcessing(); // SRC initBliSrc(); // bit conversion initBitConverter(); initDataPending(); // disable lowjitter mode //doug to check SetLowJitterMode(true, mStreamAttributeTarget.sample_rate); openComprDriver(23); if( compress_set_gapless_metadata(mComprStream, &offload_stream.offload_mdata) != 0) ALOGE("%s(), compress_set_gapless_metadata() error= %s", __FUNCTION__, compress_get_error(mComprStream)); mHardwareResourceManager->startOutputDevice(mStreamAttributeSource->output_devices, mStreamAttributeTarget.sample_rate); offload_stream.tmpBuffer = (void*)malloc(mComprConfig.fragment_size); mWritebytes = mComprConfig.fragment_size; list_init(&offload_stream.offload_cmd_list); int ret = pthread_mutex_init(&offload_stream.offload_mutex, NULL); if (ret != 0) { ALOGE("%s, Failed to initialize Mutex!", __FUNCTION__); ASSERT(false); return -ENOSYS; } ret = pthread_cond_init(&offload_stream.offload_cond, NULL); if (ret != 0) { ALOGE("%s, Failed to initialize Cond!", __FUNCTION__); ASSERT(false); return -ENOSYS; } threadExit = false; ret = pthread_create(&offload_stream.offload_pthread, NULL, &offload_threadloop, this); if (ret != 0) { ALOGE("%s() create thread OffloadWrite fail!!", __FUNCTION__); ASSERT(false); return -ENOSYS; } usleep(1 * 1000); ALOGD("-%s()", __FUNCTION__); return NO_ERROR; }
status_t AudioALSAPlaybackHandlerSphDL::open() { ALOGD("+%s(), mDevice = 0x%x", __FUNCTION__, mStreamAttributeSource->output_devices); // debug pcm dump OpenPCMDump(LOG_TAG); int pcmindex = AudioALSADeviceParser::getInstance()->GetPcmIndexByString(keypcmI2S0Dl1Playback); int cardindex = AudioALSADeviceParser::getInstance()->GetCardIndexByString(keypcmI2S0Dl1Playback); ALOGD("AudioALSAPlaybackHandlerSphDL::open() pcmindex = %d", pcmindex); ListPcmDriver(cardindex, pcmindex); struct pcm_params *params; params = pcm_params_get(cardindex, pcmindex, PCM_OUT); if (params == NULL) { ALOGD("Device does not exist.\n"); } mStreamAttributeTarget.buffer_size = pcm_params_get_max(params, PCM_PARAM_BUFFER_BYTES); ALOGD("buffersizemax = %d", mStreamAttributeTarget.buffer_size); pcm_params_free(params); // HW attribute config // TODO(Harvey): query this mStreamAttributeTarget.audio_format = AUDIO_FORMAT_PCM_16_BIT; mStreamAttributeTarget.audio_channel_mask = AUDIO_CHANNEL_IN_MONO; mStreamAttributeTarget.num_channels = android_audio_legacy::AudioSystem::popCount(mStreamAttributeTarget.audio_channel_mask); mStreamAttributeTarget.sample_rate = mStreamAttributeSource->sample_rate; // same as source stream // HW pcm config mConfig.channels = mStreamAttributeTarget.num_channels; mConfig.rate = mStreamAttributeTarget.sample_rate; // Buffer size: 1536(period_size) * 2(ch) * 4(byte) * 2(period_count) = 24 kb mConfig.period_count = 4; //mConfig.period_size = (0x4000/(mConfig.channels*mConfig.period_count))/((mStreamAttributeTarget.audio_format == AUDIO_FORMAT_PCM_16_BIT) ? 2 : 4); mConfig.period_size = 512; mConfig.format = transferAudioFormatToPcmFormat(mStreamAttributeTarget.audio_format); mConfig.start_threshold = 0; mConfig.stop_threshold = 0; mConfig.silence_threshold = 0; ALOGD("%s(), mConfig: channels = %d, rate = %d, period_size = %d, period_count = %d, format = %d", __FUNCTION__, mConfig.channels, mConfig.rate, mConfig.period_size, mConfig.period_count, mConfig.format); // post processing initPostProcessing(); #if defined(MTK_SPEAKER_MONITOR_SUPPORT) unsigned int fc, bw; int th; if (mAudioFilterManagerHandler) { AudioALSASpeakerMonitor::getInstance()->GetFilterParam(&fc, &bw, &th); ALOGD("%s(), fc %d bw %d, th %d", __FUNCTION__, fc, bw, th); mAudioFilterManagerHandler->setSpkFilterParam(fc, bw, th); } #endif // SRC initBliSrc(); // bit conversion initBitConverter(); // open pcm driver openPcmDriver(pcmindex); //Echo reference path if (mixer_ctl_set_enum_by_string(mixer_get_ctl_by_name(mMixer, "Audio_Dl1_MD_Echo_Ref_Switch"), "On")) { ALOGE("Error: Audio_Dl1_MD_Echo_Ref_Switch invalid value"); } // open codec driver // Don't startoutputDevice here, let speech driver to open. mHardwareResourceManager->startOutputDevice(mStreamAttributeSource->output_devices, mStreamAttributeTarget.sample_rate); ALOGD("-%s()", __FUNCTION__); return NO_ERROR; }
void scene() { foreach(Planet * planet, planets) planet->init(); initCamAndLight(); initPostProcessing(); }