source: svn/newcon3bcm2_21bu/magnum/portinginterface/ape/7552/bape_tru_surround.c

Last change on this file was 76, checked in by megakiss, 10 years ago

1W 대기전력을 만족시키기 위하여 POWEROFF시 튜너를 Standby 상태로 함

  • Property svn:executable set to *
File size: 31.8 KB
Line 
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
92BDBG_MODULE(bape_tru_surround);
93
94BDBG_OBJECT_ID(BAPE_TruSurroundHd);
95
96typedef 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
104static BERR_Code BAPE_TruSurroundHd_P_ConnectorSupported(struct BAPE_PathNode *pNode, BAPE_PathConnector *pConnector);
105static BERR_Code BAPE_TruSurroundHd_P_AllocatePathFromInput(struct BAPE_PathNode *pNode, struct BAPE_PathConnection *pConnection);
106static BERR_Code BAPE_TruSurroundHd_P_ConfigPathFromInput(struct BAPE_PathNode *pNode, struct BAPE_PathConnection *pConnection);
107static BERR_Code BAPE_TruSurroundHd_P_ApplyTruSurroundHdSettings(BAPE_TruSurroundHdHandle handle, BDSP_TaskHandle task, unsigned branchId, unsigned stageId);
108static void BAPE_TruSurroundHd_P_StopPathFromInput(struct BAPE_PathNode *pNode, struct BAPE_PathConnection *pConnection);
109static void BAPE_TruSurroundHd_P_RemoveInputCallback(struct BAPE_PathNode *pNode, BAPE_PathConnector *pConnector);
110
111/***************************************************************************
112Summary:
113    Get default settings for an SRS TruSurround HD stage
114***************************************************************************/
115void 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/***************************************************************************
275Summary:
276    Open an SRS TruSurround HD stage
277***************************************************************************/
278BERR_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/***************************************************************************
325Summary:
326    Close an SRS TruSurround HD stage
327   
328Description:
329    Input to the stage must be removed prior to closing.
330***************************************************************************/
331void 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/***************************************************************************
345Summary:
346    Get Settings for an SRS TruSurround HD stage
347***************************************************************************/
348void 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/***************************************************************************
359Summary:
360    Set Settings for an SRS TruSurround HD stage
361***************************************************************************/
362BERR_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/***************************************************************************
393Summary:
394    Get the audio connector for an SRS TruSurround HD stage
395***************************************************************************/
396void 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/***************************************************************************
407Summary:
408Add an input to this processing stage
409***************************************************************************/
410BERR_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/***************************************************************************
433Summary:
434Remove an input from this processing stage
435***************************************************************************/
436BERR_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/***************************************************************************
459Summary:
460Remove all inputs from this processing stage
461***************************************************************************/
462BERR_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
474static 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
491static 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
514static 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
537BERR_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
718static 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
745static 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
753static void BAPE_TruSurroundHd_P_RemoveInputCallback(struct BAPE_PathNode *pNode, BAPE_PathConnector *pConnector)
754{
755        (void)BAPE_TruSurroundHd_RemoveInput(pNode->pHandle, pConnector);
756}
757
Note: See TracBrowser for help on using the repository browser.