• Home
  • Raw
  • Download

Lines Matching +full:- +full:oc

1 /* -----------------------------------------------------------------------------
4 © Copyright 1995 - 2019 Fraunhofer-Gesellschaft zur Förderung der angewandten
13 AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient
14 general perceptual audio codecs. AAC-ELD is considered the best-performing
15 full-bandwidth communications codec by independent studies and is widely
29 Commercially-licensed AAC software libraries, including floating-point versions
58 must be replaced by the term "Third-Party Modified Version of the Fraunhofer FDK
65 Fraunhofer provides no warranty of patent non-infringement with respect to this
87 Attention: Audio and Multimedia Departments - FDK AAC LL
92 amm-info@iis.fraunhofer.de
93 ----------------------------------------------------------------------------- */
95 /************************* MPEG-D DRC decoder library **************************
99 Description: MPEG-D DRC Decoder
114 #define DRCDEC_LIB_TITLE "MPEG-D DRC Decoder Lib"
149 return hUniDrcGain->status; in _getGainStatus()
156 if (hDrcDec->selProcOutput.numSelectedDrcSets != in isResetNeeded()
160 for (i = 0; i < hDrcDec->selProcOutput.numSelectedDrcSets; i++) { in isResetNeeded()
161 if (hDrcDec->selProcOutput.selectedDrcSetIds[i] != in isResetNeeded()
164 if (hDrcDec->selProcOutput.selectedDownmixIds[i] != in isResetNeeded()
170 if (hDrcDec->selProcOutput.boost != oldSelProcOutput.boost) resetNeeded = 1; in isResetNeeded()
171 if (hDrcDec->selProcOutput.compress != oldSelProcOutput.compress) in isResetNeeded()
182 SEL_PROC_OUTPUT oldSelProcOutput = hDrcDec->selProcOutput; in startSelectionProcess()
184 if (!hDrcDec->status) return; in startSelectionProcess()
186 if (hDrcDec->functionalRange & DRC_DEC_SELECTION) { in startSelectionProcess()
187 uniDrcConfigHasChanged = hDrcDec->uniDrcConfig.diff; in startSelectionProcess()
188 if (hDrcDec->uniDrcConfig.diff || hDrcDec->loudnessInfoSet.diff || in startSelectionProcess()
189 hDrcDec->selProcInputDiff) { in startSelectionProcess()
192 hDrcDec->selProcOutput.numSelectedDrcSets = 0; in startSelectionProcess()
195 hDrcDec->hSelectionProc, &(hDrcDec->uniDrcConfig), in startSelectionProcess()
196 &(hDrcDec->loudnessInfoSet), &(hDrcDec->selProcOutput)); in startSelectionProcess()
198 hDrcDec->selProcInputDiff = 0; in startSelectionProcess()
199 hDrcDec->uniDrcConfig.diff = 0; in startSelectionProcess()
200 hDrcDec->loudnessInfoSet.diff = 0; in startSelectionProcess()
204 if (hDrcDec->functionalRange & DRC_DEC_GAIN) { in startSelectionProcess()
206 drcDec_GainDecoder_Config(hDrcDec->hGainDec, &(hDrcDec->uniDrcConfig), in startSelectionProcess()
207 hDrcDec->selProcOutput.numSelectedDrcSets, in startSelectionProcess()
208 hDrcDec->selProcOutput.selectedDrcSetIds, in startSelectionProcess()
209 hDrcDec->selProcOutput.selectedDownmixIds); in startSelectionProcess()
225 hDrcDec->functionalRange = functionalRange; in FDK_drcDec_Open()
227 hDrcDec->status = DRC_DEC_NOT_INITIALIZED; in FDK_drcDec_Open()
228 hDrcDec->codecMode = DRC_DEC_CODEC_MODE_UNDEFINED; in FDK_drcDec_Open()
230 if (hDrcDec->functionalRange & DRC_DEC_SELECTION) { in FDK_drcDec_Open()
231 sErr = drcDec_SelectionProcess_Create(&(hDrcDec->hSelectionProc)); in FDK_drcDec_Open()
233 sErr = drcDec_SelectionProcess_Init(hDrcDec->hSelectionProc); in FDK_drcDec_Open()
235 hDrcDec->selProcInputDiff = 1; in FDK_drcDec_Open()
238 if (hDrcDec->functionalRange & DRC_DEC_GAIN) { in FDK_drcDec_Open()
239 dErr = drcDec_GainDecoder_Open(&(hDrcDec->hGainDec)); in FDK_drcDec_Open()
254 if (hDrcDec->codecMode == in FDK_drcDec_SetCodecMode()
257 hDrcDec->codecMode = codecMode; in FDK_drcDec_SetCodecMode()
259 if (hDrcDec->functionalRange & DRC_DEC_SELECTION) { in FDK_drcDec_SetCodecMode()
261 hDrcDec->hSelectionProc, (SEL_PROC_CODEC_MODE)codecMode); in FDK_drcDec_SetCodecMode()
263 hDrcDec->selProcInputDiff = 1; in FDK_drcDec_SetCodecMode()
266 if (hDrcDec->functionalRange & DRC_DEC_GAIN) { in FDK_drcDec_SetCodecMode()
271 switch (hDrcDec->codecMode) { in FDK_drcDec_SetCodecMode()
279 switch (hDrcDec->codecMode) { in FDK_drcDec_SetCodecMode()
309 hDrcDec->hGainDec, delayMode, timeDomainSupported, in FDK_drcDec_SetCodecMode()
316 if (hDrcDec->codecMode != codecMode) return DRC_DEC_NOT_OK; in FDK_drcDec_SetCodecMode()
331 if (hDrcDec->functionalRange & DRC_DEC_SELECTION) { in FDK_drcDec_Init()
333 hDrcDec->hSelectionProc, SEL_PROC_BASE_CHANNEL_COUNT, in FDK_drcDec_Init()
334 (FIXP_DBL)baseChannelCount, &(hDrcDec->selProcInputDiff)); in FDK_drcDec_Init()
337 hDrcDec->hSelectionProc, SEL_PROC_SAMPLE_RATE, (FIXP_DBL)sampleRate, in FDK_drcDec_Init()
338 &(hDrcDec->selProcInputDiff)); in FDK_drcDec_Init()
342 if (hDrcDec->functionalRange & DRC_DEC_GAIN) { in FDK_drcDec_Init()
343 dErr = drcDec_GainDecoder_SetParam(hDrcDec->hGainDec, GAIN_DEC_FRAME_SIZE, in FDK_drcDec_Init()
346 dErr = drcDec_GainDecoder_SetParam(hDrcDec->hGainDec, GAIN_DEC_SAMPLE_RATE, in FDK_drcDec_Init()
349 dErr = drcDec_GainDecoder_Init(hDrcDec->hGainDec); in FDK_drcDec_Init()
353 hDrcDec->status = DRC_DEC_INITIALIZED; in FDK_drcDec_Init()
372 if (hDrcDec->functionalRange & DRC_DEC_GAIN) { in FDK_drcDec_Close()
373 drcDec_GainDecoder_Close(&(hDrcDec->hGainDec)); in FDK_drcDec_Close()
376 if (hDrcDec->functionalRange & DRC_DEC_SELECTION) { in FDK_drcDec_Close()
377 drcDec_SelectionProcess_Delete(&(hDrcDec->hSelectionProc)); in FDK_drcDec_Close()
396 if (hDrcDec->functionalRange & DRC_DEC_GAIN) { in FDK_drcDec_SetParam()
400 hDrcDec->hGainDec, GAIN_DEC_SAMPLE_RATE, (int)requestValue); in FDK_drcDec_SetParam()
405 hDrcDec->hGainDec, GAIN_DEC_FRAME_SIZE, (int)requestValue); in FDK_drcDec_SetParam()
413 if (hDrcDec->functionalRange & DRC_DEC_SELECTION) { in FDK_drcDec_SetParam()
416 sErr = drcDec_SelectionProcess_SetParam(hDrcDec->hSelectionProc, in FDK_drcDec_SetParam()
418 &(hDrcDec->selProcInputDiff)); in FDK_drcDec_SetParam()
422 sErr = drcDec_SelectionProcess_SetParam(hDrcDec->hSelectionProc, in FDK_drcDec_SetParam()
424 &(hDrcDec->selProcInputDiff)); in FDK_drcDec_SetParam()
429 hDrcDec->hSelectionProc, SEL_PROC_LOUDNESS_NORMALIZATION_ON, in FDK_drcDec_SetParam()
430 requestValue, &(hDrcDec->selProcInputDiff)); in FDK_drcDec_SetParam()
435 hDrcDec->hSelectionProc, SEL_PROC_TARGET_LOUDNESS, requestValue, in FDK_drcDec_SetParam()
436 &(hDrcDec->selProcInputDiff)); in FDK_drcDec_SetParam()
441 hDrcDec->hSelectionProc, SEL_PROC_EFFECT_TYPE, requestValue, in FDK_drcDec_SetParam()
442 &(hDrcDec->selProcInputDiff)); in FDK_drcDec_SetParam()
447 hDrcDec->hSelectionProc, SEL_PROC_DOWNMIX_ID, requestValue, in FDK_drcDec_SetParam()
448 &(hDrcDec->selProcInputDiff)); in FDK_drcDec_SetParam()
453 hDrcDec->hSelectionProc, SEL_PROC_TARGET_CHANNEL_COUNT, in FDK_drcDec_SetParam()
454 requestValue, &(hDrcDec->selProcInputDiff)); in FDK_drcDec_SetParam()
459 hDrcDec->hSelectionProc, SEL_PROC_BASE_CHANNEL_COUNT, requestValue, in FDK_drcDec_SetParam()
460 &(hDrcDec->selProcInputDiff)); in FDK_drcDec_SetParam()
465 hDrcDec->hSelectionProc, SEL_PROC_LOUDNESS_MEASUREMENT_METHOD, in FDK_drcDec_SetParam()
466 requestValue, &(hDrcDec->selProcInputDiff)); in FDK_drcDec_SetParam()
471 hDrcDec->hSelectionProc, SEL_PROC_ALBUM_MODE, requestValue, in FDK_drcDec_SetParam()
472 &(hDrcDec->selProcInputDiff)); in FDK_drcDec_SetParam()
480 if (invalidParameter == hDrcDec->functionalRange) in FDK_drcDec_SetParam()
495 return (LONG)hDrcDec->selProcOutput.boost; in FDK_drcDec_GetParam()
497 return (LONG)hDrcDec->selProcOutput.compress; in FDK_drcDec_GetParam()
499 return (LONG)bitstreamContainsMultibandDrc(&hDrcDec->uniDrcConfig, 0); in FDK_drcDec_GetParam()
501 return (LONG)bitstreamContainsMultibandDrc(&hDrcDec->uniDrcConfig, 0x7F); in FDK_drcDec_GetParam()
503 /* MPEG-D DRC is considered active (and overrides MPEG-4 DRC), if in FDK_drcDec_GetParam()
507 hDrcDec->hSelectionProc, SEL_PROC_DYNAMIC_RANGE_CONTROL_ON); in FDK_drcDec_GetParam()
509 hDrcDec->hSelectionProc, SEL_PROC_LOUDNESS_NORMALIZATION_ON); in FDK_drcDec_GetParam()
511 (hDrcDec->loudnessInfoSet.loudnessInfoCount > 0); in FDK_drcDec_GetParam()
513 (hDrcDec->loudnessInfoSet.loudnessInfoAlbumCount > 0); in FDK_drcDec_GetParam()
515 (hDrcDec->uniDrcConfig.drcInstructionsUniDrcCount > 0); in FDK_drcDec_GetParam()
517 (hDrcDec->uniDrcConfig.downmixInstructionsCount > 0); in FDK_drcDec_GetParam()
521 return (LONG)hDrcDec->selProcOutput.targetChannelCount; in FDK_drcDec_GetParam()
523 return (LONG)hDrcDec->selProcOutput.outputLoudness; in FDK_drcDec_GetParam()
557 return &(hDrcDec->selProcOutput); in FDK_drcDec_GetSelectionProcessOutput()
575 hDrcDec->hGainDec, hDrcDec->selProcOutput.loudnessNormalizationGainDb); in FDK_drcDec_SetChannelGains()
578 drcDec_GainDecoder_SetChannelGains(hDrcDec->hGainDec, numChannels, frameSize, in FDK_drcDec_SetChannelGains()
590 if (hDrcDec->codecMode == DRC_DEC_MPEG_D_USAC) { in FDK_drcDec_ReadUniDrcConfig()
591 dErr = drcDec_readUniDrcConfig(hBitstream, &(hDrcDec->uniDrcConfig)); in FDK_drcDec_ReadUniDrcConfig()
597 FDKmemclear(&hDrcDec->uniDrcConfig, sizeof(hDrcDec->uniDrcConfig)); in FDK_drcDec_ReadUniDrcConfig()
598 hDrcDec->uniDrcConfig.diff = 1; in FDK_drcDec_ReadUniDrcConfig()
617 FDKmemclear(&hDrcDec->uniDrcConfig.downmixInstructions, in FDK_drcDec_ReadDownmixInstructions_Box()
618 sizeof(hDrcDec->uniDrcConfig.downmixInstructions)); in FDK_drcDec_ReadDownmixInstructions_Box()
619 hDrcDec->uniDrcConfig.downmixInstructionsCount = 0; in FDK_drcDec_ReadDownmixInstructions_Box()
620 hDrcDec->uniDrcConfig.downmixInstructionsCountV0 = 0; in FDK_drcDec_ReadDownmixInstructions_Box()
621 hDrcDec->uniDrcConfig.downmixInstructionsCountV1 = 0; in FDK_drcDec_ReadDownmixInstructions_Box()
622 hDrcDec->uniDrcConfig.diff = 1; in FDK_drcDec_ReadDownmixInstructions_Box()
641 FDKmemclear(&hDrcDec->uniDrcConfig.drcInstructionsUniDrc, in FDK_drcDec_ReadUniDrcInstructions_Box()
642 sizeof(hDrcDec->uniDrcConfig.drcInstructionsUniDrc)); in FDK_drcDec_ReadUniDrcInstructions_Box()
643 hDrcDec->uniDrcConfig.drcInstructionsUniDrcCount = 0; in FDK_drcDec_ReadUniDrcInstructions_Box()
644 hDrcDec->uniDrcConfig.drcInstructionsUniDrcCountV0 = 0; in FDK_drcDec_ReadUniDrcInstructions_Box()
645 hDrcDec->uniDrcConfig.drcInstructionsUniDrcCountV1 = 0; in FDK_drcDec_ReadUniDrcInstructions_Box()
646 hDrcDec->uniDrcConfig.diff = 1; in FDK_drcDec_ReadUniDrcInstructions_Box()
665 FDKmemclear(&hDrcDec->uniDrcConfig.drcCoefficientsUniDrc, in FDK_drcDec_ReadUniDrcCoefficients_Box()
666 sizeof(hDrcDec->uniDrcConfig.drcCoefficientsUniDrc)); in FDK_drcDec_ReadUniDrcCoefficients_Box()
667 hDrcDec->uniDrcConfig.drcCoefficientsUniDrcCount = 0; in FDK_drcDec_ReadUniDrcCoefficients_Box()
668 hDrcDec->uniDrcConfig.drcCoefficientsUniDrcCountV0 = 0; in FDK_drcDec_ReadUniDrcCoefficients_Box()
669 hDrcDec->uniDrcConfig.drcCoefficientsUniDrcCountV1 = 0; in FDK_drcDec_ReadUniDrcCoefficients_Box()
670 hDrcDec->uniDrcConfig.diff = 1; in FDK_drcDec_ReadUniDrcCoefficients_Box()
685 if (hDrcDec->codecMode == DRC_DEC_MPEG_D_USAC) { in FDK_drcDec_ReadLoudnessInfoSet()
686 dErr = drcDec_readLoudnessInfoSet(hBitstream, &(hDrcDec->loudnessInfoSet)); in FDK_drcDec_ReadLoudnessInfoSet()
692 FDKmemclear(&hDrcDec->loudnessInfoSet, sizeof(hDrcDec->loudnessInfoSet)); in FDK_drcDec_ReadLoudnessInfoSet()
693 hDrcDec->loudnessInfoSet.diff = 1; in FDK_drcDec_ReadLoudnessInfoSet()
712 FDKmemclear(&hDrcDec->loudnessInfoSet, sizeof(hDrcDec->loudnessInfoSet)); in FDK_drcDec_ReadLoudnessBox()
713 hDrcDec->loudnessInfoSet.diff = 1; in FDK_drcDec_ReadLoudnessBox()
727 if (!hDrcDec->status) { in FDK_drcDec_ReadUniDrcGain()
732 hBitstream, &(hDrcDec->uniDrcConfig), in FDK_drcDec_ReadUniDrcGain()
733 drcDec_GainDecoder_GetFrameSize(hDrcDec->hGainDec), in FDK_drcDec_ReadUniDrcGain()
734 drcDec_GainDecoder_GetDeltaTminDefault(hDrcDec->hGainDec), in FDK_drcDec_ReadUniDrcGain()
735 &(hDrcDec->uniDrcGain)); in FDK_drcDec_ReadUniDrcGain()
738 if (_getGainStatus(&(hDrcDec->uniDrcGain))) { in FDK_drcDec_ReadUniDrcGain()
739 hDrcDec->status = DRC_DEC_NEW_GAIN_PAYLOAD; in FDK_drcDec_ReadUniDrcGain()
751 if (!hDrcDec->status) return DRC_DEC_NOT_READY; in FDK_drcDec_ReadUniDrc()
754 hBitstream, &(hDrcDec->uniDrcConfig), &(hDrcDec->loudnessInfoSet), in FDK_drcDec_ReadUniDrc()
755 drcDec_GainDecoder_GetFrameSize(hDrcDec->hGainDec), in FDK_drcDec_ReadUniDrc()
756 drcDec_GainDecoder_GetDeltaTminDefault(hDrcDec->hGainDec), in FDK_drcDec_ReadUniDrc()
757 &(hDrcDec->uniDrcGain)); in FDK_drcDec_ReadUniDrc()
762 if (_getGainStatus(&(hDrcDec->uniDrcGain))) { in FDK_drcDec_ReadUniDrc()
763 hDrcDec->status = DRC_DEC_NEW_GAIN_PAYLOAD; in FDK_drcDec_ReadUniDrc()
774 if (!hDrcDec->status) return DRC_DEC_NOT_READY; in FDK_drcDec_Preprocess()
775 if (!(hDrcDec->functionalRange & DRC_DEC_GAIN)) return DRC_DEC_NOT_OK; in FDK_drcDec_Preprocess()
777 if (hDrcDec->status != DRC_DEC_NEW_GAIN_PAYLOAD) { in FDK_drcDec_Preprocess()
780 drcDec_GainDecoder_Conceal(hDrcDec->hGainDec, &(hDrcDec->uniDrcConfig), in FDK_drcDec_Preprocess()
781 &(hDrcDec->uniDrcGain)); in FDK_drcDec_Preprocess()
785 hDrcDec->hGainDec, &(hDrcDec->uniDrcGain), in FDK_drcDec_Preprocess()
786 hDrcDec->selProcOutput.loudnessNormalizationGainDb, in FDK_drcDec_Preprocess()
787 hDrcDec->selProcOutput.boost, hDrcDec->selProcOutput.compress); in FDK_drcDec_Preprocess()
789 hDrcDec->status = DRC_DEC_INTERPOLATION_PREPARED; in FDK_drcDec_Preprocess()
803 if (!(hDrcDec->functionalRange & DRC_DEC_GAIN)) return DRC_DEC_NOT_OK; in FDK_drcDec_ProcessTime()
804 if (hDrcDec->status != DRC_DEC_INTERPOLATION_PREPARED) in FDK_drcDec_ProcessTime()
808 hDrcDec->hGainDec, delaySamples, (GAIN_DEC_LOCATION)drcLocation, in FDK_drcDec_ProcessTime()
826 if (!(hDrcDec->functionalRange & DRC_DEC_GAIN)) return DRC_DEC_NOT_OK; in FDK_drcDec_ProcessFreq()
827 if (hDrcDec->status != DRC_DEC_INTERPOLATION_PREPARED) in FDK_drcDec_ProcessFreq()
831 hDrcDec->hGainDec, delaySamples, (GAIN_DEC_LOCATION)drcLocation, in FDK_drcDec_ProcessFreq()
843 SEL_PROC_OUTPUT* pSelProcOutput = &(hDrcDec->selProcOutput); in FDK_drcDec_ApplyDownmix()
844 int baseChCnt = pSelProcOutput->baseChannelCount; in FDK_drcDec_ApplyDownmix()
845 int targetChCnt = pSelProcOutput->targetChannelCount; in FDK_drcDec_ApplyDownmix()
846 int frameSize, n, ic, oc; in FDK_drcDec_ApplyDownmix() local
851 if (!(hDrcDec->functionalRange & DRC_DEC_GAIN)) return DRC_DEC_NOT_OK; in FDK_drcDec_ApplyDownmix()
856 if (pSelProcOutput->downmixMatrixPresent == 0) in FDK_drcDec_ApplyDownmix()
868 frameSize = drcDec_GainDecoder_GetFrameSize(hDrcDec->hGainDec); in FDK_drcDec_ApplyDownmix()
874 /* in-place downmix */ in FDK_drcDec_ApplyDownmix()
876 for (oc = 0; oc < targetChCnt; oc++) { in FDK_drcDec_ApplyDownmix()
877 tmp_out[oc] = (FIXP_DBL)0; in FDK_drcDec_ApplyDownmix()
879 tmp_out[oc] += in FDK_drcDec_ApplyDownmix()
881 pSelProcOutput->downmixMatrix[reverseInChannelMap[ic]] in FDK_drcDec_ApplyDownmix()
882 [reverseOutChannelMap[oc]]) in FDK_drcDec_ApplyDownmix()
886 for (oc = 0; oc < targetChCnt; oc++) { in FDK_drcDec_ApplyDownmix()
887 if (oc >= baseChCnt) break; in FDK_drcDec_ApplyDownmix()
888 audioChannels[oc][n] = tmp_out[oc]; in FDK_drcDec_ApplyDownmix()
892 for (oc = targetChCnt; oc < baseChCnt; oc++) { in FDK_drcDec_ApplyDownmix()
893 FDKmemset(audioChannels[oc], 0, frameSize * sizeof(FIXP_DBL)); in FDK_drcDec_ApplyDownmix()