| 1 | /*************************************************************************** |
|---|
| 2 | * (c)2004-2010 Broadcom Corporation |
|---|
| 3 | * |
|---|
| 4 | * This program is the proprietary software of Broadcom Corporation and/or its licensors, |
|---|
| 5 | * and may only be used, duplicated, modified or distributed pursuant to the terms and |
|---|
| 6 | * conditions of a separate, written license agreement executed between you and Broadcom |
|---|
| 7 | * (an "Authorized License"). Except as set forth in an Authorized License, Broadcom grants |
|---|
| 8 | * no license (express or implied), right to use, or waiver of any kind with respect to the |
|---|
| 9 | * Software, and Broadcom expressly reserves all rights in and to the Software and all |
|---|
| 10 | * intellectual property rights therein. IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU |
|---|
| 11 | * HAVE NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY |
|---|
| 12 | * NOTIFY BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE. |
|---|
| 13 | * |
|---|
| 14 | * Except as expressly set forth in the Authorized License, |
|---|
| 15 | * |
|---|
| 16 | * 1. This program, including its structure, sequence and organization, constitutes the valuable trade |
|---|
| 17 | * secrets of Broadcom, and you shall use all reasonable efforts to protect the confidentiality thereof, |
|---|
| 18 | * and to use this information only in connection with your use of Broadcom integrated circuit products. |
|---|
| 19 | * |
|---|
| 20 | * 2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS" |
|---|
| 21 | * AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR |
|---|
| 22 | * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO |
|---|
| 23 | * THE SOFTWARE. BROADCOM SPECIFICALLY DISCLAIMS ANY AND ALL IMPLIED WARRANTIES |
|---|
| 24 | * OF TITLE, MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, |
|---|
| 25 | * LACK OF VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION |
|---|
| 26 | * OR CORRESPONDENCE TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF |
|---|
| 27 | * USE OR PERFORMANCE OF THE SOFTWARE. |
|---|
| 28 | * |
|---|
| 29 | * 3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR ITS |
|---|
| 30 | * LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL, INDIRECT, OR |
|---|
| 31 | * EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY WAY RELATING TO YOUR |
|---|
| 32 | * USE OF OR INABILITY TO USE THE SOFTWARE EVEN IF BROADCOM HAS BEEN ADVISED OF |
|---|
| 33 | * THE POSSIBILITY OF SUCH DAMAGES; OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT |
|---|
| 34 | * ACTUALLY PAID FOR THE SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE |
|---|
| 35 | * LIMITATIONS SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF |
|---|
| 36 | * ANY LIMITED REMEDY. |
|---|
| 37 | * |
|---|
| 38 | * $brcm_Workfile: bape_tru_surround.c $ |
|---|
| 39 | * $brcm_Revision: Hydra_Software_Devel/11 $ |
|---|
| 40 | * $brcm_Date: 8/26/11 4:16p $ |
|---|
| 41 | * |
|---|
| 42 | * API Description: |
|---|
| 43 | * API name: TruSurround |
|---|
| 44 | * Specific APIs related to SRS TruSurround Audio Processing |
|---|
| 45 | * |
|---|
| 46 | * Revision History: |
|---|
| 47 | * |
|---|
| 48 | * $brcm_Log: /magnum/portinginterface/ape/7422/bape_tru_surround.c $ |
|---|
| 49 | * |
|---|
| 50 | * Hydra_Software_Devel/11 8/26/11 4:16p jgarrett |
|---|
| 51 | * SWDTV-8402: Adding debug for user configuration |
|---|
| 52 | * |
|---|
| 53 | * Hydra_Software_Devel/10 7/15/11 5:51p jgarrett |
|---|
| 54 | * SWDTV-6761: Adding StudioSound API |
|---|
| 55 | * |
|---|
| 56 | * Hydra_Software_Devel/9 5/27/11 11:20a jgarrett |
|---|
| 57 | * SW7425-408: Revising format propagation logic |
|---|
| 58 | * |
|---|
| 59 | * Hydra_Software_Devel/8 5/25/11 5:14p jgarrett |
|---|
| 60 | * SW7425-408: Implemted fixed output format |
|---|
| 61 | * |
|---|
| 62 | * Hydra_Software_Devel/7 4/29/11 3:42p jgarrett |
|---|
| 63 | * SW7422-368: Fixing settings structure size in defaults |
|---|
| 64 | * |
|---|
| 65 | * Hydra_Software_Devel/6 4/29/11 11:00a jgarrett |
|---|
| 66 | * SW7422-368: Switching to new GetDefaultSettings routines |
|---|
| 67 | * |
|---|
| 68 | * Hydra_Software_Devel/5 4/19/11 11:10a piyushg |
|---|
| 69 | * SW7422-353: Settings the DSP Input Acmod and LFE present flag based on |
|---|
| 70 | * certification is enabled or not. |
|---|
| 71 | * |
|---|
| 72 | * Hydra_Software_Devel/4 4/19/11 11:08a piyushg |
|---|
| 73 | * SW7422-353: Settings the DSP Input Acmod and LFE present flag based on |
|---|
| 74 | * certification is enabled or not. |
|---|
| 75 | * |
|---|
| 76 | * Hydra_Software_Devel/3 4/19/11 10:15a piyushg |
|---|
| 77 | * SW7422-353: Added APE/Nexus support for SRS TruSurroundHD. |
|---|
| 78 | * |
|---|
| 79 | * Hydra_Software_Devel/2 2/22/11 5:43p jgarrett |
|---|
| 80 | * SW7422-146: Implemented type renaming based on filter graph review |
|---|
| 81 | * comments |
|---|
| 82 | * |
|---|
| 83 | * Hydra_Software_Devel/1 1/12/11 4:24p jgarrett |
|---|
| 84 | * SW7422-146: Adding additional APIs |
|---|
| 85 | * |
|---|
| 86 | ***************************************************************************/ |
|---|
| 87 | |
|---|
| 88 | #include "bape.h" |
|---|
| 89 | #include "bape_priv.h" |
|---|
| 90 | #include "bdsp_raaga.h" |
|---|
| 91 | |
|---|
| 92 | BDBG_MODULE(bape_tru_surround); |
|---|
| 93 | |
|---|
| 94 | BDBG_OBJECT_ID(BAPE_TruSurroundHd); |
|---|
| 95 | |
|---|
| 96 | typedef struct BAPE_TruSurroundHd |
|---|
| 97 | { |
|---|
| 98 | BDBG_OBJECT(BAPE_TruSurroundHd) |
|---|
| 99 | BAPE_PathNode node; |
|---|
| 100 | BAPE_TruSurroundHdSettings settings; |
|---|
| 101 | BAPE_Connector input; |
|---|
| 102 | } BAPE_TruSurroundHd; |
|---|
| 103 | |
|---|
| 104 | static BERR_Code BAPE_TruSurroundHd_P_ConnectorSupported(struct BAPE_PathNode *pNode, BAPE_PathConnector *pConnector); |
|---|
| 105 | static BERR_Code BAPE_TruSurroundHd_P_AllocatePathFromInput(struct BAPE_PathNode *pNode, struct BAPE_PathConnection *pConnection); |
|---|
| 106 | static BERR_Code BAPE_TruSurroundHd_P_ConfigPathFromInput(struct BAPE_PathNode *pNode, struct BAPE_PathConnection *pConnection); |
|---|
| 107 | static BERR_Code BAPE_TruSurroundHd_P_ApplyTruSurroundHdSettings(BAPE_TruSurroundHdHandle handle, BDSP_TaskHandle task, unsigned branchId, unsigned stageId); |
|---|
| 108 | static void BAPE_TruSurroundHd_P_StopPathFromInput(struct BAPE_PathNode *pNode, struct BAPE_PathConnection *pConnection); |
|---|
| 109 | static void BAPE_TruSurroundHd_P_RemoveInputCallback(struct BAPE_PathNode *pNode, BAPE_PathConnector *pConnector); |
|---|
| 110 | |
|---|
| 111 | /*************************************************************************** |
|---|
| 112 | Summary: |
|---|
| 113 | Get default settings for an SRS TruSurround HD stage |
|---|
| 114 | ***************************************************************************/ |
|---|
| 115 | void BAPE_TruSurroundHd_GetDefaultSettings( |
|---|
| 116 | BAPE_TruSurroundHdSettings *pSettings /* [out] default settings */ |
|---|
| 117 | ) |
|---|
| 118 | { |
|---|
| 119 | BDSP_Raaga_Audio_TruSurrndHDConfigParams dspSettings; |
|---|
| 120 | |
|---|
| 121 | BDBG_ASSERT(NULL != pSettings); |
|---|
| 122 | BKNI_Memset(pSettings, 0, sizeof(*pSettings)); |
|---|
| 123 | BDSP_Raaga_GetDefaultAudioProcessingSettings(BDSP_AudioProcessing_eSrsHd, |
|---|
| 124 | (void *)&dspSettings, |
|---|
| 125 | sizeof(dspSettings) |
|---|
| 126 | ); |
|---|
| 127 | |
|---|
| 128 | pSettings->enabled = dspSettings.i32TruSurrndHDEnableFlag?true:false; |
|---|
| 129 | pSettings->headphoneEnabled = dspSettings.i32HeadPhoneEnableFlag?true:false; |
|---|
| 130 | pSettings->monoToStereoEnabled = dspSettings.i32Mono2StereoEnableFlag?true:false; |
|---|
| 131 | pSettings->dialogClarityEnabled = dspSettings.i32DialogClarityEnableFlag?true:false; |
|---|
| 132 | pSettings->dialogClarityLevel = 50; |
|---|
| 133 | BDBG_ASSERT(0x40000000 == dspSettings.i32DialogClarityCtrl); /*Assert when the default value changes in FW so that we can adjust values in PI*/ |
|---|
| 134 | pSettings->truBassEnabled = dspSettings.i32TruBassFrontEnableFlag?true:false; |
|---|
| 135 | pSettings->truBassLevel = 30; |
|---|
| 136 | BDBG_ASSERT(0x26666666 == dspSettings.i32TruBassFrontCtrl); |
|---|
| 137 | |
|---|
| 138 | switch (dspSettings.eTruBassFrontSpeakerSize) { |
|---|
| 139 | case BDSP_Raaga_Audio_SpeakerSize_eLFResponse40Hz: |
|---|
| 140 | pSettings->speakerSize = BAPE_TruBassSpeakerSize_e40Hz; |
|---|
| 141 | break; |
|---|
| 142 | case BDSP_Raaga_Audio_SpeakerSize_eLFResponse60Hz: |
|---|
| 143 | pSettings->speakerSize = BAPE_TruBassSpeakerSize_e60Hz; |
|---|
| 144 | break; |
|---|
| 145 | case BDSP_Raaga_Audio_SpeakerSize_eLFResponse100Hz: |
|---|
| 146 | pSettings->speakerSize = BAPE_TruBassSpeakerSize_e100Hz; |
|---|
| 147 | break; |
|---|
| 148 | case BDSP_Raaga_Audio_SpeakerSize_eLFResponse150Hz: |
|---|
| 149 | pSettings->speakerSize = BAPE_TruBassSpeakerSize_e150Hz; |
|---|
| 150 | break; |
|---|
| 151 | case BDSP_Raaga_Audio_SpeakerSize_eLFResponse200Hz: |
|---|
| 152 | pSettings->speakerSize = BAPE_TruBassSpeakerSize_e200Hz; |
|---|
| 153 | break; |
|---|
| 154 | case BDSP_Raaga_Audio_SpeakerSize_eLFResponse250Hz: |
|---|
| 155 | pSettings->speakerSize = BAPE_TruBassSpeakerSize_e250Hz; |
|---|
| 156 | break; |
|---|
| 157 | case BDSP_Raaga_Audio_SpeakerSize_eLFResponse300Hz: |
|---|
| 158 | pSettings->speakerSize = BAPE_TruBassSpeakerSize_e300Hz; |
|---|
| 159 | break; |
|---|
| 160 | case BDSP_Raaga_Audio_SpeakerSize_eLFResponse400Hz: |
|---|
| 161 | pSettings->speakerSize = BAPE_TruBassSpeakerSize_e400Hz; |
|---|
| 162 | break; |
|---|
| 163 | default: |
|---|
| 164 | pSettings->speakerSize = BAPE_TruBassSpeakerSize_eMax; |
|---|
| 165 | break; |
|---|
| 166 | } |
|---|
| 167 | |
|---|
| 168 | switch (dspSettings.eSRSTruBassProcessMode) { |
|---|
| 169 | case BDSP_Raaga_Audio_SRSTruBassProcessMode_eMono: |
|---|
| 170 | pSettings->truBassMode = BAPE_TruBassMode_eMono; |
|---|
| 171 | break; |
|---|
| 172 | case BDSP_Raaga_Audio_SRSTruBassProcessMode_eStereo: |
|---|
| 173 | pSettings->truBassMode = BAPE_TruBassMode_eStereo; |
|---|
| 174 | break; |
|---|
| 175 | default: |
|---|
| 176 | pSettings->truBassMode = BAPE_TruBassMode_eMax; |
|---|
| 177 | break; |
|---|
| 178 | } |
|---|
| 179 | pSettings->inputGain = 50; |
|---|
| 180 | pSettings->outputGain = 100; |
|---|
| 181 | pSettings->bypassGain = 100; |
|---|
| 182 | BDBG_ASSERT(0x40000000 == dspSettings.i32TruSurrndHDInputGain); |
|---|
| 183 | BDBG_ASSERT(0x7fffffff == dspSettings.i32TruSurrndHDOutputGain); |
|---|
| 184 | BDBG_ASSERT(0x7fffffff == dspSettings.i32TruSurrndHDByPassGain); |
|---|
| 185 | |
|---|
| 186 | pSettings->definitionEnabled = dspSettings.i32DefinitionFrontEnableFlag?true:false; |
|---|
| 187 | pSettings->definitionLevel = 30; |
|---|
| 188 | BDBG_ASSERT(0x26666666 == dspSettings.i32DefinitionFrontCtrl); |
|---|
| 189 | |
|---|
| 190 | pSettings->surroundLevel = 60; |
|---|
| 191 | BDBG_ASSERT(0x4CCCCCCD == dspSettings.i32SurroundLevel); |
|---|
| 192 | |
|---|
| 193 | pSettings->wowHdEnabled = dspSettings.i32WowHDSRS3DEnableFlag?true:false; |
|---|
| 194 | pSettings->wowHdHighBitRateEnabled = dspSettings.i32SRS3DHighBitRateFlag?true:false; |
|---|
| 195 | pSettings->wowHdFocusEnabled = dspSettings.i32WowHDFocusEnableFlag?true:false; |
|---|
| 196 | |
|---|
| 197 | switch (dspSettings.eWowHDSRS3DMode) { |
|---|
| 198 | case BDSP_Raaga_Audio_SRS3DMode_eMono: |
|---|
| 199 | pSettings->wowHdMode = BAPE_WowHdMode_eMono; |
|---|
| 200 | break; |
|---|
| 201 | case BDSP_Raaga_Audio_SRS3DMode_eSingleSpeaker: |
|---|
| 202 | pSettings->wowHdMode = BAPE_WowHdMode_eSingleSpeaker; |
|---|
| 203 | break; |
|---|
| 204 | case BDSP_Raaga_Audio_SRS3DMode_eStereo: |
|---|
| 205 | pSettings->wowHdMode = BAPE_WowHdMode_eStereo; |
|---|
| 206 | break; |
|---|
| 207 | case BDSP_Raaga_Audio_SRS3DMode_eExtreme: |
|---|
| 208 | pSettings->wowHdMode = BAPE_WowHdMode_eExtreme; |
|---|
| 209 | break; |
|---|
| 210 | default: |
|---|
| 211 | pSettings->wowHdMode = BAPE_WowHdMode_eMax; |
|---|
| 212 | break; |
|---|
| 213 | } |
|---|
| 214 | |
|---|
| 215 | pSettings->wowHdFocusLevel = 40; |
|---|
| 216 | pSettings->wowHdCenterLevel = 50; |
|---|
| 217 | pSettings->wowHdSpaceLevel = 80; |
|---|
| 218 | BDBG_ASSERT(0x33333333 == dspSettings.i32WowHDFocusCtrl); |
|---|
| 219 | BDBG_ASSERT(0x40000000 == dspSettings.i32WowHDSRS3DCenterCtrl); |
|---|
| 220 | BDBG_ASSERT(0x66666666 == dspSettings.i32WowHDSRS3DSpaceCtrl); |
|---|
| 221 | |
|---|
| 222 | pSettings->certificationApp = dspSettings.i32CertificationEnableFlag?true:false; |
|---|
| 223 | pSettings->inputLfeEnabled = dspSettings.i32InputLFEPresentFlag?true:false; |
|---|
| 224 | |
|---|
| 225 | switch (dspSettings.eInputAcMode) { |
|---|
| 226 | case BDSP_Raaga_Audio_AcMode_eMode10: |
|---|
| 227 | pSettings->inputAcmod = BAPE_TruSurroundHdAcmod_e1_0_C; |
|---|
| 228 | break; |
|---|
| 229 | case BDSP_Raaga_Audio_AcMode_eMode20: |
|---|
| 230 | pSettings->inputAcmod = BAPE_TruSurroundHdAcmod_e2_0_LR; |
|---|
| 231 | break; |
|---|
| 232 | case BDSP_Raaga_Audio_AcMode_eMode30: |
|---|
| 233 | pSettings->inputAcmod = BAPE_TruSurroundHdAcmod_e3_0_LCR; |
|---|
| 234 | break; |
|---|
| 235 | case BDSP_Raaga_Audio_AcMode_eMode21: |
|---|
| 236 | pSettings->inputAcmod = BAPE_TruSurroundHdAcmod_e2_1_LRS; |
|---|
| 237 | break; |
|---|
| 238 | case BDSP_Raaga_Audio_AcMode_eMode31: |
|---|
| 239 | pSettings->inputAcmod = BAPE_TruSurroundHdAcmod_e3_1_LCRS; |
|---|
| 240 | break; |
|---|
| 241 | case BDSP_Raaga_Audio_AcMode_eMode22: |
|---|
| 242 | pSettings->inputAcmod = BAPE_TruSurroundHdAcmod_e2_2_LRLsRs; |
|---|
| 243 | break; |
|---|
| 244 | case BDSP_Raaga_Audio_AcMode_eMode32: |
|---|
| 245 | pSettings->inputAcmod = BAPE_TruSurroundHdAcmod_e3_2_LCRLsRs; |
|---|
| 246 | break; |
|---|
| 247 | case BDSP_Raaga_Audio_AcMode_eMode33: |
|---|
| 248 | pSettings->inputAcmod = BAPE_TruSurroundHdAcmod_e3_3_LCRLsRsCs; |
|---|
| 249 | break; |
|---|
| 250 | case BDSP_Raaga_Audio_AcMode_eMode32_BSDigital: |
|---|
| 251 | pSettings->inputAcmod = BAPE_TruSurroundHdAcmod_e3_2_BSDigital; |
|---|
| 252 | break; |
|---|
| 253 | case BDSP_Raaga_Audio_AcMode_eModeLtRt: |
|---|
| 254 | pSettings->inputAcmod = BAPE_TruSurroundHdAcmod_eLtRt; |
|---|
| 255 | break; |
|---|
| 256 | case BDSP_Raaga_Audio_AcMode_eModePLII_Movie: |
|---|
| 257 | pSettings->inputAcmod = BAPE_TruSurroundHdAcmod_ePLII_Movie; |
|---|
| 258 | break; |
|---|
| 259 | case BDSP_Raaga_Audio_AcMode_eModePLII_Music: |
|---|
| 260 | pSettings->inputAcmod = BAPE_TruSurroundHdAcmod_ePLII_Music; |
|---|
| 261 | break; |
|---|
| 262 | case BDSP_Raaga_Audio_AcMode_eModePassiveMatrix: |
|---|
| 263 | pSettings->inputAcmod = BAPE_TruSurroundHdAcmod_ePassiveMatrix; |
|---|
| 264 | break; |
|---|
| 265 | case BDSP_Raaga_Audio_AcMode_eModeCSII: |
|---|
| 266 | pSettings->inputAcmod = BAPE_TruSurroundHdAcmod_eCSII; |
|---|
| 267 | break; |
|---|
| 268 | default: |
|---|
| 269 | pSettings->inputAcmod = BAPE_TruSurroundHdAcmod_eMax; |
|---|
| 270 | break; |
|---|
| 271 | } |
|---|
| 272 | } |
|---|
| 273 | |
|---|
| 274 | /*************************************************************************** |
|---|
| 275 | Summary: |
|---|
| 276 | Open an SRS TruSurround HD stage |
|---|
| 277 | ***************************************************************************/ |
|---|
| 278 | BERR_Code BAPE_TruSurroundHd_Create( |
|---|
| 279 | BAPE_Handle deviceHandle, |
|---|
| 280 | const BAPE_TruSurroundHdSettings *pSettings, |
|---|
| 281 | BAPE_TruSurroundHdHandle *pHandle /* [out] */ |
|---|
| 282 | ) |
|---|
| 283 | { |
|---|
| 284 | BAPE_TruSurroundHdHandle handle; |
|---|
| 285 | |
|---|
| 286 | BDBG_OBJECT_ASSERT(deviceHandle, BAPE_Device); |
|---|
| 287 | BDBG_ASSERT(NULL != pSettings); |
|---|
| 288 | BDBG_ASSERT(NULL != pHandle); |
|---|
| 289 | |
|---|
| 290 | |
|---|
| 291 | handle = BKNI_Malloc(sizeof(BAPE_TruSurroundHd)); |
|---|
| 292 | if ( NULL == handle ) |
|---|
| 293 | { |
|---|
| 294 | return BERR_TRACE(BERR_OUT_OF_SYSTEM_MEMORY); |
|---|
| 295 | } |
|---|
| 296 | |
|---|
| 297 | BKNI_Memset(handle, 0, sizeof(BAPE_TruSurroundHd)); |
|---|
| 298 | BDBG_OBJECT_SET(handle, BAPE_TruSurroundHd); |
|---|
| 299 | handle->settings = *pSettings; |
|---|
| 300 | BAPE_P_InitPathNode(&handle->node, BAPE_PathNodeType_ePostProcessor, BAPE_PostProcessorType_eTruSurround, 1, deviceHandle, handle); |
|---|
| 301 | handle->node.pName = "TruSurroundHd"; |
|---|
| 302 | handle->node.paths[0].connector.numChannelPairs = 1; /* Only output stereo */ |
|---|
| 303 | handle->node.paths[0].connector.useBufferPool = true; |
|---|
| 304 | handle->node.paths[0].connector.dataSource = BAPE_DataSource_eDspBuffer; |
|---|
| 305 | |
|---|
| 306 | /* Generic Routines */ |
|---|
| 307 | handle->node.allocatePathToOutput = BAPE_DSP_P_AllocatePathToOutput; |
|---|
| 308 | handle->node.configPathToOutput = BAPE_DSP_P_ConfigPathToOutput; |
|---|
| 309 | handle->node.stopPathToOutput = BAPE_DSP_P_StopPathToOutput; |
|---|
| 310 | handle->node.startPathToOutput = BAPE_DSP_P_StartPathToOutput; |
|---|
| 311 | handle->node.stopPathToOutput = BAPE_DSP_P_StopPathToOutput; |
|---|
| 312 | |
|---|
| 313 | /* TruSurroundHd Specifics */ |
|---|
| 314 | handle->node.connectorSupported = BAPE_TruSurroundHd_P_ConnectorSupported; |
|---|
| 315 | handle->node.allocatePathFromInput = BAPE_TruSurroundHd_P_AllocatePathFromInput; |
|---|
| 316 | handle->node.configPathFromInput = BAPE_TruSurroundHd_P_ConfigPathFromInput; |
|---|
| 317 | handle->node.stopPathFromInput = BAPE_TruSurroundHd_P_StopPathFromInput; |
|---|
| 318 | handle->node.removeInput = BAPE_TruSurroundHd_P_RemoveInputCallback; |
|---|
| 319 | |
|---|
| 320 | *pHandle = handle; |
|---|
| 321 | return BERR_SUCCESS; |
|---|
| 322 | } |
|---|
| 323 | |
|---|
| 324 | /*************************************************************************** |
|---|
| 325 | Summary: |
|---|
| 326 | Close an SRS TruSurround HD stage |
|---|
| 327 | |
|---|
| 328 | Description: |
|---|
| 329 | Input to the stage must be removed prior to closing. |
|---|
| 330 | ***************************************************************************/ |
|---|
| 331 | void BAPE_TruSurroundHd_Destroy( |
|---|
| 332 | BAPE_TruSurroundHdHandle handle |
|---|
| 333 | ) |
|---|
| 334 | { |
|---|
| 335 | bool running; |
|---|
| 336 | BDBG_OBJECT_ASSERT(handle, BAPE_TruSurroundHd); |
|---|
| 337 | running = (handle->node.paths[0].connector.task != NULL)?true:false; |
|---|
| 338 | BDBG_ASSERT(false == running); |
|---|
| 339 | BDBG_ASSERT(NULL == handle->input); |
|---|
| 340 | BDBG_OBJECT_DESTROY(handle, BAPE_TruSurroundHd); |
|---|
| 341 | BKNI_Free(handle); |
|---|
| 342 | } |
|---|
| 343 | |
|---|
| 344 | /*************************************************************************** |
|---|
| 345 | Summary: |
|---|
| 346 | Get Settings for an SRS TruSurround HD stage |
|---|
| 347 | ***************************************************************************/ |
|---|
| 348 | void BAPE_TruSurroundHd_GetSettings( |
|---|
| 349 | BAPE_TruSurroundHdHandle handle, |
|---|
| 350 | BAPE_TruSurroundHdSettings *pSettings /* [out] Settings */ |
|---|
| 351 | ) |
|---|
| 352 | { |
|---|
| 353 | BDBG_OBJECT_ASSERT(handle, BAPE_TruSurroundHd); |
|---|
| 354 | BDBG_ASSERT(NULL != pSettings); |
|---|
| 355 | *pSettings = handle->settings; |
|---|
| 356 | } |
|---|
| 357 | |
|---|
| 358 | /*************************************************************************** |
|---|
| 359 | Summary: |
|---|
| 360 | Set Settings for an SRS TruSurround HD stage |
|---|
| 361 | ***************************************************************************/ |
|---|
| 362 | BERR_Code BAPE_TruSurroundHd_SetSettings( |
|---|
| 363 | BAPE_TruSurroundHdHandle handle, |
|---|
| 364 | const BAPE_TruSurroundHdSettings *pSettings |
|---|
| 365 | ) |
|---|
| 366 | { |
|---|
| 367 | BERR_Code errCode; |
|---|
| 368 | BDBG_OBJECT_ASSERT(handle, BAPE_TruSurroundHd); |
|---|
| 369 | BDBG_ASSERT(NULL != pSettings); |
|---|
| 370 | |
|---|
| 371 | /* Start time will always call this routine, don't copy the settings if we don't need to */ |
|---|
| 372 | if ( pSettings != &handle->settings ) |
|---|
| 373 | { |
|---|
| 374 | handle->settings = *pSettings; |
|---|
| 375 | } |
|---|
| 376 | |
|---|
| 377 | if ( handle->node.paths[0].connector.task != NULL ) |
|---|
| 378 | { |
|---|
| 379 | errCode = BAPE_TruSurroundHd_P_ApplyTruSurroundHdSettings(handle, |
|---|
| 380 | handle->node.paths[0].connector.task, |
|---|
| 381 | handle->node.paths[0].connector.branchId, |
|---|
| 382 | handle->node.paths[0].connector.stageId); |
|---|
| 383 | if ( errCode ) |
|---|
| 384 | { |
|---|
| 385 | return BERR_TRACE(errCode); |
|---|
| 386 | } |
|---|
| 387 | } |
|---|
| 388 | |
|---|
| 389 | return BERR_SUCCESS; |
|---|
| 390 | } |
|---|
| 391 | |
|---|
| 392 | /*************************************************************************** |
|---|
| 393 | Summary: |
|---|
| 394 | Get the audio connector for an SRS TruSurround HD stage |
|---|
| 395 | ***************************************************************************/ |
|---|
| 396 | void BAPE_TruSurroundHd_GetConnector( |
|---|
| 397 | BAPE_TruSurroundHdHandle handle, |
|---|
| 398 | BAPE_Connector *pConnector |
|---|
| 399 | ) |
|---|
| 400 | { |
|---|
| 401 | BDBG_OBJECT_ASSERT(handle, BAPE_TruSurroundHd); |
|---|
| 402 | BDBG_ASSERT(NULL != pConnector); |
|---|
| 403 | *pConnector = &handle->node.paths[0].connector; |
|---|
| 404 | } |
|---|
| 405 | |
|---|
| 406 | /*************************************************************************** |
|---|
| 407 | Summary: |
|---|
| 408 | Add an input to this processing stage |
|---|
| 409 | ***************************************************************************/ |
|---|
| 410 | BERR_Code BAPE_TruSurroundHd_AddInput( |
|---|
| 411 | BAPE_TruSurroundHdHandle handle, |
|---|
| 412 | BAPE_Connector input |
|---|
| 413 | ) |
|---|
| 414 | { |
|---|
| 415 | BERR_Code errCode; |
|---|
| 416 | BDBG_OBJECT_ASSERT(handle, BAPE_TruSurroundHd); |
|---|
| 417 | BDBG_OBJECT_ASSERT(input, BAPE_PathConnector); |
|---|
| 418 | if ( NULL != handle->input ) |
|---|
| 419 | { |
|---|
| 420 | BDBG_ERR(("Can not have more than one input")); |
|---|
| 421 | return BERR_TRACE(BERR_NOT_SUPPORTED); |
|---|
| 422 | } |
|---|
| 423 | errCode = BAPE_PathNode_P_AddInput(&handle->node, input); |
|---|
| 424 | if ( errCode ) |
|---|
| 425 | { |
|---|
| 426 | return BERR_TRACE(errCode); |
|---|
| 427 | } |
|---|
| 428 | handle->input = input; |
|---|
| 429 | return BERR_SUCCESS; |
|---|
| 430 | } |
|---|
| 431 | |
|---|
| 432 | /*************************************************************************** |
|---|
| 433 | Summary: |
|---|
| 434 | Remove an input from this processing stage |
|---|
| 435 | ***************************************************************************/ |
|---|
| 436 | BERR_Code BAPE_TruSurroundHd_RemoveInput( |
|---|
| 437 | BAPE_TruSurroundHdHandle handle, |
|---|
| 438 | BAPE_Connector input |
|---|
| 439 | ) |
|---|
| 440 | { |
|---|
| 441 | BERR_Code errCode; |
|---|
| 442 | BDBG_OBJECT_ASSERT(handle, BAPE_TruSurroundHd); |
|---|
| 443 | BDBG_OBJECT_ASSERT(input, BAPE_PathConnector); |
|---|
| 444 | if ( input != handle->input ) |
|---|
| 445 | { |
|---|
| 446 | BDBG_ERR(("Input %s %s (%#x) is not connected", input->pParent->pName, input->pName, input)); |
|---|
| 447 | return BERR_TRACE(BERR_INVALID_PARAMETER); |
|---|
| 448 | } |
|---|
| 449 | errCode = BAPE_PathNode_P_RemoveInput(&handle->node, input); |
|---|
| 450 | if ( errCode ) |
|---|
| 451 | { |
|---|
| 452 | return BERR_TRACE(errCode); |
|---|
| 453 | } |
|---|
| 454 | handle->input = NULL; |
|---|
| 455 | return BERR_SUCCESS; |
|---|
| 456 | } |
|---|
| 457 | |
|---|
| 458 | /*************************************************************************** |
|---|
| 459 | Summary: |
|---|
| 460 | Remove all inputs from this processing stage |
|---|
| 461 | ***************************************************************************/ |
|---|
| 462 | BERR_Code BAPE_TruSurroundHd_RemoveAllInputs( |
|---|
| 463 | BAPE_TruSurroundHdHandle handle |
|---|
| 464 | ) |
|---|
| 465 | { |
|---|
| 466 | BDBG_OBJECT_ASSERT(handle, BAPE_TruSurroundHd); |
|---|
| 467 | if ( handle->input ) |
|---|
| 468 | { |
|---|
| 469 | return BAPE_TruSurroundHd_RemoveInput(handle, handle->input); |
|---|
| 470 | } |
|---|
| 471 | return BERR_SUCCESS; |
|---|
| 472 | } |
|---|
| 473 | |
|---|
| 474 | static BERR_Code BAPE_TruSurroundHd_P_ConnectorSupported(struct BAPE_PathNode *pNode, BAPE_PathConnector *pConnector) |
|---|
| 475 | { |
|---|
| 476 | BDBG_OBJECT_ASSERT(pNode, BAPE_PathNode); |
|---|
| 477 | BDBG_OBJECT_ASSERT(pConnector, BAPE_PathConnector); |
|---|
| 478 | if ( pConnector->dataSource == BAPE_DataSource_eDspBuffer && |
|---|
| 479 | !pConnector->compressed ) |
|---|
| 480 | { |
|---|
| 481 | return BERR_SUCCESS; |
|---|
| 482 | } |
|---|
| 483 | else |
|---|
| 484 | { |
|---|
| 485 | BDBG_ERR(("Only PCM uncompressed DSP input is supported")); |
|---|
| 486 | return BERR_TRACE(BERR_INVALID_PARAMETER); |
|---|
| 487 | } |
|---|
| 488 | } |
|---|
| 489 | |
|---|
| 490 | |
|---|
| 491 | static BERR_Code BAPE_TruSurroundHd_P_AllocatePathFromInput(struct BAPE_PathNode *pNode, struct BAPE_PathConnection *pConnection) |
|---|
| 492 | { |
|---|
| 493 | BERR_Code errCode; |
|---|
| 494 | BAPE_TruSurroundHdHandle handle; |
|---|
| 495 | BDBG_OBJECT_ASSERT(pNode, BAPE_PathNode); |
|---|
| 496 | BDBG_OBJECT_ASSERT(pConnection, BAPE_PathConnection); |
|---|
| 497 | BDBG_ASSERT(NULL != pConnection->pSource->pTaskCreateSettings); |
|---|
| 498 | handle = pNode->pHandle; |
|---|
| 499 | BDBG_OBJECT_ASSERT(handle, BAPE_TruSurroundHd); |
|---|
| 500 | /* Add stage to CIT and propagate task settings */ |
|---|
| 501 | errCode = BAPE_DSP_P_AddProcessingStage(pConnection->pSource->pTaskCreateSettings, pConnection->pSource->branchId, pConnection->pSource->stageId, |
|---|
| 502 | BAPE_DSP_P_GetDataTypeFromConnector(handle->input), |
|---|
| 503 | BDSP_AudioProcessing_eSrsHd, |
|---|
| 504 | false, |
|---|
| 505 | &pNode->paths[0].connector.branchId, &pNode->paths[0].connector.stageId); |
|---|
| 506 | if ( errCode ) |
|---|
| 507 | { |
|---|
| 508 | return BERR_TRACE(errCode); |
|---|
| 509 | } |
|---|
| 510 | pNode->paths[0].connector.pTaskCreateSettings = pConnection->pSource->pTaskCreateSettings; |
|---|
| 511 | return BERR_SUCCESS; |
|---|
| 512 | } |
|---|
| 513 | |
|---|
| 514 | static BERR_Code BAPE_TruSurroundHd_P_ConfigPathFromInput(struct BAPE_PathNode *pNode, struct BAPE_PathConnection *pConnection) |
|---|
| 515 | { |
|---|
| 516 | BERR_Code errCode; |
|---|
| 517 | BAPE_TruSurroundHdHandle handle; |
|---|
| 518 | BDBG_OBJECT_ASSERT(pNode, BAPE_PathNode); |
|---|
| 519 | BDBG_OBJECT_ASSERT(pConnection, BAPE_PathConnection); |
|---|
| 520 | BDBG_ASSERT(NULL != pConnection->pSource->task); |
|---|
| 521 | |
|---|
| 522 | handle = pNode->pHandle; |
|---|
| 523 | BDBG_OBJECT_ASSERT(handle, BAPE_TruSurroundHd); |
|---|
| 524 | pNode->paths[0].connector.task = pConnection->pSource->task; |
|---|
| 525 | errCode = BAPE_TruSurroundHd_P_ApplyTruSurroundHdSettings(handle, |
|---|
| 526 | handle->node.paths[0].connector.task, |
|---|
| 527 | handle->node.paths[0].connector.branchId, |
|---|
| 528 | handle->node.paths[0].connector.stageId); |
|---|
| 529 | if ( errCode ) |
|---|
| 530 | { |
|---|
| 531 | return BERR_TRACE(errCode); |
|---|
| 532 | } |
|---|
| 533 | |
|---|
| 534 | return BERR_SUCCESS; |
|---|
| 535 | } |
|---|
| 536 | |
|---|
| 537 | BERR_Code BAPE_TruSurroundHd_P_ConvertSettingsToDsp( |
|---|
| 538 | const BAPE_TruSurroundHdSettings *pSettings, |
|---|
| 539 | unsigned numChannelPairs, |
|---|
| 540 | BDSP_Raaga_Audio_TruSurrndHDConfigParams *pUserConfig |
|---|
| 541 | ) |
|---|
| 542 | { |
|---|
| 543 | BDBG_ASSERT(NULL != pSettings); |
|---|
| 544 | BDBG_ASSERT(NULL != pUserConfig); |
|---|
| 545 | |
|---|
| 546 | pUserConfig->i32TruSurrndHDEnableFlag = pSettings->enabled?1:0; |
|---|
| 547 | BDBG_MSG(("i32TruSurrndHDEnableFlag: %u", pUserConfig->i32TruSurrndHDEnableFlag)); |
|---|
| 548 | pUserConfig->i32HeadPhoneEnableFlag = pSettings->headphoneEnabled?1:0; |
|---|
| 549 | BDBG_MSG(("i32HeadPhoneEnableFlag: %u", pUserConfig->i32HeadPhoneEnableFlag)); |
|---|
| 550 | pUserConfig->i32TruSurrndHDInputGain = BAPE_P_FloatToQ131(pSettings->inputGain, 100); |
|---|
| 551 | BDBG_MSG(("i32TruSurrndHDInputGain: %u", pUserConfig->i32TruSurrndHDInputGain)); |
|---|
| 552 | pUserConfig->i32TruSurrndHDOutputGain = BAPE_P_FloatToQ131(pSettings->outputGain, 100); |
|---|
| 553 | BDBG_MSG(("i32TruSurrndHDOutputGain: %u", pUserConfig->i32TruSurrndHDOutputGain)); |
|---|
| 554 | pUserConfig->i32TruSurrndHDByPassGain = BAPE_P_FloatToQ131(pSettings->bypassGain, 100); |
|---|
| 555 | BDBG_MSG(("i32TruSurrndHDByPassGain: %u", pUserConfig->i32TruSurrndHDByPassGain)); |
|---|
| 556 | pUserConfig->i32TruBassFrontEnableFlag = pSettings->truBassEnabled?1:0; |
|---|
| 557 | BDBG_MSG(("i32TruBassFrontEnableFlag: %u", pUserConfig->i32TruBassFrontEnableFlag)); |
|---|
| 558 | pUserConfig->i32TruBassFrontCtrl = BAPE_P_FloatToQ131(pSettings->truBassLevel, 100); |
|---|
| 559 | BDBG_MSG(("i32TruBassFrontCtrl: %u", pUserConfig->i32TruBassFrontCtrl)); |
|---|
| 560 | switch (pSettings->speakerSize) { |
|---|
| 561 | case BAPE_TruBassSpeakerSize_e40Hz: |
|---|
| 562 | pUserConfig->eTruBassFrontSpeakerSize = BDSP_Raaga_Audio_SpeakerSize_eLFResponse40Hz; |
|---|
| 563 | break; |
|---|
| 564 | case BAPE_TruBassSpeakerSize_e60Hz: |
|---|
| 565 | pUserConfig->eTruBassFrontSpeakerSize = BDSP_Raaga_Audio_SpeakerSize_eLFResponse60Hz; |
|---|
| 566 | break; |
|---|
| 567 | case BAPE_TruBassSpeakerSize_e100Hz: |
|---|
| 568 | pUserConfig->eTruBassFrontSpeakerSize = BDSP_Raaga_Audio_SpeakerSize_eLFResponse100Hz; |
|---|
| 569 | break; |
|---|
| 570 | case BAPE_TruBassSpeakerSize_e150Hz: |
|---|
| 571 | pUserConfig->eTruBassFrontSpeakerSize = BDSP_Raaga_Audio_SpeakerSize_eLFResponse150Hz; |
|---|
| 572 | break; |
|---|
| 573 | case BAPE_TruBassSpeakerSize_e200Hz: |
|---|
| 574 | pUserConfig->eTruBassFrontSpeakerSize = BDSP_Raaga_Audio_SpeakerSize_eLFResponse200Hz; |
|---|
| 575 | break; |
|---|
| 576 | case BAPE_TruBassSpeakerSize_e250Hz: |
|---|
| 577 | pUserConfig->eTruBassFrontSpeakerSize = BDSP_Raaga_Audio_SpeakerSize_eLFResponse250Hz; |
|---|
| 578 | break; |
|---|
| 579 | case BAPE_TruBassSpeakerSize_e300Hz: |
|---|
| 580 | pUserConfig->eTruBassFrontSpeakerSize = BDSP_Raaga_Audio_SpeakerSize_eLFResponse300Hz; |
|---|
| 581 | break; |
|---|
| 582 | case BAPE_TruBassSpeakerSize_e400Hz: |
|---|
| 583 | pUserConfig->eTruBassFrontSpeakerSize = BDSP_Raaga_Audio_SpeakerSize_eLFResponse400Hz; |
|---|
| 584 | break; |
|---|
| 585 | default: |
|---|
| 586 | BDBG_WRN(("TruSurroundHd Speaker Size INVALID")); |
|---|
| 587 | pUserConfig->eTruBassFrontSpeakerSize = BDSP_Raaga_Audio_SpeakerSize_eINVALID; |
|---|
| 588 | break; |
|---|
| 589 | } |
|---|
| 590 | BDBG_MSG(("eTruBassFrontSpeakerSize: %u", pUserConfig->eTruBassFrontSpeakerSize)); |
|---|
| 591 | |
|---|
| 592 | switch (pSettings->truBassMode) { |
|---|
| 593 | case BAPE_TruBassMode_eMono: |
|---|
| 594 | pUserConfig->eSRSTruBassProcessMode = BDSP_Raaga_Audio_SRSTruBassProcessMode_eMono; |
|---|
| 595 | break; |
|---|
| 596 | case BAPE_TruBassMode_eStereo: |
|---|
| 597 | pUserConfig->eSRSTruBassProcessMode = BDSP_Raaga_Audio_SRSTruBassProcessMode_eStereo; |
|---|
| 598 | break; |
|---|
| 599 | default: |
|---|
| 600 | BDBG_WRN(("TruSurround Bass Processing Mode INVALID")); |
|---|
| 601 | pUserConfig->eSRSTruBassProcessMode = BDSP_Raaga_Audio_SRSTruBassProcessMode_eInvalid; |
|---|
| 602 | break; |
|---|
| 603 | } |
|---|
| 604 | BDBG_MSG(("eSRSTruBassProcessMode: %u", pUserConfig->eSRSTruBassProcessMode)); |
|---|
| 605 | |
|---|
| 606 | pUserConfig->i32DefinitionFrontEnableFlag = pSettings->definitionEnabled?1:0; |
|---|
| 607 | BDBG_MSG(("i32DefinitionFrontEnableFlag: %u", pUserConfig->i32DefinitionFrontEnableFlag)); |
|---|
| 608 | pUserConfig->i32DefinitionFrontCtrl = BAPE_P_FloatToQ131(pSettings->definitionLevel, 100); |
|---|
| 609 | BDBG_MSG(("i32DefinitionFrontCtrl: %u", pUserConfig->i32DefinitionFrontCtrl)); |
|---|
| 610 | pUserConfig->i32DialogClarityEnableFlag = pSettings->dialogClarityEnabled?1:0; |
|---|
| 611 | BDBG_MSG(("i32DialogClarityEnableFlag: %u", pUserConfig->i32DialogClarityEnableFlag)); |
|---|
| 612 | pUserConfig->i32DialogClarityCtrl = BAPE_P_FloatToQ131(pSettings->dialogClarityLevel, 100); |
|---|
| 613 | BDBG_MSG(("i32DialogClarityCtrl: %u", pUserConfig->i32DialogClarityCtrl)); |
|---|
| 614 | pUserConfig->i32SurroundLevel = BAPE_P_FloatToQ131(pSettings->surroundLevel, 100); |
|---|
| 615 | BDBG_MSG(("i32SurroundLevel: %u", pUserConfig->i32SurroundLevel)); |
|---|
| 616 | pUserConfig->i32WowHDSRS3DEnableFlag = pSettings->wowHdEnabled?1:0; |
|---|
| 617 | BDBG_MSG(("i32WowHDSRS3DEnableFlag: %u", pUserConfig->i32WowHDSRS3DEnableFlag)); |
|---|
| 618 | pUserConfig->i32SRS3DHighBitRateFlag = pSettings->wowHdHighBitRateEnabled?1:0; |
|---|
| 619 | BDBG_MSG(("i32SRS3DHighBitRateFlag: %u", pUserConfig->i32SRS3DHighBitRateFlag)); |
|---|
| 620 | switch (pSettings->wowHdMode) { |
|---|
| 621 | case BAPE_WowHdMode_eMono: |
|---|
| 622 | pUserConfig->eWowHDSRS3DMode = BDSP_Raaga_Audio_SRS3DMode_eMono; |
|---|
| 623 | break; |
|---|
| 624 | case BAPE_WowHdMode_eSingleSpeaker: |
|---|
| 625 | pUserConfig->eWowHDSRS3DMode = BDSP_Raaga_Audio_SRS3DMode_eSingleSpeaker; |
|---|
| 626 | break; |
|---|
| 627 | case BAPE_WowHdMode_eStereo: |
|---|
| 628 | pUserConfig->eWowHDSRS3DMode = BDSP_Raaga_Audio_SRS3DMode_eStereo; |
|---|
| 629 | break; |
|---|
| 630 | case BAPE_WowHdMode_eExtreme: |
|---|
| 631 | pUserConfig->eWowHDSRS3DMode = BDSP_Raaga_Audio_SRS3DMode_eExtreme; |
|---|
| 632 | break; |
|---|
| 633 | default: |
|---|
| 634 | BDBG_WRN(("TruSurround SRS3DMode INVALID")); |
|---|
| 635 | pUserConfig->eWowHDSRS3DMode = BDSP_Raaga_Audio_SRS3DMode_eInvalid; |
|---|
| 636 | break; |
|---|
| 637 | } |
|---|
| 638 | BDBG_MSG(("eWowHDSRS3DMode: %u", pUserConfig->eWowHDSRS3DMode)); |
|---|
| 639 | pUserConfig->i32WowHDSRS3DSpaceCtrl = BAPE_P_FloatToQ131(pSettings->wowHdSpaceLevel, 100); |
|---|
| 640 | BDBG_MSG(("i32WowHDSRS3DSpaceCtrl: %u", pUserConfig->i32WowHDSRS3DSpaceCtrl)); |
|---|
| 641 | pUserConfig->i32WowHDSRS3DCenterCtrl = BAPE_P_FloatToQ131(pSettings->wowHdCenterLevel, 100); |
|---|
| 642 | BDBG_MSG(("i32WowHDSRS3DCenterCtrl: %u", pUserConfig->i32WowHDSRS3DCenterCtrl)); |
|---|
| 643 | pUserConfig->i32WowHDFocusEnableFlag = pSettings->wowHdFocusEnabled?1:0; |
|---|
| 644 | BDBG_MSG(("i32WowHDFocusEnableFlag: %u", pUserConfig->i32WowHDFocusEnableFlag)); |
|---|
| 645 | pUserConfig->i32WowHDFocusCtrl = BAPE_P_FloatToQ131(pSettings->wowHdFocusLevel, 100); |
|---|
| 646 | BDBG_MSG(("i32WowHDFocusCtrl: %u", pUserConfig->i32WowHDFocusCtrl)); |
|---|
| 647 | pUserConfig->i32Mono2StereoEnableFlag = pSettings->monoToStereoEnabled?1:0; |
|---|
| 648 | BDBG_MSG(("i32Mono2StereoEnableFlag: %u", pUserConfig->i32Mono2StereoEnableFlag)); |
|---|
| 649 | |
|---|
| 650 | pUserConfig->i32CertificationEnableFlag = pSettings->certificationApp?1:0; |
|---|
| 651 | BDBG_MSG(("i32CertificationEnableFlag: %u", pUserConfig->i32CertificationEnableFlag)); |
|---|
| 652 | if (pSettings->certificationApp) { |
|---|
| 653 | switch (pSettings->inputAcmod) { |
|---|
| 654 | case BAPE_TruSurroundHdAcmod_e1_0_C: |
|---|
| 655 | pUserConfig->eInputAcMode = BDSP_Raaga_Audio_AcMode_eMode10; |
|---|
| 656 | break; |
|---|
| 657 | case BAPE_TruSurroundHdAcmod_e2_0_LR: |
|---|
| 658 | pUserConfig->eInputAcMode = BDSP_Raaga_Audio_AcMode_eMode20; |
|---|
| 659 | break; |
|---|
| 660 | case BAPE_TruSurroundHdAcmod_e3_0_LCR: |
|---|
| 661 | pUserConfig->eInputAcMode = BDSP_Raaga_Audio_AcMode_eMode30; |
|---|
| 662 | break; |
|---|
| 663 | case BAPE_TruSurroundHdAcmod_e2_1_LRS: |
|---|
| 664 | pUserConfig->eInputAcMode = BDSP_Raaga_Audio_AcMode_eMode21; |
|---|
| 665 | break; |
|---|
| 666 | case BAPE_TruSurroundHdAcmod_e3_1_LCRS: |
|---|
| 667 | pUserConfig->eInputAcMode = BDSP_Raaga_Audio_AcMode_eMode31; |
|---|
| 668 | break; |
|---|
| 669 | case BAPE_TruSurroundHdAcmod_e2_2_LRLsRs: |
|---|
| 670 | pUserConfig->eInputAcMode = BDSP_Raaga_Audio_AcMode_eMode22; |
|---|
| 671 | break; |
|---|
| 672 | case BAPE_TruSurroundHdAcmod_e3_2_LCRLsRs: |
|---|
| 673 | pUserConfig->eInputAcMode = BDSP_Raaga_Audio_AcMode_eMode32; |
|---|
| 674 | break; |
|---|
| 675 | case BAPE_TruSurroundHdAcmod_e3_3_LCRLsRsCs: |
|---|
| 676 | pUserConfig->eInputAcMode = BDSP_Raaga_Audio_AcMode_eMode33; |
|---|
| 677 | break; |
|---|
| 678 | case BAPE_TruSurroundHdAcmod_e3_2_BSDigital: |
|---|
| 679 | pUserConfig->eInputAcMode = BDSP_Raaga_Audio_AcMode_eMode32_BSDigital; |
|---|
| 680 | break; |
|---|
| 681 | case BAPE_TruSurroundHdAcmod_eLtRt: |
|---|
| 682 | pUserConfig->eInputAcMode = BDSP_Raaga_Audio_AcMode_eModeLtRt; |
|---|
| 683 | break; |
|---|
| 684 | case BAPE_TruSurroundHdAcmod_ePLII_Movie: |
|---|
| 685 | pUserConfig->eInputAcMode = BDSP_Raaga_Audio_AcMode_eModePLII_Movie; |
|---|
| 686 | break; |
|---|
| 687 | case BAPE_TruSurroundHdAcmod_ePLII_Music: |
|---|
| 688 | pUserConfig->eInputAcMode = BDSP_Raaga_Audio_AcMode_eModePLII_Music; |
|---|
| 689 | break; |
|---|
| 690 | case BAPE_TruSurroundHdAcmod_ePassiveMatrix: |
|---|
| 691 | pUserConfig->eInputAcMode = BDSP_Raaga_Audio_AcMode_eModePassiveMatrix; |
|---|
| 692 | break; |
|---|
| 693 | case BAPE_TruSurroundHdAcmod_eCSII: |
|---|
| 694 | pUserConfig->eInputAcMode = BDSP_Raaga_Audio_AcMode_eModeCSII; |
|---|
| 695 | break; |
|---|
| 696 | default: |
|---|
| 697 | BDBG_WRN(("TruSurround Input ACMode Invalid")); |
|---|
| 698 | pUserConfig->eInputAcMode = BDSP_Raaga_Audio_AcMode_eINVALID; |
|---|
| 699 | break; |
|---|
| 700 | } |
|---|
| 701 | |
|---|
| 702 | pUserConfig->i32InputLFEPresentFlag = pSettings->inputLfeEnabled?1:0; |
|---|
| 703 | } |
|---|
| 704 | else if (numChannelPairs == 1) { |
|---|
| 705 | pUserConfig->eInputAcMode = BDSP_Raaga_Audio_AcMode_eMode20; |
|---|
| 706 | pUserConfig->i32InputLFEPresentFlag = 0; |
|---|
| 707 | } |
|---|
| 708 | else if (numChannelPairs == 3) { |
|---|
| 709 | pUserConfig->eInputAcMode = BDSP_Raaga_Audio_AcMode_eMode32; |
|---|
| 710 | pUserConfig->i32InputLFEPresentFlag = 1; |
|---|
| 711 | } |
|---|
| 712 | BDBG_MSG(("eInputAcMode: %u", pUserConfig->eInputAcMode)); |
|---|
| 713 | BDBG_MSG(("i32InputLFEPresentFlag: %u", pUserConfig->i32InputLFEPresentFlag)); |
|---|
| 714 | |
|---|
| 715 | return BERR_SUCCESS; |
|---|
| 716 | } |
|---|
| 717 | |
|---|
| 718 | static BERR_Code BAPE_TruSurroundHd_P_ApplyTruSurroundHdSettings(BAPE_TruSurroundHdHandle handle, BDSP_TaskHandle task, unsigned branchId, unsigned stageId) |
|---|
| 719 | { |
|---|
| 720 | BERR_Code errCode; |
|---|
| 721 | BDSP_Raaga_Audio_TruSurrndHDConfigParams userConfig; |
|---|
| 722 | |
|---|
| 723 | errCode = BDSP_Task_GetStageSettings(task, branchId, stageId, &userConfig, sizeof(userConfig)); |
|---|
| 724 | if ( errCode ) |
|---|
| 725 | { |
|---|
| 726 | return BERR_TRACE(errCode); |
|---|
| 727 | } |
|---|
| 728 | |
|---|
| 729 | userConfig.sTopLevelConfig.i32mEnable = false; /* Disable studio sound */ |
|---|
| 730 | errCode = BAPE_TruSurroundHd_P_ConvertSettingsToDsp(&handle->settings, handle->input->numChannelPairs, &userConfig); |
|---|
| 731 | if ( errCode ) |
|---|
| 732 | { |
|---|
| 733 | return BERR_TRACE(errCode); |
|---|
| 734 | } |
|---|
| 735 | |
|---|
| 736 | errCode = BDSP_Task_SetStageSettings(task, branchId, stageId, &userConfig, sizeof(userConfig)); |
|---|
| 737 | if ( errCode ) |
|---|
| 738 | { |
|---|
| 739 | return BERR_TRACE(errCode); |
|---|
| 740 | } |
|---|
| 741 | |
|---|
| 742 | return BERR_SUCCESS; |
|---|
| 743 | } |
|---|
| 744 | |
|---|
| 745 | static void BAPE_TruSurroundHd_P_StopPathFromInput(struct BAPE_PathNode *pNode, struct BAPE_PathConnection *pConnection) |
|---|
| 746 | { |
|---|
| 747 | /* Invalidate task handle */ |
|---|
| 748 | BDBG_OBJECT_ASSERT(pNode, BAPE_PathNode); |
|---|
| 749 | BSTD_UNUSED(pConnection); |
|---|
| 750 | pNode->paths[0].connector.task = NULL; |
|---|
| 751 | } |
|---|
| 752 | |
|---|
| 753 | static void BAPE_TruSurroundHd_P_RemoveInputCallback(struct BAPE_PathNode *pNode, BAPE_PathConnector *pConnector) |
|---|
| 754 | { |
|---|
| 755 | (void)BAPE_TruSurroundHd_RemoveInput(pNode->pHandle, pConnector); |
|---|
| 756 | } |
|---|
| 757 | |
|---|