1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi // Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi // No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi // modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi // supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi // Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi // Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi // obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi // such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi // MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi // confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi // third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi // kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi // without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi // intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi // and in conformity with any international standard. You agree to waive any
38*53ee8cc1Swenshuai.xi // claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi // incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi // In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi // consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi // revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi // You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi // even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi // request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi // parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi // services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi // MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi // ("Services").
52*53ee8cc1Swenshuai.xi // You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi // writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi // disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi // or otherwise:
58*53ee8cc1Swenshuai.xi // (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi // mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi // (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi // including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi // of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi // (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi // of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi // Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi // settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi // Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi // Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi // with the said Rules.
72*53ee8cc1Swenshuai.xi // The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi // be English.
74*53ee8cc1Swenshuai.xi // The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81*53ee8cc1Swenshuai.xi // All rights reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
86*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi
95*53ee8cc1Swenshuai.xi
96*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
97*53ee8cc1Swenshuai.xi // Include Files
98*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
99*53ee8cc1Swenshuai.xi // Common Definition
100*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
101*53ee8cc1Swenshuai.xi #include <linux/string.h>
102*53ee8cc1Swenshuai.xi #include <linux/delay.h>
103*53ee8cc1Swenshuai.xi #include <linux/slab.h>
104*53ee8cc1Swenshuai.xi #include <linux/vmalloc.h>
105*53ee8cc1Swenshuai.xi #else
106*53ee8cc1Swenshuai.xi #include <string.h>
107*53ee8cc1Swenshuai.xi #endif
108*53ee8cc1Swenshuai.xi
109*53ee8cc1Swenshuai.xi #include "MsCommon.h"
110*53ee8cc1Swenshuai.xi #include "MsIRQ.h"
111*53ee8cc1Swenshuai.xi #include "MsOS.h"
112*53ee8cc1Swenshuai.xi
113*53ee8cc1Swenshuai.xi // Internal Definition
114*53ee8cc1Swenshuai.xi #include "regCHIP.h"
115*53ee8cc1Swenshuai.xi #include "drvAUDIO.h"
116*53ee8cc1Swenshuai.xi #include "regAUDIO.h"
117*53ee8cc1Swenshuai.xi #include "halAUDIO.h"
118*53ee8cc1Swenshuai.xi #include "halADVAUDIO.h"
119*53ee8cc1Swenshuai.xi #include "halMAD.h"
120*53ee8cc1Swenshuai.xi #include "halMAD2.h"
121*53ee8cc1Swenshuai.xi #include "halSOUND.h"
122*53ee8cc1Swenshuai.xi #include "halSIF.h"
123*53ee8cc1Swenshuai.xi #include "r2_shm_comm.h"
124*53ee8cc1Swenshuai.xi #include "decR2_shm.h"
125*53ee8cc1Swenshuai.xi #if ASND_R2_SUPPORT
126*53ee8cc1Swenshuai.xi #include "sndR2_shm.h"
127*53ee8cc1Swenshuai.xi #endif
128*53ee8cc1Swenshuai.xi #include "halAUR2.h"
129*53ee8cc1Swenshuai.xi #include "ddr_config.h"
130*53ee8cc1Swenshuai.xi #include "audio_comm2.h"
131*53ee8cc1Swenshuai.xi
132*53ee8cc1Swenshuai.xi #if (defined ANDROID)
133*53ee8cc1Swenshuai.xi
134*53ee8cc1Swenshuai.xi #include <sys/mman.h>
135*53ee8cc1Swenshuai.xi #include <cutils/ashmem.h>
136*53ee8cc1Swenshuai.xi #include <cutils/log.h>
137*53ee8cc1Swenshuai.xi
138*53ee8cc1Swenshuai.xi #ifndef LOGI // android 4.1 rename LOGx to ALOGx
139*53ee8cc1Swenshuai.xi #define LOGI ALOGI
140*53ee8cc1Swenshuai.xi #endif
141*53ee8cc1Swenshuai.xi
142*53ee8cc1Swenshuai.xi #ifndef LOGE // android 4.1 rename LOGx to ALOGx
143*53ee8cc1Swenshuai.xi #define LOGE ALOGE
144*53ee8cc1Swenshuai.xi #endif
145*53ee8cc1Swenshuai.xi
146*53ee8cc1Swenshuai.xi #define HALMAD_PRINT(fmt, args...) LOGI("<<android>> " fmt, ## args)
147*53ee8cc1Swenshuai.xi #define HALMAD_ERROR(fmt, args...) LOGE("<<android>> " fmt, ## args)
148*53ee8cc1Swenshuai.xi
149*53ee8cc1Swenshuai.xi #else
150*53ee8cc1Swenshuai.xi #ifdef CONFIG_MBOOT //mboot Speed up
151*53ee8cc1Swenshuai.xi #define HALMAD_PRINT(fmt, args...)
152*53ee8cc1Swenshuai.xi #define HALMAD_ERROR(fmt, args...) printf("[[utopia]] " fmt, ## args)
153*53ee8cc1Swenshuai.xi #else
154*53ee8cc1Swenshuai.xi #define HALMAD_PRINT(fmt, args...) printf("[[utopia]] " fmt, ## args)
155*53ee8cc1Swenshuai.xi #define HALMAD_ERROR(fmt, args...) printf("[[utopia]] " fmt, ## args)
156*53ee8cc1Swenshuai.xi #endif
157*53ee8cc1Swenshuai.xi #endif
158*53ee8cc1Swenshuai.xi
159*53ee8cc1Swenshuai.xi
160*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
161*53ee8cc1Swenshuai.xi // Driver Compiler Options
162*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
163*53ee8cc1Swenshuai.xi #define OMX_AUDIO_DEBUG 0
164*53ee8cc1Swenshuai.xi #define DBG_MAD(msg) //msg
165*53ee8cc1Swenshuai.xi #define AUD_ERRMSG(msg) MS_CRITICAL_MSG(msg)
166*53ee8cc1Swenshuai.xi #define AUD_DBGMSG(msg) MS_DEBUG_MSG(msg)
167*53ee8cc1Swenshuai.xi
168*53ee8cc1Swenshuai.xi #define HALMAD_CHECK_SHM_INIT \
169*53ee8cc1Swenshuai.xi do { \
170*53ee8cc1Swenshuai.xi if (g_AudioVars2 == NULL) \
171*53ee8cc1Swenshuai.xi { \
172*53ee8cc1Swenshuai.xi HALMAD_ERROR("%s() : Warning! g_AudioVars2 should not be NULL !!!\n", __FUNCTION__); \
173*53ee8cc1Swenshuai.xi HALMAD_ERROR("%s() : Perform SHM Init here !!!\n", __FUNCTION__); \
174*53ee8cc1Swenshuai.xi if (HAL_AUDIO_InitialVars() == FALSE) \
175*53ee8cc1Swenshuai.xi { \
176*53ee8cc1Swenshuai.xi MS_ASSERT(0);\
177*53ee8cc1Swenshuai.xi } \
178*53ee8cc1Swenshuai.xi } \
179*53ee8cc1Swenshuai.xi } while(0)
180*53ee8cc1Swenshuai.xi
181*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
182*53ee8cc1Swenshuai.xi // Local Defines
183*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
184*53ee8cc1Swenshuai.xi
185*53ee8cc1Swenshuai.xi #define H2BYTE(value) ((MS_U8)((value) / 0x10000))
186*53ee8cc1Swenshuai.xi #define HIBYTE(value) ((MS_U8)((value >>8) & 0x0000FF))
187*53ee8cc1Swenshuai.xi #define LOBYTE(value) ((MS_U8)((value) & 0x0000FF))
188*53ee8cc1Swenshuai.xi
189*53ee8cc1Swenshuai.xi
190*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
191*53ee8cc1Swenshuai.xi // Local Structures
192*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
193*53ee8cc1Swenshuai.xi
194*53ee8cc1Swenshuai.xi AES_INFO audio_aes_info[2];
195*53ee8cc1Swenshuai.xi
196*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
197*53ee8cc1Swenshuai.xi // Global Variables
198*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
199*53ee8cc1Swenshuai.xi extern AUDIO_SOURCE_INFO_TYPE AudioInputSrcInfo;
200*53ee8cc1Swenshuai.xi extern MS_VIRT _gMIO_MapBase;
201*53ee8cc1Swenshuai.xi extern MS_U32 g_audioDumpInfo_interval;
202*53ee8cc1Swenshuai.xi extern AUDIO_SPDIF_OUTPUT_TYPE gSpdifOutputType;
203*53ee8cc1Swenshuai.xi extern MS_PHY g_DSPDDRBinBaseAddress[MAX_AUDIO_BASE_ADDRESS_NUM2];
204*53ee8cc1Swenshuai.xi MS_U32 g_AudioDumpInfoCtrl = Audio_DumpInfo_Off;
205*53ee8cc1Swenshuai.xi
206*53ee8cc1Swenshuai.xi extern MS_S32 _s32MutexLoadCode;
207*53ee8cc1Swenshuai.xi extern MS_S32 _s32AUDIOMutexIDMA;
208*53ee8cc1Swenshuai.xi
209*53ee8cc1Swenshuai.xi //====== STAOS PIP START 2012/02/12 ========
210*53ee8cc1Swenshuai.xi
211*53ee8cc1Swenshuai.xi extern pFuncPtr_SetAudioParam2 g_FuncPrt_Hal_SetAudioParam2;
212*53ee8cc1Swenshuai.xi extern pFuncPtr_GetAudioInfo2 g_FuncPrt_Hal_GetAudioInfo2;
213*53ee8cc1Swenshuai.xi
214*53ee8cc1Swenshuai.xi //====== STAOS PIP END 2012/02/12 ========
215*53ee8cc1Swenshuai.xi
216*53ee8cc1Swenshuai.xi MS_U32 g_ac3_delay = AC3_AV_DEFAULT_DELAY;
217*53ee8cc1Swenshuai.xi MS_U32 g_aac_delay = AAC_AV_DEFAULT_DELAY;
218*53ee8cc1Swenshuai.xi MS_U32 g_mpeg_delay = MPG_AV_DEFAULT_DELAY;
219*53ee8cc1Swenshuai.xi
220*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
221*53ee8cc1Swenshuai.xi // Local Variables
222*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
223*53ee8cc1Swenshuai.xi //static MS_BOOL EncodeInProcess;
224*53ee8cc1Swenshuai.xi //#define ENC_BUF_SIZE 6;
225*53ee8cc1Swenshuai.xi extern AUDIO_SHARED_VARS2 *g_AudioVars2;
226*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_NUTTX
227*53ee8cc1Swenshuai.xi extern AUDIO_TEE_INFO_SHARE_MEM *pAudioTeeInfoShm;
228*53ee8cc1Swenshuai.xi extern MS_BOOL g_bAudioTeeEnabled, g_bAudioTeeMbxInitialized;
229*53ee8cc1Swenshuai.xi extern MS_BOOL g_bDecDspSecureTeeAccessed, g_bSndDspSecureTeeAccessed;
230*53ee8cc1Swenshuai.xi #endif
231*53ee8cc1Swenshuai.xi extern MS_BOOL (*g_FuncPtr_CheckCapability)(AUDIO_DEC_ID eDecId, AudioDecStatus_t * p_AudioDecStatus);
232*53ee8cc1Swenshuai.xi
233*53ee8cc1Swenshuai.xi MS_U32 EncFrameIdx;
234*53ee8cc1Swenshuai.xi MS_U32 EncBuf_W_idx;
235*53ee8cc1Swenshuai.xi MS_U32 EncBuf_R_idx;
236*53ee8cc1Swenshuai.xi MS_U8 EncBuf_Count;
237*53ee8cc1Swenshuai.xi MS_U16 Reg_REG_SOUND_MAIN_SNDEFFECT = 0x0;
238*53ee8cc1Swenshuai.xi MS_U16 Reg_REG_SOUND_ADV_CFG0 = 0x0;
239*53ee8cc1Swenshuai.xi MS_BOOL Flag_MAIN_SNDEFFET_CHG = FALSE;
240*53ee8cc1Swenshuai.xi
241*53ee8cc1Swenshuai.xi AU_DVB_ENC_FRAME_INFO MPEG_EN_BUF[6];
242*53ee8cc1Swenshuai.xi MS_BOOL FLAG_HDMI_AC3_IN_SE = TRUE;
243*53ee8cc1Swenshuai.xi MS_BOOL g_DDPBypassenable_1 = TRUE;
244*53ee8cc1Swenshuai.xi MS_BOOL g_DDPBypassenable_2 = TRUE;
245*53ee8cc1Swenshuai.xi static MS_U32 g_ReadTargetAddr = 0x112D00;
246*53ee8cc1Swenshuai.xi static MS_U32 g_WriteTargetAddr = 0x112D00;
247*53ee8cc1Swenshuai.xi
248*53ee8cc1Swenshuai.xi static MS_U32 g_ReadDMTargetAddr = 0;
249*53ee8cc1Swenshuai.xi static MS_U32 g_WriteDMTargetAddr = 0;
250*53ee8cc1Swenshuai.xi
251*53ee8cc1Swenshuai.xi static MS_U32 g_ReadPMTargetAddr = 0;
252*53ee8cc1Swenshuai.xi static MS_U32 g_WritePMTargetAddr = 0;
253*53ee8cc1Swenshuai.xi
254*53ee8cc1Swenshuai.xi static MS_BOOL g_bR2Adec1AD = FALSE;
255*53ee8cc1Swenshuai.xi static MS_BOOL g_bR2Adec2AD = FALSE;
256*53ee8cc1Swenshuai.xi
257*53ee8cc1Swenshuai.xi #define MS_CHANGE_TO_TIME_STAMP 90
258*53ee8cc1Swenshuai.xi
259*53ee8cc1Swenshuai.xi #define LAYER_MIN 1
260*53ee8cc1Swenshuai.xi #define LAYER_MAX 3
261*53ee8cc1Swenshuai.xi #define MPEG_BITRATE_TABLE_ROW_NUM 6
262*53ee8cc1Swenshuai.xi #define MPEG_BITRATE_TABLE_COL_NUM 16
263*53ee8cc1Swenshuai.xi
264*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_AC3 0x1
265*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_AC3P 0x2
266*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_DDCO 0x4
267*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_DTS 0x8
268*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_DOLBY_MS10 0x10
269*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_WMA 0x20
270*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_DRA 0x40
271*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_DTSLBR 0x80
272*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_GAAC 0x100
273*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_DOLBY_MS11 0x200
274*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_DTSE 0x400
275*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_DTS_NEO_ULTRA 0x800
276*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DEMO_MODE 0x1000
277*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_SRS_TSHD 0x2000
278*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_SRS_THEATERSOUND 0x4000
279*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_DTS_STUDIO_SOUND_3D 0x8000
280*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_COOK 0x10000
281*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_DTS_XLL 0x20000
282*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_MS12_LC_PROFILE 0x40000
283*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_MS12_C_PROFILE 0x80000
284*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_ABS_3D 0x100000
285*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_MS12_B_PROFILE 0x200000
286*53ee8cc1Swenshuai.xi
287*53ee8cc1Swenshuai.xi const MS_U16 MpegBitRateTable[MPEG_BITRATE_TABLE_ROW_NUM][MPEG_BITRATE_TABLE_COL_NUM] =
288*53ee8cc1Swenshuai.xi {
289*53ee8cc1Swenshuai.xi // V1, L1
290*53ee8cc1Swenshuai.xi {0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 0},
291*53ee8cc1Swenshuai.xi // V1, L2
292*53ee8cc1Swenshuai.xi {0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 0},
293*53ee8cc1Swenshuai.xi // V1, L3
294*53ee8cc1Swenshuai.xi {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 0},
295*53ee8cc1Swenshuai.xi // V2, L1
296*53ee8cc1Swenshuai.xi {0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 0},
297*53ee8cc1Swenshuai.xi // V2, L2
298*53ee8cc1Swenshuai.xi {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0},
299*53ee8cc1Swenshuai.xi // V2, L3
300*53ee8cc1Swenshuai.xi {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0},
301*53ee8cc1Swenshuai.xi };
302*53ee8cc1Swenshuai.xi
303*53ee8cc1Swenshuai.xi MS_U32 u32SeProcessFrameSmpUnit = SE_PROCESS_FRAME_SMP_UNIT; // For Bifrost audio MT. Default : SE_PROCESS_FRAME_SMP_UNIT. For some advance sound effect ip like SRS TheaterSound, it is 256 because it is 256 samples per frame processing.
304*53ee8cc1Swenshuai.xi
305*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
306*53ee8cc1Swenshuai.xi // Debug Functions
307*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
308*53ee8cc1Swenshuai.xi
309*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
310*53ee8cc1Swenshuai.xi // Local Functions
311*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
_GetAudioCaps(AUDIO_DEC_ID eDecId)312*53ee8cc1Swenshuai.xi MMA_AudioType _GetAudioCaps(AUDIO_DEC_ID eDecId)
313*53ee8cc1Swenshuai.xi {
314*53ee8cc1Swenshuai.xi MMA_AudioType eAudioCaps = 0;
315*53ee8cc1Swenshuai.xi
316*53ee8cc1Swenshuai.xi if ( eDecId == AU_DEC_ID1 )
317*53ee8cc1Swenshuai.xi {
318*53ee8cc1Swenshuai.xi eAudioCaps = Audio_DEC_PCM | Audio_DEC_MPEG |
319*53ee8cc1Swenshuai.xi Audio_DEC_MP3 | Audio_DEC_AC3 |
320*53ee8cc1Swenshuai.xi Audio_DEC_AC3P | Audio_DEC_AAC_LC |
321*53ee8cc1Swenshuai.xi Audio_DEC_HEAAC_V1 | Audio_DEC_HEAAC_V2 |
322*53ee8cc1Swenshuai.xi Audio_DEC_DOLBYPULSE | Audio_DEC_RA8 |
323*53ee8cc1Swenshuai.xi Audio_DEC_WMA | Audio_DEC_WMAPRO |
324*53ee8cc1Swenshuai.xi Audio_DEC_XPCM | Audio_DEC_AMR_NB |
325*53ee8cc1Swenshuai.xi Audio_DEC_AMR_WB | Audio_DEC_VORBIS |
326*53ee8cc1Swenshuai.xi Audio_DEC_DTS | Audio_DEC_FLAC |
327*53ee8cc1Swenshuai.xi Audio_DEC_DTSLBR | Audio_DEC_DTS_HD_ADO_R2 |
328*53ee8cc1Swenshuai.xi Audio_DEC_DRA;
329*53ee8cc1Swenshuai.xi }
330*53ee8cc1Swenshuai.xi else if ( eDecId == AU_DEC_ID2 )
331*53ee8cc1Swenshuai.xi {
332*53ee8cc1Swenshuai.xi eAudioCaps = 0;
333*53ee8cc1Swenshuai.xi }
334*53ee8cc1Swenshuai.xi else if ( eDecId == AU_DEC_ID3 )
335*53ee8cc1Swenshuai.xi {
336*53ee8cc1Swenshuai.xi eAudioCaps = Audio_DEC_PCM | Audio_DEC_MPEG |
337*53ee8cc1Swenshuai.xi Audio_DEC_MP3 | Audio_DEC_AC3 |
338*53ee8cc1Swenshuai.xi Audio_DEC_AC3P | Audio_DEC_AAC_LC |
339*53ee8cc1Swenshuai.xi Audio_DEC_HEAAC_V1 | Audio_DEC_HEAAC_V2 |
340*53ee8cc1Swenshuai.xi Audio_DEC_DOLBYPULSE | Audio_DEC_RA8 |
341*53ee8cc1Swenshuai.xi Audio_DEC_WMA | Audio_DEC_WMAPRO |
342*53ee8cc1Swenshuai.xi Audio_DEC_XPCM | Audio_DEC_AMR_NB |
343*53ee8cc1Swenshuai.xi Audio_DEC_AMR_WB | Audio_DEC_VORBIS |
344*53ee8cc1Swenshuai.xi Audio_DEC_DTS | Audio_DEC_FLAC |
345*53ee8cc1Swenshuai.xi Audio_DEC_DTSLBR | Audio_DEC_DTS_HD_ADO_R2 |
346*53ee8cc1Swenshuai.xi Audio_DEC_DRA;
347*53ee8cc1Swenshuai.xi }
348*53ee8cc1Swenshuai.xi
349*53ee8cc1Swenshuai.xi return eAudioCaps;
350*53ee8cc1Swenshuai.xi }
351*53ee8cc1Swenshuai.xi
352*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
353*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetAudioCapability()
354*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to get DSP capability
355*53ee8cc1Swenshuai.xi /// @param <IN> \b eDecId : Dec ID
356*53ee8cc1Swenshuai.xi /// @param <IN> \b p_AudioDecStatus : Audio Dec Status structure
357*53ee8cc1Swenshuai.xi /// @param <RET> \b value : 0-- eDecId not support
358*53ee8cc1Swenshuai.xi /// 1-- eDecId support
359*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetAudioCapability(AUDIO_DEC_ID eDecId,AudioDecStatus_t * p_AudioDecStatus)360*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_GetAudioCapability(AUDIO_DEC_ID eDecId, AudioDecStatus_t * p_AudioDecStatus)
361*53ee8cc1Swenshuai.xi {
362*53ee8cc1Swenshuai.xi MS_BOOL ret = FALSE;
363*53ee8cc1Swenshuai.xi
364*53ee8cc1Swenshuai.xi if (eDecId == AU_DEC_ID2)
365*53ee8cc1Swenshuai.xi {
366*53ee8cc1Swenshuai.xi return ret;
367*53ee8cc1Swenshuai.xi }
368*53ee8cc1Swenshuai.xi
369*53ee8cc1Swenshuai.xi switch ((p_AudioDecStatus->eSourceType))
370*53ee8cc1Swenshuai.xi {
371*53ee8cc1Swenshuai.xi case E_AUDIO_INFO_HDMI_IN: // HDMI should decode in SE and DEC DSP, always return true
372*53ee8cc1Swenshuai.xi case E_AUDIO_INFO_ATV_IN:
373*53ee8cc1Swenshuai.xi ret = TRUE;
374*53ee8cc1Swenshuai.xi break;
375*53ee8cc1Swenshuai.xi
376*53ee8cc1Swenshuai.xi case E_AUDIO_INFO_DTV_IN:
377*53ee8cc1Swenshuai.xi if ((p_AudioDecStatus->eGroup == E_CONNECT_MAIN) ||
378*53ee8cc1Swenshuai.xi (p_AudioDecStatus->eGroup == E_CONNECT_SUB))
379*53ee8cc1Swenshuai.xi {
380*53ee8cc1Swenshuai.xi ret = TRUE;
381*53ee8cc1Swenshuai.xi }
382*53ee8cc1Swenshuai.xi break;
383*53ee8cc1Swenshuai.xi
384*53ee8cc1Swenshuai.xi case E_AUDIO_INFO_MM_IN:
385*53ee8cc1Swenshuai.xi case E_AUDIO_INFO_GAME_IN:
386*53ee8cc1Swenshuai.xi ret = TRUE;
387*53ee8cc1Swenshuai.xi break;
388*53ee8cc1Swenshuai.xi
389*53ee8cc1Swenshuai.xi default:
390*53ee8cc1Swenshuai.xi if ((p_AudioDecStatus->eAudFormat) == (_GetAudioCaps(eDecId) & (p_AudioDecStatus->eAudFormat)))
391*53ee8cc1Swenshuai.xi {
392*53ee8cc1Swenshuai.xi ret = TRUE;
393*53ee8cc1Swenshuai.xi }
394*53ee8cc1Swenshuai.xi break;
395*53ee8cc1Swenshuai.xi }
396*53ee8cc1Swenshuai.xi
397*53ee8cc1Swenshuai.xi return ret;
398*53ee8cc1Swenshuai.xi }
399*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
400*53ee8cc1Swenshuai.xi // Global Functions
401*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
402*53ee8cc1Swenshuai.xi
403*53ee8cc1Swenshuai.xi ///-----------------------------------------------------------------------------
404*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
405*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
406*53ee8cc1Swenshuai.xi ///
407*53ee8cc1Swenshuai.xi /// AUDIO_MAD SYSETM Relational Hal Function
408*53ee8cc1Swenshuai.xi ///
409*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
410*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
411*53ee8cc1Swenshuai.xi ///-----------------------------------------------------------------------------
412*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
413*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_Read_DSP_sram()
414*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to Read DSP internal sram value by IDMA
415*53ee8cc1Swenshuai.xi /// @param <IN> \b dsp_addr : DSP internal sram address
416*53ee8cc1Swenshuai.xi /// @param <IN> \b dsp_memory_type : 0--DSP_MEM_TYPE_PM
417*53ee8cc1Swenshuai.xi /// 1--DSP_MEM_TYPE_DM
418*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
419*53ee8cc1Swenshuai.xi /// @param <RET> \b value : U32 sram value
420*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
421*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_Read_DSP_sram(MS_U16 u16Dsp_addr,AUDIO_DSP_MEMORY_TYPE dsp_memory_type)422*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_Read_DSP_sram(MS_U16 u16Dsp_addr,AUDIO_DSP_MEMORY_TYPE dsp_memory_type)
423*53ee8cc1Swenshuai.xi {
424*53ee8cc1Swenshuai.xi // Do nothing because no DEC-DSP in Monoco
425*53ee8cc1Swenshuai.xi u16Dsp_addr = u16Dsp_addr;
426*53ee8cc1Swenshuai.xi dsp_memory_type = dsp_memory_type;
427*53ee8cc1Swenshuai.xi
428*53ee8cc1Swenshuai.xi return 0;
429*53ee8cc1Swenshuai.xi }
430*53ee8cc1Swenshuai.xi
431*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
432*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_Write_DSP_sram()
433*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to Write DSP internal sram value by IDMA
434*53ee8cc1Swenshuai.xi /// @param <IN> \b dsp_addr : DSP internal sram address
435*53ee8cc1Swenshuai.xi /// @param <IN> \b value : data want to write
436*53ee8cc1Swenshuai.xi /// @param <IN> \b dsp_memory_type : 0-- write to DSP_MEM_TYPE_PM
437*53ee8cc1Swenshuai.xi /// 1-- write to DSP_MEM_TYPE_DM
438*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
439*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE : TRUE/FALSE
440*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
441*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_Write_DSP_sram(MS_U16 dsp_addr,MS_U32 value,AUDIO_DSP_MEMORY_TYPE dsp_memory_type)442*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_Write_DSP_sram(MS_U16 dsp_addr, MS_U32 value, AUDIO_DSP_MEMORY_TYPE dsp_memory_type)
443*53ee8cc1Swenshuai.xi {
444*53ee8cc1Swenshuai.xi // Do nothing because no DEC-DSP in Monoco
445*53ee8cc1Swenshuai.xi dsp_addr = dsp_addr;
446*53ee8cc1Swenshuai.xi value = value;
447*53ee8cc1Swenshuai.xi dsp_memory_type = dsp_memory_type;
448*53ee8cc1Swenshuai.xi
449*53ee8cc1Swenshuai.xi return TRUE;
450*53ee8cc1Swenshuai.xi }
451*53ee8cc1Swenshuai.xi
452*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
453*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_Init()
454*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is the initialization for DVB module
455*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE :
456*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
457*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
458*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
459*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_Init(void)460*53ee8cc1Swenshuai.xi void HAL_MAD_Init(void)
461*53ee8cc1Swenshuai.xi {
462*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(REG_DEC_IDMA_CTRL0, 0x00FF, 0x0002);
463*53ee8cc1Swenshuai.xi AUDIO_DELAY1MS(2);
464*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(REG_DEC_IDMA_CTRL0, 0x00FF, 0x0003);
465*53ee8cc1Swenshuai.xi
466*53ee8cc1Swenshuai.xi g_FuncPrt_Hal_SetAudioParam2 = HAL_MAD_SetAudioParam2;
467*53ee8cc1Swenshuai.xi g_FuncPrt_Hal_GetAudioInfo2 = HAL_MAD_GetAudioInfo2;
468*53ee8cc1Swenshuai.xi g_FuncPtr_CheckCapability = HAL_MAD_GetAudioCapability;
469*53ee8cc1Swenshuai.xi }
470*53ee8cc1Swenshuai.xi
471*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
472*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetMemInfo()
473*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the DEC-DSP memory information
474*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE :
475*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
476*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
477*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
478*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetMemInfo(void)479*53ee8cc1Swenshuai.xi void HAL_MAD_SetMemInfo(void)
480*53ee8cc1Swenshuai.xi {
481*53ee8cc1Swenshuai.xi // Remove all memory Info(SE-DSP & R2) to SetMemInfo2
482*53ee8cc1Swenshuai.xi return;
483*53ee8cc1Swenshuai.xi }
484*53ee8cc1Swenshuai.xi
485*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
486*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetEncCmd()
487*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to set encode command.
488*53ee8cc1Swenshuai.xi /// @param <IN> \b u8EncCmd :
489*53ee8cc1Swenshuai.xi /// 0--STOP
490*53ee8cc1Swenshuai.xi /// 1--START ENCODE
491*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
492*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
493*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
494*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetEncCmd(AU_DVB_ENCCMD u8EncCmd)495*53ee8cc1Swenshuai.xi void HAL_MAD_SetEncCmd(AU_DVB_ENCCMD u8EncCmd)
496*53ee8cc1Swenshuai.xi {
497*53ee8cc1Swenshuai.xi // not use, remove
498*53ee8cc1Swenshuai.xi }
499*53ee8cc1Swenshuai.xi
500*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
501*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_EncodeInit() @@ function can be extended
502*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to init encode parameter.
503*53ee8cc1Swenshuai.xi /// @param <IN> \b u8EncBr :
504*53ee8cc1Swenshuai.xi /// Encode Output Bitrate: 0:192kBps, 1:384kBps, 2:128kBps, 3:64kBps
505*53ee8cc1Swenshuai.xi /// \b
506*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
507*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
508*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
509*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_EncodeInit(AU_DVB_ENCBR u8EncBr,MS_U8 u8EncFrameNum)510*53ee8cc1Swenshuai.xi void HAL_MAD_EncodeInit(AU_DVB_ENCBR u8EncBr, MS_U8 u8EncFrameNum)
511*53ee8cc1Swenshuai.xi {
512*53ee8cc1Swenshuai.xi // not use, remove
513*53ee8cc1Swenshuai.xi }
514*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
515*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_AUDIO_GetEncodeFrameInfo() @@kochien added for PVR
516*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to get encoded frame information
517*53ee8cc1Swenshuai.xi /// @param <IN> \b u32Addr : encoded frame start address
518*53ee8cc1Swenshuai.xi /// @param <IN> \b u32Size : encoded frame data size
519*53ee8cc1Swenshuai.xi /// @param <IN> \b u64EncIdx : frame idx for PTS
520*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
521*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
522*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
523*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_AUDIO_GetEncodeFrameInfo(AU_DVB_ENC_FRAME_INFO * FrameInfo)524*53ee8cc1Swenshuai.xi void HAL_AUDIO_GetEncodeFrameInfo(AU_DVB_ENC_FRAME_INFO *FrameInfo)
525*53ee8cc1Swenshuai.xi {
526*53ee8cc1Swenshuai.xi // not use, remove
527*53ee8cc1Swenshuai.xi }
528*53ee8cc1Swenshuai.xi
529*53ee8cc1Swenshuai.xi
530*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
531*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_setDecCmd()
532*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to set the DVB1 decode command.
533*53ee8cc1Swenshuai.xi /// @param <IN> \b u8DecCmd :
534*53ee8cc1Swenshuai.xi /// 0--STOP
535*53ee8cc1Swenshuai.xi /// 1--PLAY
536*53ee8cc1Swenshuai.xi /// 1--RESYNC
537*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
538*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
539*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
540*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
541*53ee8cc1Swenshuai.xi MS_S32 uniPlay_ackCnt[2] = {0};
HAL_MAD_SetDecCmd(AU_DVB_DECCMD u8DecCmd)542*53ee8cc1Swenshuai.xi void HAL_MAD_SetDecCmd(AU_DVB_DECCMD u8DecCmd)
543*53ee8cc1Swenshuai.xi {
544*53ee8cc1Swenshuai.xi MS_U8 FREERUN_STATE = 0;
545*53ee8cc1Swenshuai.xi MS_U16 u16_timeout = 0;
546*53ee8cc1Swenshuai.xi MS_U32 u32_r2_cmd = 0, u32_driver_cmd = 0;
547*53ee8cc1Swenshuai.xi DBG_MAD(printf("HAL_MAD_setDecCmd:(%x)\r\n",u8DecCmd));
548*53ee8cc1Swenshuai.xi
549*53ee8cc1Swenshuai.xi if (u8DecCmd == AU_DVB_DECCMD_AVSYNC)
550*53ee8cc1Swenshuai.xi {
551*53ee8cc1Swenshuai.xi HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x80, 0x00); // bit[15] = 0
552*53ee8cc1Swenshuai.xi }
553*53ee8cc1Swenshuai.xi else if (u8DecCmd == AU_DVB_DECCMD_FREERUN)
554*53ee8cc1Swenshuai.xi {
555*53ee8cc1Swenshuai.xi HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x80, 0x80); // bit[15] = 1, AU_DEC_R2_CMD_FREERUN
556*53ee8cc1Swenshuai.xi }
557*53ee8cc1Swenshuai.xi else
558*53ee8cc1Swenshuai.xi {
559*53ee8cc1Swenshuai.xi
560*53ee8cc1Swenshuai.xi switch(u8DecCmd)
561*53ee8cc1Swenshuai.xi {
562*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_STOP:
563*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_FILE_REQ_SIZE, ADEC1, 0, 0);
564*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC1, 0, 0); //Set ES write pointer to start point.
565*53ee8cc1Swenshuai.xi HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0xEF, AU_DEC_R2_CMD_STOP);
566*53ee8cc1Swenshuai.xi uniPlay_ackCnt[0] = 0;
567*53ee8cc1Swenshuai.xi break;
568*53ee8cc1Swenshuai.xi
569*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_PLAY:
570*53ee8cc1Swenshuai.xi HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x6F, AU_DEC_R2_CMD_PLAY);
571*53ee8cc1Swenshuai.xi break;
572*53ee8cc1Swenshuai.xi
573*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_PLAYFILETSP:
574*53ee8cc1Swenshuai.xi HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x6F, AU_DEC_R2_CMD_PLAYFILETSP);
575*53ee8cc1Swenshuai.xi break;
576*53ee8cc1Swenshuai.xi
577*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_PLAYFRAME_GS :
578*53ee8cc1Swenshuai.xi HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x6F, AU_DEC_R2_CMD_PLAYUNI);
579*53ee8cc1Swenshuai.xi break;
580*53ee8cc1Swenshuai.xi
581*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_PLAYFILE:
582*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_PLAYFILE2_PTS:
583*53ee8cc1Swenshuai.xi HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x6F, AU_DEC_R2_CMD_PLAYFILE);
584*53ee8cc1Swenshuai.xi break;
585*53ee8cc1Swenshuai.xi
586*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_PLAY_AD:
587*53ee8cc1Swenshuai.xi HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x10, AU_DEC_R2_CMD_PLAY_AD);
588*53ee8cc1Swenshuai.xi break;
589*53ee8cc1Swenshuai.xi
590*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_STOP_AD:
591*53ee8cc1Swenshuai.xi HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x10, 0x00);
592*53ee8cc1Swenshuai.xi break;
593*53ee8cc1Swenshuai.xi
594*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_PAUSE:
595*53ee8cc1Swenshuai.xi HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x40, AU_DEC_R2_CMD_PAUSE);
596*53ee8cc1Swenshuai.xi break;
597*53ee8cc1Swenshuai.xi
598*53ee8cc1Swenshuai.xi default:
599*53ee8cc1Swenshuai.xi break;
600*53ee8cc1Swenshuai.xi }
601*53ee8cc1Swenshuai.xi
602*53ee8cc1Swenshuai.xi FREERUN_STATE = HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_CMD)&0x80; // check free-run
603*53ee8cc1Swenshuai.xi HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x80, FREERUN_STATE);
604*53ee8cc1Swenshuai.xi
605*53ee8cc1Swenshuai.xi /* handshake scheme between R2 and Driver */
606*53ee8cc1Swenshuai.xi if((u8DecCmd == AU_DVB_DECCMD_PLAY)||(u8DecCmd == AU_DVB_DECCMD_PLAYFILETSP)||(u8DecCmd == AU_DVB_DECCMD_PLAYFILE)
607*53ee8cc1Swenshuai.xi ||(u8DecCmd == AU_DVB_DECCMD_PLAYFRAME)||(u8DecCmd == AU_DVB_DECCMD_PLAYFRAME_STAGE)||(u8DecCmd == AU_DVB_DECCMD_PLAYFRAME_GS)||(u8DecCmd == AU_DVB_DECCMD_PLAYFILE2_PTS))
608*53ee8cc1Swenshuai.xi {
609*53ee8cc1Swenshuai.xi u32_driver_cmd = R2_DECCMD_PLAY; //DEC_PLAYSTATE_PLAY
610*53ee8cc1Swenshuai.xi }
611*53ee8cc1Swenshuai.xi else if(u8DecCmd == AU_DVB_DECCMD_STOP)
612*53ee8cc1Swenshuai.xi {
613*53ee8cc1Swenshuai.xi u32_driver_cmd = R2_DECCMD_STOP; //DEC_PLAYSTATE_STOP
614*53ee8cc1Swenshuai.xi }
615*53ee8cc1Swenshuai.xi else if(u8DecCmd == AU_DVB_DECCMD_PAUSE)
616*53ee8cc1Swenshuai.xi {
617*53ee8cc1Swenshuai.xi u32_driver_cmd = R2_DECCMD_PAUSE; //DEC_PLAYSTATE_PAUSE
618*53ee8cc1Swenshuai.xi }
619*53ee8cc1Swenshuai.xi else
620*53ee8cc1Swenshuai.xi {
621*53ee8cc1Swenshuai.xi return;
622*53ee8cc1Swenshuai.xi }
623*53ee8cc1Swenshuai.xi
624*53ee8cc1Swenshuai.xi /* wait command passing to r2 */
625*53ee8cc1Swenshuai.xi while(u16_timeout++ < 100)
626*53ee8cc1Swenshuai.xi {
627*53ee8cc1Swenshuai.xi u32_r2_cmd = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PLAY_STATE, ADEC1)&0x00FFFFFF;
628*53ee8cc1Swenshuai.xi AUDIO_DELAY1MS(1);
629*53ee8cc1Swenshuai.xi if (u32_r2_cmd == u32_driver_cmd)
630*53ee8cc1Swenshuai.xi break;
631*53ee8cc1Swenshuai.xi }
632*53ee8cc1Swenshuai.xi
633*53ee8cc1Swenshuai.xi if (u16_timeout >= 100 )
634*53ee8cc1Swenshuai.xi {
635*53ee8cc1Swenshuai.xi HALMAD_ERROR(" === HAL_MAD_SetDecCmd %d fail===\n",u8DecCmd);
636*53ee8cc1Swenshuai.xi }
637*53ee8cc1Swenshuai.xi }
638*53ee8cc1Swenshuai.xi }
639*53ee8cc1Swenshuai.xi
HAL_MAD_SetDecCmd2(AUDIO_DEC_ID DecId,AU_DVB_DECCMD u8DecCmd)640*53ee8cc1Swenshuai.xi void HAL_MAD_SetDecCmd2(AUDIO_DEC_ID DecId, AU_DVB_DECCMD u8DecCmd)
641*53ee8cc1Swenshuai.xi {
642*53ee8cc1Swenshuai.xi if (AUDIO_DSP_ID_DEC == g_AudioVars2->AudioDecStatus[DecId].eDSPId)
643*53ee8cc1Swenshuai.xi {
644*53ee8cc1Swenshuai.xi // ADEC DSP
645*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(u8DecCmd);
646*53ee8cc1Swenshuai.xi }
647*53ee8cc1Swenshuai.xi else if (AUDIO_DSP_ID_SND == g_AudioVars2->AudioDecStatus[DecId].eDSPId)
648*53ee8cc1Swenshuai.xi {
649*53ee8cc1Swenshuai.xi // ASND DSP
650*53ee8cc1Swenshuai.xi HAL_MAD_SetDSP2DecCmd(u8DecCmd);
651*53ee8cc1Swenshuai.xi }
652*53ee8cc1Swenshuai.xi else
653*53ee8cc1Swenshuai.xi {
654*53ee8cc1Swenshuai.xi // AU_DEC_ID2 only for ATV SIF
655*53ee8cc1Swenshuai.xi // For other case should not use AU_DEC_ID2
656*53ee8cc1Swenshuai.xi return;
657*53ee8cc1Swenshuai.xi }
658*53ee8cc1Swenshuai.xi
659*53ee8cc1Swenshuai.xi // Check AD play command
660*53ee8cc1Swenshuai.xi if((AU_DVB_DECCMD_PLAY_AD == u8DecCmd) || (AU_DVB_DECCMD_STOP_AD == u8DecCmd))
661*53ee8cc1Swenshuai.xi {
662*53ee8cc1Swenshuai.xi if(g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_DTV_IN)
663*53ee8cc1Swenshuai.xi {
664*53ee8cc1Swenshuai.xi switch(DecId)
665*53ee8cc1Swenshuai.xi {
666*53ee8cc1Swenshuai.xi case AU_DEC_ID1:
667*53ee8cc1Swenshuai.xi case AU_DEC_ID2:
668*53ee8cc1Swenshuai.xi {
669*53ee8cc1Swenshuai.xi switch(u8DecCmd)
670*53ee8cc1Swenshuai.xi {
671*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_PLAY_AD:
672*53ee8cc1Swenshuai.xi {
673*53ee8cc1Swenshuai.xi g_bR2Adec1AD = TRUE;
674*53ee8cc1Swenshuai.xi }
675*53ee8cc1Swenshuai.xi break;
676*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_STOP_AD:
677*53ee8cc1Swenshuai.xi {
678*53ee8cc1Swenshuai.xi g_bR2Adec1AD = FALSE;
679*53ee8cc1Swenshuai.xi }
680*53ee8cc1Swenshuai.xi break;
681*53ee8cc1Swenshuai.xi default:
682*53ee8cc1Swenshuai.xi break;
683*53ee8cc1Swenshuai.xi }
684*53ee8cc1Swenshuai.xi }
685*53ee8cc1Swenshuai.xi break;
686*53ee8cc1Swenshuai.xi case AU_DEC_ID3:
687*53ee8cc1Swenshuai.xi {
688*53ee8cc1Swenshuai.xi switch(u8DecCmd)
689*53ee8cc1Swenshuai.xi {
690*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_PLAY_AD:
691*53ee8cc1Swenshuai.xi {
692*53ee8cc1Swenshuai.xi g_bR2Adec2AD = TRUE;
693*53ee8cc1Swenshuai.xi }
694*53ee8cc1Swenshuai.xi break;
695*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_STOP_AD:
696*53ee8cc1Swenshuai.xi {
697*53ee8cc1Swenshuai.xi g_bR2Adec2AD = FALSE;
698*53ee8cc1Swenshuai.xi }
699*53ee8cc1Swenshuai.xi break;
700*53ee8cc1Swenshuai.xi default:
701*53ee8cc1Swenshuai.xi break;
702*53ee8cc1Swenshuai.xi }
703*53ee8cc1Swenshuai.xi }
704*53ee8cc1Swenshuai.xi break;
705*53ee8cc1Swenshuai.xi default:
706*53ee8cc1Swenshuai.xi break;
707*53ee8cc1Swenshuai.xi }
708*53ee8cc1Swenshuai.xi }
709*53ee8cc1Swenshuai.xi }
710*53ee8cc1Swenshuai.xi
711*53ee8cc1Swenshuai.xi switch(DecId)
712*53ee8cc1Swenshuai.xi {
713*53ee8cc1Swenshuai.xi case AU_DEC_ID1:
714*53ee8cc1Swenshuai.xi case AU_DEC_ID2:
715*53ee8cc1Swenshuai.xi {
716*53ee8cc1Swenshuai.xi switch(g_bR2Adec1AD)
717*53ee8cc1Swenshuai.xi {
718*53ee8cc1Swenshuai.xi case TRUE:
719*53ee8cc1Swenshuai.xi {
720*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PLAY_AD);
721*53ee8cc1Swenshuai.xi }
722*53ee8cc1Swenshuai.xi break;
723*53ee8cc1Swenshuai.xi case FALSE:
724*53ee8cc1Swenshuai.xi {
725*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_STOP_AD);
726*53ee8cc1Swenshuai.xi }
727*53ee8cc1Swenshuai.xi break;
728*53ee8cc1Swenshuai.xi default:
729*53ee8cc1Swenshuai.xi break;
730*53ee8cc1Swenshuai.xi }
731*53ee8cc1Swenshuai.xi }
732*53ee8cc1Swenshuai.xi break;
733*53ee8cc1Swenshuai.xi case AU_DEC_ID3:
734*53ee8cc1Swenshuai.xi {
735*53ee8cc1Swenshuai.xi switch(g_bR2Adec2AD)
736*53ee8cc1Swenshuai.xi {
737*53ee8cc1Swenshuai.xi case TRUE:
738*53ee8cc1Swenshuai.xi {
739*53ee8cc1Swenshuai.xi HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD_PLAY_AD);
740*53ee8cc1Swenshuai.xi }
741*53ee8cc1Swenshuai.xi break;
742*53ee8cc1Swenshuai.xi case FALSE:
743*53ee8cc1Swenshuai.xi {
744*53ee8cc1Swenshuai.xi HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD_STOP_AD);
745*53ee8cc1Swenshuai.xi }
746*53ee8cc1Swenshuai.xi break;
747*53ee8cc1Swenshuai.xi default:
748*53ee8cc1Swenshuai.xi break;
749*53ee8cc1Swenshuai.xi }
750*53ee8cc1Swenshuai.xi }
751*53ee8cc1Swenshuai.xi break;
752*53ee8cc1Swenshuai.xi default:
753*53ee8cc1Swenshuai.xi break;
754*53ee8cc1Swenshuai.xi }
755*53ee8cc1Swenshuai.xi }
756*53ee8cc1Swenshuai.xi
757*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
758*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetDSP2DecCmd()
759*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to set the DVB3 decode command.
760*53ee8cc1Swenshuai.xi /// @param <IN> \b u8DecCmd :
761*53ee8cc1Swenshuai.xi /// 0--STOP
762*53ee8cc1Swenshuai.xi /// 1--PLAY
763*53ee8cc1Swenshuai.xi /// 1--RESYNC
764*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
765*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
766*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
767*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD u8DecCmd)768*53ee8cc1Swenshuai.xi void HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD u8DecCmd)
769*53ee8cc1Swenshuai.xi {
770*53ee8cc1Swenshuai.xi MS_U8 FREERUN_STATE = 0;
771*53ee8cc1Swenshuai.xi MS_U16 u16_timeout = 0;
772*53ee8cc1Swenshuai.xi MS_U32 u32_r2_cmd = 0, u32_driver_cmd = 0;
773*53ee8cc1Swenshuai.xi DBG_MAD(printf("HAL_MAD_SetDSP2DecCmd:(%x)\r\n", u8DecCmd));
774*53ee8cc1Swenshuai.xi
775*53ee8cc1Swenshuai.xi if (u8DecCmd == AU_DVB_DECCMD_AVSYNC)
776*53ee8cc1Swenshuai.xi {
777*53ee8cc1Swenshuai.xi HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0x80, 0x00); // bit[15] = 0
778*53ee8cc1Swenshuai.xi }
779*53ee8cc1Swenshuai.xi else if (u8DecCmd == AU_DVB_DECCMD_FREERUN)
780*53ee8cc1Swenshuai.xi {
781*53ee8cc1Swenshuai.xi HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0x80, 0x80); // bit[15] = 1, AU_DEC_R2_CMD_FREERUN
782*53ee8cc1Swenshuai.xi }
783*53ee8cc1Swenshuai.xi else
784*53ee8cc1Swenshuai.xi {
785*53ee8cc1Swenshuai.xi
786*53ee8cc1Swenshuai.xi switch(u8DecCmd)
787*53ee8cc1Swenshuai.xi {
788*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_STOP:
789*53ee8cc1Swenshuai.xi uniPlay_ackCnt[1] = 0;
790*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_FILE_REQ_SIZE, ADEC2, 0, 0);
791*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC2, 0, 0); //Set ES write pointer to start point.
792*53ee8cc1Swenshuai.xi HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0xFF, AU_DEC_R2_CMD_STOP); break;
793*53ee8cc1Swenshuai.xi
794*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_PLAY: HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0x7F, AU_DEC_R2_CMD_PLAY); break;
795*53ee8cc1Swenshuai.xi
796*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_PLAYFILETSP: HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0x7F, AU_DEC_R2_CMD_PLAYFILETSP); break;
797*53ee8cc1Swenshuai.xi
798*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_PLAYFRAME_GS : HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0x7F, AU_DEC_R2_CMD_PLAYUNI); break;
799*53ee8cc1Swenshuai.xi
800*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_PLAYFILE:
801*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_PLAYFILE2_PTS:
802*53ee8cc1Swenshuai.xi HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0x7F, AU_DEC_R2_CMD_PLAYFILE); break;
803*53ee8cc1Swenshuai.xi
804*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_PLAY_AD: HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0x10, AU_DEC_R2_CMD_PLAY_AD); break;
805*53ee8cc1Swenshuai.xi
806*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_STOP_AD: HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0x10, 0x00); break;
807*53ee8cc1Swenshuai.xi
808*53ee8cc1Swenshuai.xi case AU_DVB_DECCMD_PAUSE: HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0x40, AU_DEC_R2_CMD_PAUSE); break;
809*53ee8cc1Swenshuai.xi default: break;
810*53ee8cc1Swenshuai.xi }
811*53ee8cc1Swenshuai.xi
812*53ee8cc1Swenshuai.xi FREERUN_STATE = HAL_AUDIO_AbsReadByte(REG_R2_DECODE2_CMD)&0x80; // check free-run
813*53ee8cc1Swenshuai.xi HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0x80, FREERUN_STATE);
814*53ee8cc1Swenshuai.xi /* handshake scheme between R2 and Driver */
815*53ee8cc1Swenshuai.xi if((u8DecCmd == AU_DVB_DECCMD_PLAY)||(u8DecCmd == AU_DVB_DECCMD_PLAYFILETSP)||(u8DecCmd == AU_DVB_DECCMD_PLAYFILE)
816*53ee8cc1Swenshuai.xi ||(u8DecCmd == AU_DVB_DECCMD_PLAYFRAME)||(u8DecCmd == AU_DVB_DECCMD_PLAYFRAME_STAGE)||(u8DecCmd == AU_DVB_DECCMD_PLAYFRAME_GS)||(u8DecCmd == AU_DVB_DECCMD_PLAYFILE2_PTS))
817*53ee8cc1Swenshuai.xi {
818*53ee8cc1Swenshuai.xi u32_driver_cmd = R2_DECCMD_PLAY; //DEC_PLAYSTATE_PLAY
819*53ee8cc1Swenshuai.xi }
820*53ee8cc1Swenshuai.xi else if(u8DecCmd == AU_DVB_DECCMD_STOP)
821*53ee8cc1Swenshuai.xi {
822*53ee8cc1Swenshuai.xi u32_driver_cmd = R2_DECCMD_STOP; //DEC_PLAYSTATE_STOP
823*53ee8cc1Swenshuai.xi }
824*53ee8cc1Swenshuai.xi else if(u8DecCmd == AU_DVB_DECCMD_PAUSE)
825*53ee8cc1Swenshuai.xi {
826*53ee8cc1Swenshuai.xi u32_driver_cmd = R2_DECCMD_PAUSE; //DEC_PLAYSTATE_PAUSE
827*53ee8cc1Swenshuai.xi }
828*53ee8cc1Swenshuai.xi else
829*53ee8cc1Swenshuai.xi {
830*53ee8cc1Swenshuai.xi return;
831*53ee8cc1Swenshuai.xi }
832*53ee8cc1Swenshuai.xi
833*53ee8cc1Swenshuai.xi /* wait command passing to r2 */
834*53ee8cc1Swenshuai.xi while(u16_timeout++ < 100)
835*53ee8cc1Swenshuai.xi {
836*53ee8cc1Swenshuai.xi u32_r2_cmd = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PLAY_STATE, ADEC2)&0x00FFFFFF;
837*53ee8cc1Swenshuai.xi AUDIO_DELAY1MS(1);
838*53ee8cc1Swenshuai.xi if (u32_r2_cmd == u32_driver_cmd)
839*53ee8cc1Swenshuai.xi break;
840*53ee8cc1Swenshuai.xi }
841*53ee8cc1Swenshuai.xi
842*53ee8cc1Swenshuai.xi if (u16_timeout >= 100 )
843*53ee8cc1Swenshuai.xi {
844*53ee8cc1Swenshuai.xi HALMAD_ERROR(" === HAL_MAD_SetDSP2DecCmd %d fail===\n",u8DecCmd);
845*53ee8cc1Swenshuai.xi }
846*53ee8cc1Swenshuai.xi }
847*53ee8cc1Swenshuai.xi }
848*53ee8cc1Swenshuai.xi
849*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
850*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetDecCmd()
851*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to get the DVB1 decode command.
852*53ee8cc1Swenshuai.xi /// @param <OUT> \b AU_DVB_DECCMD :
853*53ee8cc1Swenshuai.xi // AU_DVB_DECCMD_STOP, //0
854*53ee8cc1Swenshuai.xi // AU_DVB_DECCMD_PLAY, //1
855*53ee8cc1Swenshuai.xi // AU_DVB_DECCMD_PLAYFILETSP = 2,
856*53ee8cc1Swenshuai.xi // AU_DVB_DECCMD_RESYNC,
857*53ee8cc1Swenshuai.xi // ....etc
858*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
859*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
860*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
861*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetDecCmd(En_DVB_AudioDecoder AdoDecoderNo)862*53ee8cc1Swenshuai.xi AU_DVB_DECCMD HAL_MAD_GetDecCmd(En_DVB_AudioDecoder AdoDecoderNo)
863*53ee8cc1Swenshuai.xi {
864*53ee8cc1Swenshuai.xi AU_DEC_R2_CMD r2cmd_status = AU_DEC_R2_CMD_STOP;
865*53ee8cc1Swenshuai.xi AU_DVB_DECCMD ret_deccmd = AU_DVB_DECCMD_STOP;
866*53ee8cc1Swenshuai.xi
867*53ee8cc1Swenshuai.xi switch (AdoDecoderNo)
868*53ee8cc1Swenshuai.xi {
869*53ee8cc1Swenshuai.xi case DVB_Audio_Decoder1:
870*53ee8cc1Swenshuai.xi {
871*53ee8cc1Swenshuai.xi r2cmd_status = HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_CMD);
872*53ee8cc1Swenshuai.xi r2cmd_status &= ~AU_DEC_R2_CMD_PLAY_AD; /* Discard AU_DEC_R2_CMD_PLAY_AD */
873*53ee8cc1Swenshuai.xi r2cmd_status &= ~AU_DEC_R2_CMD_FREERUN; /* Discard AU_DEC_R2_CMD_FREERUN */
874*53ee8cc1Swenshuai.xi break;
875*53ee8cc1Swenshuai.xi }
876*53ee8cc1Swenshuai.xi
877*53ee8cc1Swenshuai.xi case DVB_Audio_Decoder2:
878*53ee8cc1Swenshuai.xi {
879*53ee8cc1Swenshuai.xi r2cmd_status = HAL_AUDIO_AbsReadByte(REG_R2_DECODE2_CMD);
880*53ee8cc1Swenshuai.xi r2cmd_status = r2cmd_status & 0x7F;
881*53ee8cc1Swenshuai.xi break;
882*53ee8cc1Swenshuai.xi }
883*53ee8cc1Swenshuai.xi
884*53ee8cc1Swenshuai.xi default:
885*53ee8cc1Swenshuai.xi break;
886*53ee8cc1Swenshuai.xi }
887*53ee8cc1Swenshuai.xi
888*53ee8cc1Swenshuai.xi /*
889*53ee8cc1Swenshuai.xi need to report status cmd first (stauts cmd : free-run, pause, browse)
890*53ee8cc1Swenshuai.xi */
891*53ee8cc1Swenshuai.xi
892*53ee8cc1Swenshuai.xi if((r2cmd_status & AU_DEC_R2_CMD_PAUSE) == AU_DEC_R2_CMD_PAUSE) // check pause
893*53ee8cc1Swenshuai.xi {
894*53ee8cc1Swenshuai.xi ret_deccmd = AU_DVB_DECCMD_PAUSE;
895*53ee8cc1Swenshuai.xi }
896*53ee8cc1Swenshuai.xi else if((r2cmd_status & AU_DEC_R2_CMD_STARTBROWSE) == AU_DEC_R2_CMD_STARTBROWSE) // check startbrowse
897*53ee8cc1Swenshuai.xi {
898*53ee8cc1Swenshuai.xi ret_deccmd = AU_DVB_DECCMD_STARTBROWSE;
899*53ee8cc1Swenshuai.xi }
900*53ee8cc1Swenshuai.xi else if((r2cmd_status & AU_DEC_R2_CMD_PLAY_AD) == AU_DEC_R2_CMD_PLAY_AD) // check play AD
901*53ee8cc1Swenshuai.xi {
902*53ee8cc1Swenshuai.xi ret_deccmd = AU_DVB_DECCMD_PLAY_AD;
903*53ee8cc1Swenshuai.xi }
904*53ee8cc1Swenshuai.xi else // others : not status cmd
905*53ee8cc1Swenshuai.xi {
906*53ee8cc1Swenshuai.xi switch(r2cmd_status)
907*53ee8cc1Swenshuai.xi {
908*53ee8cc1Swenshuai.xi case AU_DEC_R2_CMD_STOP:
909*53ee8cc1Swenshuai.xi ret_deccmd = AU_DVB_DECCMD_STOP;
910*53ee8cc1Swenshuai.xi break;
911*53ee8cc1Swenshuai.xi
912*53ee8cc1Swenshuai.xi case AU_DEC_R2_CMD_PLAY:
913*53ee8cc1Swenshuai.xi ret_deccmd = AU_DVB_DECCMD_PLAY;
914*53ee8cc1Swenshuai.xi break;
915*53ee8cc1Swenshuai.xi
916*53ee8cc1Swenshuai.xi case AU_DEC_R2_CMD_PLAYFILETSP:
917*53ee8cc1Swenshuai.xi ret_deccmd = AU_DVB_DECCMD_PLAYFILETSP;
918*53ee8cc1Swenshuai.xi break;
919*53ee8cc1Swenshuai.xi
920*53ee8cc1Swenshuai.xi case AU_DEC_R2_CMD_PLAYUNI:
921*53ee8cc1Swenshuai.xi ret_deccmd = AU_DVB_DECCMD_PLAYFRAME_GS;
922*53ee8cc1Swenshuai.xi break;
923*53ee8cc1Swenshuai.xi
924*53ee8cc1Swenshuai.xi case AU_DEC_R2_CMD_PLAYFILE:
925*53ee8cc1Swenshuai.xi ret_deccmd = AU_DVB_DECCMD_PLAYFILE;
926*53ee8cc1Swenshuai.xi break;
927*53ee8cc1Swenshuai.xi
928*53ee8cc1Swenshuai.xi default:
929*53ee8cc1Swenshuai.xi break;
930*53ee8cc1Swenshuai.xi }
931*53ee8cc1Swenshuai.xi }
932*53ee8cc1Swenshuai.xi
933*53ee8cc1Swenshuai.xi return ret_deccmd;
934*53ee8cc1Swenshuai.xi }
935*53ee8cc1Swenshuai.xi
936*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
937*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_setFreeRun()
938*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to set the decoder in free run or AV-sync mode.
939*53ee8cc1Swenshuai.xi /// @param <IN> \b u8FreeRun : 0--normal AV sync
940*53ee8cc1Swenshuai.xi /// 1--free-run mode
941*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
942*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
943*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
944*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetFreeRun(MS_U8 u8FreeRun)945*53ee8cc1Swenshuai.xi void HAL_MAD_SetFreeRun( MS_U8 u8FreeRun )
946*53ee8cc1Swenshuai.xi {
947*53ee8cc1Swenshuai.xi DBG_MAD(printf("HAL_MAD_setFreeRun:(%x)\r\n",u8FreeRun));
948*53ee8cc1Swenshuai.xi if( u8FreeRun >= 2 ){
949*53ee8cc1Swenshuai.xi DBG_MAD(printf("Invalid mode\r\n"));
950*53ee8cc1Swenshuai.xi return;
951*53ee8cc1Swenshuai.xi }
952*53ee8cc1Swenshuai.xi
953*53ee8cc1Swenshuai.xi HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x80, (u8FreeRun << 7));
954*53ee8cc1Swenshuai.xi }
955*53ee8cc1Swenshuai.xi
956*53ee8cc1Swenshuai.xi
957*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
958*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_DisEn_MIUREQ()
959*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to reset DVB1 MIU request command.
960*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE :
961*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
962*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
963*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
964*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_DisEn_MIUREQ(void)965*53ee8cc1Swenshuai.xi void HAL_MAD_DisEn_MIUREQ(void)
966*53ee8cc1Swenshuai.xi {
967*53ee8cc1Swenshuai.xi // Disable MIU Request
968*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(REG_DEC_AUD_DTRL, 0x0040, 0x0040 );
969*53ee8cc1Swenshuai.xi AUDIO_DELAY1MS(1);
970*53ee8cc1Swenshuai.xi // Enable MIU Request
971*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(REG_DEC_AUD_DTRL, 0x0040, 0x0000 );
972*53ee8cc1Swenshuai.xi }
973*53ee8cc1Swenshuai.xi
974*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
975*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_Dis_MIUREQ()
976*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to reset DVB1 MIU request command.
977*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE :
978*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
979*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
980*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
981*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_Dis_MIUREQ(void)982*53ee8cc1Swenshuai.xi void HAL_MAD_Dis_MIUREQ(void)
983*53ee8cc1Swenshuai.xi {
984*53ee8cc1Swenshuai.xi // Disable MIU Request
985*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(REG_DEC_AUD_DTRL, 0x0040, 0x0040 ); // disable
986*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(REG_DEC_AUD_DTRL, 0x0080, 0x0080 ); // reset MAD module
987*53ee8cc1Swenshuai.xi }
988*53ee8cc1Swenshuai.xi
989*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
990*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_RSTMAD_DisEn_MIUREQ()
991*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to reset DVB1 MIU request command.
992*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE :
993*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
994*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
995*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
996*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_RSTMAD_DisEn_MIUREQ(void)997*53ee8cc1Swenshuai.xi void HAL_MAD_RSTMAD_DisEn_MIUREQ(void)
998*53ee8cc1Swenshuai.xi {
999*53ee8cc1Swenshuai.xi // Disable MIU Request
1000*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(REG_DEC_AUD_DTRL, 0x0040, 0x0040 ); // disable
1001*53ee8cc1Swenshuai.xi // Reset MAD
1002*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(REG_DEC_AUD_DTRL, 0x0080, 0x0080 ); // reset MAD module
1003*53ee8cc1Swenshuai.xi AUDIO_DELAY1MS(1);
1004*53ee8cc1Swenshuai.xi // Set MAD
1005*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(REG_DEC_AUD_DTRL, 0x0080, 0x00 );
1006*53ee8cc1Swenshuai.xi // Enable MIU Request
1007*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(REG_DEC_AUD_DTRL, 0x0040, 0x0000 );
1008*53ee8cc1Swenshuai.xi }
1009*53ee8cc1Swenshuai.xi
1010*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1011*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_DSPACK()
1012*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to report DSP reload ACK cmd.
1013*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE :
1014*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
1015*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
1016*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1017*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetReloadCodeAck(void)1018*53ee8cc1Swenshuai.xi MS_U8 HAL_MAD_GetReloadCodeAck(void)
1019*53ee8cc1Swenshuai.xi {
1020*53ee8cc1Swenshuai.xi //NOT_DEFINE : to do
1021*53ee8cc1Swenshuai.xi return(HAL_AUDIO_ReadByte(REG_MB_DE_ACK2));
1022*53ee8cc1Swenshuai.xi }
1023*53ee8cc1Swenshuai.xi
1024*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1025*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_DSPACK()
1026*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to report DSP reload ACK cmd.
1027*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE :
1028*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
1029*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
1030*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1031*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetLoadCodeAck(void)1032*53ee8cc1Swenshuai.xi MS_U8 HAL_MAD_GetLoadCodeAck(void)
1033*53ee8cc1Swenshuai.xi {
1034*53ee8cc1Swenshuai.xi //NOT_DEFINE : to do
1035*53ee8cc1Swenshuai.xi return(HAL_AUDIO_ReadByte(REG_MB_DE_ACK1));
1036*53ee8cc1Swenshuai.xi }
1037*53ee8cc1Swenshuai.xi
1038*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1039*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_Rpt_DTVES()
1040*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to report AC3/MPEG stream if exist or not.
1041*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE :
1042*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
1043*53ee8cc1Swenshuai.xi /// @param <RET> \b MS_U8 : the decoder status
1044*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1045*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_Rpt_DTVES(void)1046*53ee8cc1Swenshuai.xi MS_U8 HAL_MAD_Rpt_DTVES(void)
1047*53ee8cc1Swenshuai.xi {
1048*53ee8cc1Swenshuai.xi MS_U8 Rpt_DTVES_tmp;
1049*53ee8cc1Swenshuai.xi Rpt_DTVES_tmp = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_STAUS, ADEC1);
1050*53ee8cc1Swenshuai.xi
1051*53ee8cc1Swenshuai.xi return Rpt_DTVES_tmp;
1052*53ee8cc1Swenshuai.xi }
1053*53ee8cc1Swenshuai.xi
1054*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1055*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetStreamID_Mod()
1056*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to AC3 Stream ID mod.
1057*53ee8cc1Swenshuai.xi /// @param <IN> \b stream_id_mod :
1058*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
1059*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
1060*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1061*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetStreamID_Mod(MS_U8 stream_id_mod)1062*53ee8cc1Swenshuai.xi void HAL_MAD_SetStreamID_Mod(MS_U8 stream_id_mod)
1063*53ee8cc1Swenshuai.xi {
1064*53ee8cc1Swenshuai.xi //NOT_DEFINE : not used, remove
1065*53ee8cc1Swenshuai.xi }
1066*53ee8cc1Swenshuai.xi
1067*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1068*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_ReadTimeStamp()
1069*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine returns the stmestamp while decoding file format.
1070*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE :
1071*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
1072*53ee8cc1Swenshuai.xi /// @param <RET> \b timestamp : time stamp value
1073*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1074*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_ReadTimeStamp(void)1075*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_ReadTimeStamp(void)
1076*53ee8cc1Swenshuai.xi {
1077*53ee8cc1Swenshuai.xi MS_U32 timestamp = 0;
1078*53ee8cc1Swenshuai.xi MS_U32 pts = 0;
1079*53ee8cc1Swenshuai.xi
1080*53ee8cc1Swenshuai.xi pts = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_CURR_PTS, ADEC1);
1081*53ee8cc1Swenshuai.xi timestamp = pts/45;
1082*53ee8cc1Swenshuai.xi
1083*53ee8cc1Swenshuai.xi return timestamp;
1084*53ee8cc1Swenshuai.xi }
1085*53ee8cc1Swenshuai.xi
1086*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1087*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD__SetAdMixMode()
1088*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set MPEG mixed with AD or AD mixed with MPEG or not.
1089*53ee8cc1Swenshuai.xi /// @param <IN> \b u8Mix_mode : 0--main mix to AD
1090*53ee8cc1Swenshuai.xi /// 1--AD mix to main
1091*53ee8cc1Swenshuai.xi /// @param <IN> \b bEnMix : 0--disable AD mix
1092*53ee8cc1Swenshuai.xi /// 1--enable AD mix
1093*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
1094*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
1095*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1096*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetAdMixMode(AD_MIX_MODE u8Mix_mode,MS_BOOL bEnMix)1097*53ee8cc1Swenshuai.xi void HAL_MAD_SetAdMixMode (AD_MIX_MODE u8Mix_mode, MS_BOOL bEnMix)
1098*53ee8cc1Swenshuai.xi {
1099*53ee8cc1Swenshuai.xi //NOT_DEFINE
1100*53ee8cc1Swenshuai.xi switch (u8Mix_mode)
1101*53ee8cc1Swenshuai.xi {
1102*53ee8cc1Swenshuai.xi case MAIN_MIX_AD:
1103*53ee8cc1Swenshuai.xi case AD_MIX_MAIN:
1104*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(REG_MB_DEC3_CTRL, 0x8000, bEnMix<<15); // IO_100 [15]
1105*53ee8cc1Swenshuai.xi break;
1106*53ee8cc1Swenshuai.xi
1107*53ee8cc1Swenshuai.xi default:
1108*53ee8cc1Swenshuai.xi break;
1109*53ee8cc1Swenshuai.xi }
1110*53ee8cc1Swenshuai.xi }
1111*53ee8cc1Swenshuai.xi
1112*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1113*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetMcuCmd()
1114*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to write MCU cmd for PIO.
1115*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE :
1116*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
1117*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
1118*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1119*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetPIOCmd(MS_U8 cmd)1120*53ee8cc1Swenshuai.xi void HAL_MAD_SetPIOCmd(MS_U8 cmd)
1121*53ee8cc1Swenshuai.xi {
1122*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(REG_MB_DEC_PIO_ID,0xFF00, cmd<<8);
1123*53ee8cc1Swenshuai.xi }
1124*53ee8cc1Swenshuai.xi
1125*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1126*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetMcuCmd()
1127*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to write MCU cmd.
1128*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE :
1129*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
1130*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
1131*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1132*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetMcuCmd(MS_U8 cmd)1133*53ee8cc1Swenshuai.xi void HAL_MAD_SetMcuCmd(MS_U8 cmd)
1134*53ee8cc1Swenshuai.xi {
1135*53ee8cc1Swenshuai.xi //NOT_DEFINE : not used, remove
1136*53ee8cc1Swenshuai.xi }
1137*53ee8cc1Swenshuai.xi
1138*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1139*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetDspIDMA()
1140*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This function is used to set DSP IDMA.
1141*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE :
1142*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
1143*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
1144*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1145*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetDspIDMA(void)1146*53ee8cc1Swenshuai.xi void HAL_MAD_SetDspIDMA(void)
1147*53ee8cc1Swenshuai.xi {
1148*53ee8cc1Swenshuai.xi //NOT_DEFINE : not used, remove
1149*53ee8cc1Swenshuai.xi }
1150*53ee8cc1Swenshuai.xi
1151*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1152*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_TriggerPIO8()
1153*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This function is used to trigger PIO8 init.
1154*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE :
1155*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
1156*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
1157*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1158*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_TriggerPIO8(void)1159*53ee8cc1Swenshuai.xi void HAL_MAD_TriggerPIO8(void)
1160*53ee8cc1Swenshuai.xi {
1161*53ee8cc1Swenshuai.xi //NOT_DEFINE : not used, remove
1162*53ee8cc1Swenshuai.xi }
1163*53ee8cc1Swenshuai.xi
1164*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1165*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_DvbFLockSynthesizer_En()
1166*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This function is used to set DSP IDMA.
1167*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE :
1168*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
1169*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
1170*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1171*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_DvbFLockSynthesizer_En(void)1172*53ee8cc1Swenshuai.xi void HAL_MAD_DvbFLockSynthesizer_En(void)
1173*53ee8cc1Swenshuai.xi {
1174*53ee8cc1Swenshuai.xi // enable force lock current DVB SYNC synthesizer freq
1175*53ee8cc1Swenshuai.xi // SIF only in SE DSP
1176*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(REG_AUDIO_INPUT_CFG, 0x0040, 0x0040 );
1177*53ee8cc1Swenshuai.xi }
1178*53ee8cc1Swenshuai.xi
1179*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1180*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_AUDIO_SetCertMode()
1181*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description:
1182*53ee8cc1Swenshuai.xi /// @param CertType \b : AUDIO_DOLBY_DD_Cert,
1183*53ee8cc1Swenshuai.xi /// @param CertType \b : AUDIO_DOLBY_DDP_Cert,
1184*53ee8cc1Swenshuai.xi /// @param CertType \b : AUDIO_DOLBY_PULSE_Cert,
1185*53ee8cc1Swenshuai.xi /// @param CertType \b : AUDIO_DOLBY_MS10_Cert,
1186*53ee8cc1Swenshuai.xi /// @param CertType \b : AUDIO_DTS_DMP_Cert,
1187*53ee8cc1Swenshuai.xi /// @param CertType \b : AUDIO_DTS_BC_Cert,
1188*53ee8cc1Swenshuai.xi /// @param CertType \b : AUDIO_DTS_PremiumTV_Cert,
1189*53ee8cc1Swenshuai.xi /// @param CertType \b : AUDIO_SRS_XT_Cert,
1190*53ee8cc1Swenshuai.xi /// @param enable \b : AUDIO_CERT_Enable / AUDIO_CERT_Disable
1191*53ee8cc1Swenshuai.xi ///
1192*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_AUDIO_SetCertMode(Audio_CertMode CertType,Audio_CertEnable enCert)1193*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_SetCertMode( Audio_CertMode CertType,Audio_CertEnable enCert )
1194*53ee8cc1Swenshuai.xi {
1195*53ee8cc1Swenshuai.xi switch(CertType)
1196*53ee8cc1Swenshuai.xi {
1197*53ee8cc1Swenshuai.xi case AUDIO_DOLBY_DD_Cert:
1198*53ee8cc1Swenshuai.xi case AUDIO_DOLBY_DDP_Cert:
1199*53ee8cc1Swenshuai.xi case AUDIO_DOLBY_PULSE_Cert:
1200*53ee8cc1Swenshuai.xi case AUDIO_DOLBY_MS10_Cert:
1201*53ee8cc1Swenshuai.xi case AUDIO_DTS_DMP_Cert:
1202*53ee8cc1Swenshuai.xi case AUDIO_DTS_BC_Cert:
1203*53ee8cc1Swenshuai.xi // sound effect bypass setting
1204*53ee8cc1Swenshuai.xi break;
1205*53ee8cc1Swenshuai.xi
1206*53ee8cc1Swenshuai.xi case AUDIO_DOLBY_DDCO_Cert:
1207*53ee8cc1Swenshuai.xi break;
1208*53ee8cc1Swenshuai.xi
1209*53ee8cc1Swenshuai.xi case AUDIO_DTS_SYMMETRY_Cert:
1210*53ee8cc1Swenshuai.xi break;
1211*53ee8cc1Swenshuai.xi
1212*53ee8cc1Swenshuai.xi case AUDIO_DTS_ENVELO_Cert:
1213*53ee8cc1Swenshuai.xi break;
1214*53ee8cc1Swenshuai.xi
1215*53ee8cc1Swenshuai.xi case AUDIO_SRS_XT_Cert:
1216*53ee8cc1Swenshuai.xi break;
1217*53ee8cc1Swenshuai.xi
1218*53ee8cc1Swenshuai.xi default:
1219*53ee8cc1Swenshuai.xi break;
1220*53ee8cc1Swenshuai.xi }
1221*53ee8cc1Swenshuai.xi return(true);
1222*53ee8cc1Swenshuai.xi }
1223*53ee8cc1Swenshuai.xi
1224*53ee8cc1Swenshuai.xi
1225*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1226*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_MM2_initAesInfo()
1227*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description : Initialize AES info
1228*53ee8cc1Swenshuai.xi /// @param <IN> \b dec_id : Decoder ID
1229*53ee8cc1Swenshuai.xi /// @param <OUT> \b MS_BOOL : return TRUE if ok, else return FALSE
1230*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1231*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1232*53ee8cc1Swenshuai.xi static MS_U32 prv_PTS = 0, prv_PTS1 = 0;
1233*53ee8cc1Swenshuai.xi static MS_U32 accum_ES = 0, prv_accum_ES = 0, accum_ES1 = 0, prv_accum_ES1 = 0;
HAL_MAD_MM2_initAesInfo(AUDIO_DEC_ID dec_id)1234*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_MM2_initAesInfo( AUDIO_DEC_ID dec_id )
1235*53ee8cc1Swenshuai.xi {
1236*53ee8cc1Swenshuai.xi Audio_id audio_id = HAL_AUDIO_Convert_DecId_to_ADECId(dec_id);
1237*53ee8cc1Swenshuai.xi if ( dec_id == AU_DEC_ID1 )
1238*53ee8cc1Swenshuai.xi {
1239*53ee8cc1Swenshuai.xi audio_aes_info[0].aes_base_addr = OFFSET_ES1_DRAM_ADDR;
1240*53ee8cc1Swenshuai.xi audio_aes_info[0].aes_BufSize = ES1_DRAM_SIZE;
1241*53ee8cc1Swenshuai.xi audio_aes_info[0].aes_end_addr = audio_aes_info[0].aes_base_addr + audio_aes_info[0].aes_BufSize;
1242*53ee8cc1Swenshuai.xi audio_aes_info[0].aes_write_addr = audio_aes_info[0].aes_base_addr;
1243*53ee8cc1Swenshuai.xi audio_aes_info[0].aes_freeSpace = audio_aes_info[0].aes_BufSize - (BYTES_IN_MIU_LINE*2);
1244*53ee8cc1Swenshuai.xi audio_aes_info[0].aes_level = 0;
1245*53ee8cc1Swenshuai.xi audio_aes_info[0].aes_lastPTS = 0;
1246*53ee8cc1Swenshuai.xi audio_aes_info[0].aes_ptsCnt = 0;
1247*53ee8cc1Swenshuai.xi
1248*53ee8cc1Swenshuai.xi prv_PTS = 0;
1249*53ee8cc1Swenshuai.xi accum_ES = 0;
1250*53ee8cc1Swenshuai.xi prv_accum_ES = 0;
1251*53ee8cc1Swenshuai.xi
1252*53ee8cc1Swenshuai.xi /* Set ES write pointer to DSP */
1253*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, audio_id, 0, 0); //Set ES write pointer to start point.
1254*53ee8cc1Swenshuai.xi
1255*53ee8cc1Swenshuai.xi DBG_MAD(printf("ID1: HAL_AUDIO_MM2_init end !!\r\n"));
1256*53ee8cc1Swenshuai.xi return TRUE;
1257*53ee8cc1Swenshuai.xi }
1258*53ee8cc1Swenshuai.xi else if( dec_id == AU_DEC_ID3 )
1259*53ee8cc1Swenshuai.xi {
1260*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_base_addr = OFFSET_ES3_DRAM_ADDR;
1261*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_BufSize = ES3_DRAM_SIZE;
1262*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_end_addr = audio_aes_info[1].aes_base_addr + audio_aes_info[1].aes_BufSize;
1263*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_write_addr = audio_aes_info[1].aes_base_addr;
1264*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_freeSpace = audio_aes_info[1].aes_BufSize - (BYTES_IN_MIU_LINE*2);
1265*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_level = 0;
1266*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_lastPTS = 0;
1267*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_ptsCnt = 0;
1268*53ee8cc1Swenshuai.xi
1269*53ee8cc1Swenshuai.xi prv_PTS1 = 0;
1270*53ee8cc1Swenshuai.xi accum_ES1 = 0;
1271*53ee8cc1Swenshuai.xi prv_accum_ES1 = 0;
1272*53ee8cc1Swenshuai.xi
1273*53ee8cc1Swenshuai.xi /* Set ES write pointer to DSP */
1274*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, audio_id, 0, 0); //Set ES write pointer to start point.
1275*53ee8cc1Swenshuai.xi
1276*53ee8cc1Swenshuai.xi DBG_MAD(printf("ID3: HAL_AUDIO_MM2_init end !!\r\n"));
1277*53ee8cc1Swenshuai.xi return TRUE;
1278*53ee8cc1Swenshuai.xi }
1279*53ee8cc1Swenshuai.xi else
1280*53ee8cc1Swenshuai.xi return FALSE;
1281*53ee8cc1Swenshuai.xi }
1282*53ee8cc1Swenshuai.xi
1283*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1284*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_MM2_checkAesInfo()
1285*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description : Get AES info from audio decoder
1286*53ee8cc1Swenshuai.xi /// @param <IN> \b dec_id : Decoder ID
1287*53ee8cc1Swenshuai.xi /// @param <IN> \b aes_info : AES info structure pointer
1288*53ee8cc1Swenshuai.xi /// @param <OUT> \b MS_BOOL : return TRUE if ok, else return FALSE
1289*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1290*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_MM2_checkAesInfo(AUDIO_DEC_ID dec_id,AES_INFO * aes_info)1291*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_MM2_checkAesInfo( AUDIO_DEC_ID dec_id, AES_INFO *aes_info )
1292*53ee8cc1Swenshuai.xi {
1293*53ee8cc1Swenshuai.xi
1294*53ee8cc1Swenshuai.xi Audio_id audio_id = HAL_AUDIO_Convert_DecId_to_ADECId(dec_id);
1295*53ee8cc1Swenshuai.xi
1296*53ee8cc1Swenshuai.xi if ( dec_id == AU_DEC_ID1 )
1297*53ee8cc1Swenshuai.xi {
1298*53ee8cc1Swenshuai.xi MS_U32 tmp1, tmp2;
1299*53ee8cc1Swenshuai.xi
1300*53ee8cc1Swenshuai.xi /* es level */
1301*53ee8cc1Swenshuai.xi audio_aes_info[0].aes_level = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ES_LEVEL, audio_id);
1302*53ee8cc1Swenshuai.xi
1303*53ee8cc1Swenshuai.xi /* calculate free space for next data input */
1304*53ee8cc1Swenshuai.xi tmp1 = audio_aes_info[0].aes_end_addr - audio_aes_info[0].aes_write_addr;
1305*53ee8cc1Swenshuai.xi tmp2 = audio_aes_info[0].aes_BufSize - audio_aes_info[0].aes_level;
1306*53ee8cc1Swenshuai.xi
1307*53ee8cc1Swenshuai.xi if ( tmp2 < audio_aes_info[0].aes_BufSize/2)
1308*53ee8cc1Swenshuai.xi tmp2 = 0;
1309*53ee8cc1Swenshuai.xi else
1310*53ee8cc1Swenshuai.xi tmp2 -= (audio_aes_info[0].aes_BufSize/2);
1311*53ee8cc1Swenshuai.xi
1312*53ee8cc1Swenshuai.xi if (tmp2 > (audio_aes_info[0].aes_BufSize/4))
1313*53ee8cc1Swenshuai.xi tmp2 = audio_aes_info[0].aes_BufSize/4;
1314*53ee8cc1Swenshuai.xi
1315*53ee8cc1Swenshuai.xi audio_aes_info[0].aes_freeSpace = (tmp1 > tmp2)?tmp2:tmp1;
1316*53ee8cc1Swenshuai.xi audio_aes_info[0].aes_read_addr = OFFSET_ES1_DRAM_ADDR + HAL_DEC_R2_Get_SHM_INFO( R2_SHM_INFO_ES_RD_PTR, ADEC1 );
1317*53ee8cc1Swenshuai.xi
1318*53ee8cc1Swenshuai.xi memcpy( (void *)aes_info, (void *)&audio_aes_info[0], sizeof(AES_INFO));
1319*53ee8cc1Swenshuai.xi DBG_MAD(printf("[ID1:HAL_MAD_MM2_checkAesInfo] Ptr[w:%x,r:%x] LvL:%x, FreeSpace:%x, tmpFree:%x \n",
1320*53ee8cc1Swenshuai.xi (unsigned int)audio_aes_info[0].aes_write_addr,
1321*53ee8cc1Swenshuai.xi (unsigned int)audio_aes_info[0].aes_read_addr,
1322*53ee8cc1Swenshuai.xi (unsigned int)audio_aes_info[0].aes_level,
1323*53ee8cc1Swenshuai.xi (unsigned int)audio_aes_info[0].aes_BufSize - (unsigned int)audio_aes_info[0].aes_level,
1324*53ee8cc1Swenshuai.xi (unsigned int)audio_aes_info[0].aes_freeSpace));
1325*53ee8cc1Swenshuai.xi
1326*53ee8cc1Swenshuai.xi return TRUE;
1327*53ee8cc1Swenshuai.xi }
1328*53ee8cc1Swenshuai.xi else if( dec_id == AU_DEC_ID3 )
1329*53ee8cc1Swenshuai.xi {
1330*53ee8cc1Swenshuai.xi MS_U32 tmp1, tmp2;
1331*53ee8cc1Swenshuai.xi
1332*53ee8cc1Swenshuai.xi /* es level */
1333*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_level = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ES_LEVEL, audio_id);
1334*53ee8cc1Swenshuai.xi
1335*53ee8cc1Swenshuai.xi /* calculate free space for next data input */
1336*53ee8cc1Swenshuai.xi tmp1 = audio_aes_info[1].aes_end_addr - audio_aes_info[1].aes_write_addr;
1337*53ee8cc1Swenshuai.xi tmp2 = audio_aes_info[1].aes_BufSize - audio_aes_info[1].aes_level;
1338*53ee8cc1Swenshuai.xi
1339*53ee8cc1Swenshuai.xi if ( tmp2 < audio_aes_info[1].aes_BufSize/2)
1340*53ee8cc1Swenshuai.xi tmp2 = 0;
1341*53ee8cc1Swenshuai.xi else
1342*53ee8cc1Swenshuai.xi tmp2 -= (audio_aes_info[1].aes_BufSize/2);
1343*53ee8cc1Swenshuai.xi
1344*53ee8cc1Swenshuai.xi if (tmp2 > (audio_aes_info[1].aes_BufSize/4))
1345*53ee8cc1Swenshuai.xi tmp2 = audio_aes_info[1].aes_BufSize/4;
1346*53ee8cc1Swenshuai.xi
1347*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_freeSpace = (tmp1 > tmp2)?tmp2:tmp1;
1348*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_read_addr = OFFSET_ES3_DRAM_ADDR + HAL_DEC_R2_Get_SHM_INFO( R2_SHM_INFO_ES_RD_PTR, ADEC2 );
1349*53ee8cc1Swenshuai.xi
1350*53ee8cc1Swenshuai.xi memcpy( (void *)aes_info, (void *)&audio_aes_info[1], sizeof(AES_INFO));
1351*53ee8cc1Swenshuai.xi DBG_MAD(printf("[ID3:HAL_MAD_MM2_checkAesInfo] Ptr[w:%x,r:%x] LvL:%x, FreeSpace:%x, tmpFree:%x \n",
1352*53ee8cc1Swenshuai.xi (unsigned int)audio_aes_info[1].aes_write_addr,
1353*53ee8cc1Swenshuai.xi (unsigned int)audio_aes_info[1].aes_read_addr,
1354*53ee8cc1Swenshuai.xi (unsigned int)audio_aes_info[1].aes_level,
1355*53ee8cc1Swenshuai.xi (unsigned int)audio_aes_info[1].aes_BufSize - (unsigned int)audio_aes_info[1].aes_level,
1356*53ee8cc1Swenshuai.xi (unsigned int)audio_aes_info[1].aes_freeSpace));
1357*53ee8cc1Swenshuai.xi
1358*53ee8cc1Swenshuai.xi return TRUE;
1359*53ee8cc1Swenshuai.xi }
1360*53ee8cc1Swenshuai.xi else
1361*53ee8cc1Swenshuai.xi {
1362*53ee8cc1Swenshuai.xi return FALSE;
1363*53ee8cc1Swenshuai.xi }
1364*53ee8cc1Swenshuai.xi }
1365*53ee8cc1Swenshuai.xi
1366*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1367*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_MM2_inputAesFinished()
1368*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description : Inform DSP how much ES data is sent
1369*53ee8cc1Swenshuai.xi /// @param <IN> \b dec_id : Decoder ID
1370*53ee8cc1Swenshuai.xi /// @param <IN> \b es_size : Size of ES data
1371*53ee8cc1Swenshuai.xi /// @param <IN> \b ptsExist : Whether ES data contains PTS or not
1372*53ee8cc1Swenshuai.xi /// @param <IN> \b pts : PTS
1373*53ee8cc1Swenshuai.xi /// @param <OUT> \b MS_BOOL : return TRUE if ok, else return FALSE
1374*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1375*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_MM2_inputAesFinished(AUDIO_DEC_ID dec_id,MS_U32 es_size,MS_BOOL ptsExist,MS_U64 pts)1376*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_MM2_inputAesFinished( AUDIO_DEC_ID dec_id, MS_U32 es_size, MS_BOOL ptsExist, MS_U64 pts )
1377*53ee8cc1Swenshuai.xi {
1378*53ee8cc1Swenshuai.xi MS_U32 es_writeLineOffset;
1379*53ee8cc1Swenshuai.xi MS_U32 tmp1, tmp2;
1380*53ee8cc1Swenshuai.xi
1381*53ee8cc1Swenshuai.xi if (es_size == 0)
1382*53ee8cc1Swenshuai.xi return FALSE;
1383*53ee8cc1Swenshuai.xi
1384*53ee8cc1Swenshuai.xi Audio_id audio_id = HAL_AUDIO_Convert_DecId_to_ADECId(dec_id);
1385*53ee8cc1Swenshuai.xi
1386*53ee8cc1Swenshuai.xi if ( dec_id == AU_DEC_ID1 )
1387*53ee8cc1Swenshuai.xi {
1388*53ee8cc1Swenshuai.xi /* es level */
1389*53ee8cc1Swenshuai.xi audio_aes_info[0].aes_level = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ES_LEVEL, audio_id);
1390*53ee8cc1Swenshuai.xi
1391*53ee8cc1Swenshuai.xi /* calculate free space for next data input */
1392*53ee8cc1Swenshuai.xi tmp1 = audio_aes_info[0].aes_end_addr - audio_aes_info[0].aes_write_addr;
1393*53ee8cc1Swenshuai.xi tmp2 = audio_aes_info[0].aes_BufSize - audio_aes_info[0].aes_level;
1394*53ee8cc1Swenshuai.xi
1395*53ee8cc1Swenshuai.xi audio_aes_info[0].aes_freeSpace = (tmp1 - tmp2)?tmp2:tmp1;
1396*53ee8cc1Swenshuai.xi
1397*53ee8cc1Swenshuai.xi if (es_size > audio_aes_info[0].aes_freeSpace)
1398*53ee8cc1Swenshuai.xi {
1399*53ee8cc1Swenshuai.xi printf("ID1:==> Error, input AES size(0x%08u) is larger than current Free space(0x%08u)\r\n", (unsigned int)es_size, (unsigned int)audio_aes_info[0].aes_freeSpace );
1400*53ee8cc1Swenshuai.xi return FALSE;
1401*53ee8cc1Swenshuai.xi }
1402*53ee8cc1Swenshuai.xi
1403*53ee8cc1Swenshuai.xi DBG_MAD(printf("[ID1:HAL_MAD_MM2_inputAesFinished] wPtr:%08x => ", audio_aes_info[0].aes_write_addr));
1404*53ee8cc1Swenshuai.xi
1405*53ee8cc1Swenshuai.xi /* update write pointer */
1406*53ee8cc1Swenshuai.xi audio_aes_info[0].aes_write_addr += es_size;
1407*53ee8cc1Swenshuai.xi
1408*53ee8cc1Swenshuai.xi if ( audio_aes_info[0].aes_write_addr >= audio_aes_info[0].aes_end_addr )
1409*53ee8cc1Swenshuai.xi audio_aes_info[0].aes_write_addr -= audio_aes_info[0].aes_BufSize;
1410*53ee8cc1Swenshuai.xi
1411*53ee8cc1Swenshuai.xi #if defined (__aarch64__)
1412*53ee8cc1Swenshuai.xi DBG_MAD(printf("%08x, size=%08x, isPtsExist:%d, PTS=%09lx\n",
1413*53ee8cc1Swenshuai.xi #else
1414*53ee8cc1Swenshuai.xi DBG_MAD(printf("%08x, size=%08x, isPtsExist:%d, PTS=%09llx\n",
1415*53ee8cc1Swenshuai.xi #endif
1416*53ee8cc1Swenshuai.xi (unsigned int)audio_aes_info[0].aes_write_addr,
1417*53ee8cc1Swenshuai.xi (unsigned int)es_size,
1418*53ee8cc1Swenshuai.xi ptsExist,
1419*53ee8cc1Swenshuai.xi pts/90));
1420*53ee8cc1Swenshuai.xi
1421*53ee8cc1Swenshuai.xi if (ptsExist)
1422*53ee8cc1Swenshuai.xi {
1423*53ee8cc1Swenshuai.xi if (prv_PTS != 0)
1424*53ee8cc1Swenshuai.xi {
1425*53ee8cc1Swenshuai.xi DBG_MAD(printf(",PTS_diff=%08lld,accum_ES = %08lx,ES_diff= %08ld, ES PTS diff=%08ld\n",
1426*53ee8cc1Swenshuai.xi (pts - prv_PTS)/90,
1427*53ee8cc1Swenshuai.xi accum_ES,
1428*53ee8cc1Swenshuai.xi accum_ES - prv_accum_ES,
1429*53ee8cc1Swenshuai.xi (accum_ES - prv_accum_ES)*32/1536));
1430*53ee8cc1Swenshuai.xi }
1431*53ee8cc1Swenshuai.xi else
1432*53ee8cc1Swenshuai.xi {
1433*53ee8cc1Swenshuai.xi DBG_MAD(printf(", PTS_diff=%08x, accum_ES = %08x\n", 0, 0));
1434*53ee8cc1Swenshuai.xi }
1435*53ee8cc1Swenshuai.xi
1436*53ee8cc1Swenshuai.xi prv_PTS = pts;
1437*53ee8cc1Swenshuai.xi prv_accum_ES = accum_ES;
1438*53ee8cc1Swenshuai.xi }
1439*53ee8cc1Swenshuai.xi else
1440*53ee8cc1Swenshuai.xi {
1441*53ee8cc1Swenshuai.xi DBG_MAD(printf("\n"));
1442*53ee8cc1Swenshuai.xi }
1443*53ee8cc1Swenshuai.xi
1444*53ee8cc1Swenshuai.xi accum_ES += es_size;
1445*53ee8cc1Swenshuai.xi
1446*53ee8cc1Swenshuai.xi es_writeLineOffset = audio_aes_info[0].aes_write_addr - audio_aes_info[0].aes_base_addr;
1447*53ee8cc1Swenshuai.xi
1448*53ee8cc1Swenshuai.xi if (ptsExist)
1449*53ee8cc1Swenshuai.xi {
1450*53ee8cc1Swenshuai.xi if ((audio_aes_info[0].aes_lastPTS == pts)&&(audio_aes_info[0].aes_ptsCnt != 0))
1451*53ee8cc1Swenshuai.xi printf(" ======== Error PTS is same !! =============\n");
1452*53ee8cc1Swenshuai.xi else
1453*53ee8cc1Swenshuai.xi {
1454*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_INPUT_PTS, audio_id, (pts >> 1), 0);
1455*53ee8cc1Swenshuai.xi audio_aes_info[0].aes_ptsCnt++;
1456*53ee8cc1Swenshuai.xi audio_aes_info[0].aes_lastPTS = pts;
1457*53ee8cc1Swenshuai.xi AUDIO_DELAY1US(500);
1458*53ee8cc1Swenshuai.xi }
1459*53ee8cc1Swenshuai.xi }
1460*53ee8cc1Swenshuai.xi
1461*53ee8cc1Swenshuai.xi /* Set ES write pointer to DSP */
1462*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, audio_id, es_writeLineOffset, 0);
1463*53ee8cc1Swenshuai.xi AUDIO_DELAY1US(250); //Since DSP timer update ES_MEM_CNT at each 125us, need this delay to keep
1464*53ee8cc1Swenshuai.xi }
1465*53ee8cc1Swenshuai.xi else if (dec_id == AU_DEC_ID3)
1466*53ee8cc1Swenshuai.xi {
1467*53ee8cc1Swenshuai.xi /* es level */
1468*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_level = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ES_LEVEL, audio_id);
1469*53ee8cc1Swenshuai.xi
1470*53ee8cc1Swenshuai.xi /* calculate free space for next data input */
1471*53ee8cc1Swenshuai.xi tmp1 = audio_aes_info[1].aes_end_addr - audio_aes_info[1].aes_write_addr;
1472*53ee8cc1Swenshuai.xi tmp2 = audio_aes_info[1].aes_BufSize - audio_aes_info[1].aes_level;
1473*53ee8cc1Swenshuai.xi
1474*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_freeSpace = (tmp1 - tmp2)?tmp2:tmp1;
1475*53ee8cc1Swenshuai.xi
1476*53ee8cc1Swenshuai.xi if ( es_size > audio_aes_info[1].aes_freeSpace )
1477*53ee8cc1Swenshuai.xi {
1478*53ee8cc1Swenshuai.xi printf("ID3:==> Error, input AES size(0x%08u) is larger than current Free space(0x%08u)\r\n", (unsigned int)es_size, (unsigned int)audio_aes_info[1].aes_freeSpace );
1479*53ee8cc1Swenshuai.xi return FALSE;
1480*53ee8cc1Swenshuai.xi }
1481*53ee8cc1Swenshuai.xi
1482*53ee8cc1Swenshuai.xi DBG_MAD(printf("[ID3:HAL_MAD_MM2_inputAesFinished] wPtr:%08x => ", audio_aes_info[1].aes_write_addr));
1483*53ee8cc1Swenshuai.xi
1484*53ee8cc1Swenshuai.xi /* update write pointer */
1485*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_write_addr += es_size;
1486*53ee8cc1Swenshuai.xi
1487*53ee8cc1Swenshuai.xi if ( audio_aes_info[1].aes_write_addr >= audio_aes_info[1].aes_end_addr )
1488*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_write_addr -= audio_aes_info[1].aes_BufSize;
1489*53ee8cc1Swenshuai.xi
1490*53ee8cc1Swenshuai.xi #if defined (__aarch64__)
1491*53ee8cc1Swenshuai.xi DBG_MAD(printf("%08x, size=%08x,isPtsExist:%d,PTS=%09lx",
1492*53ee8cc1Swenshuai.xi #else
1493*53ee8cc1Swenshuai.xi DBG_MAD(printf("%08x, size=%08x,isPtsExist:%d,PTS=%09llx",
1494*53ee8cc1Swenshuai.xi #endif
1495*53ee8cc1Swenshuai.xi (unsigned int)audio_aes_info[1].aes_write_addr,
1496*53ee8cc1Swenshuai.xi (unsigned int)es_size,
1497*53ee8cc1Swenshuai.xi ptsExist,
1498*53ee8cc1Swenshuai.xi pts/90));
1499*53ee8cc1Swenshuai.xi
1500*53ee8cc1Swenshuai.xi if (ptsExist)
1501*53ee8cc1Swenshuai.xi {
1502*53ee8cc1Swenshuai.xi if (prv_PTS1 != 0)
1503*53ee8cc1Swenshuai.xi {
1504*53ee8cc1Swenshuai.xi DBG_MAD(printf(",PTS_diff=%08lld,accum_ES = %08x,ES_diff= %08d, ES PTS diff=%08d\n",
1505*53ee8cc1Swenshuai.xi (pts - prv_PTS1)/90,
1506*53ee8cc1Swenshuai.xi accum_ES1,
1507*53ee8cc1Swenshuai.xi accum_ES1 - prv_accum_ES1,
1508*53ee8cc1Swenshuai.xi (accum_ES1 - prv_accum_ES1)*32/1536));
1509*53ee8cc1Swenshuai.xi }
1510*53ee8cc1Swenshuai.xi else
1511*53ee8cc1Swenshuai.xi {
1512*53ee8cc1Swenshuai.xi DBG_MAD(printf(", PTS_diff=%08x, accum_ES = %08x\n", 0, 0));
1513*53ee8cc1Swenshuai.xi }
1514*53ee8cc1Swenshuai.xi
1515*53ee8cc1Swenshuai.xi prv_PTS1 = pts;
1516*53ee8cc1Swenshuai.xi prv_accum_ES1 = accum_ES1;
1517*53ee8cc1Swenshuai.xi }
1518*53ee8cc1Swenshuai.xi else
1519*53ee8cc1Swenshuai.xi {
1520*53ee8cc1Swenshuai.xi DBG_MAD(printf("\n"));
1521*53ee8cc1Swenshuai.xi }
1522*53ee8cc1Swenshuai.xi
1523*53ee8cc1Swenshuai.xi accum_ES1 += es_size;
1524*53ee8cc1Swenshuai.xi
1525*53ee8cc1Swenshuai.xi es_writeLineOffset = audio_aes_info[1].aes_write_addr - audio_aes_info[1].aes_base_addr;
1526*53ee8cc1Swenshuai.xi
1527*53ee8cc1Swenshuai.xi if (ptsExist)
1528*53ee8cc1Swenshuai.xi {
1529*53ee8cc1Swenshuai.xi if ((audio_aes_info[1].aes_lastPTS == pts)&&(audio_aes_info[1].aes_ptsCnt != 0))
1530*53ee8cc1Swenshuai.xi printf(" ======== Error PTS is same !! =============\n");
1531*53ee8cc1Swenshuai.xi else
1532*53ee8cc1Swenshuai.xi {
1533*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_INPUT_PTS, audio_id, (pts >> 1), 0);
1534*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_ptsCnt++;
1535*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_lastPTS = pts;
1536*53ee8cc1Swenshuai.xi AUDIO_DELAY1US(500);
1537*53ee8cc1Swenshuai.xi }
1538*53ee8cc1Swenshuai.xi }
1539*53ee8cc1Swenshuai.xi
1540*53ee8cc1Swenshuai.xi /* Set ES write pointer to DSP */
1541*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, audio_id, es_writeLineOffset, 0);
1542*53ee8cc1Swenshuai.xi DBG_MAD(printf("[ID3:HAL_MAD_MM2_checkAesInfo] Ptr[w:%x,r:%x] LvL:%x, FreeSpace:%x, tmpFree:%x \n",
1543*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_write_addr,
1544*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_read_addr,
1545*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_level,
1546*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_BufSize - audio_aes_info[1].aes_level,
1547*53ee8cc1Swenshuai.xi audio_aes_info[1].aes_freeSpace));
1548*53ee8cc1Swenshuai.xi AUDIO_DELAY1US(250); //Since DSP timer update ES_MEM_CNT at each 125us, need this delay to keep
1549*53ee8cc1Swenshuai.xi }
1550*53ee8cc1Swenshuai.xi return TRUE;
1551*53ee8cc1Swenshuai.xi }
1552*53ee8cc1Swenshuai.xi
1553*53ee8cc1Swenshuai.xi
1554*53ee8cc1Swenshuai.xi ///-----------------------------------------------------------------------------
1555*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1556*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1557*53ee8cc1Swenshuai.xi ///
1558*53ee8cc1Swenshuai.xi /// AUDIO_MAD MPEG Relational Hal Function
1559*53ee8cc1Swenshuai.xi ///
1560*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1561*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1562*53ee8cc1Swenshuai.xi ///-----------------------------------------------------------------------------
1563*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1564*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_MPEG_GetHeaderInfo()
1565*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine will return the 32bit mpeg header
1566*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE :
1567*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
1568*53ee8cc1Swenshuai.xi /// @param <RET> \b U32 : mpeg header information
1569*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1570*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_MPEG_GetHeaderInfo(void)1571*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_MPEG_GetHeaderInfo(void)
1572*53ee8cc1Swenshuai.xi {
1573*53ee8cc1Swenshuai.xi MS_U16 data;
1574*53ee8cc1Swenshuai.xi
1575*53ee8cc1Swenshuai.xi data = (MS_U16)HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MPEG_HEADER, ADEC1);
1576*53ee8cc1Swenshuai.xi
1577*53ee8cc1Swenshuai.xi return (data & 0x0FFF);
1578*53ee8cc1Swenshuai.xi }
1579*53ee8cc1Swenshuai.xi
1580*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1581*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_MPEG_GetSampleRate()
1582*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine will return the 16bit mpeg samplerate
1583*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE :
1584*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
1585*53ee8cc1Swenshuai.xi /// @param <RET> \b U16 : mpeg sampling rate
1586*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1587*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_MPEG_GetSampleRate(void)1588*53ee8cc1Swenshuai.xi MS_U16 HAL_MAD_MPEG_GetSampleRate(void)
1589*53ee8cc1Swenshuai.xi {
1590*53ee8cc1Swenshuai.xi return (MS_U16)HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_SMP_RATE, ADEC1);
1591*53ee8cc1Swenshuai.xi }
1592*53ee8cc1Swenshuai.xi
1593*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1594*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_MPEG_GetBitRate()
1595*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine will return the 16-bit mpeg bit rate
1596*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE :
1597*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
1598*53ee8cc1Swenshuai.xi /// @param <RET> \b U16 : mpeg bit rate
1599*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1600*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_MPEG_GetBitRate(void)1601*53ee8cc1Swenshuai.xi MS_U16 HAL_MAD_MPEG_GetBitRate(void)
1602*53ee8cc1Swenshuai.xi {
1603*53ee8cc1Swenshuai.xi return (MS_U16) HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_BIT_RATE, ADEC1);
1604*53ee8cc1Swenshuai.xi }
1605*53ee8cc1Swenshuai.xi
1606*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1607*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_MPEG_GetSoundMode()
1608*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine will return the 8bit mpeg sound mode
1609*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE :
1610*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
1611*53ee8cc1Swenshuai.xi /// @param <RET> \b MPEG_SOUND_MODE :
1612*53ee8cc1Swenshuai.xi /// MPEG_SOUND_MODE_STEREO =0,
1613*53ee8cc1Swenshuai.xi /// MPEG_SOUND_MODE_JOINT_STEREO,
1614*53ee8cc1Swenshuai.xi /// MPEG_SOUND_MODE_DUAL_CHAN,
1615*53ee8cc1Swenshuai.xi /// MPEG_SOUND_MODE_MONO
1616*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1617*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_MPEG_GetSoundMode(void)1618*53ee8cc1Swenshuai.xi MPEG_SOUND_MODE HAL_MAD_MPEG_GetSoundMode(void)
1619*53ee8cc1Swenshuai.xi {
1620*53ee8cc1Swenshuai.xi return (MPEG_SOUND_MODE)HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MPEG_STEREOMODE, ADEC1);
1621*53ee8cc1Swenshuai.xi }
1622*53ee8cc1Swenshuai.xi
1623*53ee8cc1Swenshuai.xi ///-----------------------------------------------------------------------------
1624*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1625*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1626*53ee8cc1Swenshuai.xi ///
1627*53ee8cc1Swenshuai.xi /// AUDIO_MAD Dolby Relational Hal Function
1628*53ee8cc1Swenshuai.xi ///
1629*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1630*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1631*53ee8cc1Swenshuai.xi ///-----------------------------------------------------------------------------
1632*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
1633*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_Monitor_DDPlus_SPDIF_Rate()
1634*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set reference ADC clock by DD+ dsp code
1635*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE :
1636*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
1637*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
1638*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1639*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_Monitor_DDPlus_SPDIF_Rate(void)1640*53ee8cc1Swenshuai.xi void HAL_MAD_Monitor_DDPlus_SPDIF_Rate(void)
1641*53ee8cc1Swenshuai.xi {
1642*53ee8cc1Swenshuai.xi MS_U8 u8SpdifMode = SPDIF_OUT_PCM;
1643*53ee8cc1Swenshuai.xi MS_U8 eAudioSource = 0;
1644*53ee8cc1Swenshuai.xi MS_U8 u8MainDecodeId = 0;
1645*53ee8cc1Swenshuai.xi AUDIO_DSP_CODE_TYPE u8MainDspCodeType = MSAPI_AUD_DVB_INVALID;
1646*53ee8cc1Swenshuai.xi AUDIO_DSP_CODE_TYPE u8Dsp1CodeType = MSAPI_AUD_DVB_INVALID;
1647*53ee8cc1Swenshuai.xi AUDIO_DSP_CODE_TYPE u8Dsp2CodeType = MSAPI_AUD_DVB_INVALID;
1648*53ee8cc1Swenshuai.xi Digital_Out_Channel_Status_t stDigitalChannelStatusTx1, stDigitalChannelStatusTx2;
1649*53ee8cc1Swenshuai.xi MS_BOOL retTx1, retTx2;
1650*53ee8cc1Swenshuai.xi MS_U32 u32spdif_info_flag = 0; //0: disable. 1: bypass/convert, 2: transcoder, 3: pcm
1651*53ee8cc1Swenshuai.xi
1652*53ee8cc1Swenshuai.xi HALMAD_CHECK_SHM_INIT;
1653*53ee8cc1Swenshuai.xi
1654*53ee8cc1Swenshuai.xi memset(&stDigitalChannelStatusTx1, 0x00, sizeof(Digital_Out_Channel_Status_t));
1655*53ee8cc1Swenshuai.xi memset(&stDigitalChannelStatusTx2, 0x00, sizeof(Digital_Out_Channel_Status_t));
1656*53ee8cc1Swenshuai.xi
1657*53ee8cc1Swenshuai.xi eAudioSource = (MS_U8)g_AudioVars2->eAudioSource;
1658*53ee8cc1Swenshuai.xi u8Dsp1CodeType = g_AudioVars2->g_DspCodeType;
1659*53ee8cc1Swenshuai.xi u8Dsp2CodeType = g_AudioVars2->g_Dsp2CodeType;
1660*53ee8cc1Swenshuai.xi
1661*53ee8cc1Swenshuai.xi HAL_AUDIO_SPDIF_SetMode(gSpdifOutputType, eAudioSource);
1662*53ee8cc1Swenshuai.xi
1663*53ee8cc1Swenshuai.xi u8SpdifMode = _HAL_AUDIO_SPDIF_GetMode();
1664*53ee8cc1Swenshuai.xi
1665*53ee8cc1Swenshuai.xi retTx1 = HAL_AUDIO_DigitalOut_GetChannelStatus(DIGITAL_SPDIF_OUTPUT, &stDigitalChannelStatusTx1);
1666*53ee8cc1Swenshuai.xi retTx2 = HAL_AUDIO_DigitalOut_GetChannelStatus(DIGITAL_HDMI_ARC_OUTPUT, &stDigitalChannelStatusTx2);
1667*53ee8cc1Swenshuai.xi if (retTx1 == FALSE || retTx2 == FALSE)
1668*53ee8cc1Swenshuai.xi {
1669*53ee8cc1Swenshuai.xi HALMAD_ERROR("%s() : Failed to get channel status !!!\n", __FUNCTION__);
1670*53ee8cc1Swenshuai.xi }
1671*53ee8cc1Swenshuai.xi
1672*53ee8cc1Swenshuai.xi switch(eAudioSource)
1673*53ee8cc1Swenshuai.xi {
1674*53ee8cc1Swenshuai.xi case E_AUDIO_INFO_DTV_IN:
1675*53ee8cc1Swenshuai.xi case E_AUDIO_INFO_MM_IN:
1676*53ee8cc1Swenshuai.xi case E_AUDIO_INFO_GAME_IN:
1677*53ee8cc1Swenshuai.xi {
1678*53ee8cc1Swenshuai.xi if (((eAudioSource == E_AUDIO_INFO_MM_IN) || (eAudioSource == E_AUDIO_INFO_GAME_IN)) &&
1679*53ee8cc1Swenshuai.xi (HAL_MAD_GetDecCmd(DVB_Audio_Decoder2) == AU_DVB_DECCMD_PLAYFRAME_GS))
1680*53ee8cc1Swenshuai.xi {
1681*53ee8cc1Swenshuai.xi u8MainDspCodeType = u8Dsp2CodeType;
1682*53ee8cc1Swenshuai.xi u8MainDecodeId = ADEC2;
1683*53ee8cc1Swenshuai.xi }
1684*53ee8cc1Swenshuai.xi else
1685*53ee8cc1Swenshuai.xi {
1686*53ee8cc1Swenshuai.xi u8MainDspCodeType = u8Dsp1CodeType;
1687*53ee8cc1Swenshuai.xi u8MainDecodeId = ADEC1;
1688*53ee8cc1Swenshuai.xi }
1689*53ee8cc1Swenshuai.xi
1690*53ee8cc1Swenshuai.xi switch(u8MainDspCodeType)
1691*53ee8cc1Swenshuai.xi {
1692*53ee8cc1Swenshuai.xi case AU_DVB_STANDARD_AC3:
1693*53ee8cc1Swenshuai.xi case AU_DVB_STANDARD_AC3P:
1694*53ee8cc1Swenshuai.xi case AU_DVB_STANDARD_MS10_DDC:
1695*53ee8cc1Swenshuai.xi {
1696*53ee8cc1Swenshuai.xi if (u8SpdifMode == SPDIF_OUT_PCM)
1697*53ee8cc1Swenshuai.xi {
1698*53ee8cc1Swenshuai.xi break;
1699*53ee8cc1Swenshuai.xi }
1700*53ee8cc1Swenshuai.xi
1701*53ee8cc1Swenshuai.xi switch(HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_SMP_RATE, u8MainDecodeId))
1702*53ee8cc1Swenshuai.xi {
1703*53ee8cc1Swenshuai.xi case 44100:
1704*53ee8cc1Swenshuai.xi {
1705*53ee8cc1Swenshuai.xi /* change SPDIF Tx 1&2 channel status --> 44.1KHz */
1706*53ee8cc1Swenshuai.xi stDigitalChannelStatusTx1.u8SamplingRate = 0x00;
1707*53ee8cc1Swenshuai.xi stDigitalChannelStatusTx2.u8SamplingRate = 0x00;
1708*53ee8cc1Swenshuai.xi break;
1709*53ee8cc1Swenshuai.xi }
1710*53ee8cc1Swenshuai.xi
1711*53ee8cc1Swenshuai.xi case 32000:
1712*53ee8cc1Swenshuai.xi {
1713*53ee8cc1Swenshuai.xi /* change SPDIF Tx 1&2 channel status --> 32KHz */
1714*53ee8cc1Swenshuai.xi stDigitalChannelStatusTx1.u8SamplingRate = 0xC0;
1715*53ee8cc1Swenshuai.xi stDigitalChannelStatusTx2.u8SamplingRate = 0xC0;
1716*53ee8cc1Swenshuai.xi break;
1717*53ee8cc1Swenshuai.xi }
1718*53ee8cc1Swenshuai.xi
1719*53ee8cc1Swenshuai.xi default:
1720*53ee8cc1Swenshuai.xi {
1721*53ee8cc1Swenshuai.xi /* change SPDIF Tx 1&2 channel status --> 48KHz */
1722*53ee8cc1Swenshuai.xi stDigitalChannelStatusTx1.u8SamplingRate = 0x40;
1723*53ee8cc1Swenshuai.xi stDigitalChannelStatusTx2.u8SamplingRate = 0x40;
1724*53ee8cc1Swenshuai.xi break;
1725*53ee8cc1Swenshuai.xi }
1726*53ee8cc1Swenshuai.xi }
1727*53ee8cc1Swenshuai.xi break;
1728*53ee8cc1Swenshuai.xi }
1729*53ee8cc1Swenshuai.xi
1730*53ee8cc1Swenshuai.xi case AU_DVB_STANDARD_DTS:
1731*53ee8cc1Swenshuai.xi case AU_DVB_STANDARD_DTSLBR:
1732*53ee8cc1Swenshuai.xi {
1733*53ee8cc1Swenshuai.xi if (u8SpdifMode == SPDIF_OUT_PCM)
1734*53ee8cc1Swenshuai.xi {
1735*53ee8cc1Swenshuai.xi break;
1736*53ee8cc1Swenshuai.xi }
1737*53ee8cc1Swenshuai.xi
1738*53ee8cc1Swenshuai.xi u32spdif_info_flag = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_TRANSCODE_FLAG, u8MainDecodeId);
1739*53ee8cc1Swenshuai.xi if(u32spdif_info_flag == 0) //u32spdif_info_flag == 0 means NPCM output processing is at DSP or SND-R2 for M2
1740*53ee8cc1Swenshuai.xi {
1741*53ee8cc1Swenshuai.xi /* 48KHz */
1742*53ee8cc1Swenshuai.xi stDigitalChannelStatusTx1.u8SamplingRate = 0x40; /* change SPDIF Tx1 channel status --> 48KHz */
1743*53ee8cc1Swenshuai.xi stDigitalChannelStatusTx2.u8SamplingRate = 0x40; /* change SPDIF Tx2 channel status --> 48KHz */
1744*53ee8cc1Swenshuai.xi }
1745*53ee8cc1Swenshuai.xi else
1746*53ee8cc1Swenshuai.xi {
1747*53ee8cc1Swenshuai.xi if (HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_SMP_RATE, u8MainDecodeId) == 44100)
1748*53ee8cc1Swenshuai.xi {
1749*53ee8cc1Swenshuai.xi /* 44.1KHz */
1750*53ee8cc1Swenshuai.xi stDigitalChannelStatusTx1.u8SamplingRate = 0x00; /* change SPDIF Tx1 channel status --> 44.1KHz */
1751*53ee8cc1Swenshuai.xi stDigitalChannelStatusTx2.u8SamplingRate = 0x00; /* change SPDIF Tx2 channel status --> 44.1KHz */
1752*53ee8cc1Swenshuai.xi }
1753*53ee8cc1Swenshuai.xi else
1754*53ee8cc1Swenshuai.xi {
1755*53ee8cc1Swenshuai.xi /* 48KHz */
1756*53ee8cc1Swenshuai.xi stDigitalChannelStatusTx1.u8SamplingRate = 0x40; /* change SPDIF Tx1 channel status --> 48KHz */
1757*53ee8cc1Swenshuai.xi stDigitalChannelStatusTx2.u8SamplingRate = 0x40; /* change SPDIF Tx2 channel status --> 48KHz */
1758*53ee8cc1Swenshuai.xi }
1759*53ee8cc1Swenshuai.xi }
1760*53ee8cc1Swenshuai.xi break;
1761*53ee8cc1Swenshuai.xi }
1762*53ee8cc1Swenshuai.xi
1763*53ee8cc1Swenshuai.xi default:
1764*53ee8cc1Swenshuai.xi {
1765*53ee8cc1Swenshuai.xi break;
1766*53ee8cc1Swenshuai.xi }
1767*53ee8cc1Swenshuai.xi }
1768*53ee8cc1Swenshuai.xi break;
1769*53ee8cc1Swenshuai.xi }
1770*53ee8cc1Swenshuai.xi
1771*53ee8cc1Swenshuai.xi default:
1772*53ee8cc1Swenshuai.xi {
1773*53ee8cc1Swenshuai.xi break;
1774*53ee8cc1Swenshuai.xi }
1775*53ee8cc1Swenshuai.xi }
1776*53ee8cc1Swenshuai.xi HAL_AUDIO_DigitalOut_SetChannelStatus(DIGITAL_SPDIF_OUTPUT, &stDigitalChannelStatusTx1);
1777*53ee8cc1Swenshuai.xi HAL_AUDIO_DigitalOut_SetChannelStatus(DIGITAL_HDMI_ARC_OUTPUT, &stDigitalChannelStatusTx2);
1778*53ee8cc1Swenshuai.xi }
1779*53ee8cc1Swenshuai.xi
1780*53ee8cc1Swenshuai.xi ///-----------------------------------------------------------------------------
1781*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1782*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1783*53ee8cc1Swenshuai.xi ///
1784*53ee8cc1Swenshuai.xi /// AUDIO_MAD WMA Relational Hal Function
1785*53ee8cc1Swenshuai.xi ///
1786*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1787*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1788*53ee8cc1Swenshuai.xi ///-----------------------------------------------------------------------------
1789*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1790*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_WMA_SetASFParm()
1791*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine will set WMA ASF Paramaters.
1792*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE : WMA_ASF_PARMTYPE, value
1793*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
1794*53ee8cc1Swenshuai.xi /// @param <RET> \b NONE :
1795*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1796*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_WMA_SetASFParm(WMA_ASF_PARMTYPE parm_type,MS_U32 value)1797*53ee8cc1Swenshuai.xi void HAL_MAD_WMA_SetASFParm(WMA_ASF_PARMTYPE parm_type, MS_U32 value)
1798*53ee8cc1Swenshuai.xi {
1799*53ee8cc1Swenshuai.xi switch ( parm_type )
1800*53ee8cc1Swenshuai.xi {
1801*53ee8cc1Swenshuai.xi case WMA_PARAMTYPE_VERSION:
1802*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_VERSION, ADEC1, value, 0);
1803*53ee8cc1Swenshuai.xi break;
1804*53ee8cc1Swenshuai.xi case WMA_PARAMTYPE_CHANNELS:
1805*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_CHANNELS, ADEC1, value, 0);
1806*53ee8cc1Swenshuai.xi break;
1807*53ee8cc1Swenshuai.xi case WMA_PARAMTYPE_SAMPLERATE:
1808*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_SAMPLERATE, ADEC1, value, 0);
1809*53ee8cc1Swenshuai.xi break;
1810*53ee8cc1Swenshuai.xi case WMA_PARAMTYPE_BYTERATE:
1811*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_BYTERATE, ADEC1, value, 0);
1812*53ee8cc1Swenshuai.xi break;
1813*53ee8cc1Swenshuai.xi case WMA_PARAMTYPE_BLOCKALIGN:
1814*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_BLOCKALIGN, ADEC1, value, 0);
1815*53ee8cc1Swenshuai.xi break;
1816*53ee8cc1Swenshuai.xi case WMA_PARAMTYPE_ENCOPT:
1817*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_ENCOPT, ADEC1, value, 0);
1818*53ee8cc1Swenshuai.xi break;
1819*53ee8cc1Swenshuai.xi case WMA_PARAMTYPE_PARSINGBYAPP:
1820*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_PARSINGBYAPP, ADEC1, value, 0);
1821*53ee8cc1Swenshuai.xi break;
1822*53ee8cc1Swenshuai.xi case WMA_PARAMTYPE_BITS_PER_SAMPLE:
1823*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_BITS_PER_SAMPLE, ADEC1, value, 0);
1824*53ee8cc1Swenshuai.xi break;
1825*53ee8cc1Swenshuai.xi case WMA_PARAMTYPE_CHANNELMASK:
1826*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_CHANNELMASK, ADEC1, value, 0);
1827*53ee8cc1Swenshuai.xi break;
1828*53ee8cc1Swenshuai.xi case WMA_PARAMTYPE_DRC_PARAM_EXIST:
1829*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_DRC_PARAM_EXIST, ADEC1, value, 0);
1830*53ee8cc1Swenshuai.xi break;
1831*53ee8cc1Swenshuai.xi case WMA_PARAMTYPE_DRC_RMS_AMP_REF:
1832*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_DRC_RMS_AMP_REF, ADEC1, value, 0);
1833*53ee8cc1Swenshuai.xi break;
1834*53ee8cc1Swenshuai.xi case WMA_PARAMTYPE_DRC_RMS_AMP_TARGET:
1835*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_DRC_RMS_AMP_TARGET, ADEC1, value, 0);
1836*53ee8cc1Swenshuai.xi break;
1837*53ee8cc1Swenshuai.xi case WMA_PARAMTYPE_DRC_PEAK_AMP_REF:
1838*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_DRC_PEAK_AMP_REF, ADEC1, value, 0);
1839*53ee8cc1Swenshuai.xi break;
1840*53ee8cc1Swenshuai.xi case WMA_PARAMTYPE_DRC_PEAK_AMP_TARGET:
1841*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_DRC_PEAK_AMP_TARGET, ADEC1, value, 0);
1842*53ee8cc1Swenshuai.xi break;
1843*53ee8cc1Swenshuai.xi case WMA_PARAMTYPE_MAX_PACKET_SIZE:
1844*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_MAX_PACKET_SIZE, ADEC1, value, 0);
1845*53ee8cc1Swenshuai.xi break;
1846*53ee8cc1Swenshuai.xi default:
1847*53ee8cc1Swenshuai.xi break;
1848*53ee8cc1Swenshuai.xi }
1849*53ee8cc1Swenshuai.xi }
1850*53ee8cc1Swenshuai.xi
1851*53ee8cc1Swenshuai.xi
1852*53ee8cc1Swenshuai.xi ///-----------------------------------------------------------------------------
1853*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1854*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1855*53ee8cc1Swenshuai.xi ///
1856*53ee8cc1Swenshuai.xi /// AUDIO_MAD OTHER Relational Hal Function
1857*53ee8cc1Swenshuai.xi ///
1858*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1859*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1860*53ee8cc1Swenshuai.xi ///-----------------------------------------------------------------------------
1861*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1862*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_RA8_setParam()
1863*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine configures necessary parameters when playing RA8 LBR data
1864*53ee8cc1Swenshuai.xi /// @param <IN> \b mNumCodecs : 1--stereo or mono
1865*53ee8cc1Swenshuai.xi /// 2~5-- multi channels
1866*53ee8cc1Swenshuai.xi /// @param <IN> \b mSamples : output samples--256, 512, 1024
1867*53ee8cc1Swenshuai.xi /// @param <IN> \b mSampleRate : 8, 11.025, 16, 22.05, 44.1, 48 (KHz)
1868*53ee8cc1Swenshuai.xi /// @param <IN> \b Channels : 1-- mono
1869*53ee8cc1Swenshuai.xi /// 2-- stereo
1870*53ee8cc1Swenshuai.xi /// @param <IN> \b cplStart : 0 ~ 51
1871*53ee8cc1Swenshuai.xi /// @param <IN> \b Regions : 0 ~ 31
1872*53ee8cc1Swenshuai.xi /// @param <IN> \b cplQbits : 0, 2, 3, 4, 5, 6
1873*53ee8cc1Swenshuai.xi /// @param <IN> \b FrameSize : bitstream size of every NumCodes (bytes)
1874*53ee8cc1Swenshuai.xi /// Range--0 ~ 65535
1875*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
1876*53ee8cc1Swenshuai.xi /// @param <RET> \b MS_U8 : TRUE--parameters are correct
1877*53ee8cc1Swenshuai.xi /// FALSE--parameters are incorrect
1878*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1879*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_RA8_setParam(MS_U16 mNumCodecs,MS_U16 mSamples,MS_U16 mSampleRate,MS_U16 * Channels,MS_U16 * Regions,MS_U16 * cplStart,MS_U16 * cplQbits,MS_U16 * FrameSize)1880*53ee8cc1Swenshuai.xi MS_U8 HAL_MAD_RA8_setParam(MS_U16 mNumCodecs, MS_U16 mSamples, MS_U16 mSampleRate,
1881*53ee8cc1Swenshuai.xi MS_U16* Channels, MS_U16* Regions, MS_U16* cplStart, MS_U16* cplQbits,
1882*53ee8cc1Swenshuai.xi MS_U16* FrameSize)
1883*53ee8cc1Swenshuai.xi {
1884*53ee8cc1Swenshuai.xi
1885*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_NUMCODECS, ADEC1, mNumCodecs, 0 );
1886*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_SAMPLES, ADEC1, mSamples, 0 );
1887*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_SAMPLERATES, ADEC1, mSampleRate, 0 );
1888*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, ADEC1, Channels[0], 0 );
1889*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, ADEC1, Regions[0], 0 );
1890*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, ADEC1, cplStart[0], 0 );
1891*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, ADEC1, cplQbits[0], 0 );
1892*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, ADEC1, FrameSize[0], 0 );
1893*53ee8cc1Swenshuai.xi
1894*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, ADEC1, Channels[1], 1 );
1895*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, ADEC1, Regions[1], 1 );
1896*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, ADEC1, cplStart[1], 1 );
1897*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, ADEC1, cplQbits[1], 1 );
1898*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, ADEC1, FrameSize[1], 1 );
1899*53ee8cc1Swenshuai.xi
1900*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, ADEC1, Channels[2], 2 );
1901*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, ADEC1, Regions[2], 2 );
1902*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, ADEC1, cplStart[2], 2 );
1903*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, ADEC1, cplQbits[2], 2 );
1904*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, ADEC1, FrameSize[2], 2 );
1905*53ee8cc1Swenshuai.xi
1906*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, ADEC1, Channels[3], 3 );
1907*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, ADEC1, Regions[3], 3 );
1908*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, ADEC1, cplStart[3], 3 );
1909*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, ADEC1, cplQbits[3], 3 );
1910*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, ADEC1, FrameSize[3], 3 );
1911*53ee8cc1Swenshuai.xi
1912*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, ADEC1, Channels[4], 4 );
1913*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, ADEC1, Regions[4], 4 );
1914*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, ADEC1, cplStart[4], 4 );
1915*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, ADEC1, cplQbits[4], 4 );
1916*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, ADEC1, FrameSize[4], 4 );
1917*53ee8cc1Swenshuai.xi
1918*53ee8cc1Swenshuai.xi return TRUE;
1919*53ee8cc1Swenshuai.xi }
1920*53ee8cc1Swenshuai.xi
1921*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1922*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_XPCM_GetParaBase()
1923*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to get the base address for XPCM parameter
1924*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE :
1925*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
1926*53ee8cc1Swenshuai.xi /// @param <RET> \b MS_U16 : XPCM parameter base address in DSP
1927*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1928*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_XPCM_GetParaBase(void)1929*53ee8cc1Swenshuai.xi MS_U16 HAL_MAD_XPCM_GetParaBase(void)
1930*53ee8cc1Swenshuai.xi {
1931*53ee8cc1Swenshuai.xi //NOT_DEFINE : not used
1932*53ee8cc1Swenshuai.xi return 0;
1933*53ee8cc1Swenshuai.xi }
1934*53ee8cc1Swenshuai.xi
1935*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1936*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_RA8_GetParaBase()
1937*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to get the base address for Ra8 parameter
1938*53ee8cc1Swenshuai.xi /// @param <IN> \b NONE :
1939*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
1940*53ee8cc1Swenshuai.xi /// @param <RET> \b MS_U16 : Ra8 parameter base address in DSP
1941*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1942*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_Ra8_GetParaBase(void)1943*53ee8cc1Swenshuai.xi MS_U16 HAL_MAD_Ra8_GetParaBase(void)
1944*53ee8cc1Swenshuai.xi {
1945*53ee8cc1Swenshuai.xi //NOT_DEFINE : not used
1946*53ee8cc1Swenshuai.xi return 0;
1947*53ee8cc1Swenshuai.xi }
1948*53ee8cc1Swenshuai.xi
1949*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
1950*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetCommInfo()
1951*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine set different paramter to audio decoder
1952*53ee8cc1Swenshuai.xi /// @param <IN> \b Audio_COMM_infoType : common audio parameter type
1953*53ee8cc1Swenshuai.xi /// @param <IN> \b MS_U32 : common audio parameter 1
1954*53ee8cc1Swenshuai.xi /// @param <IN> \b MS_U32 : common audio parameter 2
1955*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
1956*53ee8cc1Swenshuai.xi /// @param <RET> \b MS_BOOL : TRUE ( SUCCESS ) / FALSE (FAIL)
1957*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
1958*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetCommInfo(Audio_COMM_infoType infoType,MS_VIRT param1,MS_VIRT param2)1959*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_SetCommInfo( Audio_COMM_infoType infoType, MS_VIRT param1, MS_VIRT param2 )
1960*53ee8cc1Swenshuai.xi {
1961*53ee8cc1Swenshuai.xi HALMAD_CHECK_SHM_INIT;
1962*53ee8cc1Swenshuai.xi
1963*53ee8cc1Swenshuai.xi MS_BOOL retTx1, retTx2;
1964*53ee8cc1Swenshuai.xi Digital_Out_Channel_Status_t stDigitalChannelStatusTx1, stDigitalChannelStatusTx2;
1965*53ee8cc1Swenshuai.xi memset(&stDigitalChannelStatusTx1, 0x00, sizeof(Digital_Out_Channel_Status_t));
1966*53ee8cc1Swenshuai.xi memset(&stDigitalChannelStatusTx2, 0x00, sizeof(Digital_Out_Channel_Status_t));
1967*53ee8cc1Swenshuai.xi
1968*53ee8cc1Swenshuai.xi switch(infoType)
1969*53ee8cc1Swenshuai.xi {
1970*53ee8cc1Swenshuai.xi /********************************************************************************
1971*53ee8cc1Swenshuai.xi * Other CMD
1972*53ee8cc1Swenshuai.xi ********************************************************************************/
1973*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Set_UNI_NEED_DECODE_FRMCNT:
1974*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_UNI_SETUP_DECODE_FRMCNT, ADEC1, param1, 0);
1975*53ee8cc1Swenshuai.xi break;
1976*53ee8cc1Swenshuai.xi
1977*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Set_UNI_ES_Wptr:
1978*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC1, param1, 0);
1979*53ee8cc1Swenshuai.xi break;
1980*53ee8cc1Swenshuai.xi
1981*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Set_SE_Test_Init:
1982*53ee8cc1Swenshuai.xi {
1983*53ee8cc1Swenshuai.xi MS_U16 u16RegVal;
1984*53ee8cc1Swenshuai.xi
1985*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(REG_SOUND_MAIN_SNDEFFECT,0xFFFF, 0x00);
1986*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(REG_SOUND_ADV_CFG0,0xFFFF, 0x00);
1987*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteByte(REG_SOUND_NR_THRESHOLD, 0x00);
1988*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(M2S_MBOX_DBG_CMD1, 0xFFFF, MBOX_DBGCMD_GPA_ISR_DISABLE_AND_SE_DMA_Init);
1989*53ee8cc1Swenshuai.xi do
1990*53ee8cc1Swenshuai.xi {
1991*53ee8cc1Swenshuai.xi u16RegVal = HAL_AUDIO_ReadReg(S2M_MBOX_DBG_RESULT2);
1992*53ee8cc1Swenshuai.xi } while (u16RegVal != MBOX_DBGCMD_GPA_ISR_DISABLE_AND_SE_DMA_Init);
1993*53ee8cc1Swenshuai.xi AUDIO_DELAY1MS(10); // need this, don't mark.
1994*53ee8cc1Swenshuai.xi u32SeProcessFrameSmpUnit = SE_PROCESS_FRAME_SMP_UNIT;
1995*53ee8cc1Swenshuai.xi }
1996*53ee8cc1Swenshuai.xi break;
1997*53ee8cc1Swenshuai.xi
1998*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Set_SE_Test_End:
1999*53ee8cc1Swenshuai.xi if (param1 == 0)
2000*53ee8cc1Swenshuai.xi {
2001*53ee8cc1Swenshuai.xi MS_U16 u16RegVal;
2002*53ee8cc1Swenshuai.xi
2003*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(M2S_MBOX_DBG_CMD1, 0xFFFF, MBOX_DBGCMD_GPA_ISR_ENABLE);
2004*53ee8cc1Swenshuai.xi do
2005*53ee8cc1Swenshuai.xi {
2006*53ee8cc1Swenshuai.xi u16RegVal = HAL_AUDIO_ReadReg(S2M_MBOX_DBG_RESULT2);
2007*53ee8cc1Swenshuai.xi } while (u16RegVal != MBOX_DBGCMD_GPA_ISR_ENABLE);
2008*53ee8cc1Swenshuai.xi HAL_AUR2_WriteMaskByte(REG_SNDR2_MBOX_BYTE_SRS_SEL, 0x01, 0x00);
2009*53ee8cc1Swenshuai.xi HAL_AUR2_WriteMaskByte(REG_SNDR2_MBOX_BYTE_ABS3D_SEL, 0x01, 0x00);
2010*53ee8cc1Swenshuai.xi }
2011*53ee8cc1Swenshuai.xi else if (param1 == 1)
2012*53ee8cc1Swenshuai.xi {
2013*53ee8cc1Swenshuai.xi // In order not to create a new enum:
2014*53ee8cc1Swenshuai.xi // At Bifrost, define Audio_Comm_infoType_Set_DECODER_Test_Init as Audio_Comm_infoType_Set_SE_Test_Init.
2015*53ee8cc1Swenshuai.xi // And param==1 is for what's need at Audio_Comm_infoType_Set_DECODER_Test_Init.
2016*53ee8cc1Swenshuai.xi g_AudioVars2->g_bHashkeyFlag = FALSE; // set g_bHashkeyFlag to FALSE to let dynamic hash key change
2017*53ee8cc1Swenshuai.xi {
2018*53ee8cc1Swenshuai.xi extern void MDrv_AUDIO_CheckHashkey(void);
2019*53ee8cc1Swenshuai.xi MDrv_AUDIO_CheckHashkey();
2020*53ee8cc1Swenshuai.xi }
2021*53ee8cc1Swenshuai.xi }
2022*53ee8cc1Swenshuai.xi break;
2023*53ee8cc1Swenshuai.xi
2024*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Set_SE_TONE_Test_Begin:
2025*53ee8cc1Swenshuai.xi {
2026*53ee8cc1Swenshuai.xi MS_U16 u16RegVal;
2027*53ee8cc1Swenshuai.xi
2028*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(M2S_MBOX_DBG_CMD1, 0xFFFF, MBOX_DBGCMD_TONE_TEST_BEGIN);
2029*53ee8cc1Swenshuai.xi do
2030*53ee8cc1Swenshuai.xi {
2031*53ee8cc1Swenshuai.xi u16RegVal = HAL_AUDIO_ReadReg(S2M_MBOX_DBG_RESULT2);
2032*53ee8cc1Swenshuai.xi } while (u16RegVal != MBOX_DBGCMD_TONE_TEST_BEGIN);
2033*53ee8cc1Swenshuai.xi }
2034*53ee8cc1Swenshuai.xi break;
2035*53ee8cc1Swenshuai.xi
2036*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Set_SE_PEQ_Test_Begin:
2037*53ee8cc1Swenshuai.xi {
2038*53ee8cc1Swenshuai.xi MS_U16 u16RegVal;
2039*53ee8cc1Swenshuai.xi
2040*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(M2S_MBOX_DBG_CMD1, 0xFFFF, MBOX_DBGCMD_PEQ_TEST_BEGIN);
2041*53ee8cc1Swenshuai.xi do
2042*53ee8cc1Swenshuai.xi {
2043*53ee8cc1Swenshuai.xi u16RegVal = HAL_AUDIO_ReadReg(S2M_MBOX_DBG_RESULT2);
2044*53ee8cc1Swenshuai.xi } while (u16RegVal != MBOX_DBGCMD_PEQ_TEST_BEGIN);
2045*53ee8cc1Swenshuai.xi }
2046*53ee8cc1Swenshuai.xi break;
2047*53ee8cc1Swenshuai.xi
2048*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Set_SE_GEQ_Test_Begin:
2049*53ee8cc1Swenshuai.xi {
2050*53ee8cc1Swenshuai.xi MS_U16 u16RegVal;
2051*53ee8cc1Swenshuai.xi
2052*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(M2S_MBOX_DBG_CMD1, 0xFFFF, MBOX_DBGCMD_GEQ_TEST_BEGIN);
2053*53ee8cc1Swenshuai.xi do
2054*53ee8cc1Swenshuai.xi {
2055*53ee8cc1Swenshuai.xi u16RegVal = HAL_AUDIO_ReadReg(S2M_MBOX_DBG_RESULT2);
2056*53ee8cc1Swenshuai.xi } while (u16RegVal != MBOX_DBGCMD_GEQ_TEST_BEGIN);
2057*53ee8cc1Swenshuai.xi }
2058*53ee8cc1Swenshuai.xi break;
2059*53ee8cc1Swenshuai.xi
2060*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Set_SE_AVC_Test_Begin:
2061*53ee8cc1Swenshuai.xi {
2062*53ee8cc1Swenshuai.xi MS_U16 u16RegVal;
2063*53ee8cc1Swenshuai.xi
2064*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(M2S_MBOX_DBG_CMD1, 0xFFFF, MBOX_DBGCMD_AVC_TEST_BEGIN);
2065*53ee8cc1Swenshuai.xi do
2066*53ee8cc1Swenshuai.xi {
2067*53ee8cc1Swenshuai.xi u16RegVal = HAL_AUDIO_ReadReg(S2M_MBOX_DBG_RESULT2);
2068*53ee8cc1Swenshuai.xi } while (u16RegVal != MBOX_DBGCMD_AVC_TEST_BEGIN);
2069*53ee8cc1Swenshuai.xi }
2070*53ee8cc1Swenshuai.xi break;
2071*53ee8cc1Swenshuai.xi
2072*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Set_SE_SRS_THEATER_SOUND_Begin:
2073*53ee8cc1Swenshuai.xi {
2074*53ee8cc1Swenshuai.xi MS_U16 u16RegVal;
2075*53ee8cc1Swenshuai.xi
2076*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(M2S_MBOX_DBG_CMD1, 0xFFFF, MBOX_DBGCMD_SRS_THEATER_SOUND_TEST_BEGIN);
2077*53ee8cc1Swenshuai.xi do
2078*53ee8cc1Swenshuai.xi {
2079*53ee8cc1Swenshuai.xi u16RegVal = HAL_AUDIO_ReadReg(S2M_MBOX_DBG_RESULT2);
2080*53ee8cc1Swenshuai.xi } while (u16RegVal != MBOX_DBGCMD_SRS_THEATER_SOUND_TEST_BEGIN);
2081*53ee8cc1Swenshuai.xi }
2082*53ee8cc1Swenshuai.xi u32SeProcessFrameSmpUnit = 256;
2083*53ee8cc1Swenshuai.xi break;
2084*53ee8cc1Swenshuai.xi
2085*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Set_SE_SONICEMOTION_ABS3D_Begin:
2086*53ee8cc1Swenshuai.xi {
2087*53ee8cc1Swenshuai.xi MS_U16 u16RegVal;
2088*53ee8cc1Swenshuai.xi
2089*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(M2S_MBOX_DBG_CMD1, 0xFFFF, MBOX_DBGCMD_SONICEMOTION_ABS3D_TEST_BEGIN);
2090*53ee8cc1Swenshuai.xi do
2091*53ee8cc1Swenshuai.xi {
2092*53ee8cc1Swenshuai.xi u16RegVal = HAL_AUDIO_ReadReg(S2M_MBOX_DBG_RESULT2);
2093*53ee8cc1Swenshuai.xi } while (u16RegVal != MBOX_DBGCMD_SONICEMOTION_ABS3D_TEST_BEGIN);
2094*53ee8cc1Swenshuai.xi }
2095*53ee8cc1Swenshuai.xi u32SeProcessFrameSmpUnit = 256;
2096*53ee8cc1Swenshuai.xi break;
2097*53ee8cc1Swenshuai.xi
2098*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Set_SE_BONGIOVI_DPS_Begin:
2099*53ee8cc1Swenshuai.xi {
2100*53ee8cc1Swenshuai.xi MS_U16 u16RegVal;
2101*53ee8cc1Swenshuai.xi
2102*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(M2S_MBOX_DBG_CMD1, 0xFFFF, MBOX_DBGCMD_BONGIOVI_DPS_TEST_BEGIN);
2103*53ee8cc1Swenshuai.xi do
2104*53ee8cc1Swenshuai.xi {
2105*53ee8cc1Swenshuai.xi u16RegVal = HAL_AUDIO_ReadReg(S2M_MBOX_DBG_RESULT2);
2106*53ee8cc1Swenshuai.xi } while (u16RegVal != MBOX_DBGCMD_BONGIOVI_DPS_TEST_BEGIN);
2107*53ee8cc1Swenshuai.xi }
2108*53ee8cc1Swenshuai.xi u32SeProcessFrameSmpUnit = 256;
2109*53ee8cc1Swenshuai.xi break;
2110*53ee8cc1Swenshuai.xi
2111*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Set_SE_DTS_STUDIOSOUND_3D_Begin:
2112*53ee8cc1Swenshuai.xi {
2113*53ee8cc1Swenshuai.xi MS_U16 u16RegVal;
2114*53ee8cc1Swenshuai.xi
2115*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(M2S_MBOX_DBG_CMD1, 0xFFFF, MBOX_DBGCMD_DTS_STUDIOSOUND_3D_TEST_BEGIN);
2116*53ee8cc1Swenshuai.xi do
2117*53ee8cc1Swenshuai.xi {
2118*53ee8cc1Swenshuai.xi u16RegVal = HAL_AUDIO_ReadReg(S2M_MBOX_DBG_RESULT2);
2119*53ee8cc1Swenshuai.xi } while (u16RegVal != MBOX_DBGCMD_DTS_STUDIOSOUND_3D_TEST_BEGIN);
2120*53ee8cc1Swenshuai.xi }
2121*53ee8cc1Swenshuai.xi u32SeProcessFrameSmpUnit = 256;
2122*53ee8cc1Swenshuai.xi break;
2123*53ee8cc1Swenshuai.xi
2124*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Set_SE_Input_Main_Buffer_Feed:
2125*53ee8cc1Swenshuai.xi {
2126*53ee8cc1Swenshuai.xi MS_U16 u16RegVal;
2127*53ee8cc1Swenshuai.xi
2128*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(M2S_MBOX_DBG_CMD1, 0xFFFF, MBOX_DBGCMD_SE_PROCESS_BEGIN);
2129*53ee8cc1Swenshuai.xi do
2130*53ee8cc1Swenshuai.xi {
2131*53ee8cc1Swenshuai.xi u16RegVal = HAL_AUDIO_ReadReg(S2M_MBOX_DBG_RESULT2);
2132*53ee8cc1Swenshuai.xi } while (u16RegVal != MBOX_DBGCMD_SE_PROCESS_BEGIN);
2133*53ee8cc1Swenshuai.xi // HAL_AUDIO_WriteMaskReg(M2S_MBOX_DBG_CMD2, 0xFFFF, param1);
2134*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(M2S_MBOX_DBG_CMD1, 0xFFFF, MBOX_DBGCMD_SE_PROCESS_FEED);
2135*53ee8cc1Swenshuai.xi do
2136*53ee8cc1Swenshuai.xi {
2137*53ee8cc1Swenshuai.xi u16RegVal = HAL_AUDIO_ReadReg(S2M_MBOX_DBG_RESULT2);
2138*53ee8cc1Swenshuai.xi } while (u16RegVal != MBOX_DBGCMD_SE_PROCESS_FEED);
2139*53ee8cc1Swenshuai.xi }
2140*53ee8cc1Swenshuai.xi break;
2141*53ee8cc1Swenshuai.xi
2142*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Set_SE_Output_Main_Buffer_Consume:
2143*53ee8cc1Swenshuai.xi {
2144*53ee8cc1Swenshuai.xi MS_U16 u16RegVal;
2145*53ee8cc1Swenshuai.xi
2146*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(M2S_MBOX_DBG_CMD1, 0xFFFF, MBOX_DBGCMD_SE_PROCESS_BEGIN);
2147*53ee8cc1Swenshuai.xi do
2148*53ee8cc1Swenshuai.xi {
2149*53ee8cc1Swenshuai.xi u16RegVal = HAL_AUDIO_ReadReg(S2M_MBOX_DBG_RESULT2);
2150*53ee8cc1Swenshuai.xi } while (u16RegVal != MBOX_DBGCMD_SE_PROCESS_BEGIN);
2151*53ee8cc1Swenshuai.xi // HAL_AUDIO_WriteMaskReg(M2S_MBOX_DBG_CMD2, 0xFFFF, param1);
2152*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(M2S_MBOX_DBG_CMD1, 0xFFFF, MBOX_DBGCMD_SE_PROCESS_CONSUME);
2153*53ee8cc1Swenshuai.xi do
2154*53ee8cc1Swenshuai.xi {
2155*53ee8cc1Swenshuai.xi u16RegVal = HAL_AUDIO_ReadReg(S2M_MBOX_DBG_RESULT2);
2156*53ee8cc1Swenshuai.xi } while ((u16RegVal != MBOX_DBGCMD_SE_PROCESS_CONSUME_NEED) && (u16RegVal != MBOX_DBGCMD_SE_PROCESS_CONSUME_NO_NEED));
2157*53ee8cc1Swenshuai.xi if (u16RegVal == MBOX_DBGCMD_SE_PROCESS_CONSUME_NEED)
2158*53ee8cc1Swenshuai.xi return TRUE;
2159*53ee8cc1Swenshuai.xi else
2160*53ee8cc1Swenshuai.xi return FALSE;
2161*53ee8cc1Swenshuai.xi }
2162*53ee8cc1Swenshuai.xi break;
2163*53ee8cc1Swenshuai.xi
2164*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_setBypassSPDIF_PAPB_chk: //HAL_MAD_SetDtsBypassFlag
2165*53ee8cc1Swenshuai.xi break;
2166*53ee8cc1Swenshuai.xi
2167*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_MMA_init:
2168*53ee8cc1Swenshuai.xi HAL_AUDIO_SetEntertainmentMode(AUDIO_ETMODE_GAME);
2169*53ee8cc1Swenshuai.xi HAL_SOUND_SetMixModeVolume(E_AUDIO_INFO_GAME_IN, GAME1_VOL, 0x12, 0x00); //DEC1 Vol
2170*53ee8cc1Swenshuai.xi HAL_SOUND_SetMixModeVolume(E_AUDIO_INFO_GAME_IN, GAME2_VOL, 0x12, 0x00); //DEC2 Vol
2171*53ee8cc1Swenshuai.xi HAL_SOUND_SetMixModeVolume(E_AUDIO_INFO_GAME_IN, PCM_VOL, 0x12, 0x00); //DEC3 Vol
2172*53ee8cc1Swenshuai.xi break;
2173*53ee8cc1Swenshuai.xi
2174*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_MMA_finish:
2175*53ee8cc1Swenshuai.xi HAL_AUDIO_SetEntertainmentMode(AUDIO_ETMODE_DTV);
2176*53ee8cc1Swenshuai.xi break;
2177*53ee8cc1Swenshuai.xi
2178*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_DMAReader_Command:
2179*53ee8cc1Swenshuai.xi if (param1)
2180*53ee8cc1Swenshuai.xi {
2181*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(0x2B80, 0x0001, 0x0001);
2182*53ee8cc1Swenshuai.xi AUDIO_DELAY1MS(2);
2183*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(0x2B80, 0x0100, 0x0100);
2184*53ee8cc1Swenshuai.xi }
2185*53ee8cc1Swenshuai.xi else
2186*53ee8cc1Swenshuai.xi {
2187*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(0x2B80, 0x0001, 0x0000);
2188*53ee8cc1Swenshuai.xi AUDIO_DELAY1MS(2);
2189*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(0x2B80, 0x0100, 0x0000);
2190*53ee8cc1Swenshuai.xi AUDIO_DELAY1MS(2);
2191*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(0x2B80, 0x0040, 0x0040); //read_init, clear dma reader data & pointer
2192*53ee8cc1Swenshuai.xi AUDIO_DELAY1MS(1);
2193*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(0x2B80, 0x0040, 0x0000);
2194*53ee8cc1Swenshuai.xi }
2195*53ee8cc1Swenshuai.xi break;
2196*53ee8cc1Swenshuai.xi
2197*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_CompressBin_LoadCode:
2198*53ee8cc1Swenshuai.xi g_AudioVars2->CompressInfo = param1;
2199*53ee8cc1Swenshuai.xi break;
2200*53ee8cc1Swenshuai.xi
2201*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_CompressBin_DDRAddress:
2202*53ee8cc1Swenshuai.xi g_AudioVars2->g_DSPDDRBinBaseAddress[param1] = param2;
2203*53ee8cc1Swenshuai.xi g_DSPDDRBinBaseAddress[param1] = param2;
2204*53ee8cc1Swenshuai.xi break;
2205*53ee8cc1Swenshuai.xi
2206*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_SetSCMS:
2207*53ee8cc1Swenshuai.xi {
2208*53ee8cc1Swenshuai.xi retTx1= HAL_AUDIO_DigitalOut_GetChannelStatus(DIGITAL_SPDIF_OUTPUT, &stDigitalChannelStatusTx1);
2209*53ee8cc1Swenshuai.xi retTx2= HAL_AUDIO_DigitalOut_GetChannelStatus(DIGITAL_HDMI_ARC_OUTPUT, &stDigitalChannelStatusTx2);
2210*53ee8cc1Swenshuai.xi
2211*53ee8cc1Swenshuai.xi if (retTx1 == FALSE || retTx2 == FALSE)
2212*53ee8cc1Swenshuai.xi {
2213*53ee8cc1Swenshuai.xi HALMAD_ERROR("%s() : Failed to get channel status !!!\n", __FUNCTION__);
2214*53ee8cc1Swenshuai.xi break;
2215*53ee8cc1Swenshuai.xi }
2216*53ee8cc1Swenshuai.xi
2217*53ee8cc1Swenshuai.xi if(param1)
2218*53ee8cc1Swenshuai.xi {
2219*53ee8cc1Swenshuai.xi stDigitalChannelStatusTx1.stCopyRight.CBit = 1;
2220*53ee8cc1Swenshuai.xi stDigitalChannelStatusTx2.stCopyRight.CBit = 1;
2221*53ee8cc1Swenshuai.xi }
2222*53ee8cc1Swenshuai.xi else
2223*53ee8cc1Swenshuai.xi {
2224*53ee8cc1Swenshuai.xi stDigitalChannelStatusTx1.stCopyRight.CBit = 0;
2225*53ee8cc1Swenshuai.xi stDigitalChannelStatusTx2.stCopyRight.CBit = 0;
2226*53ee8cc1Swenshuai.xi }
2227*53ee8cc1Swenshuai.xi
2228*53ee8cc1Swenshuai.xi if(param2)
2229*53ee8cc1Swenshuai.xi {
2230*53ee8cc1Swenshuai.xi stDigitalChannelStatusTx1.stCopyRight.LBit = 1;
2231*53ee8cc1Swenshuai.xi stDigitalChannelStatusTx2.stCopyRight.LBit = 1;
2232*53ee8cc1Swenshuai.xi }
2233*53ee8cc1Swenshuai.xi else
2234*53ee8cc1Swenshuai.xi {
2235*53ee8cc1Swenshuai.xi stDigitalChannelStatusTx1.stCopyRight.LBit = 0;
2236*53ee8cc1Swenshuai.xi stDigitalChannelStatusTx2.stCopyRight.LBit = 0;
2237*53ee8cc1Swenshuai.xi }
2238*53ee8cc1Swenshuai.xi
2239*53ee8cc1Swenshuai.xi HAL_AUDIO_DigitalOut_SetChannelStatus(DIGITAL_SPDIF_OUTPUT, &stDigitalChannelStatusTx1);
2240*53ee8cc1Swenshuai.xi HAL_AUDIO_DigitalOut_SetChannelStatus(DIGITAL_HDMI_ARC_OUTPUT, &stDigitalChannelStatusTx2);
2241*53ee8cc1Swenshuai.xi }
2242*53ee8cc1Swenshuai.xi break;
2243*53ee8cc1Swenshuai.xi
2244*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADC_InputGain:
2245*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskByte(0x2CE5 , 0xE0, (AUD_ADC_GAIN_TYPE)param1<<5);
2246*53ee8cc1Swenshuai.xi break;
2247*53ee8cc1Swenshuai.xi
2248*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADC1_InputGain:
2249*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskByte(0x2CE5 , 0x1C, (AUD_ADC_GAIN_TYPE)param1<<2);
2250*53ee8cc1Swenshuai.xi break;
2251*53ee8cc1Swenshuai.xi
2252*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_KTV_SetType:
2253*53ee8cc1Swenshuai.xi switch((AUDIO_KTV_MODEL)param1)
2254*53ee8cc1Swenshuai.xi {
2255*53ee8cc1Swenshuai.xi case AUD_KTV_MODEL1: // iSing99
2256*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskByte(0x2D47 , 0x7F, 0x00); // No this model in T12
2257*53ee8cc1Swenshuai.xi break;
2258*53ee8cc1Swenshuai.xi case AUD_KTV_MODEL2: // Multak
2259*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskByte(0x2D47 , 0x7F, 0x21);
2260*53ee8cc1Swenshuai.xi break;
2261*53ee8cc1Swenshuai.xi case AUD_KTV_MODEL3: // ¹p¥?
2262*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskByte(0x2D47 , 0x7F, 0x02);
2263*53ee8cc1Swenshuai.xi break;
2264*53ee8cc1Swenshuai.xi case AUD_KTV_MODEL4: // Konka
2265*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskByte(0x2D47 , 0x7F, 0x14);
2266*53ee8cc1Swenshuai.xi break;
2267*53ee8cc1Swenshuai.xi default:
2268*53ee8cc1Swenshuai.xi break;
2269*53ee8cc1Swenshuai.xi }
2270*53ee8cc1Swenshuai.xi break;
2271*53ee8cc1Swenshuai.xi
2272*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_syncSTC_in_mmTs:
2273*53ee8cc1Swenshuai.xi if ( param1 )
2274*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_TS_SYNC_STC, ADEC1, 1, 0);
2275*53ee8cc1Swenshuai.xi else
2276*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_TS_SYNC_STC, ADEC1, 0, 0);
2277*53ee8cc1Swenshuai.xi break;
2278*53ee8cc1Swenshuai.xi
2279*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_PUSI_disable_Info:
2280*53ee8cc1Swenshuai.xi if(param1)
2281*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_PARSER_PUSI_DISABLE, ADEC1, 1, 0);
2282*53ee8cc1Swenshuai.xi else
2283*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_PARSER_PUSI_DISABLE, ADEC1, 0, 0);
2284*53ee8cc1Swenshuai.xi break;
2285*53ee8cc1Swenshuai.xi
2286*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Parser_Spec:
2287*53ee8cc1Swenshuai.xi if(param1)
2288*53ee8cc1Swenshuai.xi {
2289*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_PARSER_SPEC, ADEC1, 1, 0);
2290*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_PARSER_PUSI_DISABLE, ADEC1, 1, 0);
2291*53ee8cc1Swenshuai.xi }
2292*53ee8cc1Swenshuai.xi else
2293*53ee8cc1Swenshuai.xi {
2294*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_PARSER_SPEC, ADEC1, 0, 0);
2295*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_PARSER_PUSI_DISABLE, ADEC1, 0, 0);
2296*53ee8cc1Swenshuai.xi }
2297*53ee8cc1Swenshuai.xi break;
2298*53ee8cc1Swenshuai.xi
2299*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_setNR_Threshold:
2300*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteByte(0x2D32, (MS_U8) param1);
2301*53ee8cc1Swenshuai.xi break;
2302*53ee8cc1Swenshuai.xi
2303*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Set_CallBackFunc:
2304*53ee8cc1Swenshuai.xi if ( g_FuncPrt_Hal_SetAudioParam2 == NULL )
2305*53ee8cc1Swenshuai.xi {
2306*53ee8cc1Swenshuai.xi g_FuncPrt_Hal_SetAudioParam2 = HAL_MAD_SetAudioParam2;
2307*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: g_FuncPrt_Hal_SetAudioParam2 hook OK !!\r\n", __FUNCTION__);
2308*53ee8cc1Swenshuai.xi }
2309*53ee8cc1Swenshuai.xi else
2310*53ee8cc1Swenshuai.xi {
2311*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: g_FuncPrt_Hal_SetAudioParam2 already register !!\r\n", __FUNCTION__);
2312*53ee8cc1Swenshuai.xi }
2313*53ee8cc1Swenshuai.xi if ( g_FuncPrt_Hal_GetAudioInfo2 == NULL )
2314*53ee8cc1Swenshuai.xi {
2315*53ee8cc1Swenshuai.xi g_FuncPrt_Hal_GetAudioInfo2 = HAL_MAD_GetAudioInfo2;
2316*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: g_FuncPrt_Hal_GetAudioInfo2 hook OK !!\r\n", __FUNCTION__);
2317*53ee8cc1Swenshuai.xi }
2318*53ee8cc1Swenshuai.xi else
2319*53ee8cc1Swenshuai.xi {
2320*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: g_FuncPrt_Hal_GetAudioInfo2 already register !!\r\n", __FUNCTION__);
2321*53ee8cc1Swenshuai.xi }
2322*53ee8cc1Swenshuai.xi break;
2323*53ee8cc1Swenshuai.xi
2324*53ee8cc1Swenshuai.xi /********************************************************************************
2325*53ee8cc1Swenshuai.xi * DECODER 1
2326*53ee8cc1Swenshuai.xi ********************************************************************************/
2327*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_Set_play_smpRate:
2328*53ee8cc1Swenshuai.xi {
2329*53ee8cc1Swenshuai.xi MS_U16 play_cmd;
2330*53ee8cc1Swenshuai.xi MS_U32 synth_H;
2331*53ee8cc1Swenshuai.xi
2332*53ee8cc1Swenshuai.xi play_cmd = HAL_AUR2_ReadByte(REG_R2_DECODE1_CMD) & 0xF;
2333*53ee8cc1Swenshuai.xi if (play_cmd != 0x02)
2334*53ee8cc1Swenshuai.xi printf("[%s : Audio_Comm_infoType_ADEC1_Set_play_smpRate]: audio play cmd is not Ts file Play !!\n", __FUNCTION__);
2335*53ee8cc1Swenshuai.xi
2336*53ee8cc1Swenshuai.xi if (param1)
2337*53ee8cc1Swenshuai.xi {
2338*53ee8cc1Swenshuai.xi if ((param2 > 50000) ||(param2<6000))
2339*53ee8cc1Swenshuai.xi #if defined (__aarch64__)
2340*53ee8cc1Swenshuai.xi printf("[%s : Audio_Comm_infoType_ADEC1_Set_play_smpRate]: play rate [%ld] is invalid !!\n", __FUNCTION__, param2);
2341*53ee8cc1Swenshuai.xi #else
2342*53ee8cc1Swenshuai.xi printf("[%s : Audio_Comm_infoType_ADEC1_Set_play_smpRate]: play rate [%d] is invalid !!\n", __FUNCTION__, (int)param2);
2343*53ee8cc1Swenshuai.xi #endif
2344*53ee8cc1Swenshuai.xi synth_H = 216000000 / param2;
2345*53ee8cc1Swenshuai.xi synth_H <<= 16;
2346*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_EXT_SMPRATE_CTRL, ADEC1, 1, synth_H);
2347*53ee8cc1Swenshuai.xi }
2348*53ee8cc1Swenshuai.xi else
2349*53ee8cc1Swenshuai.xi {
2350*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_EXT_SMPRATE_CTRL, ADEC1, 0, 0x11940000);
2351*53ee8cc1Swenshuai.xi }
2352*53ee8cc1Swenshuai.xi }
2353*53ee8cc1Swenshuai.xi break;
2354*53ee8cc1Swenshuai.xi
2355*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_soundmod:
2356*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_SoundMode:
2357*53ee8cc1Swenshuai.xi {
2358*53ee8cc1Swenshuai.xi MS_U8 value = 0;
2359*53ee8cc1Swenshuai.xi
2360*53ee8cc1Swenshuai.xi switch((AUD_Dolby_SOUNDMODE)param1)
2361*53ee8cc1Swenshuai.xi {
2362*53ee8cc1Swenshuai.xi case AUD_Dolby_SOUNDMODE_LR: value = 0x0; break;
2363*53ee8cc1Swenshuai.xi case AUD_Dolby_SOUNDMODE_LL: value = 0x1; break;
2364*53ee8cc1Swenshuai.xi case AUD_Dolby_SOUNDMODE_RR: value = 0x2; break;
2365*53ee8cc1Swenshuai.xi default: value = 0x0; break;
2366*53ee8cc1Swenshuai.xi }
2367*53ee8cc1Swenshuai.xi
2368*53ee8cc1Swenshuai.xi //NOT_DEFINE : to do
2369*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_SOUND_MODE, ADEC1, value, 0);
2370*53ee8cc1Swenshuai.xi HAL_SND_R2_Set_SHM_PARAM(R2_SHM_PARAM_PCMR_SOUND_MODE, ADEC1, value, 0);
2371*53ee8cc1Swenshuai.xi HAL_AUDIO_SeWriteMaskByte(REG_MB_MODE_SELECT, 0x03, (AU_DVB_MODE) param1);
2372*53ee8cc1Swenshuai.xi }
2373*53ee8cc1Swenshuai.xi break;
2374*53ee8cc1Swenshuai.xi
2375*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_reqDataSize:
2376*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_MMFileSize: //HAL_MAD_SetMadFileSize
2377*53ee8cc1Swenshuai.xi {
2378*53ee8cc1Swenshuai.xi MS_U32 file_size_value = 0x800;
2379*53ee8cc1Swenshuai.xi
2380*53ee8cc1Swenshuai.xi switch (param1)
2381*53ee8cc1Swenshuai.xi {
2382*53ee8cc1Swenshuai.xi case FILE_SIZE_1KB: file_size_value = 0x00400; break;
2383*53ee8cc1Swenshuai.xi case FILE_SIZE_2KB: file_size_value = 0x00800; break;
2384*53ee8cc1Swenshuai.xi case FILE_SIZE_4KB: file_size_value = 0x01000; break;
2385*53ee8cc1Swenshuai.xi case FILE_SIZE_8KB: file_size_value = 0x02000; break;
2386*53ee8cc1Swenshuai.xi case FILE_SIZE_16KB: file_size_value = 0x04000; break;
2387*53ee8cc1Swenshuai.xi case FILE_SIZE_32KB: file_size_value = 0x08000; break;
2388*53ee8cc1Swenshuai.xi case FILE_SIZE_64KB: file_size_value = 0x10000; break;
2389*53ee8cc1Swenshuai.xi default: break;
2390*53ee8cc1Swenshuai.xi }
2391*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_FILE_REQ_SIZE, ADEC1, file_size_value, 0);
2392*53ee8cc1Swenshuai.xi }
2393*53ee8cc1Swenshuai.xi break;
2394*53ee8cc1Swenshuai.xi
2395*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_esBuf_informDataRdy:
2396*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_DEC1_MMTag: //HAL_MAD_SetMMIntTag
2397*53ee8cc1Swenshuai.xi {
2398*53ee8cc1Swenshuai.xi MS_U32 es_wrPtr = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC1, 0);
2399*53ee8cc1Swenshuai.xi MS_U32 es_bufSz = ES1_DRAM_SIZE;
2400*53ee8cc1Swenshuai.xi MS_U32 es_reqsz = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MM_FILE_REQ_SIZE, ADEC1);
2401*53ee8cc1Swenshuai.xi es_wrPtr += es_reqsz;
2402*53ee8cc1Swenshuai.xi
2403*53ee8cc1Swenshuai.xi if ( es_wrPtr >= es_bufSz )
2404*53ee8cc1Swenshuai.xi es_wrPtr -= es_bufSz;
2405*53ee8cc1Swenshuai.xi
2406*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC1, es_wrPtr, 0);
2407*53ee8cc1Swenshuai.xi }
2408*53ee8cc1Swenshuai.xi break;
2409*53ee8cc1Swenshuai.xi
2410*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_FF2X:
2411*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_MM_FFx2: //HAL_MAD_SetMMFFx2Mode
2412*53ee8cc1Swenshuai.xi if ( param1 )
2413*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_FF2X, ADEC1, 1, 0);
2414*53ee8cc1Swenshuai.xi else
2415*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_FF2X, ADEC1, 0, 0);
2416*53ee8cc1Swenshuai.xi break;
2417*53ee8cc1Swenshuai.xi
2418*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_mute:
2419*53ee8cc1Swenshuai.xi if ( param1 )
2420*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DECODE_MUTE, ADEC1, 1, 0);
2421*53ee8cc1Swenshuai.xi else
2422*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DECODE_MUTE, ADEC1, 0, 0);
2423*53ee8cc1Swenshuai.xi break;
2424*53ee8cc1Swenshuai.xi
2425*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_play_wo_output:
2426*53ee8cc1Swenshuai.xi if (param1)
2427*53ee8cc1Swenshuai.xi HAL_AUDIO_DecWriteMaskByte(REG_MB_DEC_CTRL, 0x80, 0x80);
2428*53ee8cc1Swenshuai.xi else
2429*53ee8cc1Swenshuai.xi HAL_AUDIO_DecWriteMaskByte(REG_MB_DEC_CTRL, 0x80, 0x00);
2430*53ee8cc1Swenshuai.xi break;
2431*53ee8cc1Swenshuai.xi
2432*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_playControl:
2433*53ee8cc1Swenshuai.xi switch((MMA_AUDIO_CONTROL)param1)
2434*53ee8cc1Swenshuai.xi {
2435*53ee8cc1Swenshuai.xi case MMA_STOP:
2436*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_STOP);
2437*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_AVSYNC);
2438*53ee8cc1Swenshuai.xi g_AudioVars2->g_bDecPlayFileFlag = FALSE;
2439*53ee8cc1Swenshuai.xi break;
2440*53ee8cc1Swenshuai.xi
2441*53ee8cc1Swenshuai.xi case MMA_PLAY:
2442*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PLAY);
2443*53ee8cc1Swenshuai.xi break;
2444*53ee8cc1Swenshuai.xi
2445*53ee8cc1Swenshuai.xi case MMA_PLAY_FILETSP:
2446*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PLAYFILETSP);
2447*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_FREERUN);
2448*53ee8cc1Swenshuai.xi break;
2449*53ee8cc1Swenshuai.xi
2450*53ee8cc1Swenshuai.xi case MMA_RESYNC:
2451*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_RESYNC);
2452*53ee8cc1Swenshuai.xi break;
2453*53ee8cc1Swenshuai.xi
2454*53ee8cc1Swenshuai.xi case MMA_PLAY_FILE:
2455*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PLAYFILE);
2456*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_FREERUN);
2457*53ee8cc1Swenshuai.xi break;
2458*53ee8cc1Swenshuai.xi
2459*53ee8cc1Swenshuai.xi case MMA_BROWSE:
2460*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_STARTBROWSE);
2461*53ee8cc1Swenshuai.xi break;
2462*53ee8cc1Swenshuai.xi
2463*53ee8cc1Swenshuai.xi case MMA_PAUSE:
2464*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PAUSE);
2465*53ee8cc1Swenshuai.xi break;
2466*53ee8cc1Swenshuai.xi
2467*53ee8cc1Swenshuai.xi case MMA_PLAY_FRAME:
2468*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PLAYFRAME);
2469*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_FREERUN);
2470*53ee8cc1Swenshuai.xi break;
2471*53ee8cc1Swenshuai.xi
2472*53ee8cc1Swenshuai.xi default:
2473*53ee8cc1Swenshuai.xi break;
2474*53ee8cc1Swenshuai.xi }
2475*53ee8cc1Swenshuai.xi break;
2476*53ee8cc1Swenshuai.xi
2477*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_setDecParam:
2478*53ee8cc1Swenshuai.xi //NOT_DEFINE : remove
2479*53ee8cc1Swenshuai.xi break;
2480*53ee8cc1Swenshuai.xi
2481*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_UNI_PCMOutCnt:
2482*53ee8cc1Swenshuai.xi uniPlay_ackCnt[0]++;
2483*53ee8cc1Swenshuai.xi HALMAD_PRINT("\r\nTrigger decInt[%d] %d\r\n", 0, (int)uniPlay_ackCnt[0]);
2484*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_UNI_PCM_SET_OUTPUT_CNT, ADEC1, param1, 0);
2485*53ee8cc1Swenshuai.xi break;
2486*53ee8cc1Swenshuai.xi
2487*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_UNI_PCMInput_Addr: //assume UNI get data from PCM1.
2488*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteReg(REG_DEC1_UNI_PCM3_WPTR, (MS_U16)((param1>>BYTES_IN_MIU_LINE_LOG2) - OFFSET_PCM1_DRAM_ADDR));
2489*53ee8cc1Swenshuai.xi break;
2490*53ee8cc1Swenshuai.xi
2491*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_DEC1_setBufferProcess:
2492*53ee8cc1Swenshuai.xi // Need Decoder Add delay support in DEC1-DSP
2493*53ee8cc1Swenshuai.xi break;
2494*53ee8cc1Swenshuai.xi
2495*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_33Bit_PTS:
2496*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_33bit_PTS:
2497*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_REPORT_MM_TS_PTS_WITH_MSB, ADEC1, param1, 0);
2498*53ee8cc1Swenshuai.xi break;
2499*53ee8cc1Swenshuai.xi
2500*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_avsync_delay:
2501*53ee8cc1Swenshuai.xi {
2502*53ee8cc1Swenshuai.xi MS_U32 delay = 0;
2503*53ee8cc1Swenshuai.xi MS_U32 delay_ms = 0;
2504*53ee8cc1Swenshuai.xi delay_ms = param1 * MS_CHANGE_TO_TIME_STAMP;
2505*53ee8cc1Swenshuai.xi
2506*53ee8cc1Swenshuai.xi delay = g_ac3_delay + delay_ms;
2507*53ee8cc1Swenshuai.xi if(delay>DELAY_UPPER_LIMIT)
2508*53ee8cc1Swenshuai.xi {
2509*53ee8cc1Swenshuai.xi delay = DELAY_UPPER_LIMIT;
2510*53ee8cc1Swenshuai.xi }
2511*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_AC3_AVOFFSET, ADEC1, delay, 0);
2512*53ee8cc1Swenshuai.xi
2513*53ee8cc1Swenshuai.xi delay = g_aac_delay + delay_ms;
2514*53ee8cc1Swenshuai.xi if(delay>DELAY_UPPER_LIMIT)
2515*53ee8cc1Swenshuai.xi {
2516*53ee8cc1Swenshuai.xi delay = DELAY_UPPER_LIMIT;
2517*53ee8cc1Swenshuai.xi }
2518*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_AAC_AVOFFSET, ADEC1, delay, 0);
2519*53ee8cc1Swenshuai.xi
2520*53ee8cc1Swenshuai.xi delay = g_mpeg_delay + delay_ms;
2521*53ee8cc1Swenshuai.xi if(delay>DELAY_UPPER_LIMIT)
2522*53ee8cc1Swenshuai.xi {
2523*53ee8cc1Swenshuai.xi delay = DELAY_UPPER_LIMIT;
2524*53ee8cc1Swenshuai.xi }
2525*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MPG_AVOFFSET, ADEC1, delay, 0);
2526*53ee8cc1Swenshuai.xi }
2527*53ee8cc1Swenshuai.xi break;
2528*53ee8cc1Swenshuai.xi
2529*53ee8cc1Swenshuai.xi /********************************************************************************
2530*53ee8cc1Swenshuai.xi * DECODER 2
2531*53ee8cc1Swenshuai.xi ********************************************************************************/
2532*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_soundmod:
2533*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_reqDataSize:
2534*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_FF2X:
2535*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_mute:
2536*53ee8cc1Swenshuai.xi break;
2537*53ee8cc1Swenshuai.xi
2538*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_esBuf_informDataRdy:
2539*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_DEC2_MMTag: //HAL_MAD2_SetMMIntTag
2540*53ee8cc1Swenshuai.xi {
2541*53ee8cc1Swenshuai.xi MS_U32 es_wrPtr, es_bufSz, es_reqsz;
2542*53ee8cc1Swenshuai.xi es_wrPtr = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC2, 0);
2543*53ee8cc1Swenshuai.xi es_bufSz = ES2_DRAM_SIZE;
2544*53ee8cc1Swenshuai.xi es_reqsz = param2;
2545*53ee8cc1Swenshuai.xi es_wrPtr += es_reqsz;
2546*53ee8cc1Swenshuai.xi
2547*53ee8cc1Swenshuai.xi if ( es_wrPtr >= es_bufSz )
2548*53ee8cc1Swenshuai.xi es_wrPtr -= es_bufSz;
2549*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC2, es_wrPtr, 0);
2550*53ee8cc1Swenshuai.xi }
2551*53ee8cc1Swenshuai.xi break;
2552*53ee8cc1Swenshuai.xi
2553*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_syncSTC_in_mmTs:
2554*53ee8cc1Swenshuai.xi if ( param1 )
2555*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_TS_SYNC_STC, ADEC2, 1, 0);
2556*53ee8cc1Swenshuai.xi else
2557*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_TS_SYNC_STC, ADEC2, 0, 0);
2558*53ee8cc1Swenshuai.xi break;
2559*53ee8cc1Swenshuai.xi
2560*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_playControl:
2561*53ee8cc1Swenshuai.xi {
2562*53ee8cc1Swenshuai.xi switch((MMA_AUDIO_CONTROL)param1)
2563*53ee8cc1Swenshuai.xi {
2564*53ee8cc1Swenshuai.xi case MMA_STOP:
2565*53ee8cc1Swenshuai.xi HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD_STOP);
2566*53ee8cc1Swenshuai.xi g_AudioVars2->g_bSePlayFileFlag = FALSE;
2567*53ee8cc1Swenshuai.xi break;
2568*53ee8cc1Swenshuai.xi
2569*53ee8cc1Swenshuai.xi case MMA_PLAY:
2570*53ee8cc1Swenshuai.xi HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD_PLAY);
2571*53ee8cc1Swenshuai.xi break;
2572*53ee8cc1Swenshuai.xi
2573*53ee8cc1Swenshuai.xi case MMA_PLAY_FILETSP:
2574*53ee8cc1Swenshuai.xi HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD_PLAYFILETSP);
2575*53ee8cc1Swenshuai.xi break;
2576*53ee8cc1Swenshuai.xi
2577*53ee8cc1Swenshuai.xi case MMA_RESYNC:
2578*53ee8cc1Swenshuai.xi HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD_RESYNC);
2579*53ee8cc1Swenshuai.xi break;
2580*53ee8cc1Swenshuai.xi
2581*53ee8cc1Swenshuai.xi case MMA_PLAY_FILE:
2582*53ee8cc1Swenshuai.xi HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD_PLAYFILE);
2583*53ee8cc1Swenshuai.xi break;
2584*53ee8cc1Swenshuai.xi
2585*53ee8cc1Swenshuai.xi case MMA_BROWSE:
2586*53ee8cc1Swenshuai.xi HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD_STARTBROWSE);
2587*53ee8cc1Swenshuai.xi break;
2588*53ee8cc1Swenshuai.xi
2589*53ee8cc1Swenshuai.xi case MMA_PAUSE:
2590*53ee8cc1Swenshuai.xi HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD_PAUSE);
2591*53ee8cc1Swenshuai.xi break;
2592*53ee8cc1Swenshuai.xi
2593*53ee8cc1Swenshuai.xi case MMA_PLAY_FRAME:
2594*53ee8cc1Swenshuai.xi HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD_PLAYFRAME);
2595*53ee8cc1Swenshuai.xi break;
2596*53ee8cc1Swenshuai.xi
2597*53ee8cc1Swenshuai.xi default:
2598*53ee8cc1Swenshuai.xi break;
2599*53ee8cc1Swenshuai.xi }
2600*53ee8cc1Swenshuai.xi }
2601*53ee8cc1Swenshuai.xi break;
2602*53ee8cc1Swenshuai.xi
2603*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_setDecParam:
2604*53ee8cc1Swenshuai.xi //NOT_DEFINE : remove
2605*53ee8cc1Swenshuai.xi break;
2606*53ee8cc1Swenshuai.xi
2607*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_33bit_PTS:
2608*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_REPORT_MM_TS_PTS_WITH_MSB, ADEC2, param1, 0);
2609*53ee8cc1Swenshuai.xi break;
2610*53ee8cc1Swenshuai.xi
2611*53ee8cc1Swenshuai.xi /********************************************************************************
2612*53ee8cc1Swenshuai.xi * OTHERS
2613*53ee8cc1Swenshuai.xi ********************************************************************************/
2614*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_setSpdifDelay: // set spdif dealy time
2615*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_setSpdif_BufferProcess:
2616*53ee8cc1Swenshuai.xi HAL_SOUND_SetSpdifAudioDelay((MS_U16)param1);
2617*53ee8cc1Swenshuai.xi break;
2618*53ee8cc1Swenshuai.xi
2619*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ReadByte: // For APP to read register value directly.
2620*53ee8cc1Swenshuai.xi g_ReadTargetAddr = param1;
2621*53ee8cc1Swenshuai.xi break;
2622*53ee8cc1Swenshuai.xi
2623*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_WriteByte: // For APP to write register value directly.
2624*53ee8cc1Swenshuai.xi HAL_AUDIO_AbsWriteMaskByte(param1,0xFF,(MS_U8)(param2&0xFF));
2625*53ee8cc1Swenshuai.xi break;
2626*53ee8cc1Swenshuai.xi
2627*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_PTS_info:
2628*53ee8cc1Swenshuai.xi HAL_AUDIO_PTS_info(param1);
2629*53ee8cc1Swenshuai.xi break;
2630*53ee8cc1Swenshuai.xi
2631*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_RTSP_Mem:
2632*53ee8cc1Swenshuai.xi {
2633*53ee8cc1Swenshuai.xi AUDIO_RTSP_INFO *ptmp = (AUDIO_RTSP_INFO *)param1;
2634*53ee8cc1Swenshuai.xi ptmp->Mem_addr = RTSP_MEM_ADDR;
2635*53ee8cc1Swenshuai.xi ptmp->Mem_size= RTSP_MEM_SIZE;
2636*53ee8cc1Swenshuai.xi }
2637*53ee8cc1Swenshuai.xi break;
2638*53ee8cc1Swenshuai.xi
2639*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Dump_Dsp_Info:
2640*53ee8cc1Swenshuai.xi {
2641*53ee8cc1Swenshuai.xi g_AudioDumpInfoCtrl = param1;
2642*53ee8cc1Swenshuai.xi
2643*53ee8cc1Swenshuai.xi if (param2 > 50 )
2644*53ee8cc1Swenshuai.xi g_audioDumpInfo_interval = param2;
2645*53ee8cc1Swenshuai.xi }
2646*53ee8cc1Swenshuai.xi break;
2647*53ee8cc1Swenshuai.xi
2648*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Set_Video_STCPTS_DIFF:
2649*53ee8cc1Swenshuai.xi //NOT_DEFINE : to do
2650*53ee8cc1Swenshuai.xi HAL_MAD_Write_DSP_sram(DSP1PmAddr_video_TD, param1, DSP_MEM_TYPE_PM);
2651*53ee8cc1Swenshuai.xi break;
2652*53ee8cc1Swenshuai.xi
2653*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_HDMI_Unstable_Protect:
2654*53ee8cc1Swenshuai.xi //NOT_DEFINE : to do
2655*53ee8cc1Swenshuai.xi HAL_MAD2_Write_DSP_sram(DSP2DmAddr_hdmi_unstable_protect, param1, DSP_MEM_TYPE_DM);
2656*53ee8cc1Swenshuai.xi break;
2657*53ee8cc1Swenshuai.xi
2658*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Vorbis_header_size:
2659*53ee8cc1Swenshuai.xi if ( param1 )
2660*53ee8cc1Swenshuai.xi {
2661*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_VORBIS_HEADER_SIZE, ADEC1, param2, 0);
2662*53ee8cc1Swenshuai.xi }
2663*53ee8cc1Swenshuai.xi else
2664*53ee8cc1Swenshuai.xi {
2665*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_VORBIS_HEADER_SIZE, ADEC1, param2, 0);
2666*53ee8cc1Swenshuai.xi }
2667*53ee8cc1Swenshuai.xi break;
2668*53ee8cc1Swenshuai.xi
2669*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_HDMI_Unstable_Threshold:
2670*53ee8cc1Swenshuai.xi //NOT_DEFINE : to do
2671*53ee8cc1Swenshuai.xi HAL_MAD2_Write_DSP_sram(DSP2DmAddr_hdmi_unstable_threshold, param1, DSP_MEM_TYPE_DM);
2672*53ee8cc1Swenshuai.xi break;
2673*53ee8cc1Swenshuai.xi
2674*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Set_Parser:
2675*53ee8cc1Swenshuai.xi break;
2676*53ee8cc1Swenshuai.xi
2677*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_mainAudio_setBufferProcess:
2678*53ee8cc1Swenshuai.xi HAL_SOUND_SetCH1AudioDelay(param1);
2679*53ee8cc1Swenshuai.xi break;
2680*53ee8cc1Swenshuai.xi
2681*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_STC_Select:
2682*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_STC_SELECT, ADEC1, param1, 0);
2683*53ee8cc1Swenshuai.xi break;
2684*53ee8cc1Swenshuai.xi
2685*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_NUTTX
2686*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Set_TEE_Capibility:
2687*53ee8cc1Swenshuai.xi HALAUDIO_CHECK_TEE_INFO_SHM_INIT;
2688*53ee8cc1Swenshuai.xi switch ((Audio_TEE_Capability)param1)
2689*53ee8cc1Swenshuai.xi {
2690*53ee8cc1Swenshuai.xi case Audio_TEE_Setup:
2691*53ee8cc1Swenshuai.xi g_bAudioTeeEnabled = TRUE; audio_tee_enabled = TRUE;
2692*53ee8cc1Swenshuai.xi if (audio_tee_mbx_initialized == FALSE)
2693*53ee8cc1Swenshuai.xi {
2694*53ee8cc1Swenshuai.xi if (HAL_AUDIO_RegisterMBX() == TRUE)
2695*53ee8cc1Swenshuai.xi {
2696*53ee8cc1Swenshuai.xi g_bAudioTeeMbxInitialized = TRUE; audio_tee_mbx_initialized = TRUE;
2697*53ee8cc1Swenshuai.xi }
2698*53ee8cc1Swenshuai.xi }
2699*53ee8cc1Swenshuai.xi break;
2700*53ee8cc1Swenshuai.xi
2701*53ee8cc1Swenshuai.xi case Audio_TEE_Setup_and_ALL_DSP_Secure_Accessed:
2702*53ee8cc1Swenshuai.xi g_bAudioTeeEnabled = TRUE; audio_tee_enabled = TRUE;
2703*53ee8cc1Swenshuai.xi if (audio_tee_mbx_initialized == FALSE)
2704*53ee8cc1Swenshuai.xi {
2705*53ee8cc1Swenshuai.xi if (HAL_AUDIO_RegisterMBX() == TRUE)
2706*53ee8cc1Swenshuai.xi {
2707*53ee8cc1Swenshuai.xi g_bAudioTeeMbxInitialized = TRUE; audio_tee_mbx_initialized = TRUE;
2708*53ee8cc1Swenshuai.xi g_bDecDspSecureTeeAccessed = TRUE; dec_dsp_secure_tee_accessed = TRUE;
2709*53ee8cc1Swenshuai.xi g_bSndDspSecureTeeAccessed = TRUE; snd_dsp_secure_tee_accessed = TRUE;
2710*53ee8cc1Swenshuai.xi }
2711*53ee8cc1Swenshuai.xi }
2712*53ee8cc1Swenshuai.xi break;
2713*53ee8cc1Swenshuai.xi
2714*53ee8cc1Swenshuai.xi case Audio_TEE_Set_DSP_Secure_Accessed:
2715*53ee8cc1Swenshuai.xi if ((audio_tee_enabled == TRUE) && (audio_tee_mbx_initialized == TRUE))
2716*53ee8cc1Swenshuai.xi {
2717*53ee8cc1Swenshuai.xi if (((AUDIO_DSP_ID)param2) == AUDIO_DSP_ID_DEC)
2718*53ee8cc1Swenshuai.xi {
2719*53ee8cc1Swenshuai.xi g_bDecDspSecureTeeAccessed = TRUE; dec_dsp_secure_tee_accessed = TRUE;
2720*53ee8cc1Swenshuai.xi }
2721*53ee8cc1Swenshuai.xi else if (((AUDIO_DSP_ID)param2) == AUDIO_DSP_ID_SND)
2722*53ee8cc1Swenshuai.xi {
2723*53ee8cc1Swenshuai.xi g_bSndDspSecureTeeAccessed = TRUE; snd_dsp_secure_tee_accessed = TRUE;
2724*53ee8cc1Swenshuai.xi }
2725*53ee8cc1Swenshuai.xi else if (((AUDIO_DSP_ID)param2) == AUDIO_DSP_ID_ALL)
2726*53ee8cc1Swenshuai.xi {
2727*53ee8cc1Swenshuai.xi g_bDecDspSecureTeeAccessed = TRUE; dec_dsp_secure_tee_accessed = TRUE;
2728*53ee8cc1Swenshuai.xi g_bSndDspSecureTeeAccessed = TRUE; snd_dsp_secure_tee_accessed = TRUE;
2729*53ee8cc1Swenshuai.xi }
2730*53ee8cc1Swenshuai.xi }
2731*53ee8cc1Swenshuai.xi break;
2732*53ee8cc1Swenshuai.xi
2733*53ee8cc1Swenshuai.xi case Audio_TEE_Set_DSP_Normal_Accessed:
2734*53ee8cc1Swenshuai.xi if (((AUDIO_DSP_ID)param2) == AUDIO_DSP_ID_DEC)
2735*53ee8cc1Swenshuai.xi {
2736*53ee8cc1Swenshuai.xi g_bDecDspSecureTeeAccessed = FALSE; dec_dsp_secure_tee_accessed = FALSE;
2737*53ee8cc1Swenshuai.xi }
2738*53ee8cc1Swenshuai.xi else if (((AUDIO_DSP_ID)param2) == AUDIO_DSP_ID_SND)
2739*53ee8cc1Swenshuai.xi {
2740*53ee8cc1Swenshuai.xi g_bSndDspSecureTeeAccessed = FALSE; snd_dsp_secure_tee_accessed = FALSE;
2741*53ee8cc1Swenshuai.xi }
2742*53ee8cc1Swenshuai.xi else if (((AUDIO_DSP_ID)param2) == AUDIO_DSP_ID_ALL)
2743*53ee8cc1Swenshuai.xi {
2744*53ee8cc1Swenshuai.xi g_bDecDspSecureTeeAccessed = FALSE; dec_dsp_secure_tee_accessed = FALSE;
2745*53ee8cc1Swenshuai.xi g_bSndDspSecureTeeAccessed = FALSE; snd_dsp_secure_tee_accessed = FALSE;
2746*53ee8cc1Swenshuai.xi }
2747*53ee8cc1Swenshuai.xi break;
2748*53ee8cc1Swenshuai.xi
2749*53ee8cc1Swenshuai.xi default:
2750*53ee8cc1Swenshuai.xi break;
2751*53ee8cc1Swenshuai.xi }
2752*53ee8cc1Swenshuai.xi break;
2753*53ee8cc1Swenshuai.xi #endif
2754*53ee8cc1Swenshuai.xi
2755*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Multi_Channel:
2756*53ee8cc1Swenshuai.xi {
2757*53ee8cc1Swenshuai.xi if ((param1 == TRUE) || (param1 == FALSE))
2758*53ee8cc1Swenshuai.xi {
2759*53ee8cc1Swenshuai.xi printf("!!!!!!!!!set Audio_Comm_infoType_Multi_Channel = [0x%x] \n", (unsigned int)param1);
2760*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MULTI_CHANNEL, ADEC1, param1, 0);
2761*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MULTI_CHANNEL, ADEC2, param1, 0);
2762*53ee8cc1Swenshuai.xi }
2763*53ee8cc1Swenshuai.xi else
2764*53ee8cc1Swenshuai.xi {
2765*53ee8cc1Swenshuai.xi HALMAD_ERROR("%s: Error! Invalid value(0x%x) to enable/disable Multi-Channel\n", __FUNCTION__, (unsigned int)param1);
2766*53ee8cc1Swenshuai.xi }
2767*53ee8cc1Swenshuai.xi
2768*53ee8cc1Swenshuai.xi break;
2769*53ee8cc1Swenshuai.xi }
2770*53ee8cc1Swenshuai.xi
2771*53ee8cc1Swenshuai.xi /* not supported cmd */
2772*53ee8cc1Swenshuai.xi default:
2773*53ee8cc1Swenshuai.xi #if defined (__aarch64__)
2774*53ee8cc1Swenshuai.xi printf("%s: infoType[0x%x,0x%lx,0x%lx] not Supported\n",__FUNCTION__, infoType, param1, param2);
2775*53ee8cc1Swenshuai.xi #else
2776*53ee8cc1Swenshuai.xi printf("%s: infoType[0x%x,0x%x,0x%x] not Supported\n",__FUNCTION__, infoType, (unsigned int)param1, (unsigned int)param2);
2777*53ee8cc1Swenshuai.xi #endif
2778*53ee8cc1Swenshuai.xi break;
2779*53ee8cc1Swenshuai.xi }
2780*53ee8cc1Swenshuai.xi
2781*53ee8cc1Swenshuai.xi return TRUE;
2782*53ee8cc1Swenshuai.xi }
2783*53ee8cc1Swenshuai.xi
2784*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2785*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetCommInfo()
2786*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine info of audio decoders
2787*53ee8cc1Swenshuai.xi /// @param <IN> \b Audio_COMM_infoType : request info type of audio decoder
2788*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
2789*53ee8cc1Swenshuai.xi /// @param <RET> \b long long : info type
2790*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
2791*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetCommInfo(Audio_COMM_infoType infoType)2792*53ee8cc1Swenshuai.xi MS_U64 HAL_MAD_GetCommInfo( Audio_COMM_infoType infoType )
2793*53ee8cc1Swenshuai.xi {
2794*53ee8cc1Swenshuai.xi MS_U64 result = 0;
2795*53ee8cc1Swenshuai.xi
2796*53ee8cc1Swenshuai.xi HALMAD_CHECK_SHM_INIT;
2797*53ee8cc1Swenshuai.xi
2798*53ee8cc1Swenshuai.xi switch(infoType)
2799*53ee8cc1Swenshuai.xi {
2800*53ee8cc1Swenshuai.xi /********************************************************************************
2801*53ee8cc1Swenshuai.xi * Common
2802*53ee8cc1Swenshuai.xi ********************************************************************************/
2803*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_getHDMI_CopyRight_C_Bit:
2804*53ee8cc1Swenshuai.xi /* this case is used to read HDMI bank register by SN, it should be implement by HDMI team */
2805*53ee8cc1Swenshuai.xi break;
2806*53ee8cc1Swenshuai.xi
2807*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_getHDMI_CopyRight_L_Bit:
2808*53ee8cc1Swenshuai.xi /* this case is used to read HDMI bank register by SN, it should be implement by HDMI team */
2809*53ee8cc1Swenshuai.xi break;
2810*53ee8cc1Swenshuai.xi
2811*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Get_UNI_ES_MEMCNT:
2812*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ES_LEVEL, ADEC1);
2813*53ee8cc1Swenshuai.xi break;
2814*53ee8cc1Swenshuai.xi
2815*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Get_UNI_ES_Base:
2816*53ee8cc1Swenshuai.xi result = HAL_AUDIO_GetDspMadBaseAddr(DSP_SE) + OFFSET_ES1_DRAM_ADDR;
2817*53ee8cc1Swenshuai.xi break;
2818*53ee8cc1Swenshuai.xi
2819*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Get_UNI_ES_Size:
2820*53ee8cc1Swenshuai.xi result = ES1_DRAM_SIZE ;
2821*53ee8cc1Swenshuai.xi break;
2822*53ee8cc1Swenshuai.xi
2823*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Get_UNI_PCM_Base:
2824*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PCM_ADDR, ADEC1);
2825*53ee8cc1Swenshuai.xi break;
2826*53ee8cc1Swenshuai.xi
2827*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Get_UNI_PCM_Size:
2828*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PCM_SIZE, ADEC1);
2829*53ee8cc1Swenshuai.xi break;
2830*53ee8cc1Swenshuai.xi
2831*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Get_AccumEsCnt:
2832*53ee8cc1Swenshuai.xi // result = HAL_MAD_Read_DSP_sram(REG_PTS_AccumEsCnt, DSP_MEM_TYPE_DM);
2833*53ee8cc1Swenshuai.xi result = 0;
2834*53ee8cc1Swenshuai.xi break;
2835*53ee8cc1Swenshuai.xi
2836*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Is_Decoder_In_R2:
2837*53ee8cc1Swenshuai.xi result = 1;
2838*53ee8cc1Swenshuai.xi break;
2839*53ee8cc1Swenshuai.xi
2840*53ee8cc1Swenshuai.xi /********************************************************************************
2841*53ee8cc1Swenshuai.xi * DECODER 1
2842*53ee8cc1Swenshuai.xi ********************************************************************************/
2843*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_capability:
2844*53ee8cc1Swenshuai.xi {
2845*53ee8cc1Swenshuai.xi MMA_AudioType audioType = Audio_DEC_NULL;
2846*53ee8cc1Swenshuai.xi audioType = _GetAudioCaps(AU_DEC_ID1);
2847*53ee8cc1Swenshuai.xi
2848*53ee8cc1Swenshuai.xi #if defined (CONFIG_UTOPIA_ANDROID_L)
2849*53ee8cc1Swenshuai.xi result = (MS_U64)audioType;
2850*53ee8cc1Swenshuai.xi #else
2851*53ee8cc1Swenshuai.xi result = (long long)audioType;
2852*53ee8cc1Swenshuai.xi #endif
2853*53ee8cc1Swenshuai.xi
2854*53ee8cc1Swenshuai.xi break;
2855*53ee8cc1Swenshuai.xi }
2856*53ee8cc1Swenshuai.xi
2857*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_currAudDecStatus:
2858*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_DecStatus: //no change
2859*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_STAUS, ADEC1);
2860*53ee8cc1Swenshuai.xi break;
2861*53ee8cc1Swenshuai.xi
2862*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_AudioSyncStatus:
2863*53ee8cc1Swenshuai.xi if(HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_CMD)&0x80)
2864*53ee8cc1Swenshuai.xi result = 0; // Free-run
2865*53ee8cc1Swenshuai.xi else
2866*53ee8cc1Swenshuai.xi result = 1; // AV-sync
2867*53ee8cc1Swenshuai.xi break;
2868*53ee8cc1Swenshuai.xi
2869*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_sampleRate:
2870*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_SampleRate: //HAL_MAD_GetMadSamplingRate
2871*53ee8cc1Swenshuai.xi {
2872*53ee8cc1Swenshuai.xi MS_U32 r2_smpRate = 0xFFFF;
2873*53ee8cc1Swenshuai.xi r2_smpRate = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_SMP_RATE, ADEC1);
2874*53ee8cc1Swenshuai.xi result = AUDIO_FS_NONE;
2875*53ee8cc1Swenshuai.xi
2876*53ee8cc1Swenshuai.xi switch(r2_smpRate)
2877*53ee8cc1Swenshuai.xi {
2878*53ee8cc1Swenshuai.xi case 8000: result = AUDIO_FS_8KHZ; break;
2879*53ee8cc1Swenshuai.xi case 11025: result = AUDIO_FS_11KHZ; break;
2880*53ee8cc1Swenshuai.xi case 12000: result = AUDIO_FS_12KHZ; break;
2881*53ee8cc1Swenshuai.xi case 16000: result = AUDIO_FS_16KHZ; break;
2882*53ee8cc1Swenshuai.xi case 22050: result = AUDIO_FS_22KHZ; break;
2883*53ee8cc1Swenshuai.xi case 24000: result = AUDIO_FS_24KHZ; break;
2884*53ee8cc1Swenshuai.xi case 32000: result = AUDIO_FS_32KHZ; break;
2885*53ee8cc1Swenshuai.xi case 44100: result = AUDIO_FS_44KHZ; break;
2886*53ee8cc1Swenshuai.xi case 48000: result = AUDIO_FS_48KHZ; break;
2887*53ee8cc1Swenshuai.xi case 65535: result = AUDIO_FS_NONE; break;
2888*53ee8cc1Swenshuai.xi case 64000: result = AUDIO_FS_64KHZ; break;
2889*53ee8cc1Swenshuai.xi case 88200: result = AUDIO_FS_88KHZ; break;
2890*53ee8cc1Swenshuai.xi case 96000: result = AUDIO_FS_96KHZ; break;
2891*53ee8cc1Swenshuai.xi case 176000: //result = AUDIO_FS_176KHZ; break;
2892*53ee8cc1Swenshuai.xi case 192000: //result = AUDIO_FS_192KHZ; break;
2893*53ee8cc1Swenshuai.xi default: result = AUDIO_FS_NONE; break;
2894*53ee8cc1Swenshuai.xi }
2895*53ee8cc1Swenshuai.xi }
2896*53ee8cc1Swenshuai.xi break;
2897*53ee8cc1Swenshuai.xi
2898*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_bitRate:
2899*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_BIT_RATE, ADEC1);
2900*53ee8cc1Swenshuai.xi break;
2901*53ee8cc1Swenshuai.xi
2902*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_acmod:
2903*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ChannelMode: //HAL_MAD_GetMadChannelMode
2904*53ee8cc1Swenshuai.xi {
2905*53ee8cc1Swenshuai.xi MS_U32 ac_mode = 0xFF;
2906*53ee8cc1Swenshuai.xi MS_U32 channel_mapping = 0x0;
2907*53ee8cc1Swenshuai.xi ac_mode = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_CHANNEL_MODE, ADEC1);
2908*53ee8cc1Swenshuai.xi channel_mapping = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_CHANNEL_MAPPING, ADEC1);
2909*53ee8cc1Swenshuai.xi
2910*53ee8cc1Swenshuai.xi switch(ac_mode)
2911*53ee8cc1Swenshuai.xi {
2912*53ee8cc1Swenshuai.xi case adec_ch_mono:
2913*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_MONO;
2914*53ee8cc1Swenshuai.xi break;
2915*53ee8cc1Swenshuai.xi
2916*53ee8cc1Swenshuai.xi case adec_ch_joint_stereo:
2917*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_JOINT_STEREO;
2918*53ee8cc1Swenshuai.xi break;
2919*53ee8cc1Swenshuai.xi
2920*53ee8cc1Swenshuai.xi case adec_ch_stereo:
2921*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_STEREO;
2922*53ee8cc1Swenshuai.xi break;
2923*53ee8cc1Swenshuai.xi
2924*53ee8cc1Swenshuai.xi case adec_ch_dual_mono:
2925*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_DUAL_MONO;
2926*53ee8cc1Swenshuai.xi break;
2927*53ee8cc1Swenshuai.xi
2928*53ee8cc1Swenshuai.xi case adec_ch_multi:
2929*53ee8cc1Swenshuai.xi {
2930*53ee8cc1Swenshuai.xi MS_U32 channel_mapping_mask_C_L_R, channel_mapping_mask_Ls_Rs =0x00;
2931*53ee8cc1Swenshuai.xi channel_mapping_mask_Ls_Rs = (channel_mapping&(ACMOD_CH_MASK_LS|ACMOD_CH_MASK_RS));
2932*53ee8cc1Swenshuai.xi channel_mapping_mask_C_L_R = (channel_mapping&(ACMOD_CH_MASK_C|ACMOD_CH_MASK_L|ACMOD_CH_MASK_R));
2933*53ee8cc1Swenshuai.xi
2934*53ee8cc1Swenshuai.xi if(channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_C|ACMOD_CH_MASK_L|ACMOD_CH_MASK_R))
2935*53ee8cc1Swenshuai.xi {
2936*53ee8cc1Swenshuai.xi if(channel_mapping_mask_Ls_Rs == (ACMOD_CH_MASK_LS|ACMOD_CH_MASK_RS))
2937*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_3_2_MODE;
2938*53ee8cc1Swenshuai.xi else if(channel_mapping_mask_Ls_Rs == ACMOD_CH_MASK_NULL)
2939*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_3_0_MODE;
2940*53ee8cc1Swenshuai.xi else
2941*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_3_1_MODE;
2942*53ee8cc1Swenshuai.xi }
2943*53ee8cc1Swenshuai.xi else if((channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_C|ACMOD_CH_MASK_L))||(channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_L|ACMOD_CH_MASK_R))
2944*53ee8cc1Swenshuai.xi ||(channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_C|ACMOD_CH_MASK_R)))
2945*53ee8cc1Swenshuai.xi {
2946*53ee8cc1Swenshuai.xi if(channel_mapping_mask_Ls_Rs == (ACMOD_CH_MASK_LS|ACMOD_CH_MASK_RS))
2947*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_2_2_MODE;
2948*53ee8cc1Swenshuai.xi else
2949*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_2_1_MODE;
2950*53ee8cc1Swenshuai.xi }
2951*53ee8cc1Swenshuai.xi else //other multi-channel case, set it to AUD_CH_MODE_3_2_MODE
2952*53ee8cc1Swenshuai.xi {
2953*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_3_2_MODE;
2954*53ee8cc1Swenshuai.xi }
2955*53ee8cc1Swenshuai.xi }
2956*53ee8cc1Swenshuai.xi break;
2957*53ee8cc1Swenshuai.xi
2958*53ee8cc1Swenshuai.xi default:
2959*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_NONE;
2960*53ee8cc1Swenshuai.xi break;
2961*53ee8cc1Swenshuai.xi }
2962*53ee8cc1Swenshuai.xi }
2963*53ee8cc1Swenshuai.xi break;
2964*53ee8cc1Swenshuai.xi
2965*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_soundmod:
2966*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_SoundMode:
2967*53ee8cc1Swenshuai.xi result = HAL_AUDIO_ReadReg(REG_MB_MODE_SELECT)&0x3;
2968*53ee8cc1Swenshuai.xi break;
2969*53ee8cc1Swenshuai.xi
2970*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_okFrmCnt:
2971*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_OK_FRMCNT, ADEC1);
2972*53ee8cc1Swenshuai.xi break;
2973*53ee8cc1Swenshuai.xi
2974*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_errFrmCnt:
2975*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_DecodeErrorCnt: //HAL_MAD_Get_DecodeErrorCnt
2976*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ERR_FRMCNT, ADEC1);
2977*53ee8cc1Swenshuai.xi break;
2978*53ee8cc1Swenshuai.xi
2979*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_1ms_timeStamp:
2980*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_1ms_PTS: //no change
2981*53ee8cc1Swenshuai.xi {
2982*53ee8cc1Swenshuai.xi MS_U32 pts;
2983*53ee8cc1Swenshuai.xi pts = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_CURR_PTS, ADEC1);
2984*53ee8cc1Swenshuai.xi result = pts/45;
2985*53ee8cc1Swenshuai.xi }
2986*53ee8cc1Swenshuai.xi break;
2987*53ee8cc1Swenshuai.xi
2988*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_33bit_PTS:
2989*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_33Bit_PTS: //HAL_MAD_GetMadPts
2990*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_CURR_PTS, ADEC1);
2991*53ee8cc1Swenshuai.xi result <<= 1;
2992*53ee8cc1Swenshuai.xi break;
2993*53ee8cc1Swenshuai.xi
2994*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_33bit_STCPTS_DIFF:
2995*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_33Bit_STCPTS_DIFF: //HAL_MAD_GetMadPtsStcDelta
2996*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_TD, ADEC1);
2997*53ee8cc1Swenshuai.xi
2998*53ee8cc1Swenshuai.xi //sign ext
2999*53ee8cc1Swenshuai.xi result <<= 32;
3000*53ee8cc1Swenshuai.xi result >>= 31;
3001*53ee8cc1Swenshuai.xi break;
3002*53ee8cc1Swenshuai.xi
3003*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_Get_PTS_latency:
3004*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PTS_LATENCY, ADEC1);
3005*53ee8cc1Swenshuai.xi
3006*53ee8cc1Swenshuai.xi //sign ext
3007*53ee8cc1Swenshuai.xi result <<= 32;
3008*53ee8cc1Swenshuai.xi result >>= 31;
3009*53ee8cc1Swenshuai.xi break;
3010*53ee8cc1Swenshuai.xi
3011*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_Get_PCM_bufferEmpty:
3012*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PCM_EMPTY_CNT, ADEC1);
3013*53ee8cc1Swenshuai.xi break;
3014*53ee8cc1Swenshuai.xi
3015*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_esBuf_reqFlag:
3016*53ee8cc1Swenshuai.xi {
3017*53ee8cc1Swenshuai.xi if (HAL_AUDIO_GetPlayFileFlag(DSP_DEC))
3018*53ee8cc1Swenshuai.xi result = 1;
3019*53ee8cc1Swenshuai.xi else
3020*53ee8cc1Swenshuai.xi result = 0;
3021*53ee8cc1Swenshuai.xi }
3022*53ee8cc1Swenshuai.xi break;
3023*53ee8cc1Swenshuai.xi
3024*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_DEC1_BufferAddr: //HAL_MAD_GetBufferAddr
3025*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC1, 0) + OFFSET_ES1_DRAM_ADDR;
3026*53ee8cc1Swenshuai.xi break;
3027*53ee8cc1Swenshuai.xi
3028*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_esBuf_reqAddr:
3029*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC1, 0) + OFFSET_ES1_DRAM_ADDR + HAL_AUDIO_GetDspMadBaseAddr(DSP_SE);
3030*53ee8cc1Swenshuai.xi break;
3031*53ee8cc1Swenshuai.xi
3032*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_esBuf_reqSize:
3033*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_DEC1_BufferSize: //HAL_MAD_GetBufferSize
3034*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MM_FILE_REQ_SIZE, ADEC1);
3035*53ee8cc1Swenshuai.xi break;
3036*53ee8cc1Swenshuai.xi
3037*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_esBuf_currLevel:
3038*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_DEC1_ESBufferSize: //HAL_MAD_GetESBufferSize
3039*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ES_LEVEL, ADEC1);
3040*53ee8cc1Swenshuai.xi break;
3041*53ee8cc1Swenshuai.xi
3042*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_pcmBuf_currLevel:
3043*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_DEC1_MMResidualPCM: //HAL_MAD_GetMMResidualPCM
3044*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_DEC1_PCMBufferSize: //HAL_MAD_GetPCMBufferSize
3045*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PCM_DMX_LEVEL, ADEC1);
3046*53ee8cc1Swenshuai.xi break;
3047*53ee8cc1Swenshuai.xi
3048*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_UNI_pcm_wptr:
3049*53ee8cc1Swenshuai.xi result = HAL_AUDIO_GetDspMadBaseAddr(DSP_SE) + ASND_DSP_DDR_SIZE + OFFSET_PCM1_DRAM_ADDR + HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PCM_WR_PTR, 0);
3050*53ee8cc1Swenshuai.xi break;
3051*53ee8cc1Swenshuai.xi
3052*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_DMAReader_BufferSize:
3053*53ee8cc1Swenshuai.xi result = ((DSP2_DMA_READER_DRAM_SIZE+1)*BYTES_IN_MIU_LINE);
3054*53ee8cc1Swenshuai.xi break;
3055*53ee8cc1Swenshuai.xi
3056*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Get_SE_Input_Main_BufferBase:
3057*53ee8cc1Swenshuai.xi result = HAL_AUDIO_GetDspMadBaseAddr(DSP_SE) + OFFSET_SE_MAIN_IN_DRAM_ADDR;
3058*53ee8cc1Swenshuai.xi break;
3059*53ee8cc1Swenshuai.xi
3060*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Get_SE_Input_Main_BufferSize:
3061*53ee8cc1Swenshuai.xi result = SE_MAIN_IN_DRAM_SIZE;
3062*53ee8cc1Swenshuai.xi break;
3063*53ee8cc1Swenshuai.xi
3064*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Get_SE_Output_Main_BufferBase:
3065*53ee8cc1Swenshuai.xi result = HAL_AUDIO_GetDspMadBaseAddr(DSP_SE) + OFFSET_SE_MAIN_OUT_DRAM_ADDR;
3066*53ee8cc1Swenshuai.xi break;
3067*53ee8cc1Swenshuai.xi
3068*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Get_SE_Output_Main_BufferSize:
3069*53ee8cc1Swenshuai.xi result = SE_MAIN_OUT_DRAM_SIZE;
3070*53ee8cc1Swenshuai.xi break;
3071*53ee8cc1Swenshuai.xi
3072*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Get_SE_PROCESS_FRAME_SMP_UNIT:
3073*53ee8cc1Swenshuai.xi result = u32SeProcessFrameSmpUnit;
3074*53ee8cc1Swenshuai.xi break;
3075*53ee8cc1Swenshuai.xi
3076*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Get_SE_PROCESS_FETCH_CHANNELS:
3077*53ee8cc1Swenshuai.xi result = SE_PROCESS_FETCH_CHANNELS;
3078*53ee8cc1Swenshuai.xi break;
3079*53ee8cc1Swenshuai.xi
3080*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Get_SE_PROCESS_STORE_CHANNELS:
3081*53ee8cc1Swenshuai.xi result = SE_PROCESS_STORE_CHANNELS;
3082*53ee8cc1Swenshuai.xi break;
3083*53ee8cc1Swenshuai.xi
3084*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Get_SE_PROCESS_FETCH_FRAME_BYTE_SIZE:
3085*53ee8cc1Swenshuai.xi result = SE_PROCESS_FETCH_FRAME_LINE_SIZE * BYTES_IN_MIU_LINE * (u32SeProcessFrameSmpUnit/SE_PROCESS_FRAME_SMP_UNIT);
3086*53ee8cc1Swenshuai.xi break;
3087*53ee8cc1Swenshuai.xi
3088*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Get_SE_PROCESS_STORE_FRAME_BYTE_SIZE:
3089*53ee8cc1Swenshuai.xi result = SE_PROCESS_STORE_FRAME_LINE_SIZE * BYTES_IN_MIU_LINE * (u32SeProcessFrameSmpUnit/SE_PROCESS_FRAME_SMP_UNIT);
3090*53ee8cc1Swenshuai.xi break;
3091*53ee8cc1Swenshuai.xi
3092*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_UNI_pcm_decSize:
3093*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_UNI_DECODE_DONE_PCM_SIZE, ADEC1);
3094*53ee8cc1Swenshuai.xi break;
3095*53ee8cc1Swenshuai.xi
3096*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_UNI_OutPCMLevel:
3097*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PCM_DMX_LEVEL, ADEC1);
3098*53ee8cc1Swenshuai.xi break;
3099*53ee8cc1Swenshuai.xi
3100*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_getDecInfo1:
3101*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_getDecInfo2:
3102*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_getDecInfo3:
3103*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_getDecInfo4:
3104*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_getDecInfo5:
3105*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_getDecInfo6:
3106*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_getDecInfo7:
3107*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_getDecInfo8:
3108*53ee8cc1Swenshuai.xi {
3109*53ee8cc1Swenshuai.xi // not used, remove
3110*53ee8cc1Swenshuai.xi }
3111*53ee8cc1Swenshuai.xi break;
3112*53ee8cc1Swenshuai.xi
3113*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_DMAReader_BufferLevel:
3114*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(0x2B80, 0x0010, 0x0010);
3115*53ee8cc1Swenshuai.xi result = ((MS_U32)HAL_AUDIO_ReadReg(0x2B8C)<<3); // 0x2B8C is line size
3116*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskReg(0x2B80, 0x0010, 0x0000);
3117*53ee8cc1Swenshuai.xi break;
3118*53ee8cc1Swenshuai.xi
3119*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_getDecChannelInfo:
3120*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_CHANNEL_MAPPING, ADEC1);
3121*53ee8cc1Swenshuai.xi break;
3122*53ee8cc1Swenshuai.xi
3123*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_audio_unsupported:
3124*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_UNSUPPORT_TYPE, ADEC1);
3125*53ee8cc1Swenshuai.xi break;
3126*53ee8cc1Swenshuai.xi
3127*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_avSyncOffset:
3128*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_AVSYNC_OFFSET, ADEC1) & 0x00FFFFFF;
3129*53ee8cc1Swenshuai.xi break;
3130*53ee8cc1Swenshuai.xi
3131*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_getlatest_PTS:
3132*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PTS, ADEC1);
3133*53ee8cc1Swenshuai.xi result <<= 1;
3134*53ee8cc1Swenshuai.xi break;
3135*53ee8cc1Swenshuai.xi
3136*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC1_avsync_delay_upperlimit:
3137*53ee8cc1Swenshuai.xi if(g_ac3_delay>g_aac_delay)
3138*53ee8cc1Swenshuai.xi {
3139*53ee8cc1Swenshuai.xi if(g_ac3_delay>g_mpeg_delay)
3140*53ee8cc1Swenshuai.xi {
3141*53ee8cc1Swenshuai.xi result = ((DELAY_UPPER_LIMIT - g_ac3_delay)/MS_CHANGE_TO_TIME_STAMP);
3142*53ee8cc1Swenshuai.xi }
3143*53ee8cc1Swenshuai.xi else
3144*53ee8cc1Swenshuai.xi {
3145*53ee8cc1Swenshuai.xi result = ((DELAY_UPPER_LIMIT - g_mpeg_delay)/MS_CHANGE_TO_TIME_STAMP);
3146*53ee8cc1Swenshuai.xi }
3147*53ee8cc1Swenshuai.xi }
3148*53ee8cc1Swenshuai.xi else
3149*53ee8cc1Swenshuai.xi {
3150*53ee8cc1Swenshuai.xi if(g_aac_delay>g_mpeg_delay)
3151*53ee8cc1Swenshuai.xi {
3152*53ee8cc1Swenshuai.xi result = ((DELAY_UPPER_LIMIT - g_aac_delay)/MS_CHANGE_TO_TIME_STAMP);
3153*53ee8cc1Swenshuai.xi }
3154*53ee8cc1Swenshuai.xi else
3155*53ee8cc1Swenshuai.xi {
3156*53ee8cc1Swenshuai.xi result = ((DELAY_UPPER_LIMIT - g_mpeg_delay)/MS_CHANGE_TO_TIME_STAMP);
3157*53ee8cc1Swenshuai.xi }
3158*53ee8cc1Swenshuai.xi }
3159*53ee8cc1Swenshuai.xi break;
3160*53ee8cc1Swenshuai.xi
3161*53ee8cc1Swenshuai.xi /*******************************************************************************
3162*53ee8cc1Swenshuai.xi * DECODER 2
3163*53ee8cc1Swenshuai.xi *******************************************************************************/
3164*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_capability:
3165*53ee8cc1Swenshuai.xi result = Audio_DEC_MP3;
3166*53ee8cc1Swenshuai.xi break;
3167*53ee8cc1Swenshuai.xi
3168*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_currAudDecStatus:
3169*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_STAUS, ADEC2);
3170*53ee8cc1Swenshuai.xi break;
3171*53ee8cc1Swenshuai.xi
3172*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_sampleRate:
3173*53ee8cc1Swenshuai.xi {
3174*53ee8cc1Swenshuai.xi MS_U32 r2_smpRate = 0xFFFF;
3175*53ee8cc1Swenshuai.xi r2_smpRate = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_SMP_RATE, ADEC2);
3176*53ee8cc1Swenshuai.xi result = AUDIO_FS_NONE;
3177*53ee8cc1Swenshuai.xi
3178*53ee8cc1Swenshuai.xi switch(r2_smpRate)
3179*53ee8cc1Swenshuai.xi {
3180*53ee8cc1Swenshuai.xi case 8000: result = AUDIO_FS_8KHZ; break;
3181*53ee8cc1Swenshuai.xi case 11025: result = AUDIO_FS_11KHZ; break;
3182*53ee8cc1Swenshuai.xi case 12000: result = AUDIO_FS_12KHZ; break;
3183*53ee8cc1Swenshuai.xi case 16000: result = AUDIO_FS_16KHZ; break;
3184*53ee8cc1Swenshuai.xi case 22050: result = AUDIO_FS_22KHZ; break;
3185*53ee8cc1Swenshuai.xi case 24000: result = AUDIO_FS_24KHZ; break;
3186*53ee8cc1Swenshuai.xi case 32000: result = AUDIO_FS_32KHZ; break;
3187*53ee8cc1Swenshuai.xi case 44100: result = AUDIO_FS_44KHZ; break;
3188*53ee8cc1Swenshuai.xi case 48000: result = AUDIO_FS_48KHZ; break;
3189*53ee8cc1Swenshuai.xi case 65535: result = AUDIO_FS_NONE; break;
3190*53ee8cc1Swenshuai.xi case 64000: result = AUDIO_FS_64KHZ; break;
3191*53ee8cc1Swenshuai.xi case 88200: result = AUDIO_FS_88KHZ; break;
3192*53ee8cc1Swenshuai.xi case 96000: result = AUDIO_FS_96KHZ; break;
3193*53ee8cc1Swenshuai.xi case 176000: //result = AUDIO_FS_176KHZ; break;
3194*53ee8cc1Swenshuai.xi case 192000: //result = AUDIO_FS_192KHZ; break;
3195*53ee8cc1Swenshuai.xi default: result = AUDIO_FS_NONE; break;
3196*53ee8cc1Swenshuai.xi }
3197*53ee8cc1Swenshuai.xi }
3198*53ee8cc1Swenshuai.xi break;
3199*53ee8cc1Swenshuai.xi
3200*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_bitRate:
3201*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_BIT_RATE, ADEC2);
3202*53ee8cc1Swenshuai.xi break;
3203*53ee8cc1Swenshuai.xi
3204*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_acmod:
3205*53ee8cc1Swenshuai.xi {
3206*53ee8cc1Swenshuai.xi MS_U32 ac_mode = 0xFF;
3207*53ee8cc1Swenshuai.xi MS_U32 channel_mapping = 0x0;
3208*53ee8cc1Swenshuai.xi ac_mode = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_CHANNEL_MODE, ADEC2);
3209*53ee8cc1Swenshuai.xi channel_mapping = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_CHANNEL_MAPPING, ADEC2);
3210*53ee8cc1Swenshuai.xi
3211*53ee8cc1Swenshuai.xi switch(ac_mode)
3212*53ee8cc1Swenshuai.xi {
3213*53ee8cc1Swenshuai.xi case adec_ch_mono:
3214*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_MONO;
3215*53ee8cc1Swenshuai.xi break;
3216*53ee8cc1Swenshuai.xi
3217*53ee8cc1Swenshuai.xi case adec_ch_joint_stereo:
3218*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_JOINT_STEREO;
3219*53ee8cc1Swenshuai.xi break;
3220*53ee8cc1Swenshuai.xi
3221*53ee8cc1Swenshuai.xi case adec_ch_stereo:
3222*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_STEREO;
3223*53ee8cc1Swenshuai.xi break;
3224*53ee8cc1Swenshuai.xi
3225*53ee8cc1Swenshuai.xi case adec_ch_dual_mono:
3226*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_DUAL_MONO;
3227*53ee8cc1Swenshuai.xi break;
3228*53ee8cc1Swenshuai.xi
3229*53ee8cc1Swenshuai.xi case adec_ch_multi:
3230*53ee8cc1Swenshuai.xi {
3231*53ee8cc1Swenshuai.xi MS_U32 channel_mapping_mask_C_L_R, channel_mapping_mask_Ls_Rs =0x00;
3232*53ee8cc1Swenshuai.xi channel_mapping_mask_Ls_Rs = (channel_mapping&(ACMOD_CH_MASK_LS|ACMOD_CH_MASK_RS));
3233*53ee8cc1Swenshuai.xi channel_mapping_mask_C_L_R = (channel_mapping&(ACMOD_CH_MASK_C|ACMOD_CH_MASK_L|ACMOD_CH_MASK_R));
3234*53ee8cc1Swenshuai.xi
3235*53ee8cc1Swenshuai.xi if(channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_C|ACMOD_CH_MASK_L|ACMOD_CH_MASK_R))
3236*53ee8cc1Swenshuai.xi {
3237*53ee8cc1Swenshuai.xi if(channel_mapping_mask_Ls_Rs == (ACMOD_CH_MASK_LS|ACMOD_CH_MASK_RS))
3238*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_3_2_MODE;
3239*53ee8cc1Swenshuai.xi else if(channel_mapping_mask_Ls_Rs == ACMOD_CH_MASK_NULL)
3240*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_3_0_MODE;
3241*53ee8cc1Swenshuai.xi else
3242*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_3_1_MODE;
3243*53ee8cc1Swenshuai.xi }
3244*53ee8cc1Swenshuai.xi else if((channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_C|ACMOD_CH_MASK_L))||(channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_L|ACMOD_CH_MASK_R))
3245*53ee8cc1Swenshuai.xi ||(channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_C|ACMOD_CH_MASK_R)))
3246*53ee8cc1Swenshuai.xi {
3247*53ee8cc1Swenshuai.xi if(channel_mapping_mask_Ls_Rs == (ACMOD_CH_MASK_LS|ACMOD_CH_MASK_RS))
3248*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_2_2_MODE;
3249*53ee8cc1Swenshuai.xi else
3250*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_2_1_MODE;
3251*53ee8cc1Swenshuai.xi }
3252*53ee8cc1Swenshuai.xi else //other multi-channel case, set it to AUD_CH_MODE_3_2_MODE
3253*53ee8cc1Swenshuai.xi {
3254*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_3_2_MODE;
3255*53ee8cc1Swenshuai.xi }
3256*53ee8cc1Swenshuai.xi }
3257*53ee8cc1Swenshuai.xi break;
3258*53ee8cc1Swenshuai.xi
3259*53ee8cc1Swenshuai.xi default:
3260*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_NONE;
3261*53ee8cc1Swenshuai.xi break;
3262*53ee8cc1Swenshuai.xi }
3263*53ee8cc1Swenshuai.xi }
3264*53ee8cc1Swenshuai.xi break;
3265*53ee8cc1Swenshuai.xi
3266*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_soundmod:
3267*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_okFrmCnt:
3268*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_errFrmCnt:
3269*53ee8cc1Swenshuai.xi break;
3270*53ee8cc1Swenshuai.xi
3271*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_1ms_timeStamp:
3272*53ee8cc1Swenshuai.xi {
3273*53ee8cc1Swenshuai.xi MS_U32 pts;
3274*53ee8cc1Swenshuai.xi pts = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_CURR_PTS, ADEC2);
3275*53ee8cc1Swenshuai.xi result = pts/45;
3276*53ee8cc1Swenshuai.xi }
3277*53ee8cc1Swenshuai.xi break;
3278*53ee8cc1Swenshuai.xi
3279*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_33bit_PTS:
3280*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_CURR_PTS, ADEC2);
3281*53ee8cc1Swenshuai.xi result <<= 1;
3282*53ee8cc1Swenshuai.xi break;
3283*53ee8cc1Swenshuai.xi
3284*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_33bit_STCPTS_DIFF:
3285*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_TD, ADEC2);
3286*53ee8cc1Swenshuai.xi //sign ext
3287*53ee8cc1Swenshuai.xi result <<= 32;
3288*53ee8cc1Swenshuai.xi result >>= 31;
3289*53ee8cc1Swenshuai.xi break;
3290*53ee8cc1Swenshuai.xi
3291*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_esBuf_reqFlag:
3292*53ee8cc1Swenshuai.xi {
3293*53ee8cc1Swenshuai.xi if (HAL_AUDIO_GetPlayFileFlag(DSP_SE))
3294*53ee8cc1Swenshuai.xi result = 1;
3295*53ee8cc1Swenshuai.xi else
3296*53ee8cc1Swenshuai.xi result = 0;
3297*53ee8cc1Swenshuai.xi }
3298*53ee8cc1Swenshuai.xi break;
3299*53ee8cc1Swenshuai.xi
3300*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_DEC2_BufferAddr: //HAL_MAD2_GetBufferAddr
3301*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC2, 0) + OFFSET_ES2_DRAM_ADDR;
3302*53ee8cc1Swenshuai.xi break;
3303*53ee8cc1Swenshuai.xi
3304*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_esBuf_reqAddr:
3305*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC2, 0) + OFFSET_ES2_DRAM_ADDR + HAL_AUDIO_GetDspMadBaseAddr(DSP_SE);
3306*53ee8cc1Swenshuai.xi break;
3307*53ee8cc1Swenshuai.xi
3308*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_esBuf_reqSize:
3309*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MM_FILE_REQ_SIZE, ADEC2);
3310*53ee8cc1Swenshuai.xi break;
3311*53ee8cc1Swenshuai.xi
3312*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_DEC2_BufferSize: //HAL_MAD2_GetBufferSize
3313*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MM_FILE_REQ_SIZE, ADEC2);
3314*53ee8cc1Swenshuai.xi break;
3315*53ee8cc1Swenshuai.xi
3316*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_esBuf_currLevel:
3317*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ES_LEVEL, ADEC2);
3318*53ee8cc1Swenshuai.xi break;
3319*53ee8cc1Swenshuai.xi
3320*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_pcmBuf_currLevel:
3321*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_DEC2_MMResidualPCM: //HAL_MAD2_GetMMResidualPCM
3322*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PCM_DMX_LEVEL, ADEC2);
3323*53ee8cc1Swenshuai.xi break;
3324*53ee8cc1Swenshuai.xi
3325*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_getDecInfo1:
3326*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_getDecInfo2:
3327*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_getDecInfo3:
3328*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_getDecInfo4:
3329*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_getDecInfo5:
3330*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_getDecInfo6:
3331*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_getDecInfo7:
3332*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_getDecInfo8:
3333*53ee8cc1Swenshuai.xi //{
3334*53ee8cc1Swenshuai.xi // MS_U8 param_offset = infoType - Audio_Comm_infoType_ADEC2_getDecInfo1;
3335*53ee8cc1Swenshuai.xi // result = HAL_MAD2_Read_DSP_sram(REG_DEC2_INFO_BASE+param_offset, DSP_MEM_TYPE_DM);
3336*53ee8cc1Swenshuai.xi //}
3337*53ee8cc1Swenshuai.xi break;
3338*53ee8cc1Swenshuai.xi
3339*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC2_getDecChannelInfo:
3340*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_CHANNEL_MAPPING, ADEC2);
3341*53ee8cc1Swenshuai.xi break;
3342*53ee8cc1Swenshuai.xi
3343*53ee8cc1Swenshuai.xi /********************************************************************************
3344*53ee8cc1Swenshuai.xi * DECODER 3
3345*53ee8cc1Swenshuai.xi ********************************************************************************/
3346*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_capability:
3347*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_currAudDecStatus:
3348*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_sampleRate:
3349*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_bitRate:
3350*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_acmod:
3351*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_soundmod:
3352*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_reqDataSize:
3353*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_okFrmCnt:
3354*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_errFrmCnt:
3355*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_1ms_timeStamp:
3356*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_33bit_PTS:
3357*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_33bit_STCPTS_DIFF:
3358*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_esBuf_reqFlag:
3359*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_esBuf_reqAddr:
3360*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_esBuf_reqSize:
3361*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_esBuf_currLevel:
3362*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_pcmBuf_currLevel:
3363*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_getDecInfo1:
3364*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_getDecInfo2:
3365*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_getDecInfo3:
3366*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_getDecInfo4:
3367*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_getDecInfo5:
3368*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_getDecInfo6:
3369*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_getDecInfo7:
3370*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_getDecInfo8:
3371*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_getDecChannelInfo:
3372*53ee8cc1Swenshuai.xi break;
3373*53ee8cc1Swenshuai.xi
3374*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ReadByte:
3375*53ee8cc1Swenshuai.xi result = (MS_U64)HAL_AUDIO_AbsReadByte(g_ReadTargetAddr);
3376*53ee8cc1Swenshuai.xi break;
3377*53ee8cc1Swenshuai.xi
3378*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_getSignal_Energy:
3379*53ee8cc1Swenshuai.xi result = HAL_MAD2_Read_DSP_sram(DSP2DmAddr_dec1_signal_energy, DSP_MEM_TYPE_DM);
3380*53ee8cc1Swenshuai.xi break;
3381*53ee8cc1Swenshuai.xi
3382*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_getNR_Status:
3383*53ee8cc1Swenshuai.xi result = (HAL_AUDIO_ReadByte(S2M_MBOX_NR_STATUS)& 0x01);
3384*53ee8cc1Swenshuai.xi break;
3385*53ee8cc1Swenshuai.xi
3386*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_HDMI_Unstable_Protect:
3387*53ee8cc1Swenshuai.xi result = HAL_MAD2_Read_DSP_sram(DSP2DmAddr_hdmi_unstable_protect, DSP_MEM_TYPE_DM);
3388*53ee8cc1Swenshuai.xi break;
3389*53ee8cc1Swenshuai.xi
3390*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_HDMI_Unstable_Threshold:
3391*53ee8cc1Swenshuai.xi result = HAL_MAD2_Read_DSP_sram(DSP2DmAddr_hdmi_unstable_threshold, DSP_MEM_TYPE_DM);
3392*53ee8cc1Swenshuai.xi break;
3393*53ee8cc1Swenshuai.xi
3394*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_ADEC3_avSyncOffset:
3395*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_AVSYNC_OFFSET, ADEC2)& 0x00FFFFFF;
3396*53ee8cc1Swenshuai.xi break;
3397*53ee8cc1Swenshuai.xi
3398*53ee8cc1Swenshuai.xi case Audio_comm_infoType_Get_audio_crash_status:
3399*53ee8cc1Swenshuai.xi result = g_AudioVars2->g_u8AudioCrashFlag;
3400*53ee8cc1Swenshuai.xi break;
3401*53ee8cc1Swenshuai.xi
3402*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Get_Parser_Architecture:
3403*53ee8cc1Swenshuai.xi result = (MS_U64)E_AUD_4_PARSER_type2; // 4 AFIFO & 4 audio parser arch
3404*53ee8cc1Swenshuai.xi break;
3405*53ee8cc1Swenshuai.xi
3406*53ee8cc1Swenshuai.xi case Audio_comm_infoType_Get_Main_Input_Type:
3407*53ee8cc1Swenshuai.xi result = g_AudioVars2->eMainAudioSource;
3408*53ee8cc1Swenshuai.xi break;
3409*53ee8cc1Swenshuai.xi
3410*53ee8cc1Swenshuai.xi case Audio_comm_infoType_Get_Sub_Input_Type:
3411*53ee8cc1Swenshuai.xi result = g_AudioVars2->eSubAudioSource;
3412*53ee8cc1Swenshuai.xi break;
3413*53ee8cc1Swenshuai.xi
3414*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_LFE_Channel_Info:
3415*53ee8cc1Swenshuai.xi {
3416*53ee8cc1Swenshuai.xi MS_U32 channel_mapping = 0x0;
3417*53ee8cc1Swenshuai.xi channel_mapping = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_CHANNEL_MAPPING, ADEC1);
3418*53ee8cc1Swenshuai.xi if ((channel_mapping&ACMOD_CH_MASK_LFE)==0x20)
3419*53ee8cc1Swenshuai.xi {
3420*53ee8cc1Swenshuai.xi result = 0x1; // 1:LFE 0:no LFE
3421*53ee8cc1Swenshuai.xi }
3422*53ee8cc1Swenshuai.xi else
3423*53ee8cc1Swenshuai.xi {
3424*53ee8cc1Swenshuai.xi result = 0x0; // 1:LFE 0:no LFE
3425*53ee8cc1Swenshuai.xi }
3426*53ee8cc1Swenshuai.xi break;
3427*53ee8cc1Swenshuai.xi }
3428*53ee8cc1Swenshuai.xi
3429*53ee8cc1Swenshuai.xi case Audio_Comm_infoType_Get_AD_Cabability:
3430*53ee8cc1Swenshuai.xi {
3431*53ee8cc1Swenshuai.xi #if AUDIO_AD_SUPPORT
3432*53ee8cc1Swenshuai.xi result = 1;
3433*53ee8cc1Swenshuai.xi #endif
3434*53ee8cc1Swenshuai.xi break;
3435*53ee8cc1Swenshuai.xi }
3436*53ee8cc1Swenshuai.xi
3437*53ee8cc1Swenshuai.xi /* not support cmd */
3438*53ee8cc1Swenshuai.xi default:
3439*53ee8cc1Swenshuai.xi printf("%s: cmd not Supported\n", __FUNCTION__ );
3440*53ee8cc1Swenshuai.xi break;
3441*53ee8cc1Swenshuai.xi }
3442*53ee8cc1Swenshuai.xi
3443*53ee8cc1Swenshuai.xi return result;
3444*53ee8cc1Swenshuai.xi }
3445*53ee8cc1Swenshuai.xi
3446*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
3447*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetMpegInfo()
3448*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine set different paramter to mpeg decoder
3449*53ee8cc1Swenshuai.xi /// @param <IN> \b Audio_MPEG_infoType : mpeg audio parameter type
3450*53ee8cc1Swenshuai.xi /// @param <IN> \b MS_U32 : common mpeg parameter 1
3451*53ee8cc1Swenshuai.xi /// @param <IN> \b MS_U32 : common mpeg parameter 2
3452*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
3453*53ee8cc1Swenshuai.xi /// @param <RET> \b MS_BOOL : TRUE ( SUCCESS ) / FALSE (FAIL)
3454*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
3455*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetMpegInfo(Audio_MPEG_infoType infoType,MS_VIRT param1,MS_VIRT param2)3456*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_SetMpegInfo( Audio_MPEG_infoType infoType, MS_VIRT param1, MS_VIRT param2 )
3457*53ee8cc1Swenshuai.xi {
3458*53ee8cc1Swenshuai.xi switch(infoType)
3459*53ee8cc1Swenshuai.xi {
3460*53ee8cc1Swenshuai.xi case Audio_MPEG_infoType_SoundMode: //HAL_MAD_MPEG_SetSoundMode
3461*53ee8cc1Swenshuai.xi {
3462*53ee8cc1Swenshuai.xi MS_U8 value = 0; //default LL mode
3463*53ee8cc1Swenshuai.xi
3464*53ee8cc1Swenshuai.xi switch((AUD_MPEG_SOUNDMODE)param1)
3465*53ee8cc1Swenshuai.xi {
3466*53ee8cc1Swenshuai.xi case AUD_MPEG_SOUNDMODE_LL: value = 0x4; break;
3467*53ee8cc1Swenshuai.xi case AUD_MPEG_SOUNDMODE_RR: value = 0x8; break;
3468*53ee8cc1Swenshuai.xi case AUD_MPEG_SOUNDMODE_LR: value = 0x0; break;
3469*53ee8cc1Swenshuai.xi case AUD_MPEG_SOUNDMODE_MIX_LR: value = 0xC; break;
3470*53ee8cc1Swenshuai.xi default: value = 0x0; break;
3471*53ee8cc1Swenshuai.xi }
3472*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MPEG_SOUNDMODE, ADEC1, (MS_U32)value, 0);
3473*53ee8cc1Swenshuai.xi }
3474*53ee8cc1Swenshuai.xi break;
3475*53ee8cc1Swenshuai.xi
3476*53ee8cc1Swenshuai.xi case Audio_MPEG_infoType_MMFileSize: //HAL_MAD_MPEG_SetFileSize
3477*53ee8cc1Swenshuai.xi HAL_MAD_SetCommInfo(Audio_Comm_infoType_MMFileSize, param1, param2);
3478*53ee8cc1Swenshuai.xi break;
3479*53ee8cc1Swenshuai.xi
3480*53ee8cc1Swenshuai.xi case Audio_MPEG_DTV_AVSYNC_OFFSET:
3481*53ee8cc1Swenshuai.xi if ((param1<DELAY_LOWER_LIMIT)||(param1>DELAY_UPPER_LIMIT)) //delay offset range from 30ms ~ 1050ms
3482*53ee8cc1Swenshuai.xi {
3483*53ee8cc1Swenshuai.xi g_mpeg_delay = MPG_AV_DEFAULT_DELAY;
3484*53ee8cc1Swenshuai.xi }
3485*53ee8cc1Swenshuai.xi else
3486*53ee8cc1Swenshuai.xi {
3487*53ee8cc1Swenshuai.xi g_mpeg_delay = param1;
3488*53ee8cc1Swenshuai.xi }
3489*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MPG_AVOFFSET, ADEC1, g_mpeg_delay, 0);
3490*53ee8cc1Swenshuai.xi break;
3491*53ee8cc1Swenshuai.xi
3492*53ee8cc1Swenshuai.xi case Audio_MPEG_DTV_AVSYNC_DISABLE_SETTING:
3493*53ee8cc1Swenshuai.xi g_mpeg_delay = MPG_AV_DEFAULT_DELAY;
3494*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MPG_AVOFFSET, ADEC1, g_mpeg_delay, 0);
3495*53ee8cc1Swenshuai.xi break;
3496*53ee8cc1Swenshuai.xi
3497*53ee8cc1Swenshuai.xi default:
3498*53ee8cc1Swenshuai.xi #if defined (__aarch64__)
3499*53ee8cc1Swenshuai.xi printf("%s: infoType[0x%x,0x%08lx,0x%08lx] not Supported\n",__FUNCTION__, infoType, param1, param2);
3500*53ee8cc1Swenshuai.xi #else
3501*53ee8cc1Swenshuai.xi printf("%s: infoType[0x%x,0x%08x,0x%08x] not Supported\n",__FUNCTION__, infoType, (unsigned int)param1, (unsigned int)param2);
3502*53ee8cc1Swenshuai.xi #endif
3503*53ee8cc1Swenshuai.xi break;
3504*53ee8cc1Swenshuai.xi }
3505*53ee8cc1Swenshuai.xi
3506*53ee8cc1Swenshuai.xi return TRUE;
3507*53ee8cc1Swenshuai.xi }
3508*53ee8cc1Swenshuai.xi
3509*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
3510*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetMpegInfo()
3511*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine info of mpeg decoder
3512*53ee8cc1Swenshuai.xi /// @param <IN> \b Audio_MPEG_infoType : request info type of mpeg decoder
3513*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
3514*53ee8cc1Swenshuai.xi /// @param <RET> \b MS_U32 : info type
3515*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
3516*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetMpegInfo(Audio_MPEG_infoType infoType)3517*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_GetMpegInfo( Audio_MPEG_infoType infoType )
3518*53ee8cc1Swenshuai.xi {
3519*53ee8cc1Swenshuai.xi MS_U32 result = 0;
3520*53ee8cc1Swenshuai.xi
3521*53ee8cc1Swenshuai.xi switch(infoType)
3522*53ee8cc1Swenshuai.xi {
3523*53ee8cc1Swenshuai.xi case Audio_MPEG_infoType_DecStatus: //no change
3524*53ee8cc1Swenshuai.xi if (((HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_TYPE) & adec_type_regmask) == adec_type_mpeg) && (HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_STAUS, ADEC1) & 0x0001))
3525*53ee8cc1Swenshuai.xi result = 1;
3526*53ee8cc1Swenshuai.xi else
3527*53ee8cc1Swenshuai.xi result = 0;
3528*53ee8cc1Swenshuai.xi break;
3529*53ee8cc1Swenshuai.xi
3530*53ee8cc1Swenshuai.xi case Audio_MPEG_infoType_BitRate: //HAL_MAD_MPEG_GetBitRate
3531*53ee8cc1Swenshuai.xi result = HAL_MAD_MPEG_GetBitRate();
3532*53ee8cc1Swenshuai.xi break;
3533*53ee8cc1Swenshuai.xi
3534*53ee8cc1Swenshuai.xi case Audio_MPEG_infoType_FrameNum: //HAL_MAD_MPEG_GetframeNum
3535*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_OK_FRMCNT, ADEC1);
3536*53ee8cc1Swenshuai.xi break;
3537*53ee8cc1Swenshuai.xi
3538*53ee8cc1Swenshuai.xi case Audio_MPEG_infoType_Layer: //HAL_MAD_MPEG_GetLayer
3539*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MPEG_LAYER, ADEC1);
3540*53ee8cc1Swenshuai.xi break;
3541*53ee8cc1Swenshuai.xi
3542*53ee8cc1Swenshuai.xi case Audio_MPEG_infoType_SampleRate: //HAL_MAD_MPEG_GetSampleRate
3543*53ee8cc1Swenshuai.xi result = HAL_MAD_MPEG_GetSampleRate();
3544*53ee8cc1Swenshuai.xi break;
3545*53ee8cc1Swenshuai.xi
3546*53ee8cc1Swenshuai.xi case Audio_MPEG_infoType_stereoMode: //HAL_MAD_MPEG_GetSoundMode
3547*53ee8cc1Swenshuai.xi result = HAL_MAD_MPEG_GetSoundMode();
3548*53ee8cc1Swenshuai.xi break;
3549*53ee8cc1Swenshuai.xi
3550*53ee8cc1Swenshuai.xi case Audio_MPEG_infoType_Header: //HAL_MAD_MPEG_GetHeaderInfo
3551*53ee8cc1Swenshuai.xi result = HAL_MAD_MPEG_GetHeaderInfo();
3552*53ee8cc1Swenshuai.xi break;
3553*53ee8cc1Swenshuai.xi
3554*53ee8cc1Swenshuai.xi default:
3555*53ee8cc1Swenshuai.xi printf("%s: infoType[%x] not Supported\n",__FUNCTION__, infoType);
3556*53ee8cc1Swenshuai.xi break;
3557*53ee8cc1Swenshuai.xi }
3558*53ee8cc1Swenshuai.xi
3559*53ee8cc1Swenshuai.xi return result;
3560*53ee8cc1Swenshuai.xi }
3561*53ee8cc1Swenshuai.xi
3562*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
3563*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetWmaInfo()
3564*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine set different paramter to wma decoder
3565*53ee8cc1Swenshuai.xi /// @param <IN> \b Audio_WMA_infoType : wma audio parameter type
3566*53ee8cc1Swenshuai.xi /// @param <IN> \b MS_U32 : common wma parameter 1
3567*53ee8cc1Swenshuai.xi /// @param <IN> \b MS_U32 : common wma parameter 2
3568*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
3569*53ee8cc1Swenshuai.xi /// @param <RET> \b MS_BOOL : TRUE ( SUCCESS ) / FALSE (FAIL)
3570*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
3571*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetWmaInfo(Audio_WMA_infoType infoType,MS_VIRT param1,MS_VIRT param2)3572*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_SetWmaInfo( Audio_WMA_infoType infoType, MS_VIRT param1, MS_VIRT param2 )
3573*53ee8cc1Swenshuai.xi {
3574*53ee8cc1Swenshuai.xi switch(infoType)
3575*53ee8cc1Swenshuai.xi {
3576*53ee8cc1Swenshuai.xi case Audio_WMA_infoType_Asf_Param:
3577*53ee8cc1Swenshuai.xi HAL_MAD_WMA_SetASFParm((WMA_ASF_PARMTYPE)param1, param2); //HAL_MAD_WMA_SetASFParm
3578*53ee8cc1Swenshuai.xi break;
3579*53ee8cc1Swenshuai.xi
3580*53ee8cc1Swenshuai.xi case Audio_WMA_infoType_FFSpeed: //HAL_MAD_WMA_SetFastFowardSpeed
3581*53ee8cc1Swenshuai.xi printf("Currently, it is not used\n");
3582*53ee8cc1Swenshuai.xi break;
3583*53ee8cc1Swenshuai.xi
3584*53ee8cc1Swenshuai.xi case Audio_WMA_infoType_MMFileSize:
3585*53ee8cc1Swenshuai.xi HAL_MAD_SetCommInfo(Audio_Comm_infoType_MMFileSize, param1, param2);
3586*53ee8cc1Swenshuai.xi break;
3587*53ee8cc1Swenshuai.xi
3588*53ee8cc1Swenshuai.xi default:
3589*53ee8cc1Swenshuai.xi #if defined (__aarch64__)
3590*53ee8cc1Swenshuai.xi printf("%s: infoType[%x,%08lx,%08lx] not Supported\n",__FUNCTION__, infoType, param1, param2);
3591*53ee8cc1Swenshuai.xi #else
3592*53ee8cc1Swenshuai.xi printf("%s: infoType[%x,%08x,%08x] not Supported\n",__FUNCTION__, infoType, (unsigned int)param1, (unsigned int)param2);
3593*53ee8cc1Swenshuai.xi #endif
3594*53ee8cc1Swenshuai.xi break;
3595*53ee8cc1Swenshuai.xi }
3596*53ee8cc1Swenshuai.xi
3597*53ee8cc1Swenshuai.xi return TRUE;
3598*53ee8cc1Swenshuai.xi }
3599*53ee8cc1Swenshuai.xi
3600*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
3601*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetWmaInfo()
3602*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine info of wma decoder
3603*53ee8cc1Swenshuai.xi /// @param <IN> \b Audio_WMA_infoType : request info type of wma decoder
3604*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
3605*53ee8cc1Swenshuai.xi /// @param <RET> \b MS_U32 : info type
3606*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
3607*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetWmaInfo(Audio_WMA_infoType infoType)3608*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_GetWmaInfo( Audio_WMA_infoType infoType )
3609*53ee8cc1Swenshuai.xi {
3610*53ee8cc1Swenshuai.xi MS_U32 result = 0;
3611*53ee8cc1Swenshuai.xi
3612*53ee8cc1Swenshuai.xi switch(infoType)
3613*53ee8cc1Swenshuai.xi {
3614*53ee8cc1Swenshuai.xi case Audio_WMA_infoType_BitRate: //HAL_MAD_WMA_GetBitRate
3615*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_BIT_RATE, ADEC1);
3616*53ee8cc1Swenshuai.xi break;
3617*53ee8cc1Swenshuai.xi
3618*53ee8cc1Swenshuai.xi case Audio_WMA_infoType_SampleRate: //HAL_MAD_WMA_GetSampleRate
3619*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_SMP_RATE, ADEC1);
3620*53ee8cc1Swenshuai.xi break;
3621*53ee8cc1Swenshuai.xi
3622*53ee8cc1Swenshuai.xi default:
3623*53ee8cc1Swenshuai.xi printf("%s: infoType[%x] not Supported\n",__FUNCTION__, infoType);
3624*53ee8cc1Swenshuai.xi break;
3625*53ee8cc1Swenshuai.xi }
3626*53ee8cc1Swenshuai.xi
3627*53ee8cc1Swenshuai.xi return result;
3628*53ee8cc1Swenshuai.xi }
3629*53ee8cc1Swenshuai.xi
3630*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
3631*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetAC3PInfo()
3632*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine set different parameter to ac3+ decoder
3633*53ee8cc1Swenshuai.xi /// @param <IN> \b Audio_AC3P_infoType : AC3+ parameter type
3634*53ee8cc1Swenshuai.xi /// @param <IN> \b MS_U32 : AC3+ parameter 1
3635*53ee8cc1Swenshuai.xi /// @param <IN> \b MS_U32 : AC3+ parameter 2
3636*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
3637*53ee8cc1Swenshuai.xi /// @param <RET> \b MS_BOOL : TRUE ( SUCCESS ) / FALSE (FAIL)
3638*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
3639*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetAC3PInfo(Audio_AC3P_infoType infoType,MS_VIRT param1,MS_VIRT param2)3640*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_SetAC3PInfo( Audio_AC3P_infoType infoType, MS_VIRT param1, MS_VIRT param2 )
3641*53ee8cc1Swenshuai.xi {
3642*53ee8cc1Swenshuai.xi HALMAD_CHECK_SHM_INIT;
3643*53ee8cc1Swenshuai.xi
3644*53ee8cc1Swenshuai.xi switch(infoType)
3645*53ee8cc1Swenshuai.xi {
3646*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_DownmixMode: //HAL_MAD_SetDolbyDownmixMode
3647*53ee8cc1Swenshuai.xi if((DOLBY_DOWNMIX_MODE)param1 == DOLBY_DOWNMIX_MODE_LORO)
3648*53ee8cc1Swenshuai.xi {
3649*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DMX_MODE, ADEC1, 1, 0);
3650*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DMX_MODE, ADEC2, 1, 0);
3651*53ee8cc1Swenshuai.xi }
3652*53ee8cc1Swenshuai.xi else if ((DOLBY_DOWNMIX_MODE)param1 == DOLBY_DOWNMIX_MODE_LTRT)
3653*53ee8cc1Swenshuai.xi {
3654*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DMX_MODE, ADEC1, 0, 0);
3655*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DMX_MODE, ADEC2, 0, 0);
3656*53ee8cc1Swenshuai.xi }
3657*53ee8cc1Swenshuai.xi else
3658*53ee8cc1Swenshuai.xi {
3659*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DMX_MODE, ADEC1, 2, 0);
3660*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DMX_MODE, ADEC2, 2, 0);
3661*53ee8cc1Swenshuai.xi }
3662*53ee8cc1Swenshuai.xi break;
3663*53ee8cc1Swenshuai.xi
3664*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_DrcMode: //HAL_MAD_SetDolbyDrcMode
3665*53ee8cc1Swenshuai.xi if((DOLBY_DRC_MODE)param1 == RF_MODE)
3666*53ee8cc1Swenshuai.xi {
3667*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_RF_MODE, ADEC1, 1, 0);
3668*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_RF_MODE, ADEC2, 1, 0);
3669*53ee8cc1Swenshuai.xi }
3670*53ee8cc1Swenshuai.xi else
3671*53ee8cc1Swenshuai.xi {
3672*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_RF_MODE, ADEC1, 0, 0);
3673*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_RF_MODE, ADEC2, 0, 0);
3674*53ee8cc1Swenshuai.xi }
3675*53ee8cc1Swenshuai.xi break;
3676*53ee8cc1Swenshuai.xi
3677*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_MMFileSize: //HAL_MAD_ac3p_setFileSize
3678*53ee8cc1Swenshuai.xi HAL_MAD_SetCommInfo(Audio_Comm_infoType_MMFileSize, param1, param2);
3679*53ee8cc1Swenshuai.xi break;
3680*53ee8cc1Swenshuai.xi
3681*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_syncSTC_in_mmTs:
3682*53ee8cc1Swenshuai.xi HAL_MAD_SetCommInfo(Audio_Comm_infoType_syncSTC_in_mmTs, param1, param2);
3683*53ee8cc1Swenshuai.xi break;
3684*53ee8cc1Swenshuai.xi
3685*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_hdmiTxBypass_enable:
3686*53ee8cc1Swenshuai.xi if (param1 > 1)
3687*53ee8cc1Swenshuai.xi {
3688*53ee8cc1Swenshuai.xi #if defined (CONFIG_UTOPIA_ANDROID_L)
3689*53ee8cc1Swenshuai.xi printf("%s: param1[%x,%08x,%08x] out of range\n",__FUNCTION__, infoType, param1, param2);
3690*53ee8cc1Swenshuai.xi #else
3691*53ee8cc1Swenshuai.xi printf("%s: param1[%x,%x,%x] out of range\n",__FUNCTION__, infoType, (unsigned int)param1, (unsigned int)param2);
3692*53ee8cc1Swenshuai.xi #endif
3693*53ee8cc1Swenshuai.xi }
3694*53ee8cc1Swenshuai.xi
3695*53ee8cc1Swenshuai.xi if( param2 == 0)
3696*53ee8cc1Swenshuai.xi {
3697*53ee8cc1Swenshuai.xi if(g_DDPBypassenable_1 != param1)
3698*53ee8cc1Swenshuai.xi {
3699*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DDP_HDMI_BYPASS, param2, param1, 0);
3700*53ee8cc1Swenshuai.xi HAL_AUDIO_DecWriteMaskByte(REG_M2D_MAILBOX_SPDIF_CTRL+1, 0x40, (param1 << 6));
3701*53ee8cc1Swenshuai.xi g_DDPBypassenable_1 = param1;
3702*53ee8cc1Swenshuai.xi }
3703*53ee8cc1Swenshuai.xi }
3704*53ee8cc1Swenshuai.xi else
3705*53ee8cc1Swenshuai.xi {
3706*53ee8cc1Swenshuai.xi if(g_DDPBypassenable_2 != param1)
3707*53ee8cc1Swenshuai.xi {
3708*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DDP_HDMI_BYPASS, param2, param1, 0);
3709*53ee8cc1Swenshuai.xi HAL_AUDIO_DecWriteMaskByte(REG_M2D_MAILBOX_SPDIF_CTRL+1, 0x40, (param1 << 6));
3710*53ee8cc1Swenshuai.xi g_DDPBypassenable_2 = param1;
3711*53ee8cc1Swenshuai.xi }
3712*53ee8cc1Swenshuai.xi }
3713*53ee8cc1Swenshuai.xi break;
3714*53ee8cc1Swenshuai.xi
3715*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_BYTESWAP:
3716*53ee8cc1Swenshuai.xi if(param1 == 1) {
3717*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskByte(0x2C48, 0x10, 0x10);
3718*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskByte(0x2C49, 0x05, 0x05);
3719*53ee8cc1Swenshuai.xi }else{
3720*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskByte(0x2C48, 0x10, 0x00);
3721*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteMaskByte(0x2C49, 0x05, 0x00);
3722*53ee8cc1Swenshuai.xi }
3723*53ee8cc1Swenshuai.xi break;
3724*53ee8cc1Swenshuai.xi
3725*53ee8cc1Swenshuai.xi case Audio_AC3P_DTV_AVSYNC_OFFSET:
3726*53ee8cc1Swenshuai.xi if ((param1<DELAY_LOWER_LIMIT)||(param1>DELAY_UPPER_LIMIT)) //delay offset range from 30ms ~ 1050ms
3727*53ee8cc1Swenshuai.xi {
3728*53ee8cc1Swenshuai.xi g_ac3_delay = AC3_AV_DEFAULT_DELAY;
3729*53ee8cc1Swenshuai.xi }
3730*53ee8cc1Swenshuai.xi else
3731*53ee8cc1Swenshuai.xi {
3732*53ee8cc1Swenshuai.xi g_ac3_delay = param1;
3733*53ee8cc1Swenshuai.xi }
3734*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_AC3_AVOFFSET, ADEC1, g_ac3_delay, 0);
3735*53ee8cc1Swenshuai.xi break;
3736*53ee8cc1Swenshuai.xi
3737*53ee8cc1Swenshuai.xi case Audio_AC3P_DTV_AVSYNC_DISABLE_SETTING:
3738*53ee8cc1Swenshuai.xi g_ac3_delay = AC3_AV_DEFAULT_DELAY;
3739*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_AC3_AVOFFSET, ADEC1, g_ac3_delay, 0);
3740*53ee8cc1Swenshuai.xi break;
3741*53ee8cc1Swenshuai.xi
3742*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_hdmiAC3inSE:
3743*53ee8cc1Swenshuai.xi if(param1 == TRUE)
3744*53ee8cc1Swenshuai.xi {
3745*53ee8cc1Swenshuai.xi FLAG_HDMI_AC3_IN_SE = TRUE;
3746*53ee8cc1Swenshuai.xi }
3747*53ee8cc1Swenshuai.xi else
3748*53ee8cc1Swenshuai.xi {
3749*53ee8cc1Swenshuai.xi FLAG_HDMI_AC3_IN_SE = FALSE;
3750*53ee8cc1Swenshuai.xi }
3751*53ee8cc1Swenshuai.xi break;
3752*53ee8cc1Swenshuai.xi
3753*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_enableDolbyBulletin11:
3754*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_LoudnessMatching:
3755*53ee8cc1Swenshuai.xi if(param1)
3756*53ee8cc1Swenshuai.xi {
3757*53ee8cc1Swenshuai.xi HAL_AUDIO_DecWriteMaskByte(REG_MB_DOLBY_LOUDNESS_INFO+1, 0x80, 0x80);
3758*53ee8cc1Swenshuai.xi g_AudioVars2->g_dolbyLoudness_Enable = TRUE;
3759*53ee8cc1Swenshuai.xi }
3760*53ee8cc1Swenshuai.xi else
3761*53ee8cc1Swenshuai.xi {
3762*53ee8cc1Swenshuai.xi HAL_AUDIO_DecWriteMaskByte(REG_MB_DOLBY_LOUDNESS_INFO+1, 0x80, 0x00);
3763*53ee8cc1Swenshuai.xi g_AudioVars2->g_dolbyLoudness_Enable = FALSE;
3764*53ee8cc1Swenshuai.xi }
3765*53ee8cc1Swenshuai.xi
3766*53ee8cc1Swenshuai.xi if ((g_AudioVars2->AudioSystemInfo.dtv_system == AUDIO_DTV_ATSC) || (g_AudioVars2->AudioSystemInfo.dtv_system == AUDIO_DTV_DMBT))
3767*53ee8cc1Swenshuai.xi {
3768*53ee8cc1Swenshuai.xi HAL_AUDIO_DecWriteMaskByte(REG_MB_DOLBY_LOUDNESS_INFO+1, 0x60, 0x40);
3769*53ee8cc1Swenshuai.xi g_AudioVars2->g_dolbyLoudness_DTVsystem = ATSC_MODE;
3770*53ee8cc1Swenshuai.xi }
3771*53ee8cc1Swenshuai.xi else if(g_AudioVars2->AudioSystemInfo.dtv_system == AUDIO_DTV_DVB)
3772*53ee8cc1Swenshuai.xi {
3773*53ee8cc1Swenshuai.xi HAL_AUDIO_DecWriteMaskByte(REG_MB_DOLBY_LOUDNESS_INFO+1, 0x60, 0x00);
3774*53ee8cc1Swenshuai.xi g_AudioVars2->g_dolbyLoudness_DTVsystem = DVB_MODE;
3775*53ee8cc1Swenshuai.xi }
3776*53ee8cc1Swenshuai.xi else
3777*53ee8cc1Swenshuai.xi {
3778*53ee8cc1Swenshuai.xi HAL_AUDIO_DecWriteMaskByte(REG_MB_DOLBY_LOUDNESS_INFO+1, 0x60, 0x20);
3779*53ee8cc1Swenshuai.xi g_AudioVars2->g_dolbyLoudness_DTVsystem = OTHER_MODE;
3780*53ee8cc1Swenshuai.xi }
3781*53ee8cc1Swenshuai.xi
3782*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_RFSIGNAL_TYPE, ADEC1, g_AudioVars2->g_dolbyLoudness_DTVsystem, 0);
3783*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_TB11_ENABLE, ADEC1, g_AudioVars2->g_dolbyLoudness_Enable, 0);
3784*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_RFSIGNAL_TYPE, ADEC2, g_AudioVars2->g_dolbyLoudness_DTVsystem, 0);
3785*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_TB11_ENABLE, ADEC2, g_AudioVars2->g_dolbyLoudness_Enable, 0);
3786*53ee8cc1Swenshuai.xi break;
3787*53ee8cc1Swenshuai.xi
3788*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_Drc_HighCutScale:
3789*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_HIGH_CUT, ADEC1, param1, 0);
3790*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_HIGH_CUT, ADEC2, param1, 0);
3791*53ee8cc1Swenshuai.xi break;
3792*53ee8cc1Swenshuai.xi
3793*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_Drc_LowBootScale:
3794*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_LOW_BOOST, ADEC1, param1, 0);
3795*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_LOW_BOOST, ADEC2, param1, 0);
3796*53ee8cc1Swenshuai.xi break;
3797*53ee8cc1Swenshuai.xi
3798*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_Mixer_Balance:
3799*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_MIXER_BALANCE, ADEC1, param1, 0);
3800*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_MIXER_BALANCE, ADEC2, param1, 0);
3801*53ee8cc1Swenshuai.xi break;
3802*53ee8cc1Swenshuai.xi
3803*53ee8cc1Swenshuai.xi default:
3804*53ee8cc1Swenshuai.xi #if defined (__aarch64__)
3805*53ee8cc1Swenshuai.xi printf("%s: infoType[%x,%08lx,%08lx] not Supported\n",__FUNCTION__, infoType, param1, param2);
3806*53ee8cc1Swenshuai.xi #else
3807*53ee8cc1Swenshuai.xi printf("%s: infoType[%x,%08x,%08x] not Supported\n",__FUNCTION__, infoType, (unsigned int)param1, (unsigned int)param2);
3808*53ee8cc1Swenshuai.xi #endif
3809*53ee8cc1Swenshuai.xi break;
3810*53ee8cc1Swenshuai.xi }
3811*53ee8cc1Swenshuai.xi
3812*53ee8cc1Swenshuai.xi return TRUE;
3813*53ee8cc1Swenshuai.xi }
3814*53ee8cc1Swenshuai.xi
3815*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
3816*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetAC3PInfo()
3817*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine return info type of ac3+ decoder
3818*53ee8cc1Swenshuai.xi /// @param <IN> \b Audio_AC3P_infoType : AC3+ parameter type
3819*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
3820*53ee8cc1Swenshuai.xi /// @param <RET> \b MS_U32 : AC3+ paramter info
3821*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
3822*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetAC3PInfo(Audio_AC3P_infoType infoType)3823*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_GetAC3PInfo( Audio_AC3P_infoType infoType )
3824*53ee8cc1Swenshuai.xi {
3825*53ee8cc1Swenshuai.xi MS_U32 result = 0;
3826*53ee8cc1Swenshuai.xi HALMAD_CHECK_SHM_INIT;
3827*53ee8cc1Swenshuai.xi
3828*53ee8cc1Swenshuai.xi switch(infoType)
3829*53ee8cc1Swenshuai.xi {
3830*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_DecStatus:
3831*53ee8cc1Swenshuai.xi if ((((HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_TYPE) & adec_type_regmask) == adec_type_ac3) ||
3832*53ee8cc1Swenshuai.xi ((HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_TYPE) & adec_type_regmask) == adec_type_ac3p)) &&
3833*53ee8cc1Swenshuai.xi (HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_STAUS, ADEC1)&0x0001))
3834*53ee8cc1Swenshuai.xi result = 1;
3835*53ee8cc1Swenshuai.xi else
3836*53ee8cc1Swenshuai.xi result = 0;
3837*53ee8cc1Swenshuai.xi break;
3838*53ee8cc1Swenshuai.xi
3839*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_SampleRate:
3840*53ee8cc1Swenshuai.xi {
3841*53ee8cc1Swenshuai.xi MS_U32 SMP_RATE = 0;
3842*53ee8cc1Swenshuai.xi
3843*53ee8cc1Swenshuai.xi SMP_RATE = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_SMP_RATE, ADEC1); //DD+
3844*53ee8cc1Swenshuai.xi switch(SMP_RATE)
3845*53ee8cc1Swenshuai.xi {
3846*53ee8cc1Swenshuai.xi case 44100: result = SAMPLE_RATE_44100; break;
3847*53ee8cc1Swenshuai.xi case 32000: result = SAMPLE_RATE_32000; break;
3848*53ee8cc1Swenshuai.xi default:
3849*53ee8cc1Swenshuai.xi case 48000: result = SAMPLE_RATE_48000; break;
3850*53ee8cc1Swenshuai.xi }
3851*53ee8cc1Swenshuai.xi }
3852*53ee8cc1Swenshuai.xi break;
3853*53ee8cc1Swenshuai.xi
3854*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_BitRate: //unit : kbps
3855*53ee8cc1Swenshuai.xi {
3856*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_BIT_RATE, ADEC1); //DD+
3857*53ee8cc1Swenshuai.xi }
3858*53ee8cc1Swenshuai.xi break;
3859*53ee8cc1Swenshuai.xi
3860*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_Acmod:
3861*53ee8cc1Swenshuai.xi result = HAL_MAD_GetCommInfo(Audio_Comm_infoType_ADEC1_acmod);
3862*53ee8cc1Swenshuai.xi break;
3863*53ee8cc1Swenshuai.xi
3864*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_DrcMode:
3865*53ee8cc1Swenshuai.xi if (HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_DOLBY_RF_MODE, ADEC1, 0) == 1)
3866*53ee8cc1Swenshuai.xi result = RF_MODE;
3867*53ee8cc1Swenshuai.xi else
3868*53ee8cc1Swenshuai.xi result = LINE_MODE;
3869*53ee8cc1Swenshuai.xi break;
3870*53ee8cc1Swenshuai.xi
3871*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_DownmixMode:
3872*53ee8cc1Swenshuai.xi if (HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_DOLBY_DMX_MODE, ADEC1, 0) == 1)
3873*53ee8cc1Swenshuai.xi result = DOLBY_DOWNMIX_MODE_LORO;
3874*53ee8cc1Swenshuai.xi else
3875*53ee8cc1Swenshuai.xi result = DOLBY_DOWNMIX_MODE_LTRT;
3876*53ee8cc1Swenshuai.xi break;
3877*53ee8cc1Swenshuai.xi
3878*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_AC3Type:
3879*53ee8cc1Swenshuai.xi if ((((HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_TYPE) & adec_type_regmask) == adec_type_ac3) ||
3880*53ee8cc1Swenshuai.xi ((HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_TYPE) & adec_type_regmask) == adec_type_ac3p)) &&
3881*53ee8cc1Swenshuai.xi (HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_STAUS, ADEC1) & 0x0001))
3882*53ee8cc1Swenshuai.xi {
3883*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DOLBY_DEC_TYPE, ADEC1);
3884*53ee8cc1Swenshuai.xi result += 1;
3885*53ee8cc1Swenshuai.xi }
3886*53ee8cc1Swenshuai.xi else
3887*53ee8cc1Swenshuai.xi {
3888*53ee8cc1Swenshuai.xi result = 0;
3889*53ee8cc1Swenshuai.xi }
3890*53ee8cc1Swenshuai.xi break;
3891*53ee8cc1Swenshuai.xi
3892*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_FrameSize:
3893*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DOLBY_FRAME_SIZE, ADEC1);
3894*53ee8cc1Swenshuai.xi break;
3895*53ee8cc1Swenshuai.xi
3896*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_BSMode:
3897*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DOLBY_BS_MODE, ADEC1);
3898*53ee8cc1Swenshuai.xi break;
3899*53ee8cc1Swenshuai.xi
3900*53ee8cc1Swenshuai.xi
3901*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_hdmiAC3inSE:
3902*53ee8cc1Swenshuai.xi if(FLAG_HDMI_AC3_IN_SE == TRUE)
3903*53ee8cc1Swenshuai.xi {
3904*53ee8cc1Swenshuai.xi result = 1;
3905*53ee8cc1Swenshuai.xi }
3906*53ee8cc1Swenshuai.xi else
3907*53ee8cc1Swenshuai.xi {
3908*53ee8cc1Swenshuai.xi result = 0;
3909*53ee8cc1Swenshuai.xi }
3910*53ee8cc1Swenshuai.xi break;
3911*53ee8cc1Swenshuai.xi
3912*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_hdmi_in_support_DDP:
3913*53ee8cc1Swenshuai.xi result = 1;
3914*53ee8cc1Swenshuai.xi break;
3915*53ee8cc1Swenshuai.xi
3916*53ee8cc1Swenshuai.xi case Audio_AC3P_infoType_ATMOS_support:
3917*53ee8cc1Swenshuai.xi result = ((g_AudioVars2->stDigitalOutCodecCapability[0][CODEC_DDP].support_SAD_byte3) & 0x1);
3918*53ee8cc1Swenshuai.xi break;
3919*53ee8cc1Swenshuai.xi
3920*53ee8cc1Swenshuai.xi default:
3921*53ee8cc1Swenshuai.xi printf("%s: infoType[%x] not Supported\n",__FUNCTION__, infoType);
3922*53ee8cc1Swenshuai.xi break;
3923*53ee8cc1Swenshuai.xi }
3924*53ee8cc1Swenshuai.xi
3925*53ee8cc1Swenshuai.xi return result;
3926*53ee8cc1Swenshuai.xi }
3927*53ee8cc1Swenshuai.xi
3928*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
3929*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetAC3Info()
3930*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine set different paramter to ac3 decoder
3931*53ee8cc1Swenshuai.xi /// @param <IN> \b Audio_WMA_infoType : ac3 audio parameter type
3932*53ee8cc1Swenshuai.xi /// @param <IN> \b MS_U32 : common ac3 parameter 1
3933*53ee8cc1Swenshuai.xi /// @param <IN> \b MS_U32 : common ac3 parameter 2
3934*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
3935*53ee8cc1Swenshuai.xi /// @param <RET> \b MS_BOOL : TRUE ( SUCCESS ) / FALSE (FAIL)
3936*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
3937*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetAC3Info(Audio_AC3_infoType infoType,MS_VIRT param1,MS_VIRT param2)3938*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_SetAC3Info( Audio_AC3_infoType infoType, MS_VIRT param1, MS_VIRT param2 )
3939*53ee8cc1Swenshuai.xi {
3940*53ee8cc1Swenshuai.xi switch(infoType)
3941*53ee8cc1Swenshuai.xi {
3942*53ee8cc1Swenshuai.xi case Audio_AC3_infoType_DownmixMode: //HAL_MAD_SetDolbyDownmixMode
3943*53ee8cc1Swenshuai.xi HAL_MAD_SetAC3PInfo( Audio_AC3P_infoType_DownmixMode, param1, param2);
3944*53ee8cc1Swenshuai.xi break;
3945*53ee8cc1Swenshuai.xi
3946*53ee8cc1Swenshuai.xi case Audio_AC3_infoType_DrcMode: //HAL_MAD_SetDolbyDrcMode
3947*53ee8cc1Swenshuai.xi HAL_MAD_SetAC3PInfo( Audio_AC3P_infoType_DrcMode, param1, param2);
3948*53ee8cc1Swenshuai.xi break;
3949*53ee8cc1Swenshuai.xi
3950*53ee8cc1Swenshuai.xi default:
3951*53ee8cc1Swenshuai.xi #if defined (__aarch64__)
3952*53ee8cc1Swenshuai.xi printf("%s: infoType[%x,%08lx,%08lx] not Supported\n",__FUNCTION__, infoType, param1, param2);
3953*53ee8cc1Swenshuai.xi #else
3954*53ee8cc1Swenshuai.xi printf("%s: infoType[%x,%08x,%08x] not Supported\n",__FUNCTION__, infoType, (unsigned int)param1, (unsigned int)param2);
3955*53ee8cc1Swenshuai.xi #endif
3956*53ee8cc1Swenshuai.xi break;
3957*53ee8cc1Swenshuai.xi }
3958*53ee8cc1Swenshuai.xi
3959*53ee8cc1Swenshuai.xi return TRUE;
3960*53ee8cc1Swenshuai.xi }
3961*53ee8cc1Swenshuai.xi
3962*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
3963*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetAC3Info()
3964*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine info of ac3 decoder
3965*53ee8cc1Swenshuai.xi /// @param <IN> \b Audio_AC3_infoType : request info type of ac3 decoder
3966*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
3967*53ee8cc1Swenshuai.xi /// @param <RET> \b MS_U32 : info type
3968*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
3969*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetAC3Info(Audio_AC3_infoType infoType)3970*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_GetAC3Info( Audio_AC3_infoType infoType )
3971*53ee8cc1Swenshuai.xi {
3972*53ee8cc1Swenshuai.xi MS_U32 result = 0;
3973*53ee8cc1Swenshuai.xi
3974*53ee8cc1Swenshuai.xi switch(infoType)
3975*53ee8cc1Swenshuai.xi {
3976*53ee8cc1Swenshuai.xi case Audio_AC3_infoType_DecStatus:
3977*53ee8cc1Swenshuai.xi if ((((HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_TYPE) & adec_type_regmask) == adec_type_ac3) ||
3978*53ee8cc1Swenshuai.xi ((HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_TYPE) & adec_type_regmask) == adec_type_ac3p)) &&
3979*53ee8cc1Swenshuai.xi (HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_STAUS, ADEC1) & 0x0001))
3980*53ee8cc1Swenshuai.xi result = 1;
3981*53ee8cc1Swenshuai.xi else
3982*53ee8cc1Swenshuai.xi result = 0;
3983*53ee8cc1Swenshuai.xi break;
3984*53ee8cc1Swenshuai.xi
3985*53ee8cc1Swenshuai.xi case Audio_AC3_infoType_Acmod:
3986*53ee8cc1Swenshuai.xi result = HAL_MAD_GetAC3PInfo(Audio_AC3P_infoType_Acmod);
3987*53ee8cc1Swenshuai.xi break;
3988*53ee8cc1Swenshuai.xi
3989*53ee8cc1Swenshuai.xi case Audio_AC3_infoType_BitRate:
3990*53ee8cc1Swenshuai.xi result = HAL_MAD_GetAC3PInfo(Audio_AC3P_infoType_BitRate);
3991*53ee8cc1Swenshuai.xi break;
3992*53ee8cc1Swenshuai.xi
3993*53ee8cc1Swenshuai.xi case Audio_AC3_infoType_SampleRate:
3994*53ee8cc1Swenshuai.xi result = HAL_MAD_GetAC3PInfo(Audio_AC3P_infoType_SampleRate);
3995*53ee8cc1Swenshuai.xi break;
3996*53ee8cc1Swenshuai.xi
3997*53ee8cc1Swenshuai.xi case Audio_AC3_infoType_DownmixMode:
3998*53ee8cc1Swenshuai.xi result = HAL_MAD_GetAC3PInfo(Audio_AC3P_infoType_DownmixMode);
3999*53ee8cc1Swenshuai.xi break;
4000*53ee8cc1Swenshuai.xi
4001*53ee8cc1Swenshuai.xi case Audio_AC3_infoType_DrcMode:
4002*53ee8cc1Swenshuai.xi result = HAL_MAD_GetAC3PInfo(Audio_AC3P_infoType_DrcMode);
4003*53ee8cc1Swenshuai.xi break;
4004*53ee8cc1Swenshuai.xi
4005*53ee8cc1Swenshuai.xi default:
4006*53ee8cc1Swenshuai.xi printf("%s: infoType[%x] not Supported\n",__FUNCTION__, infoType);
4007*53ee8cc1Swenshuai.xi break;
4008*53ee8cc1Swenshuai.xi }
4009*53ee8cc1Swenshuai.xi
4010*53ee8cc1Swenshuai.xi return result;
4011*53ee8cc1Swenshuai.xi }
4012*53ee8cc1Swenshuai.xi
4013*53ee8cc1Swenshuai.xi
4014*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4015*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetDTSCommonCtrl()
4016*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine set different control to DTS decoder
4017*53ee8cc1Swenshuai.xi /// @param <IN> \b Audio_DTS_infoType : DTS control type
4018*53ee8cc1Swenshuai.xi /// @param <IN> \b MS_U16 : DTS control value
4019*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
4020*53ee8cc1Swenshuai.xi /// @param <RET> \b MS_BOOL : TRUE ( SUCCESS ) / FALSE (FAIL)
4021*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
4022*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetDTSCommonCtrl(Audio_DTS_infoType infoType,Audio_DTS_CtrlType ctrl_type)4023*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_SetDTSCommonCtrl( Audio_DTS_infoType infoType, Audio_DTS_CtrlType ctrl_type )
4024*53ee8cc1Swenshuai.xi {
4025*53ee8cc1Swenshuai.xi switch(infoType)
4026*53ee8cc1Swenshuai.xi {
4027*53ee8cc1Swenshuai.xi case Audio_DTS_infoType_DMIX_LFE_EN:
4028*53ee8cc1Swenshuai.xi if (ctrl_type == Audio_DTS_Ctrl_DMIX_LFE_OFF)
4029*53ee8cc1Swenshuai.xi {
4030*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DTS_DMX_LFE_ENABLE, ADEC1, 0, 0);
4031*53ee8cc1Swenshuai.xi }
4032*53ee8cc1Swenshuai.xi else
4033*53ee8cc1Swenshuai.xi {
4034*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DTS_DMX_LFE_ENABLE, ADEC1, 1, 0);
4035*53ee8cc1Swenshuai.xi }
4036*53ee8cc1Swenshuai.xi break;
4037*53ee8cc1Swenshuai.xi
4038*53ee8cc1Swenshuai.xi case Audio_DTS_infoType_Dialnorm_EN:
4039*53ee8cc1Swenshuai.xi // always enable
4040*53ee8cc1Swenshuai.xi break;
4041*53ee8cc1Swenshuai.xi
4042*53ee8cc1Swenshuai.xi case Audio_DTS_infoType_DrcMode:
4043*53ee8cc1Swenshuai.xi // always disable in T3
4044*53ee8cc1Swenshuai.xi break;
4045*53ee8cc1Swenshuai.xi
4046*53ee8cc1Swenshuai.xi case Audio_DTS_infoType_DownmixMode:
4047*53ee8cc1Swenshuai.xi if (ctrl_type == Audio_DTS_Ctrl_Downmix_LoRo)
4048*53ee8cc1Swenshuai.xi {
4049*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DTS_DMX_MODE, ADEC1, 0, 0);
4050*53ee8cc1Swenshuai.xi }
4051*53ee8cc1Swenshuai.xi else
4052*53ee8cc1Swenshuai.xi {
4053*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DTS_DMX_MODE, ADEC1, 1, 0);
4054*53ee8cc1Swenshuai.xi }
4055*53ee8cc1Swenshuai.xi break;
4056*53ee8cc1Swenshuai.xi
4057*53ee8cc1Swenshuai.xi case Audio_DTS_infoType_ESDataServiceMode:
4058*53ee8cc1Swenshuai.xi //force Audio_DTS_Ctrl_INTRPTMode in T3
4059*53ee8cc1Swenshuai.xi break;
4060*53ee8cc1Swenshuai.xi
4061*53ee8cc1Swenshuai.xi case Audio_DTS_infoType_ESData_ByteSwap:
4062*53ee8cc1Swenshuai.xi printf("Currently, it is not used\n");
4063*53ee8cc1Swenshuai.xi break;
4064*53ee8cc1Swenshuai.xi
4065*53ee8cc1Swenshuai.xi case Audio_DTS_infoType_CertMode:
4066*53ee8cc1Swenshuai.xi //DTS Certification Mode, Need to disable Sound Eeffect
4067*53ee8cc1Swenshuai.xi if (ctrl_type == Audio_DTS_Ctrl_CertMode_ON)
4068*53ee8cc1Swenshuai.xi {
4069*53ee8cc1Swenshuai.xi Flag_MAIN_SNDEFFET_CHG = TRUE;
4070*53ee8cc1Swenshuai.xi Reg_REG_SOUND_MAIN_SNDEFFECT = HAL_AUDIO_ReadReg(REG_SOUND_MAIN_SNDEFFECT);
4071*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteReg(REG_SOUND_MAIN_SNDEFFECT,0x0000);
4072*53ee8cc1Swenshuai.xi Reg_REG_SOUND_ADV_CFG0 = HAL_AUDIO_ReadReg(REG_SOUND_ADV_CFG0);
4073*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteReg(REG_SOUND_ADV_CFG0,0x0000);
4074*53ee8cc1Swenshuai.xi }
4075*53ee8cc1Swenshuai.xi if (ctrl_type == Audio_DTS_Ctrl_CertMode_OFF)
4076*53ee8cc1Swenshuai.xi {
4077*53ee8cc1Swenshuai.xi if(Flag_MAIN_SNDEFFET_CHG)
4078*53ee8cc1Swenshuai.xi {
4079*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteReg(REG_SOUND_MAIN_SNDEFFECT, Reg_REG_SOUND_MAIN_SNDEFFECT);
4080*53ee8cc1Swenshuai.xi HAL_AUDIO_WriteReg(REG_SOUND_ADV_CFG0, Reg_REG_SOUND_ADV_CFG0);
4081*53ee8cc1Swenshuai.xi Flag_MAIN_SNDEFFET_CHG = FALSE;
4082*53ee8cc1Swenshuai.xi }
4083*53ee8cc1Swenshuai.xi }
4084*53ee8cc1Swenshuai.xi break;
4085*53ee8cc1Swenshuai.xi
4086*53ee8cc1Swenshuai.xi default:
4087*53ee8cc1Swenshuai.xi break;
4088*53ee8cc1Swenshuai.xi }
4089*53ee8cc1Swenshuai.xi
4090*53ee8cc1Swenshuai.xi return TRUE;
4091*53ee8cc1Swenshuai.xi }
4092*53ee8cc1Swenshuai.xi
4093*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4094*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetDTSInfo()
4095*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine return info type of DTS decoder
4096*53ee8cc1Swenshuai.xi /// @param <IN> \b Audio_DTS_infoType : DTS parameter type
4097*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
4098*53ee8cc1Swenshuai.xi /// @param <RET> \b MS_U32 : DTS paramter info
4099*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
4100*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetDTSInfo(Audio_DTS_infoType infoType)4101*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_GetDTSInfo( Audio_DTS_infoType infoType )
4102*53ee8cc1Swenshuai.xi {
4103*53ee8cc1Swenshuai.xi MS_U32 result = 0;
4104*53ee8cc1Swenshuai.xi MS_U8 eAudioSource = 0;
4105*53ee8cc1Swenshuai.xi MS_U8 u8MainDecodeId = 0;
4106*53ee8cc1Swenshuai.xi
4107*53ee8cc1Swenshuai.xi HALMAD_CHECK_SHM_INIT;
4108*53ee8cc1Swenshuai.xi
4109*53ee8cc1Swenshuai.xi eAudioSource = (MS_U8)g_AudioVars2->eAudioSource;
4110*53ee8cc1Swenshuai.xi
4111*53ee8cc1Swenshuai.xi if (((eAudioSource == E_AUDIO_INFO_MM_IN) || (eAudioSource == E_AUDIO_INFO_GAME_IN)) &&
4112*53ee8cc1Swenshuai.xi (HAL_MAD_GetDecCmd(DVB_Audio_Decoder2) == AU_DVB_DECCMD_PLAYFRAME_GS))
4113*53ee8cc1Swenshuai.xi {
4114*53ee8cc1Swenshuai.xi u8MainDecodeId = ADEC2;
4115*53ee8cc1Swenshuai.xi }
4116*53ee8cc1Swenshuai.xi else
4117*53ee8cc1Swenshuai.xi {
4118*53ee8cc1Swenshuai.xi u8MainDecodeId = ADEC1;
4119*53ee8cc1Swenshuai.xi }
4120*53ee8cc1Swenshuai.xi
4121*53ee8cc1Swenshuai.xi switch(infoType)
4122*53ee8cc1Swenshuai.xi {
4123*53ee8cc1Swenshuai.xi case Audio_DTS_infoType_DecStatus:
4124*53ee8cc1Swenshuai.xi if (((HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_TYPE) & adec_type_regmask) == adec_type_dts) && (HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_STAUS, u8MainDecodeId)&0x0001))
4125*53ee8cc1Swenshuai.xi result = 1;
4126*53ee8cc1Swenshuai.xi else
4127*53ee8cc1Swenshuai.xi result = 0;
4128*53ee8cc1Swenshuai.xi break;
4129*53ee8cc1Swenshuai.xi
4130*53ee8cc1Swenshuai.xi case Audio_DTS_infoType_KernelVersion:
4131*53ee8cc1Swenshuai.xi printf("Currently, it is not used\n");
4132*53ee8cc1Swenshuai.xi break;
4133*53ee8cc1Swenshuai.xi
4134*53ee8cc1Swenshuai.xi case Audio_DTS_infoType_SampleRate: // Original FS from Header
4135*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_SMP_RATE, u8MainDecodeId);
4136*53ee8cc1Swenshuai.xi break;
4137*53ee8cc1Swenshuai.xi
4138*53ee8cc1Swenshuai.xi case Audio_DTS_infoType_BitRate:
4139*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_BIT_RATE, u8MainDecodeId);
4140*53ee8cc1Swenshuai.xi break;
4141*53ee8cc1Swenshuai.xi
4142*53ee8cc1Swenshuai.xi case Audio_DTS_infoType_CD_MODE:
4143*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DTS_CD_MODE, u8MainDecodeId);
4144*53ee8cc1Swenshuai.xi break;
4145*53ee8cc1Swenshuai.xi
4146*53ee8cc1Swenshuai.xi case Audio_DTS_infoType_Amode:
4147*53ee8cc1Swenshuai.xi {
4148*53ee8cc1Swenshuai.xi MS_U32 ac_mode = 0xFF;
4149*53ee8cc1Swenshuai.xi MS_U32 channel_mapping = 0x0;
4150*53ee8cc1Swenshuai.xi ac_mode = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_CHANNEL_MODE, u8MainDecodeId);
4151*53ee8cc1Swenshuai.xi channel_mapping = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_CHANNEL_MAPPING, u8MainDecodeId);
4152*53ee8cc1Swenshuai.xi
4153*53ee8cc1Swenshuai.xi switch(ac_mode)
4154*53ee8cc1Swenshuai.xi {
4155*53ee8cc1Swenshuai.xi case adec_ch_mono:
4156*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_MONO;
4157*53ee8cc1Swenshuai.xi break;
4158*53ee8cc1Swenshuai.xi
4159*53ee8cc1Swenshuai.xi case adec_ch_joint_stereo:
4160*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_JOINT_STEREO;
4161*53ee8cc1Swenshuai.xi break;
4162*53ee8cc1Swenshuai.xi
4163*53ee8cc1Swenshuai.xi case adec_ch_stereo:
4164*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_STEREO;
4165*53ee8cc1Swenshuai.xi break;
4166*53ee8cc1Swenshuai.xi
4167*53ee8cc1Swenshuai.xi case adec_ch_dual_mono:
4168*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_DUAL_MONO;
4169*53ee8cc1Swenshuai.xi break;
4170*53ee8cc1Swenshuai.xi
4171*53ee8cc1Swenshuai.xi case adec_ch_multi:
4172*53ee8cc1Swenshuai.xi {
4173*53ee8cc1Swenshuai.xi MS_U32 channel_mapping_mask_C_L_R, channel_mapping_mask_Ls_Rs =0x00;
4174*53ee8cc1Swenshuai.xi channel_mapping_mask_Ls_Rs = (channel_mapping&(ACMOD_CH_MASK_LS|ACMOD_CH_MASK_RS));
4175*53ee8cc1Swenshuai.xi channel_mapping_mask_C_L_R = (channel_mapping&(ACMOD_CH_MASK_C|ACMOD_CH_MASK_L|ACMOD_CH_MASK_R));
4176*53ee8cc1Swenshuai.xi
4177*53ee8cc1Swenshuai.xi if(channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_C|ACMOD_CH_MASK_L|ACMOD_CH_MASK_R))
4178*53ee8cc1Swenshuai.xi {
4179*53ee8cc1Swenshuai.xi if(channel_mapping_mask_Ls_Rs == (ACMOD_CH_MASK_LS|ACMOD_CH_MASK_RS))
4180*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_3_2_MODE;
4181*53ee8cc1Swenshuai.xi else if(channel_mapping_mask_Ls_Rs == ACMOD_CH_MASK_NULL)
4182*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_3_0_MODE;
4183*53ee8cc1Swenshuai.xi else
4184*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_3_1_MODE;
4185*53ee8cc1Swenshuai.xi }
4186*53ee8cc1Swenshuai.xi else if((channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_C|ACMOD_CH_MASK_L))||(channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_L|ACMOD_CH_MASK_R))
4187*53ee8cc1Swenshuai.xi ||(channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_C|ACMOD_CH_MASK_R)))
4188*53ee8cc1Swenshuai.xi {
4189*53ee8cc1Swenshuai.xi if(channel_mapping_mask_Ls_Rs == (ACMOD_CH_MASK_LS|ACMOD_CH_MASK_RS))
4190*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_2_2_MODE;
4191*53ee8cc1Swenshuai.xi else
4192*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_2_1_MODE;
4193*53ee8cc1Swenshuai.xi }
4194*53ee8cc1Swenshuai.xi else //other multi-channel case, set it to AUD_CH_MODE_3_2_MODE
4195*53ee8cc1Swenshuai.xi {
4196*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_3_2_MODE;
4197*53ee8cc1Swenshuai.xi }
4198*53ee8cc1Swenshuai.xi }
4199*53ee8cc1Swenshuai.xi break;
4200*53ee8cc1Swenshuai.xi
4201*53ee8cc1Swenshuai.xi default:
4202*53ee8cc1Swenshuai.xi result = AUD_CH_MODE_NONE;
4203*53ee8cc1Swenshuai.xi break;
4204*53ee8cc1Swenshuai.xi }
4205*53ee8cc1Swenshuai.xi }
4206*53ee8cc1Swenshuai.xi break;
4207*53ee8cc1Swenshuai.xi
4208*53ee8cc1Swenshuai.xi case Audio_DTS_infoType_HDMI_DSP_SEL:
4209*53ee8cc1Swenshuai.xi result = 0x0; //0: in DEC DSP, 1: in SND DSP
4210*53ee8cc1Swenshuai.xi break;
4211*53ee8cc1Swenshuai.xi
4212*53ee8cc1Swenshuai.xi default:
4213*53ee8cc1Swenshuai.xi printf("%s: infoType[%x] not Supported\n",__FUNCTION__, infoType);
4214*53ee8cc1Swenshuai.xi break;
4215*53ee8cc1Swenshuai.xi }
4216*53ee8cc1Swenshuai.xi
4217*53ee8cc1Swenshuai.xi return result;
4218*53ee8cc1Swenshuai.xi }
4219*53ee8cc1Swenshuai.xi
4220*53ee8cc1Swenshuai.xi
4221*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4222*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetAACInfo()
4223*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine set different paramter to aac decoder
4224*53ee8cc1Swenshuai.xi /// @param <IN> \b Audio_WMA_infoType : aac audio parameter type
4225*53ee8cc1Swenshuai.xi /// @param <IN> \b MS_U32 : common aac parameter 1
4226*53ee8cc1Swenshuai.xi /// @param <IN> \b MS_U32 : common aac parameter 2
4227*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
4228*53ee8cc1Swenshuai.xi /// @param <RET> \b MS_BOOL : TRUE ( SUCCESS ) / FALSE (FAIL)
4229*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
4230*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetAACInfo(Audio_AAC_infoType infoType,MS_VIRT param1,MS_VIRT param2)4231*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_SetAACInfo( Audio_AAC_infoType infoType, MS_VIRT param1, MS_VIRT param2 )
4232*53ee8cc1Swenshuai.xi {
4233*53ee8cc1Swenshuai.xi switch(infoType)
4234*53ee8cc1Swenshuai.xi {
4235*53ee8cc1Swenshuai.xi case Audio_AAC_infoType_DownmixMode: //HAL_MAD_SetDolbyDownmixMode
4236*53ee8cc1Swenshuai.xi if((DOLBY_DOWNMIX_MODE)param1 == DOLBY_DOWNMIX_MODE_LORO)
4237*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DMX_MODE, ADEC1, 1, 0);
4238*53ee8cc1Swenshuai.xi else
4239*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DMX_MODE, ADEC1, 0, 0);
4240*53ee8cc1Swenshuai.xi break;
4241*53ee8cc1Swenshuai.xi
4242*53ee8cc1Swenshuai.xi case Audio_AAC_infoType_DrcMode: //HAL_MAD_SetDolbyDrcMode
4243*53ee8cc1Swenshuai.xi if((DOLBY_DRC_MODE)param1 == RF_MODE)
4244*53ee8cc1Swenshuai.xi {
4245*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_RF_MODE, ADEC1, 1, 0);
4246*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_RF_MODE, ADEC2, 1, 0);
4247*53ee8cc1Swenshuai.xi }
4248*53ee8cc1Swenshuai.xi else
4249*53ee8cc1Swenshuai.xi {
4250*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_RF_MODE, ADEC1, 0, 0);
4251*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_RF_MODE, ADEC2, 0, 0);
4252*53ee8cc1Swenshuai.xi }
4253*53ee8cc1Swenshuai.xi break;
4254*53ee8cc1Swenshuai.xi
4255*53ee8cc1Swenshuai.xi case Audio_AAC_DTV_AVSYNC_OFFSET:
4256*53ee8cc1Swenshuai.xi if ((param1<DELAY_LOWER_LIMIT)||(param1>DELAY_UPPER_LIMIT)) //delay offset range from 30ms ~ 1050ms
4257*53ee8cc1Swenshuai.xi {
4258*53ee8cc1Swenshuai.xi g_aac_delay = AAC_AV_DEFAULT_DELAY;
4259*53ee8cc1Swenshuai.xi }
4260*53ee8cc1Swenshuai.xi else
4261*53ee8cc1Swenshuai.xi {
4262*53ee8cc1Swenshuai.xi g_aac_delay = param1;
4263*53ee8cc1Swenshuai.xi }
4264*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_AAC_AVOFFSET, ADEC1, g_aac_delay, 0);
4265*53ee8cc1Swenshuai.xi break;
4266*53ee8cc1Swenshuai.xi
4267*53ee8cc1Swenshuai.xi case Audio_AAC_DTV_AVSYNC_DISABLE_SETTING:
4268*53ee8cc1Swenshuai.xi g_aac_delay = AAC_AV_DEFAULT_DELAY;
4269*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_AAC_AVOFFSET, ADEC1, g_aac_delay, 0);
4270*53ee8cc1Swenshuai.xi break;
4271*53ee8cc1Swenshuai.xi
4272*53ee8cc1Swenshuai.xi case Audio_AAC_mm_single_frame_mode:
4273*53ee8cc1Swenshuai.xi if (param1 > 0)
4274*53ee8cc1Swenshuai.xi {
4275*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_MUL_FRAME_HEADER, ADEC1, 1, 0);
4276*53ee8cc1Swenshuai.xi }
4277*53ee8cc1Swenshuai.xi else
4278*53ee8cc1Swenshuai.xi {
4279*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_MUL_FRAME_HEADER, ADEC1, 0, 0);
4280*53ee8cc1Swenshuai.xi }
4281*53ee8cc1Swenshuai.xi break;
4282*53ee8cc1Swenshuai.xi
4283*53ee8cc1Swenshuai.xi default:
4284*53ee8cc1Swenshuai.xi #if defined (__aarch64__)
4285*53ee8cc1Swenshuai.xi printf("%s: infoType[%x,%08lx,%08lx] not Supported\n",__FUNCTION__, infoType, param1, param2);
4286*53ee8cc1Swenshuai.xi #else
4287*53ee8cc1Swenshuai.xi printf("%s: infoType[%x,%08x,%08x] not Supported\n",__FUNCTION__, infoType, (unsigned int)param1, (unsigned int)param2);
4288*53ee8cc1Swenshuai.xi #endif
4289*53ee8cc1Swenshuai.xi break;
4290*53ee8cc1Swenshuai.xi }
4291*53ee8cc1Swenshuai.xi
4292*53ee8cc1Swenshuai.xi return TRUE;
4293*53ee8cc1Swenshuai.xi }
4294*53ee8cc1Swenshuai.xi
4295*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4296*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetAACInfo()
4297*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine info of aac decoder
4298*53ee8cc1Swenshuai.xi /// @param <IN> \b Audio_AAC_infoType : request info type of aac decoder
4299*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
4300*53ee8cc1Swenshuai.xi /// @param <RET> \b MS_U32 : info type
4301*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
4302*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4303*53ee8cc1Swenshuai.xi #define DEC_UNSUPPORT_CNT 10
4304*53ee8cc1Swenshuai.xi #define AAC_UNSUPPORT_ADDR 0x3824
HAL_MAD_GetAACInfo(Audio_AAC_infoType infoType)4305*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_GetAACInfo( Audio_AAC_infoType infoType )
4306*53ee8cc1Swenshuai.xi {
4307*53ee8cc1Swenshuai.xi MS_U32 result=0;
4308*53ee8cc1Swenshuai.xi //MS_U32 result1=0, result2=0,
4309*53ee8cc1Swenshuai.xi AUDIO_DSP_CODE_TYPE MainDspCodeType = AU_DVB_NONE;
4310*53ee8cc1Swenshuai.xi HALMAD_CHECK_SHM_INIT;
4311*53ee8cc1Swenshuai.xi
4312*53ee8cc1Swenshuai.xi MainDspCodeType = g_AudioVars2->g_DspCodeType;
4313*53ee8cc1Swenshuai.xi if ((MainDspCodeType != AU_DVB_STANDARD_AAC) || (MainDspCodeType != AU_DVB_STANDARD_MS10_DDT))
4314*53ee8cc1Swenshuai.xi return result;
4315*53ee8cc1Swenshuai.xi
4316*53ee8cc1Swenshuai.xi switch(infoType)
4317*53ee8cc1Swenshuai.xi {
4318*53ee8cc1Swenshuai.xi case Audio_AAC_error_count:
4319*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ERR_FRMCNT, ADEC1);
4320*53ee8cc1Swenshuai.xi break;
4321*53ee8cc1Swenshuai.xi
4322*53ee8cc1Swenshuai.xi case Audio_AAC_dec_unsupported:
4323*53ee8cc1Swenshuai.xi //decode unsupported, threshold 10
4324*53ee8cc1Swenshuai.xi printf("Currently, it is not used\n");
4325*53ee8cc1Swenshuai.xi break;
4326*53ee8cc1Swenshuai.xi
4327*53ee8cc1Swenshuai.xi case Audio_AAC_type:
4328*53ee8cc1Swenshuai.xi result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DOLBY_AAC_TYPE, ADEC1);
4329*53ee8cc1Swenshuai.xi break;
4330*53ee8cc1Swenshuai.xi
4331*53ee8cc1Swenshuai.xi default:
4332*53ee8cc1Swenshuai.xi printf("%s: infoType[%x] not Supported\n",__FUNCTION__, infoType);
4333*53ee8cc1Swenshuai.xi break;
4334*53ee8cc1Swenshuai.xi }
4335*53ee8cc1Swenshuai.xi return result;
4336*53ee8cc1Swenshuai.xi }
4337*53ee8cc1Swenshuai.xi
4338*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4339*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetDtsInfo()
4340*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine set different paramter to aac decoder
4341*53ee8cc1Swenshuai.xi /// @param <IN> \b Audio_WMA_infoType : aac audio parameter type
4342*53ee8cc1Swenshuai.xi /// @param <IN> \b MS_U32 : common aac parameter 1
4343*53ee8cc1Swenshuai.xi /// @param <IN> \b MS_U32 : common aac parameter 2
4344*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
4345*53ee8cc1Swenshuai.xi /// @param <RET> \b MS_BOOL : TRUE ( SUCCESS ) / FALSE (FAIL)
4346*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
4347*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetDtsInfo(Audio_DTS_infoType infoType,MS_U32 param1,MS_U32 param2)4348*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_SetDtsInfo( Audio_DTS_infoType infoType, MS_U32 param1, MS_U32 param2 )
4349*53ee8cc1Swenshuai.xi {
4350*53ee8cc1Swenshuai.xi switch(infoType)
4351*53ee8cc1Swenshuai.xi {
4352*53ee8cc1Swenshuai.xi default:
4353*53ee8cc1Swenshuai.xi printf("%s: infoType[%x,%08x,%08x] not Supported\n",__FUNCTION__, infoType, (unsigned int)param1, (unsigned int)param2);
4354*53ee8cc1Swenshuai.xi break;
4355*53ee8cc1Swenshuai.xi }
4356*53ee8cc1Swenshuai.xi
4357*53ee8cc1Swenshuai.xi return TRUE;
4358*53ee8cc1Swenshuai.xi }
4359*53ee8cc1Swenshuai.xi
4360*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4361*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetAACInfo()
4362*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine info of aac decoder
4363*53ee8cc1Swenshuai.xi /// @param <IN> \b Audio_AAC_infoType : request info type of aac decoder
4364*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
4365*53ee8cc1Swenshuai.xi /// @param <RET> \b MS_U32 : info type
4366*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
4367*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetDtsInfo(Audio_DTS_infoType infoType)4368*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_GetDtsInfo( Audio_DTS_infoType infoType )
4369*53ee8cc1Swenshuai.xi {
4370*53ee8cc1Swenshuai.xi MS_U32 result = 0;
4371*53ee8cc1Swenshuai.xi
4372*53ee8cc1Swenshuai.xi switch(infoType)
4373*53ee8cc1Swenshuai.xi {
4374*53ee8cc1Swenshuai.xi default:
4375*53ee8cc1Swenshuai.xi printf("%s: infoType[%x] not Supported\n",__FUNCTION__, infoType);
4376*53ee8cc1Swenshuai.xi break;
4377*53ee8cc1Swenshuai.xi }
4378*53ee8cc1Swenshuai.xi
4379*53ee8cc1Swenshuai.xi return result;
4380*53ee8cc1Swenshuai.xi }
4381*53ee8cc1Swenshuai.xi
4382*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4383*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetRA8LBRInfo()
4384*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine set different paramter to ra8 lbr decoder
4385*53ee8cc1Swenshuai.xi /// @param <IN> \b Audio_RA8LBR_infoType : ra8 lbr audio parameter type
4386*53ee8cc1Swenshuai.xi /// @param <IN> \b MS_U32 : common ra8 lbr parameter 1
4387*53ee8cc1Swenshuai.xi /// @param <IN> \b MS_U32 : common ra8 lbr parameter 2
4388*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
4389*53ee8cc1Swenshuai.xi /// @param <RET> \b MS_BOOL : TRUE ( SUCCESS ) / FALSE (FAIL)
4390*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
4391*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetRA8LBRInfo(Audio_RA8LBR_infoType infoType,MS_U32 param1,MS_U32 param2)4392*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_SetRA8LBRInfo( Audio_RA8LBR_infoType infoType, MS_U32 param1, MS_U32 param2 )
4393*53ee8cc1Swenshuai.xi {
4394*53ee8cc1Swenshuai.xi switch ( infoType )
4395*53ee8cc1Swenshuai.xi {
4396*53ee8cc1Swenshuai.xi case Audio_RA8LBR_NumCodes:
4397*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_NUMCODECS, ADEC1, param1, 0 );
4398*53ee8cc1Swenshuai.xi break;
4399*53ee8cc1Swenshuai.xi case Audio_RA8LBR_Samples:
4400*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_SAMPLES, ADEC1, param1, 0 );
4401*53ee8cc1Swenshuai.xi break;
4402*53ee8cc1Swenshuai.xi case Audio_RA8LBR_SampleRate:
4403*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_SAMPLERATES, ADEC1, param1, 0 );
4404*53ee8cc1Swenshuai.xi break;
4405*53ee8cc1Swenshuai.xi case Audio_RA8LBR_Channels1:
4406*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, ADEC1, param1, 0 );
4407*53ee8cc1Swenshuai.xi break;
4408*53ee8cc1Swenshuai.xi case Audio_RA8LBR_Regions1:
4409*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, ADEC1, param1, 0 );
4410*53ee8cc1Swenshuai.xi break;
4411*53ee8cc1Swenshuai.xi case Audio_RA8LBR_cplStart1:
4412*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, ADEC1, param1, 0 );
4413*53ee8cc1Swenshuai.xi break;
4414*53ee8cc1Swenshuai.xi case Audio_RA8LBR_cplQbits1:
4415*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, ADEC1, param1, 0 );
4416*53ee8cc1Swenshuai.xi break;
4417*53ee8cc1Swenshuai.xi case Audio_RA8LBR_FrameSize1:
4418*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, ADEC1, param1, 0 );
4419*53ee8cc1Swenshuai.xi break;
4420*53ee8cc1Swenshuai.xi case Audio_RA8LBR_Channels2:
4421*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, ADEC1, param1, 1 );
4422*53ee8cc1Swenshuai.xi break;
4423*53ee8cc1Swenshuai.xi case Audio_RA8LBR_Regions2:
4424*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, ADEC1, param1, 1 );
4425*53ee8cc1Swenshuai.xi break;
4426*53ee8cc1Swenshuai.xi case Audio_RA8LBR_cplStart2:
4427*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, ADEC1, param1, 1 );
4428*53ee8cc1Swenshuai.xi break;
4429*53ee8cc1Swenshuai.xi case Audio_RA8LBR_cplQbits2:
4430*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, ADEC1, param1, 1 );
4431*53ee8cc1Swenshuai.xi break;
4432*53ee8cc1Swenshuai.xi case Audio_RA8LBR_FrameSize2:
4433*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, ADEC1, param1, 1 );
4434*53ee8cc1Swenshuai.xi break;
4435*53ee8cc1Swenshuai.xi case Audio_RA8LBR_Channels3:
4436*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, ADEC1, param1, 2 );
4437*53ee8cc1Swenshuai.xi break;
4438*53ee8cc1Swenshuai.xi case Audio_RA8LBR_Regions3:
4439*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, ADEC1, param1, 2 );
4440*53ee8cc1Swenshuai.xi break;
4441*53ee8cc1Swenshuai.xi case Audio_RA8LBR_cplStart3:
4442*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, ADEC1, param1, 2 );
4443*53ee8cc1Swenshuai.xi break;
4444*53ee8cc1Swenshuai.xi case Audio_RA8LBR_cplQbits3:
4445*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, ADEC1, param1, 2 );
4446*53ee8cc1Swenshuai.xi break;
4447*53ee8cc1Swenshuai.xi case Audio_RA8LBR_FrameSize3:
4448*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, ADEC1, param1, 2 );
4449*53ee8cc1Swenshuai.xi break;
4450*53ee8cc1Swenshuai.xi case Audio_RA8LBR_Channels4:
4451*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, ADEC1, param1, 3 );
4452*53ee8cc1Swenshuai.xi break;
4453*53ee8cc1Swenshuai.xi case Audio_RA8LBR_Regions4:
4454*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, ADEC1, param1, 3 );
4455*53ee8cc1Swenshuai.xi break;
4456*53ee8cc1Swenshuai.xi case Audio_RA8LBR_cplStart4:
4457*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, ADEC1, param1, 3 );
4458*53ee8cc1Swenshuai.xi break;
4459*53ee8cc1Swenshuai.xi case Audio_RA8LBR_cplQbits4:
4460*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, ADEC1, param1, 3 );
4461*53ee8cc1Swenshuai.xi break;
4462*53ee8cc1Swenshuai.xi case Audio_RA8LBR_FrameSize4:
4463*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, ADEC1, param1, 3 );
4464*53ee8cc1Swenshuai.xi break;
4465*53ee8cc1Swenshuai.xi case Audio_RA8LBR_Channels5:
4466*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, ADEC1, param1, 4 );
4467*53ee8cc1Swenshuai.xi break;
4468*53ee8cc1Swenshuai.xi case Audio_RA8LBR_Regions5:
4469*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, ADEC1, param1, 4 );
4470*53ee8cc1Swenshuai.xi break;
4471*53ee8cc1Swenshuai.xi case Audio_RA8LBR_cplStart5:
4472*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, ADEC1, param1, 4 );
4473*53ee8cc1Swenshuai.xi break;
4474*53ee8cc1Swenshuai.xi case Audio_RA8LBR_cplQbits5:
4475*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, ADEC1, param1, 4 );
4476*53ee8cc1Swenshuai.xi break;
4477*53ee8cc1Swenshuai.xi case Audio_RA8LBR_FrameSize5:
4478*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, ADEC1, param1, 4 );
4479*53ee8cc1Swenshuai.xi break;
4480*53ee8cc1Swenshuai.xi default:
4481*53ee8cc1Swenshuai.xi printf("%s: infoType[%x,%08x,%08x] not Supported\n",__FUNCTION__, infoType, (unsigned int)param1, (unsigned int)param2);
4482*53ee8cc1Swenshuai.xi break;
4483*53ee8cc1Swenshuai.xi }
4484*53ee8cc1Swenshuai.xi
4485*53ee8cc1Swenshuai.xi return TRUE;
4486*53ee8cc1Swenshuai.xi }
4487*53ee8cc1Swenshuai.xi
4488*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4489*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetRA8LBRInfo()
4490*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine info of ra8 lbr decoder
4491*53ee8cc1Swenshuai.xi /// @param <IN> \b Audio_RA8LBR_infoType : request info type of ra8 lbr decoder
4492*53ee8cc1Swenshuai.xi /// @param <OUT> \b NONE :
4493*53ee8cc1Swenshuai.xi /// @param <RET> \b MS_U32 : info type
4494*53ee8cc1Swenshuai.xi /// @param <GLOBAL> \b NONE :
4495*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetRA8LBRInfo(Audio_RA8LBR_infoType infoType)4496*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_GetRA8LBRInfo( Audio_RA8LBR_infoType infoType )
4497*53ee8cc1Swenshuai.xi {
4498*53ee8cc1Swenshuai.xi MS_U32 result = 0;
4499*53ee8cc1Swenshuai.xi
4500*53ee8cc1Swenshuai.xi switch ( infoType )
4501*53ee8cc1Swenshuai.xi {
4502*53ee8cc1Swenshuai.xi default:
4503*53ee8cc1Swenshuai.xi printf("%s: infoType[%x] not Supported\n",__FUNCTION__, infoType);
4504*53ee8cc1Swenshuai.xi break;
4505*53ee8cc1Swenshuai.xi }
4506*53ee8cc1Swenshuai.xi
4507*53ee8cc1Swenshuai.xi return result;
4508*53ee8cc1Swenshuai.xi }
4509*53ee8cc1Swenshuai.xi
4510*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4511*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_LoadCode()
4512*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to load the DVB algorithm code
4513*53ee8cc1Swenshuai.xi /// @param u8Type \b algorithm type
4514*53ee8cc1Swenshuai.xi /// @return MS_BOOL \b TRUE --DSP load code okay
4515*53ee8cc1Swenshuai.xi /// FALSE--DSP load code fail
4516*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_LoadCode(AUDIO_DSP_CODE_TYPE dspCodeType)4517*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_LoadCode(AUDIO_DSP_CODE_TYPE dspCodeType)
4518*53ee8cc1Swenshuai.xi {
4519*53ee8cc1Swenshuai.xi dspCodeType = dspCodeType;
4520*53ee8cc1Swenshuai.xi
4521*53ee8cc1Swenshuai.xi return TRUE;
4522*53ee8cc1Swenshuai.xi }
4523*53ee8cc1Swenshuai.xi
4524*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4525*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_XPCM_setParam
4526*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_XPCM_setParam(XPCM_TYPE audioType,MS_U8 channels,MS_U16 sampleRate,MS_U8 bitsPerSample,MS_U16 blockSize,MS_U16 samplePerBlock)4527*53ee8cc1Swenshuai.xi MS_U8 HAL_MAD_XPCM_setParam(XPCM_TYPE audioType, MS_U8 channels, MS_U16 sampleRate,
4528*53ee8cc1Swenshuai.xi MS_U8 bitsPerSample, MS_U16 blockSize, MS_U16 samplePerBlock)
4529*53ee8cc1Swenshuai.xi {
4530*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_TYPE, ADEC1, audioType, 0 );
4531*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_CHANNELS, ADEC1, channels, 0 );
4532*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_SAMPLERATES, ADEC1, sampleRate, 0 );
4533*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_BITS_PER_SAMPLE, ADEC1, bitsPerSample, 0 );
4534*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_BLOCK_SIZE, ADEC1, blockSize, 0 );
4535*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_SAMPLE_PER_BLOCK, ADEC1, samplePerBlock, 0 );
4536*53ee8cc1Swenshuai.xi
4537*53ee8cc1Swenshuai.xi return TRUE;
4538*53ee8cc1Swenshuai.xi }
4539*53ee8cc1Swenshuai.xi
4540*53ee8cc1Swenshuai.xi //====== STAOS PIP START 2012/02/01 ========
4541*53ee8cc1Swenshuai.xi
HAL_MAD_XPCM_setParam2(AUDIO_DEC_ID DecId,Audio_XPCM_Param * pParam)4542*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_XPCM_setParam2( AUDIO_DEC_ID DecId, Audio_XPCM_Param * pParam )
4543*53ee8cc1Swenshuai.xi {
4544*53ee8cc1Swenshuai.xi Audio_XPCM_Param * pParamXPCM = pParam;
4545*53ee8cc1Swenshuai.xi Audio_id adec_id = HAL_AUDIO_Convert_DecId_to_ADECId(DecId);
4546*53ee8cc1Swenshuai.xi
4547*53ee8cc1Swenshuai.xi if ( adec_id < ADEC3 )
4548*53ee8cc1Swenshuai.xi {
4549*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_TYPE, adec_id, (MS_U32) pParamXPCM->audioType, 0 );
4550*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_CHANNELS, adec_id, (MS_U32) pParamXPCM->channels, 0 );
4551*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_SAMPLERATES, adec_id, (MS_U32) pParamXPCM->sampleRate, 0 );
4552*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_BITS_PER_SAMPLE, adec_id, (MS_U32) pParamXPCM->bitsPerSample, 0 );
4553*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_BLOCK_SIZE, adec_id, (MS_U32) pParamXPCM->blockSize, 0 );
4554*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_SAMPLE_PER_BLOCK, adec_id, (MS_U32) pParamXPCM->samplePerBlock, 0 );
4555*53ee8cc1Swenshuai.xi return TRUE;
4556*53ee8cc1Swenshuai.xi }
4557*53ee8cc1Swenshuai.xi else
4558*53ee8cc1Swenshuai.xi {
4559*53ee8cc1Swenshuai.xi return FALSE;
4560*53ee8cc1Swenshuai.xi }
4561*53ee8cc1Swenshuai.xi }
4562*53ee8cc1Swenshuai.xi
HAL_MAD_COOK_setParam2(AUDIO_DEC_ID DecId,Audio_COOK_Param * pParam)4563*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_COOK_setParam2( AUDIO_DEC_ID DecId, Audio_COOK_Param * pParam )
4564*53ee8cc1Swenshuai.xi {
4565*53ee8cc1Swenshuai.xi Audio_COOK_Param * pParamCOOK = pParam;
4566*53ee8cc1Swenshuai.xi Audio_id adec_id = HAL_AUDIO_Convert_DecId_to_ADECId(DecId);
4567*53ee8cc1Swenshuai.xi
4568*53ee8cc1Swenshuai.xi if ( adec_id < ADEC3 )
4569*53ee8cc1Swenshuai.xi {
4570*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_NUMCODECS, adec_id, pParamCOOK->mNumCodecs, 0 );
4571*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_SAMPLES, adec_id, pParamCOOK->mSamples, 0 );
4572*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_SAMPLERATES, adec_id, pParamCOOK->mSampleRate, 0 );
4573*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, adec_id, pParamCOOK->Channels[0], 0 );
4574*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, adec_id, pParamCOOK->Regions[0], 0 );
4575*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, adec_id, pParamCOOK->cplStart[0], 0 );
4576*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, adec_id, pParamCOOK->cplQbits[0], 0 );
4577*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, adec_id, pParamCOOK->FrameSize[0], 0 );
4578*53ee8cc1Swenshuai.xi
4579*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, adec_id, pParamCOOK->Channels[1], 1 );
4580*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, adec_id, pParamCOOK->Regions[1], 1 );
4581*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, adec_id, pParamCOOK->cplStart[1], 1 );
4582*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, adec_id, pParamCOOK->cplQbits[1], 1 );
4583*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, adec_id, pParamCOOK->FrameSize[1], 1 );
4584*53ee8cc1Swenshuai.xi
4585*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, adec_id, pParamCOOK->Channels[2], 2 );
4586*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, adec_id, pParamCOOK->Regions[2], 2 );
4587*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, adec_id, pParamCOOK->cplStart[2], 2 );
4588*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, adec_id, pParamCOOK->cplQbits[2], 2 );
4589*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, adec_id, pParamCOOK->FrameSize[2], 2 );
4590*53ee8cc1Swenshuai.xi
4591*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, adec_id, pParamCOOK->Channels[3], 3 );
4592*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, adec_id, pParamCOOK->Regions[3], 3 );
4593*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, adec_id, pParamCOOK->cplStart[3], 3 );
4594*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, adec_id, pParamCOOK->cplQbits[3], 3 );
4595*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, adec_id, pParamCOOK->FrameSize[3], 3 );
4596*53ee8cc1Swenshuai.xi
4597*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, adec_id, pParamCOOK->Channels[4], 4 );
4598*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, adec_id, pParamCOOK->Regions[4], 4 );
4599*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, adec_id, pParamCOOK->cplStart[4], 4 );
4600*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, adec_id, pParamCOOK->cplQbits[4], 4 );
4601*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, adec_id, pParamCOOK->FrameSize[4], 4 );
4602*53ee8cc1Swenshuai.xi
4603*53ee8cc1Swenshuai.xi return TRUE;
4604*53ee8cc1Swenshuai.xi }
4605*53ee8cc1Swenshuai.xi else
4606*53ee8cc1Swenshuai.xi {
4607*53ee8cc1Swenshuai.xi return FALSE;
4608*53ee8cc1Swenshuai.xi }
4609*53ee8cc1Swenshuai.xi }
4610*53ee8cc1Swenshuai.xi
HAL_MAD_WMA_SetASFParm2(AUDIO_DEC_ID DecId,Audio_ASF_Param * pParam)4611*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_WMA_SetASFParm2( AUDIO_DEC_ID DecId, Audio_ASF_Param * pParam )
4612*53ee8cc1Swenshuai.xi {
4613*53ee8cc1Swenshuai.xi Audio_id adec_id = HAL_AUDIO_Convert_DecId_to_ADECId(DecId);
4614*53ee8cc1Swenshuai.xi
4615*53ee8cc1Swenshuai.xi if ( adec_id < ADEC3 )
4616*53ee8cc1Swenshuai.xi {
4617*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_VERSION, adec_id, pParam->u32Version, 0);
4618*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_CHANNELS, adec_id, pParam->u32Channels, 0);
4619*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_SAMPLERATE, adec_id, pParam->u32SampleRate, 0);
4620*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_BYTERATE, adec_id, pParam->u32ByteRate, 0);
4621*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_BLOCKALIGN, adec_id, pParam->u32BlockAlign, 0);
4622*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_ENCOPT, adec_id, pParam->u32Encopt, 0);
4623*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_PARSINGBYAPP, adec_id, pParam->u32ParsingByApp, 0);
4624*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_BITS_PER_SAMPLE, adec_id, pParam->u32BitsPerSample, 0);
4625*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_CHANNELMASK, adec_id, pParam->u32ChannelMask, 0);
4626*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_DRC_PARAM_EXIST, adec_id, pParam->u32DrcParamExist, 0);
4627*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_DRC_RMS_AMP_REF, adec_id, pParam->u32DrcRmsAmpRef, 0);
4628*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_DRC_RMS_AMP_TARGET, adec_id, pParam->u32DrcRmsAmpTarget, 0);
4629*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_DRC_PEAK_AMP_REF, adec_id, pParam->u32DrcPeakAmpRef, 0);
4630*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_DRC_PEAK_AMP_TARGET, adec_id, pParam->u32DrcPeakAmpTarget, 0);
4631*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_MAX_PACKET_SIZE, adec_id, pParam->u32MaxPacketSize, 0);
4632*53ee8cc1Swenshuai.xi
4633*53ee8cc1Swenshuai.xi return TRUE;
4634*53ee8cc1Swenshuai.xi }
4635*53ee8cc1Swenshuai.xi else
4636*53ee8cc1Swenshuai.xi {
4637*53ee8cc1Swenshuai.xi return FALSE;
4638*53ee8cc1Swenshuai.xi }
4639*53ee8cc1Swenshuai.xi }
4640*53ee8cc1Swenshuai.xi
HAL_MAD_SetAudioParam2(AUDIO_DEC_ID DecId,Audio_ParamType paramType,MS_VIRT Param)4641*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_SetAudioParam2( AUDIO_DEC_ID DecId, Audio_ParamType paramType, MS_VIRT Param )
4642*53ee8cc1Swenshuai.xi {
4643*53ee8cc1Swenshuai.xi MS_BOOL bRet = TRUE;
4644*53ee8cc1Swenshuai.xi Audio_id adec_id = HAL_AUDIO_Convert_DecId_to_ADECId(DecId);
4645*53ee8cc1Swenshuai.xi
4646*53ee8cc1Swenshuai.xi HALMAD_CHECK_SHM_INIT;
4647*53ee8cc1Swenshuai.xi
4648*53ee8cc1Swenshuai.xi switch ( paramType )
4649*53ee8cc1Swenshuai.xi {
4650*53ee8cc1Swenshuai.xi case Audio_ParamType_setAudioDecoder:
4651*53ee8cc1Swenshuai.xi {
4652*53ee8cc1Swenshuai.xi En_DVB_decSystemType eAudioFormat;
4653*53ee8cc1Swenshuai.xi switch ( (MMA_AudioType) Param )
4654*53ee8cc1Swenshuai.xi {
4655*53ee8cc1Swenshuai.xi case Audio_DEC_PCM:
4656*53ee8cc1Swenshuai.xi case Audio_DEC_XPCM: eAudioFormat = MSAPI_AUD_DVB_XPCM; break;
4657*53ee8cc1Swenshuai.xi case Audio_DEC_MPEG: eAudioFormat = MSAPI_AUD_DVB_MPEG; break;
4658*53ee8cc1Swenshuai.xi case Audio_DEC_MP3: eAudioFormat = MSAPI_AUD_DVB_MP3; break;
4659*53ee8cc1Swenshuai.xi case Audio_DEC_AC3: eAudioFormat = MSAPI_AUD_DVB_AC3; break;
4660*53ee8cc1Swenshuai.xi case Audio_DEC_AC3P: eAudioFormat = MSAPI_AUD_DVB_AC3P; break;
4661*53ee8cc1Swenshuai.xi case Audio_DEC_AAC_LC:
4662*53ee8cc1Swenshuai.xi case Audio_DEC_HEAAC_V1:
4663*53ee8cc1Swenshuai.xi case Audio_DEC_HEAAC_V2: eAudioFormat = MSAPI_AUD_DVB_AAC; break;
4664*53ee8cc1Swenshuai.xi case Audio_DEC_DOLBYPULSE: eAudioFormat = MSAPI_AUD_DVB_MS10_DDT; break;
4665*53ee8cc1Swenshuai.xi case Audio_DEC_WMA: eAudioFormat = MSAPI_AUD_DVB_WMA; break;
4666*53ee8cc1Swenshuai.xi case Audio_DEC_WMAPRO: eAudioFormat = MSAPI_AUD_DVB_WMA_PRO; break;
4667*53ee8cc1Swenshuai.xi case Audio_DEC_RA8: eAudioFormat = MSAPI_AUD_DVB_RA8LBR; break;
4668*53ee8cc1Swenshuai.xi case Audio_DEC_DTS: eAudioFormat = MSAPI_AUD_DVB_DTS; break;
4669*53ee8cc1Swenshuai.xi case Audio_DEC_FLAC: eAudioFormat = MSAPI_AUD_DVB_FLAC; break;
4670*53ee8cc1Swenshuai.xi case Audio_DEC_VORBIS: eAudioFormat = MSAPI_AUD_DVB_VORBIS; break;
4671*53ee8cc1Swenshuai.xi case Audio_DEC_AMR_NB: eAudioFormat = MSAPI_AUD_DVB_AMR_NB; break;
4672*53ee8cc1Swenshuai.xi case Audio_DEC_AMR_WB: eAudioFormat = MSAPI_AUD_DVB_AMR_WB; break;
4673*53ee8cc1Swenshuai.xi case Audio_DEC_DRA: eAudioFormat = MSAPI_AUD_DVB_DRA; break;
4674*53ee8cc1Swenshuai.xi case Audio_DEC_DTSLBR: eAudioFormat = MSAPI_AUD_DVB_DTSLBR; break;
4675*53ee8cc1Swenshuai.xi case Audio_DEC_DTS_HD_ADO_R2: eAudioFormat = MSAPI_AUD_DVB_DTSHDADO; break;
4676*53ee8cc1Swenshuai.xi case Audio_DEC_KTV:
4677*53ee8cc1Swenshuai.xi case Audio_DEC_KTV2:
4678*53ee8cc1Swenshuai.xi default: eAudioFormat = MSAPI_AUD_DVB_INVALID; break;
4679*53ee8cc1Swenshuai.xi }
4680*53ee8cc1Swenshuai.xi bRet = HAL_AUDIO_SetSystem2(DecId, eAudioFormat);
4681*53ee8cc1Swenshuai.xi if ( bRet == TRUE )
4682*53ee8cc1Swenshuai.xi {
4683*53ee8cc1Swenshuai.xi g_AudioVars2->AudioDecStatus[DecId].bConnect= TRUE;
4684*53ee8cc1Swenshuai.xi g_AudioVars2->AudioDecStatus[DecId].eSourceType = E_AUDIO_INFO_MM_IN;
4685*53ee8cc1Swenshuai.xi g_AudioVars2->AudioDecStatus[DecId].eAudFormat = (En_DVB_decSystemType) eAudioFormat;
4686*53ee8cc1Swenshuai.xi }
4687*53ee8cc1Swenshuai.xi break;
4688*53ee8cc1Swenshuai.xi }
4689*53ee8cc1Swenshuai.xi
4690*53ee8cc1Swenshuai.xi case Audio_ParamType_playControl:
4691*53ee8cc1Swenshuai.xi {
4692*53ee8cc1Swenshuai.xi if ( DecId == AU_DEC_ID3 )
4693*53ee8cc1Swenshuai.xi {
4694*53ee8cc1Swenshuai.xi switch ( (MMA_AUDIO_CONTROL) Param )
4695*53ee8cc1Swenshuai.xi {
4696*53ee8cc1Swenshuai.xi case MMA_STOP:
4697*53ee8cc1Swenshuai.xi if ((g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_MM_IN) ||
4698*53ee8cc1Swenshuai.xi (g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_GAME_IN))
4699*53ee8cc1Swenshuai.xi {
4700*53ee8cc1Swenshuai.xi HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_STOP);
4701*53ee8cc1Swenshuai.xi }
4702*53ee8cc1Swenshuai.xi g_AudioVars2->u16DecodeFrmCnt[DecId] = 0;
4703*53ee8cc1Swenshuai.xi g_AudioVars2->g_bSePlayFileFlag = FALSE;
4704*53ee8cc1Swenshuai.xi break;
4705*53ee8cc1Swenshuai.xi
4706*53ee8cc1Swenshuai.xi case MMA_PLAY:
4707*53ee8cc1Swenshuai.xi HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_PLAY);
4708*53ee8cc1Swenshuai.xi break;
4709*53ee8cc1Swenshuai.xi
4710*53ee8cc1Swenshuai.xi case MMA_PLAY_FILETSP:
4711*53ee8cc1Swenshuai.xi HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_PLAYFILETSP);
4712*53ee8cc1Swenshuai.xi break;
4713*53ee8cc1Swenshuai.xi
4714*53ee8cc1Swenshuai.xi case MMA_RESYNC:
4715*53ee8cc1Swenshuai.xi HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_RESYNC);
4716*53ee8cc1Swenshuai.xi break;
4717*53ee8cc1Swenshuai.xi
4718*53ee8cc1Swenshuai.xi case MMA_PLAY_FILE:
4719*53ee8cc1Swenshuai.xi HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_PLAYFILE);
4720*53ee8cc1Swenshuai.xi break;
4721*53ee8cc1Swenshuai.xi
4722*53ee8cc1Swenshuai.xi case MMA_BROWSE:
4723*53ee8cc1Swenshuai.xi HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_STARTBROWSE);
4724*53ee8cc1Swenshuai.xi break;
4725*53ee8cc1Swenshuai.xi
4726*53ee8cc1Swenshuai.xi case MMA_PAUSE:
4727*53ee8cc1Swenshuai.xi HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_PAUSE);
4728*53ee8cc1Swenshuai.xi break;
4729*53ee8cc1Swenshuai.xi
4730*53ee8cc1Swenshuai.xi case MMA_PLAY_FRAME:
4731*53ee8cc1Swenshuai.xi HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_PLAYFRAME);
4732*53ee8cc1Swenshuai.xi break;
4733*53ee8cc1Swenshuai.xi
4734*53ee8cc1Swenshuai.xi case MMA_PLAY_FRAME_GS:
4735*53ee8cc1Swenshuai.xi if ((g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_MM_IN) ||
4736*53ee8cc1Swenshuai.xi (g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_GAME_IN))
4737*53ee8cc1Swenshuai.xi {
4738*53ee8cc1Swenshuai.xi HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_PLAYFRAME_GS);
4739*53ee8cc1Swenshuai.xi }
4740*53ee8cc1Swenshuai.xi break;
4741*53ee8cc1Swenshuai.xi
4742*53ee8cc1Swenshuai.xi case MMA_PLAY_AD:
4743*53ee8cc1Swenshuai.xi HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_PLAY_AD);
4744*53ee8cc1Swenshuai.xi g_bR2Adec2AD = TRUE;
4745*53ee8cc1Swenshuai.xi break;
4746*53ee8cc1Swenshuai.xi
4747*53ee8cc1Swenshuai.xi case MMA_STOP_AD:
4748*53ee8cc1Swenshuai.xi HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_STOP_AD);
4749*53ee8cc1Swenshuai.xi g_bR2Adec2AD = FALSE;
4750*53ee8cc1Swenshuai.xi break;
4751*53ee8cc1Swenshuai.xi
4752*53ee8cc1Swenshuai.xi case MMA_AVSYNC:
4753*53ee8cc1Swenshuai.xi HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_AVSYNC);
4754*53ee8cc1Swenshuai.xi break;
4755*53ee8cc1Swenshuai.xi
4756*53ee8cc1Swenshuai.xi case MMA_FREERUN:
4757*53ee8cc1Swenshuai.xi HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_FREERUN);
4758*53ee8cc1Swenshuai.xi break;
4759*53ee8cc1Swenshuai.xi
4760*53ee8cc1Swenshuai.xi default:
4761*53ee8cc1Swenshuai.xi break;
4762*53ee8cc1Swenshuai.xi }
4763*53ee8cc1Swenshuai.xi }
4764*53ee8cc1Swenshuai.xi else
4765*53ee8cc1Swenshuai.xi {
4766*53ee8cc1Swenshuai.xi switch ( (MMA_AUDIO_CONTROL) Param )
4767*53ee8cc1Swenshuai.xi {
4768*53ee8cc1Swenshuai.xi case MMA_STOP:
4769*53ee8cc1Swenshuai.xi if ((g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_MM_IN) ||
4770*53ee8cc1Swenshuai.xi (g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_GAME_IN))
4771*53ee8cc1Swenshuai.xi {
4772*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_STOP);
4773*53ee8cc1Swenshuai.xi }
4774*53ee8cc1Swenshuai.xi else
4775*53ee8cc1Swenshuai.xi {
4776*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DecId %d NOT used by ANDROID MM, used by %d !!\r\n", __FUNCTION__, DecId, g_AudioVars2->AudioDecStatus[DecId].eSourceType );
4777*53ee8cc1Swenshuai.xi }
4778*53ee8cc1Swenshuai.xi g_AudioVars2->u16DecodeFrmCnt[DecId] = 0;
4779*53ee8cc1Swenshuai.xi g_AudioVars2->g_bDecPlayFileFlag = FALSE;
4780*53ee8cc1Swenshuai.xi break;
4781*53ee8cc1Swenshuai.xi
4782*53ee8cc1Swenshuai.xi case MMA_PLAY:
4783*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PLAY);
4784*53ee8cc1Swenshuai.xi break;
4785*53ee8cc1Swenshuai.xi
4786*53ee8cc1Swenshuai.xi case MMA_PLAY_FILETSP:
4787*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PLAYFILETSP);
4788*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_FREERUN);
4789*53ee8cc1Swenshuai.xi break;
4790*53ee8cc1Swenshuai.xi
4791*53ee8cc1Swenshuai.xi case MMA_RESYNC:
4792*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_RESYNC);
4793*53ee8cc1Swenshuai.xi break;
4794*53ee8cc1Swenshuai.xi
4795*53ee8cc1Swenshuai.xi case MMA_PLAY_FILE:
4796*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PLAYFILE);
4797*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_FREERUN);
4798*53ee8cc1Swenshuai.xi break;
4799*53ee8cc1Swenshuai.xi
4800*53ee8cc1Swenshuai.xi case MMA_BROWSE:
4801*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_STARTBROWSE);
4802*53ee8cc1Swenshuai.xi break;
4803*53ee8cc1Swenshuai.xi
4804*53ee8cc1Swenshuai.xi case MMA_PAUSE:
4805*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PAUSE);
4806*53ee8cc1Swenshuai.xi break;
4807*53ee8cc1Swenshuai.xi
4808*53ee8cc1Swenshuai.xi case MMA_PLAY_FRAME:
4809*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PLAYFRAME);
4810*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_FREERUN);
4811*53ee8cc1Swenshuai.xi break;
4812*53ee8cc1Swenshuai.xi
4813*53ee8cc1Swenshuai.xi case MMA_PLAY_FRAME_GS:
4814*53ee8cc1Swenshuai.xi if ((g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_MM_IN) ||
4815*53ee8cc1Swenshuai.xi (g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_GAME_IN))
4816*53ee8cc1Swenshuai.xi {
4817*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PLAYFRAME_GS);
4818*53ee8cc1Swenshuai.xi }
4819*53ee8cc1Swenshuai.xi break;
4820*53ee8cc1Swenshuai.xi
4821*53ee8cc1Swenshuai.xi case MMA_PLAY_AD:
4822*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PLAY_AD);
4823*53ee8cc1Swenshuai.xi g_bR2Adec1AD = TRUE;
4824*53ee8cc1Swenshuai.xi break;
4825*53ee8cc1Swenshuai.xi
4826*53ee8cc1Swenshuai.xi case MMA_STOP_AD:
4827*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_STOP_AD);
4828*53ee8cc1Swenshuai.xi g_bR2Adec1AD = FALSE;
4829*53ee8cc1Swenshuai.xi break;
4830*53ee8cc1Swenshuai.xi
4831*53ee8cc1Swenshuai.xi case MMA_AVSYNC:
4832*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_AVSYNC);
4833*53ee8cc1Swenshuai.xi break;
4834*53ee8cc1Swenshuai.xi
4835*53ee8cc1Swenshuai.xi case MMA_FREERUN:
4836*53ee8cc1Swenshuai.xi HAL_MAD_SetDecCmd(AU_DVB_DECCMD_FREERUN);
4837*53ee8cc1Swenshuai.xi break;
4838*53ee8cc1Swenshuai.xi
4839*53ee8cc1Swenshuai.xi default:
4840*53ee8cc1Swenshuai.xi break;
4841*53ee8cc1Swenshuai.xi }
4842*53ee8cc1Swenshuai.xi }
4843*53ee8cc1Swenshuai.xi break;
4844*53ee8cc1Swenshuai.xi }
4845*53ee8cc1Swenshuai.xi
4846*53ee8cc1Swenshuai.xi case Audio_ParamType_SoundMode: //HAL_MAD_SetSoundMode
4847*53ee8cc1Swenshuai.xi {
4848*53ee8cc1Swenshuai.xi if ( DecId == AU_DEC_ID1 )
4849*53ee8cc1Swenshuai.xi {
4850*53ee8cc1Swenshuai.xi HAL_AUDIO_SeWriteMaskByte(REG_MB_MODE_SELECT, 0x03, (AU_DVB_MODE) Param);
4851*53ee8cc1Swenshuai.xi }
4852*53ee8cc1Swenshuai.xi else
4853*53ee8cc1Swenshuai.xi {
4854*53ee8cc1Swenshuai.xi HAL_AUDIO_SeWriteMaskByte(REG_MB_MODE_SELECT, 0x0C, ((AU_DVB_MODE)Param) << 2);
4855*53ee8cc1Swenshuai.xi }
4856*53ee8cc1Swenshuai.xi break;
4857*53ee8cc1Swenshuai.xi }
4858*53ee8cc1Swenshuai.xi
4859*53ee8cc1Swenshuai.xi case Audio_ParamType_PTS_info:
4860*53ee8cc1Swenshuai.xi {
4861*53ee8cc1Swenshuai.xi HAL_AUDIO_PTS_info(Param);
4862*53ee8cc1Swenshuai.xi break;
4863*53ee8cc1Swenshuai.xi }
4864*53ee8cc1Swenshuai.xi
4865*53ee8cc1Swenshuai.xi case Audio_ParamType_syncSTC:
4866*53ee8cc1Swenshuai.xi {
4867*53ee8cc1Swenshuai.xi if ( Param )
4868*53ee8cc1Swenshuai.xi {
4869*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_TS_SYNC_STC, ADEC1, 1, 0);
4870*53ee8cc1Swenshuai.xi }
4871*53ee8cc1Swenshuai.xi else
4872*53ee8cc1Swenshuai.xi {
4873*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_TS_SYNC_STC, ADEC1, 0, 0);
4874*53ee8cc1Swenshuai.xi }
4875*53ee8cc1Swenshuai.xi break;
4876*53ee8cc1Swenshuai.xi }
4877*53ee8cc1Swenshuai.xi
4878*53ee8cc1Swenshuai.xi case Audio_ParamType_acMode:
4879*53ee8cc1Swenshuai.xi {
4880*53ee8cc1Swenshuai.xi // DD, DDP, HEAAC
4881*53ee8cc1Swenshuai.xi switch ( (AUD_Dolby_SOUNDMODE) Param )
4882*53ee8cc1Swenshuai.xi {
4883*53ee8cc1Swenshuai.xi case AUD_Dolby_SOUNDMODE_LR: Param = 0x0; break;
4884*53ee8cc1Swenshuai.xi case AUD_Dolby_SOUNDMODE_LL: Param = 0x1; break;
4885*53ee8cc1Swenshuai.xi case AUD_Dolby_SOUNDMODE_RR: Param = 0x2; break;
4886*53ee8cc1Swenshuai.xi default: Param = 0x0; break;
4887*53ee8cc1Swenshuai.xi }
4888*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_SOUND_MODE, ADEC1, Param, 0);
4889*53ee8cc1Swenshuai.xi HAL_SND_R2_Set_SHM_PARAM(R2_SHM_PARAM_PCMR_SOUND_MODE, ADEC1, Param, 0);
4890*53ee8cc1Swenshuai.xi break;
4891*53ee8cc1Swenshuai.xi }
4892*53ee8cc1Swenshuai.xi
4893*53ee8cc1Swenshuai.xi case Audio_ParamType_reqDataSize:
4894*53ee8cc1Swenshuai.xi {
4895*53ee8cc1Swenshuai.xi if ( DecId == AU_DEC_ID3 )
4896*53ee8cc1Swenshuai.xi {
4897*53ee8cc1Swenshuai.xi if ( (HAL_AUR2_ReadByte(REG_R2_DECODE2_CMD) & 0x7F) != 0 )
4898*53ee8cc1Swenshuai.xi {
4899*53ee8cc1Swenshuai.xi break;
4900*53ee8cc1Swenshuai.xi }
4901*53ee8cc1Swenshuai.xi }
4902*53ee8cc1Swenshuai.xi else
4903*53ee8cc1Swenshuai.xi {
4904*53ee8cc1Swenshuai.xi if ( (HAL_AUR2_ReadByte(REG_R2_DECODE1_CMD) & 0x7F) != 0 )
4905*53ee8cc1Swenshuai.xi {
4906*53ee8cc1Swenshuai.xi break;
4907*53ee8cc1Swenshuai.xi }
4908*53ee8cc1Swenshuai.xi }
4909*53ee8cc1Swenshuai.xi
4910*53ee8cc1Swenshuai.xi switch ( (FILE_SIZE) Param )
4911*53ee8cc1Swenshuai.xi {
4912*53ee8cc1Swenshuai.xi case FILE_SIZE_64: Param = 0x0004; break;
4913*53ee8cc1Swenshuai.xi case FILE_SIZE_128: Param = 0x0008; break;
4914*53ee8cc1Swenshuai.xi case FILE_SIZE_256: Param = 0x0010; break;
4915*53ee8cc1Swenshuai.xi case FILE_SIZE_512: Param = 0x0020; break;
4916*53ee8cc1Swenshuai.xi case FILE_SIZE_1KB: Param = 0x0040; break;
4917*53ee8cc1Swenshuai.xi case FILE_SIZE_2KB: Param = 0x0080; break;
4918*53ee8cc1Swenshuai.xi case FILE_SIZE_4KB: Param = 0x0100; break;
4919*53ee8cc1Swenshuai.xi case FILE_SIZE_8KB: Param = 0x0200; break;
4920*53ee8cc1Swenshuai.xi case FILE_SIZE_16KB: Param = 0x0400; break;
4921*53ee8cc1Swenshuai.xi case FILE_SIZE_32KB: Param = 0x0800; break;
4922*53ee8cc1Swenshuai.xi case FILE_SIZE_64KB: Param = 0x1000; break;
4923*53ee8cc1Swenshuai.xi default: Param = 0x0100; break; // default = 2KB
4924*53ee8cc1Swenshuai.xi }
4925*53ee8cc1Swenshuai.xi
4926*53ee8cc1Swenshuai.xi if(adec_id >= MAX_ADEC) // SHM only has 2 mem
4927*53ee8cc1Swenshuai.xi {
4928*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: adec_id %d not Supported\n", __FUNCTION__, adec_id );
4929*53ee8cc1Swenshuai.xi return FALSE;
4930*53ee8cc1Swenshuai.xi }
4931*53ee8cc1Swenshuai.xi
4932*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_FILE_REQ_SIZE, adec_id, Param, 0);
4933*53ee8cc1Swenshuai.xi break;
4934*53ee8cc1Swenshuai.xi }
4935*53ee8cc1Swenshuai.xi
4936*53ee8cc1Swenshuai.xi case Audio_ParamType_MM_FFx2:
4937*53ee8cc1Swenshuai.xi {
4938*53ee8cc1Swenshuai.xi if(adec_id >= MAX_ADEC) // SHM only has 2 mem
4939*53ee8cc1Swenshuai.xi {
4940*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: adec_id %d not Supported\n", __FUNCTION__, adec_id );
4941*53ee8cc1Swenshuai.xi return FALSE;
4942*53ee8cc1Swenshuai.xi }
4943*53ee8cc1Swenshuai.xi
4944*53ee8cc1Swenshuai.xi if ( Param )
4945*53ee8cc1Swenshuai.xi {
4946*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_FF2X, adec_id, 1, 0);
4947*53ee8cc1Swenshuai.xi }
4948*53ee8cc1Swenshuai.xi else
4949*53ee8cc1Swenshuai.xi {
4950*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_FF2X, adec_id, 0, 0);
4951*53ee8cc1Swenshuai.xi }
4952*53ee8cc1Swenshuai.xi break;
4953*53ee8cc1Swenshuai.xi }
4954*53ee8cc1Swenshuai.xi
4955*53ee8cc1Swenshuai.xi case Audio_ParamType_mute:
4956*53ee8cc1Swenshuai.xi {
4957*53ee8cc1Swenshuai.xi if(adec_id >= MAX_ADEC) // SHM only has 2 mem
4958*53ee8cc1Swenshuai.xi {
4959*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: adec_id %d not Supported\n", __FUNCTION__, adec_id );
4960*53ee8cc1Swenshuai.xi return FALSE;
4961*53ee8cc1Swenshuai.xi }
4962*53ee8cc1Swenshuai.xi
4963*53ee8cc1Swenshuai.xi if ( Param )
4964*53ee8cc1Swenshuai.xi {
4965*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DECODE_MUTE, adec_id, 1, 0);
4966*53ee8cc1Swenshuai.xi }
4967*53ee8cc1Swenshuai.xi else
4968*53ee8cc1Swenshuai.xi {
4969*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DECODE_MUTE, adec_id, 0, 0);
4970*53ee8cc1Swenshuai.xi }
4971*53ee8cc1Swenshuai.xi break;
4972*53ee8cc1Swenshuai.xi }
4973*53ee8cc1Swenshuai.xi
4974*53ee8cc1Swenshuai.xi case Audio_ParamType_predecode:
4975*53ee8cc1Swenshuai.xi {
4976*53ee8cc1Swenshuai.xi printf("Currently, it is not used\n");
4977*53ee8cc1Swenshuai.xi break;
4978*53ee8cc1Swenshuai.xi }
4979*53ee8cc1Swenshuai.xi
4980*53ee8cc1Swenshuai.xi case Audio_ParamType_esBuf_informDataRdy:
4981*53ee8cc1Swenshuai.xi break;
4982*53ee8cc1Swenshuai.xi
4983*53ee8cc1Swenshuai.xi case Audio_ParamType_setWMADecParam:
4984*53ee8cc1Swenshuai.xi bRet = HAL_MAD_WMA_SetASFParm2(DecId, (Audio_ASF_Param *) Param);
4985*53ee8cc1Swenshuai.xi break;
4986*53ee8cc1Swenshuai.xi
4987*53ee8cc1Swenshuai.xi case Audio_ParamType_setCOOKDecParam:
4988*53ee8cc1Swenshuai.xi bRet = HAL_MAD_COOK_setParam2(DecId, (Audio_COOK_Param *) Param);
4989*53ee8cc1Swenshuai.xi break;
4990*53ee8cc1Swenshuai.xi
4991*53ee8cc1Swenshuai.xi case Audio_ParamType_setXPCMDecParam:
4992*53ee8cc1Swenshuai.xi bRet = HAL_MAD_XPCM_setParam2(DecId, (Audio_XPCM_Param *) Param);
4993*53ee8cc1Swenshuai.xi break;
4994*53ee8cc1Swenshuai.xi
4995*53ee8cc1Swenshuai.xi case Audio_ParamType_UNI_PCM3_Input_Addr:
4996*53ee8cc1Swenshuai.xi printf("Currently, it is not used\n"); // transfer to line unit
4997*53ee8cc1Swenshuai.xi break;
4998*53ee8cc1Swenshuai.xi
4999*53ee8cc1Swenshuai.xi case Audio_ParamType_UNI_NEED_DECODE_FRMCNT:
5000*53ee8cc1Swenshuai.xi
5001*53ee8cc1Swenshuai.xi if(adec_id >= MAX_ADEC) // SHM only has 2 mem
5002*53ee8cc1Swenshuai.xi {
5003*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: adec_id %d not Supported\n", __FUNCTION__, adec_id );
5004*53ee8cc1Swenshuai.xi return FALSE;
5005*53ee8cc1Swenshuai.xi }
5006*53ee8cc1Swenshuai.xi
5007*53ee8cc1Swenshuai.xi HALMAD_PRINT("\r\n=====ID:%X Audio_ParamType_UNI_NEED_DECODE_FRMCNT =0x%X==========\r\n", adec_id, (unsigned int)Param);
5008*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_UNI_SETUP_DECODE_FRMCNT, adec_id, Param, 0);
5009*53ee8cc1Swenshuai.xi break;
5010*53ee8cc1Swenshuai.xi
5011*53ee8cc1Swenshuai.xi case Audio_ParamType_UNI_ES_Wptr: // OMX Wptr = offset to MAD start address
5012*53ee8cc1Swenshuai.xi if(adec_id == ADEC2) // ES For 2nd Decoder
5013*53ee8cc1Swenshuai.xi {
5014*53ee8cc1Swenshuai.xi Param = Param - (MS_U32)(ADEC__R2_DDR_SIZE + ASND__R2_DDR_SIZE + OFFSET_ES3_DRAM_ADDR);
5015*53ee8cc1Swenshuai.xi }
5016*53ee8cc1Swenshuai.xi else // ES For 1st Decoder
5017*53ee8cc1Swenshuai.xi {
5018*53ee8cc1Swenshuai.xi Param = Param - (MS_U32)(ADEC__R2_DDR_SIZE + ASND__R2_DDR_SIZE + OFFSET_ES1_DRAM_ADDR);
5019*53ee8cc1Swenshuai.xi }
5020*53ee8cc1Swenshuai.xi
5021*53ee8cc1Swenshuai.xi if(adec_id >= MAX_ADEC) // SHM only has 2 mem
5022*53ee8cc1Swenshuai.xi {
5023*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: adec_id %d not Supported\n", __FUNCTION__, adec_id );
5024*53ee8cc1Swenshuai.xi return FALSE;
5025*53ee8cc1Swenshuai.xi }
5026*53ee8cc1Swenshuai.xi
5027*53ee8cc1Swenshuai.xi #if OMX_AUDIO_DEBUG
5028*53ee8cc1Swenshuai.xi HALMAD_PRINT("\r\n===== ID:%X Audio_ParamType_UNI_ES_Wptr =0x%X==========\r\n", adec_id, (unsigned int)Param);
5029*53ee8cc1Swenshuai.xi #endif
5030*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, adec_id, Param, 0);
5031*53ee8cc1Swenshuai.xi break;
5032*53ee8cc1Swenshuai.xi
5033*53ee8cc1Swenshuai.xi case Audio_ParamType_UNI_PCMOutCnt:
5034*53ee8cc1Swenshuai.xi {
5035*53ee8cc1Swenshuai.xi if(adec_id < MAX_ADEC)
5036*53ee8cc1Swenshuai.xi {
5037*53ee8cc1Swenshuai.xi uniPlay_ackCnt[adec_id]++;
5038*53ee8cc1Swenshuai.xi HALMAD_PRINT("\r\nTrigger decInt[%d] %d\r\n", adec_id, (int)uniPlay_ackCnt[adec_id]);
5039*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_UNI_PCM_SET_OUTPUT_CNT, adec_id, Param, 0);
5040*53ee8cc1Swenshuai.xi }
5041*53ee8cc1Swenshuai.xi else
5042*53ee8cc1Swenshuai.xi {
5043*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: adec_id %d over array size !!\r\n", __FUNCTION__, adec_id);
5044*53ee8cc1Swenshuai.xi return FALSE;
5045*53ee8cc1Swenshuai.xi }
5046*53ee8cc1Swenshuai.xi break;
5047*53ee8cc1Swenshuai.xi }
5048*53ee8cc1Swenshuai.xi
5049*53ee8cc1Swenshuai.xi case Audio_ParamType_AllocDecoder:
5050*53ee8cc1Swenshuai.xi {
5051*53ee8cc1Swenshuai.xi // This case only used for OMX case
5052*53ee8cc1Swenshuai.xi HALMAD_PRINT("\r\n=====DecID:%X Audio_ParamType_AllocDecoder =0x%X==========\r\n", (unsigned int)DecId, (unsigned int)Param);
5053*53ee8cc1Swenshuai.xi MMA_AudioType eAudioType = (MMA_AudioType) Param;
5054*53ee8cc1Swenshuai.xi MMA_AudioType eAudioCaps;
5055*53ee8cc1Swenshuai.xi AudioDecStatus_t AudioDecStatus;
5056*53ee8cc1Swenshuai.xi AUDIO_OUTPORT_SOURCE_TYPE eGroup = E_CONNECT_NULL;
5057*53ee8cc1Swenshuai.xi
5058*53ee8cc1Swenshuai.xi OS_OBTAIN_MUTEX(_s32MutexLoadCode, MSOS_WAIT_FOREVER);
5059*53ee8cc1Swenshuai.xi
5060*53ee8cc1Swenshuai.xi memset(&AudioDecStatus, 0, sizeof(AudioDecStatus_t));
5061*53ee8cc1Swenshuai.xi
5062*53ee8cc1Swenshuai.xi if ( g_AudioVars2->AudioDecStatus[DecId].bConnect == TRUE )
5063*53ee8cc1Swenshuai.xi {
5064*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DecId %d in Used !!\r\n", __FUNCTION__, DecId);
5065*53ee8cc1Swenshuai.xi bRet = FALSE;
5066*53ee8cc1Swenshuai.xi
5067*53ee8cc1Swenshuai.xi OS_RELEASE_MUTEX(_s32MutexLoadCode);
5068*53ee8cc1Swenshuai.xi
5069*53ee8cc1Swenshuai.xi break;
5070*53ee8cc1Swenshuai.xi }
5071*53ee8cc1Swenshuai.xi
5072*53ee8cc1Swenshuai.xi eAudioCaps = _GetAudioCaps(DecId);
5073*53ee8cc1Swenshuai.xi
5074*53ee8cc1Swenshuai.xi if ( (eAudioCaps & eAudioType) == eAudioType )
5075*53ee8cc1Swenshuai.xi {
5076*53ee8cc1Swenshuai.xi En_DVB_decSystemType eAudioFormat;
5077*53ee8cc1Swenshuai.xi switch ( eAudioType )
5078*53ee8cc1Swenshuai.xi {
5079*53ee8cc1Swenshuai.xi case Audio_DEC_PCM:
5080*53ee8cc1Swenshuai.xi case Audio_DEC_XPCM: eAudioFormat = MSAPI_AUD_DVB_XPCM; break;
5081*53ee8cc1Swenshuai.xi case Audio_DEC_MPEG: eAudioFormat = MSAPI_AUD_DVB_MPEG; break;
5082*53ee8cc1Swenshuai.xi case Audio_DEC_MP3: eAudioFormat = MSAPI_AUD_DVB_MP3; break;
5083*53ee8cc1Swenshuai.xi case Audio_DEC_AC3: eAudioFormat = MSAPI_AUD_DVB_AC3; break;
5084*53ee8cc1Swenshuai.xi case Audio_DEC_AC3P: eAudioFormat = MSAPI_AUD_DVB_AC3P; break;
5085*53ee8cc1Swenshuai.xi case Audio_DEC_AAC_LC:
5086*53ee8cc1Swenshuai.xi case Audio_DEC_HEAAC_V1:
5087*53ee8cc1Swenshuai.xi case Audio_DEC_HEAAC_V2: eAudioFormat = MSAPI_AUD_DVB_AAC; break;
5088*53ee8cc1Swenshuai.xi case Audio_DEC_DOLBYPULSE: eAudioFormat = MSAPI_AUD_DVB_MS10_DDT; break;
5089*53ee8cc1Swenshuai.xi case Audio_DEC_WMA: eAudioFormat = MSAPI_AUD_DVB_WMA; break;
5090*53ee8cc1Swenshuai.xi case Audio_DEC_WMAPRO: eAudioFormat = MSAPI_AUD_DVB_WMA_PRO; break;
5091*53ee8cc1Swenshuai.xi case Audio_DEC_RA8: eAudioFormat = MSAPI_AUD_DVB_RA8LBR; break;
5092*53ee8cc1Swenshuai.xi case Audio_DEC_DTS: eAudioFormat = MSAPI_AUD_DVB_DTS; break;
5093*53ee8cc1Swenshuai.xi case Audio_DEC_FLAC: eAudioFormat = MSAPI_AUD_DVB_FLAC; break;
5094*53ee8cc1Swenshuai.xi case Audio_DEC_VORBIS: eAudioFormat = MSAPI_AUD_DVB_VORBIS; break;
5095*53ee8cc1Swenshuai.xi case Audio_DEC_AMR_NB: eAudioFormat = MSAPI_AUD_DVB_AMR_NB; break;
5096*53ee8cc1Swenshuai.xi case Audio_DEC_AMR_WB: eAudioFormat = MSAPI_AUD_DVB_AMR_WB; break;
5097*53ee8cc1Swenshuai.xi case Audio_DEC_DRA: eAudioFormat = MSAPI_AUD_DVB_DRA; break;
5098*53ee8cc1Swenshuai.xi case Audio_DEC_DTSLBR: eAudioFormat = MSAPI_AUD_DVB_DTSLBR; break;
5099*53ee8cc1Swenshuai.xi case Audio_DEC_DTS_HD_ADO_R2: eAudioFormat = MSAPI_AUD_DVB_DTSHDADO; break;
5100*53ee8cc1Swenshuai.xi case Audio_DEC_KTV:
5101*53ee8cc1Swenshuai.xi case Audio_DEC_KTV2:
5102*53ee8cc1Swenshuai.xi default: eAudioFormat = MSAPI_AUD_DVB_INVALID; break;
5103*53ee8cc1Swenshuai.xi }
5104*53ee8cc1Swenshuai.xi
5105*53ee8cc1Swenshuai.xi if (DecId == AU_DEC_ID3)
5106*53ee8cc1Swenshuai.xi {
5107*53ee8cc1Swenshuai.xi eGroup = E_CONNECT_MAIN;
5108*53ee8cc1Swenshuai.xi }
5109*53ee8cc1Swenshuai.xi else
5110*53ee8cc1Swenshuai.xi {
5111*53ee8cc1Swenshuai.xi eGroup = E_CONNECT_SUB;
5112*53ee8cc1Swenshuai.xi }
5113*53ee8cc1Swenshuai.xi
5114*53ee8cc1Swenshuai.xi AudioDecStatus.eSourceType = E_AUDIO_INFO_MM_IN;
5115*53ee8cc1Swenshuai.xi AudioDecStatus.eAudFormat = eAudioFormat;
5116*53ee8cc1Swenshuai.xi AudioDecStatus.eGroup = eGroup;
5117*53ee8cc1Swenshuai.xi AudioDecStatus.eMMType = AUDIO_MM_OMX;
5118*53ee8cc1Swenshuai.xi
5119*53ee8cc1Swenshuai.xi bRet = HAL_AUDIO_SetDecodeSystem(DecId, &AudioDecStatus);
5120*53ee8cc1Swenshuai.xi if ( bRet == TRUE )
5121*53ee8cc1Swenshuai.xi {
5122*53ee8cc1Swenshuai.xi memcpy(&g_AudioVars2->AudioDecStatus[DecId], &AudioDecStatus, sizeof(AudioDecStatus_t));
5123*53ee8cc1Swenshuai.xi g_AudioVars2->AudioDecStatus[DecId].bConnect = TRUE;
5124*53ee8cc1Swenshuai.xi }
5125*53ee8cc1Swenshuai.xi }
5126*53ee8cc1Swenshuai.xi else
5127*53ee8cc1Swenshuai.xi {
5128*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DecId %d Audio Type (0x%08X) not Support !!\r\n", __FUNCTION__, DecId, g_AudioVars2->AudioDecStatus[DecId].eAudFormat );
5129*53ee8cc1Swenshuai.xi bRet = FALSE;
5130*53ee8cc1Swenshuai.xi }
5131*53ee8cc1Swenshuai.xi
5132*53ee8cc1Swenshuai.xi OS_RELEASE_MUTEX(_s32MutexLoadCode);
5133*53ee8cc1Swenshuai.xi
5134*53ee8cc1Swenshuai.xi break;
5135*53ee8cc1Swenshuai.xi }
5136*53ee8cc1Swenshuai.xi
5137*53ee8cc1Swenshuai.xi case Audio_ParamType_FreeDecoder:
5138*53ee8cc1Swenshuai.xi
5139*53ee8cc1Swenshuai.xi OS_OBTAIN_MUTEX(_s32MutexLoadCode, MSOS_WAIT_FOREVER);
5140*53ee8cc1Swenshuai.xi
5141*53ee8cc1Swenshuai.xi if ( g_AudioVars2->AudioDecStatus[DecId].bConnect == TRUE )
5142*53ee8cc1Swenshuai.xi {
5143*53ee8cc1Swenshuai.xi if ((g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_MM_IN) ||
5144*53ee8cc1Swenshuai.xi (g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_GAME_IN))
5145*53ee8cc1Swenshuai.xi {
5146*53ee8cc1Swenshuai.xi memset(&g_AudioVars2->AudioDecStatus[DecId], 0, sizeof(AudioDecStatus_t));
5147*53ee8cc1Swenshuai.xi if ( DecId == AU_DEC_ID1 )
5148*53ee8cc1Swenshuai.xi {
5149*53ee8cc1Swenshuai.xi g_AudioVars2->g_DspCodeType = AU_DVB_NONE;
5150*53ee8cc1Swenshuai.xi }
5151*53ee8cc1Swenshuai.xi else if ( DecId == AU_DEC_ID3 )
5152*53ee8cc1Swenshuai.xi {
5153*53ee8cc1Swenshuai.xi g_AudioVars2->g_Dsp2CodeType = AU_DVB_NONE;
5154*53ee8cc1Swenshuai.xi }
5155*53ee8cc1Swenshuai.xi }
5156*53ee8cc1Swenshuai.xi else
5157*53ee8cc1Swenshuai.xi {
5158*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DecId %d NOT used by ANDROID MM, used by %d !!\r\n", __FUNCTION__, DecId, g_AudioVars2->AudioDecStatus[DecId].eSourceType);
5159*53ee8cc1Swenshuai.xi }
5160*53ee8cc1Swenshuai.xi }
5161*53ee8cc1Swenshuai.xi else
5162*53ee8cc1Swenshuai.xi {
5163*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DecId %d NOT in USED !!\r\n", __FUNCTION__, DecId);
5164*53ee8cc1Swenshuai.xi bRet = FALSE;
5165*53ee8cc1Swenshuai.xi }
5166*53ee8cc1Swenshuai.xi
5167*53ee8cc1Swenshuai.xi OS_RELEASE_MUTEX(_s32MutexLoadCode);
5168*53ee8cc1Swenshuai.xi
5169*53ee8cc1Swenshuai.xi break;
5170*53ee8cc1Swenshuai.xi
5171*53ee8cc1Swenshuai.xi case Audio_ParamType_omx_spdif_mode:
5172*53ee8cc1Swenshuai.xi if ( adec_id < ADEC3 )
5173*53ee8cc1Swenshuai.xi {
5174*53ee8cc1Swenshuai.xi MS_U32 u32SpdifParam;
5175*53ee8cc1Swenshuai.xi Audio_OMX_SPDIF_Param eMode;
5176*53ee8cc1Swenshuai.xi u32SpdifParam = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_OMX_SPDIF_CTRL, adec_id, 0);
5177*53ee8cc1Swenshuai.xi eMode = (Audio_OMX_SPDIF_Param) Param;
5178*53ee8cc1Swenshuai.xi if ( eMode == Audio_OMX_SPDIF_ON )
5179*53ee8cc1Swenshuai.xi {
5180*53ee8cc1Swenshuai.xi u32SpdifParam |= 0x00000001;
5181*53ee8cc1Swenshuai.xi }
5182*53ee8cc1Swenshuai.xi else
5183*53ee8cc1Swenshuai.xi {
5184*53ee8cc1Swenshuai.xi u32SpdifParam &= 0xFFFFFFFE;
5185*53ee8cc1Swenshuai.xi }
5186*53ee8cc1Swenshuai.xi //HALMAD_ERROR ("%s: DecId %d SpdifParam 0x%08X !!\r\n", __FUNCTION__, DecId, u32SpdifParam);
5187*53ee8cc1Swenshuai.xi if ( (bRet = HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_OMX_SPDIF_CTRL, adec_id, u32SpdifParam, 0)) != TRUE )
5188*53ee8cc1Swenshuai.xi {
5189*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DecId %d Fail to switch SPDIF mode to %s !!\r\n", __FUNCTION__, DecId, (eMode == Audio_OMX_SPDIF_ON ? "ON" : "OFF"));
5190*53ee8cc1Swenshuai.xi }
5191*53ee8cc1Swenshuai.xi }
5192*53ee8cc1Swenshuai.xi else
5193*53ee8cc1Swenshuai.xi {
5194*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: Param Type %d DecId %d Un-Support Now !!\r\n", __FUNCTION__, Audio_ParamType_omx_spdif_mode, DecId);
5195*53ee8cc1Swenshuai.xi bRet = FALSE;
5196*53ee8cc1Swenshuai.xi }
5197*53ee8cc1Swenshuai.xi break;
5198*53ee8cc1Swenshuai.xi
5199*53ee8cc1Swenshuai.xi case Audio_ParamType_omx_spdif_play:
5200*53ee8cc1Swenshuai.xi
5201*53ee8cc1Swenshuai.xi if ( adec_id < ADEC3 )
5202*53ee8cc1Swenshuai.xi {
5203*53ee8cc1Swenshuai.xi MS_U32 u32SpdifParam;
5204*53ee8cc1Swenshuai.xi Audio_OMX_SPDIF_Param eMode;
5205*53ee8cc1Swenshuai.xi u32SpdifParam = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_OMX_SPDIF_CTRL, adec_id, 0);
5206*53ee8cc1Swenshuai.xi eMode = (Audio_OMX_SPDIF_Param) Param;
5207*53ee8cc1Swenshuai.xi if ( eMode == Audio_OMX_SPDIF_PLAY )
5208*53ee8cc1Swenshuai.xi {
5209*53ee8cc1Swenshuai.xi u32SpdifParam |= 0x00000002;
5210*53ee8cc1Swenshuai.xi }
5211*53ee8cc1Swenshuai.xi else
5212*53ee8cc1Swenshuai.xi {
5213*53ee8cc1Swenshuai.xi u32SpdifParam &= 0xFFFFFFFD;
5214*53ee8cc1Swenshuai.xi }
5215*53ee8cc1Swenshuai.xi //HALMAD_ERROR ("%s: DecId %d SpdifParam 0x%08X !!\r\n", __FUNCTION__, DecId, u32SpdifParam);
5216*53ee8cc1Swenshuai.xi if ( (bRet = HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_OMX_SPDIF_CTRL, adec_id, u32SpdifParam, 0)) != TRUE )
5217*53ee8cc1Swenshuai.xi {
5218*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DecId %d Fail to switch SPDIF mode to %s !!\r\n", __FUNCTION__, DecId, (eMode == Audio_OMX_SPDIF_ON ? "ON" : "OFF"));
5219*53ee8cc1Swenshuai.xi }
5220*53ee8cc1Swenshuai.xi }
5221*53ee8cc1Swenshuai.xi else
5222*53ee8cc1Swenshuai.xi {
5223*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: Param Type %d DecId %d Un-Support Now !!\r\n", __FUNCTION__, Audio_ParamType_omx_spdif_play, DecId);
5224*53ee8cc1Swenshuai.xi bRet = FALSE;
5225*53ee8cc1Swenshuai.xi }
5226*53ee8cc1Swenshuai.xi break;
5227*53ee8cc1Swenshuai.xi
5228*53ee8cc1Swenshuai.xi case Audio_ParamType_omx_spdif_pcmLevel:
5229*53ee8cc1Swenshuai.xi
5230*53ee8cc1Swenshuai.xi if ( adec_id < ADEC3 )
5231*53ee8cc1Swenshuai.xi {
5232*53ee8cc1Swenshuai.xi if ( (bRet = HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_OMX_SPDIF_PCM_LEVEL, adec_id, Param, 0)) != TRUE )
5233*53ee8cc1Swenshuai.xi {
5234*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DecId %d Fail to setup PCM Level !!\r\n", __FUNCTION__, DecId);
5235*53ee8cc1Swenshuai.xi }
5236*53ee8cc1Swenshuai.xi }
5237*53ee8cc1Swenshuai.xi else
5238*53ee8cc1Swenshuai.xi {
5239*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: Param Type %d DecId %d Un-Support Now !!\r\n", __FUNCTION__, Audio_ParamType_omx_spdif_pcmLevel, DecId);
5240*53ee8cc1Swenshuai.xi bRet = FALSE;
5241*53ee8cc1Swenshuai.xi }
5242*53ee8cc1Swenshuai.xi break;
5243*53ee8cc1Swenshuai.xi
5244*53ee8cc1Swenshuai.xi case Audio_R2_Set_NonPcm_Sel:
5245*53ee8cc1Swenshuai.xi {
5246*53ee8cc1Swenshuai.xi g_AudioVars2->g_R2_NonPcm_Sel = adec_id;
5247*53ee8cc1Swenshuai.xi }
5248*53ee8cc1Swenshuai.xi break;
5249*53ee8cc1Swenshuai.xi
5250*53ee8cc1Swenshuai.xi case Audio_ParamType_Abs_ReadReg_Target:
5251*53ee8cc1Swenshuai.xi {
5252*53ee8cc1Swenshuai.xi g_ReadTargetAddr = Param;
5253*53ee8cc1Swenshuai.xi }
5254*53ee8cc1Swenshuai.xi break;
5255*53ee8cc1Swenshuai.xi
5256*53ee8cc1Swenshuai.xi case Audio_ParamType_Abs_WriteReg_Target:
5257*53ee8cc1Swenshuai.xi {
5258*53ee8cc1Swenshuai.xi g_WriteTargetAddr = Param;
5259*53ee8cc1Swenshuai.xi }
5260*53ee8cc1Swenshuai.xi break;
5261*53ee8cc1Swenshuai.xi
5262*53ee8cc1Swenshuai.xi case Audio_ParamType_Abs_WriteReg_Value:
5263*53ee8cc1Swenshuai.xi {
5264*53ee8cc1Swenshuai.xi HAL_AUDIO_AbsWriteReg(g_WriteTargetAddr, Param);
5265*53ee8cc1Swenshuai.xi }
5266*53ee8cc1Swenshuai.xi break;
5267*53ee8cc1Swenshuai.xi
5268*53ee8cc1Swenshuai.xi case Audio_ParamType_ReadDM_Target:
5269*53ee8cc1Swenshuai.xi {
5270*53ee8cc1Swenshuai.xi g_ReadDMTargetAddr = Param;
5271*53ee8cc1Swenshuai.xi }
5272*53ee8cc1Swenshuai.xi break;
5273*53ee8cc1Swenshuai.xi
5274*53ee8cc1Swenshuai.xi case Audio_ParamType_WriteDM_Target:
5275*53ee8cc1Swenshuai.xi {
5276*53ee8cc1Swenshuai.xi g_WriteDMTargetAddr = Param;
5277*53ee8cc1Swenshuai.xi }
5278*53ee8cc1Swenshuai.xi break;
5279*53ee8cc1Swenshuai.xi
5280*53ee8cc1Swenshuai.xi case Audio_ParamType_WriteDM_Value:
5281*53ee8cc1Swenshuai.xi {
5282*53ee8cc1Swenshuai.xi switch(DecId)
5283*53ee8cc1Swenshuai.xi {
5284*53ee8cc1Swenshuai.xi case AU_DEC_ID1:
5285*53ee8cc1Swenshuai.xi {
5286*53ee8cc1Swenshuai.xi HAL_MAD_Write_DSP_sram(g_WriteDMTargetAddr, Param, DSP_MEM_TYPE_DM);
5287*53ee8cc1Swenshuai.xi }
5288*53ee8cc1Swenshuai.xi break;
5289*53ee8cc1Swenshuai.xi case AU_DEC_ID3:
5290*53ee8cc1Swenshuai.xi {
5291*53ee8cc1Swenshuai.xi HAL_MAD2_Write_DSP_sram(g_WriteDMTargetAddr, Param, DSP_MEM_TYPE_DM);
5292*53ee8cc1Swenshuai.xi }
5293*53ee8cc1Swenshuai.xi break;
5294*53ee8cc1Swenshuai.xi default:
5295*53ee8cc1Swenshuai.xi break;
5296*53ee8cc1Swenshuai.xi }
5297*53ee8cc1Swenshuai.xi }
5298*53ee8cc1Swenshuai.xi break;
5299*53ee8cc1Swenshuai.xi
5300*53ee8cc1Swenshuai.xi case Audio_ParamType_ReadPM_Target:
5301*53ee8cc1Swenshuai.xi {
5302*53ee8cc1Swenshuai.xi g_ReadPMTargetAddr = Param;
5303*53ee8cc1Swenshuai.xi }
5304*53ee8cc1Swenshuai.xi break;
5305*53ee8cc1Swenshuai.xi
5306*53ee8cc1Swenshuai.xi case Audio_ParamType_WritePM_Target:
5307*53ee8cc1Swenshuai.xi {
5308*53ee8cc1Swenshuai.xi g_WritePMTargetAddr = Param;
5309*53ee8cc1Swenshuai.xi }
5310*53ee8cc1Swenshuai.xi break;
5311*53ee8cc1Swenshuai.xi
5312*53ee8cc1Swenshuai.xi case Audio_ParamType_WritePM_Value:
5313*53ee8cc1Swenshuai.xi {
5314*53ee8cc1Swenshuai.xi switch(DecId)
5315*53ee8cc1Swenshuai.xi {
5316*53ee8cc1Swenshuai.xi case AU_DEC_ID1:
5317*53ee8cc1Swenshuai.xi {
5318*53ee8cc1Swenshuai.xi HAL_MAD_Write_DSP_sram(g_WritePMTargetAddr, Param, DSP_MEM_TYPE_PM);
5319*53ee8cc1Swenshuai.xi }
5320*53ee8cc1Swenshuai.xi break;
5321*53ee8cc1Swenshuai.xi case AU_DEC_ID3:
5322*53ee8cc1Swenshuai.xi {
5323*53ee8cc1Swenshuai.xi HAL_MAD2_Write_DSP_sram(g_WritePMTargetAddr, Param, DSP_MEM_TYPE_PM);
5324*53ee8cc1Swenshuai.xi }
5325*53ee8cc1Swenshuai.xi break;
5326*53ee8cc1Swenshuai.xi default:
5327*53ee8cc1Swenshuai.xi break;
5328*53ee8cc1Swenshuai.xi }
5329*53ee8cc1Swenshuai.xi }
5330*53ee8cc1Swenshuai.xi break;
5331*53ee8cc1Swenshuai.xi
5332*53ee8cc1Swenshuai.xi case Audio_R2_SHM_PARAM_DOLBY_DRC_MODE:
5333*53ee8cc1Swenshuai.xi {
5334*53ee8cc1Swenshuai.xi bRet = HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DRC_MODE, adec_id, Param, 0);
5335*53ee8cc1Swenshuai.xi }
5336*53ee8cc1Swenshuai.xi break;
5337*53ee8cc1Swenshuai.xi
5338*53ee8cc1Swenshuai.xi case Audio_R2_SHM_PARAM_DOLBY_DMX_MODE:
5339*53ee8cc1Swenshuai.xi {
5340*53ee8cc1Swenshuai.xi if((DOLBY_DOWNMIX_MODE)Param == DOLBY_DOWNMIX_MODE_LORO)
5341*53ee8cc1Swenshuai.xi {
5342*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DMX_MODE, adec_id, 1, 0);
5343*53ee8cc1Swenshuai.xi }
5344*53ee8cc1Swenshuai.xi else
5345*53ee8cc1Swenshuai.xi {
5346*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DMX_MODE, adec_id, 0, 0);
5347*53ee8cc1Swenshuai.xi }
5348*53ee8cc1Swenshuai.xi }
5349*53ee8cc1Swenshuai.xi break;
5350*53ee8cc1Swenshuai.xi
5351*53ee8cc1Swenshuai.xi case Audio_R2_SHM_PARAM_DOLBY_HIGH_CUT:
5352*53ee8cc1Swenshuai.xi {
5353*53ee8cc1Swenshuai.xi bRet = HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_HIGH_CUT, adec_id, Param, 0);
5354*53ee8cc1Swenshuai.xi }
5355*53ee8cc1Swenshuai.xi break;
5356*53ee8cc1Swenshuai.xi
5357*53ee8cc1Swenshuai.xi case Audio_R2_SHM_PARAM_DOLBY_LOW_BOOST:
5358*53ee8cc1Swenshuai.xi {
5359*53ee8cc1Swenshuai.xi bRet = HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_LOW_BOOST, adec_id, Param, 0);
5360*53ee8cc1Swenshuai.xi }
5361*53ee8cc1Swenshuai.xi break;
5362*53ee8cc1Swenshuai.xi
5363*53ee8cc1Swenshuai.xi case Audio_ParamType_Multi_Channel:
5364*53ee8cc1Swenshuai.xi {
5365*53ee8cc1Swenshuai.xi if ((Param == TRUE) || (Param == FALSE))
5366*53ee8cc1Swenshuai.xi {
5367*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MULTI_CHANNEL, adec_id, Param, 0);
5368*53ee8cc1Swenshuai.xi
5369*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DecId(%d) %s Multi-Channel\n", __FUNCTION__, adec_id, Param?"Enable":"disable");
5370*53ee8cc1Swenshuai.xi }
5371*53ee8cc1Swenshuai.xi else
5372*53ee8cc1Swenshuai.xi {
5373*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: Error! Invalid value(%u) to enable/disable Multi-Channel\n", __FUNCTION__, Param);
5374*53ee8cc1Swenshuai.xi }
5375*53ee8cc1Swenshuai.xi
5376*53ee8cc1Swenshuai.xi break;
5377*53ee8cc1Swenshuai.xi }
5378*53ee8cc1Swenshuai.xi
5379*53ee8cc1Swenshuai.xi case Audio_ParamType_CommonCmd:
5380*53ee8cc1Swenshuai.xi HAL_MAD_CommonCmd((AUDIO_COMMON_CMD_t *)Param);
5381*53ee8cc1Swenshuai.xi break;
5382*53ee8cc1Swenshuai.xi
5383*53ee8cc1Swenshuai.xi case Audio_ParamType_SetEDIDOutputInterface:
5384*53ee8cc1Swenshuai.xi {
5385*53ee8cc1Swenshuai.xi // mute
5386*53ee8cc1Swenshuai.xi HAL_SOUND_SetMute(AUDIO_T3_PATH_SPDIF, TRUE);
5387*53ee8cc1Swenshuai.xi
5388*53ee8cc1Swenshuai.xi bRet = HAL_AUDIO_SetEDIDOutputInterface((DIGITAL_OUTPUT_TYPE)Param);
5389*53ee8cc1Swenshuai.xi
5390*53ee8cc1Swenshuai.xi // unmute
5391*53ee8cc1Swenshuai.xi HAL_SOUND_SetMute(AUDIO_T3_PATH_SPDIF, g_AudioVars2->g_SPDIF_MuteStatus);
5392*53ee8cc1Swenshuai.xi
5393*53ee8cc1Swenshuai.xi break;
5394*53ee8cc1Swenshuai.xi }
5395*53ee8cc1Swenshuai.xi
5396*53ee8cc1Swenshuai.xi /* not supported cmd */
5397*53ee8cc1Swenshuai.xi default:
5398*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: infoType[%x] not Supported\n", __FUNCTION__, paramType);
5399*53ee8cc1Swenshuai.xi bRet = FALSE;
5400*53ee8cc1Swenshuai.xi break;
5401*53ee8cc1Swenshuai.xi }
5402*53ee8cc1Swenshuai.xi
5403*53ee8cc1Swenshuai.xi return bRet;
5404*53ee8cc1Swenshuai.xi }
5405*53ee8cc1Swenshuai.xi
HAL_MAD_GetAudioInfo2(AUDIO_DEC_ID DecId,Audio_InfoType infoType,void * pInfo)5406*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_GetAudioInfo2( AUDIO_DEC_ID DecId, Audio_InfoType infoType, void * pInfo )
5407*53ee8cc1Swenshuai.xi {
5408*53ee8cc1Swenshuai.xi MS_BOOL result = TRUE;
5409*53ee8cc1Swenshuai.xi Audio_id adec_id = HAL_AUDIO_Convert_DecId_to_ADECId(DecId);
5410*53ee8cc1Swenshuai.xi
5411*53ee8cc1Swenshuai.xi HALMAD_CHECK_SHM_INIT;
5412*53ee8cc1Swenshuai.xi
5413*53ee8cc1Swenshuai.xi switch ( infoType )
5414*53ee8cc1Swenshuai.xi {
5415*53ee8cc1Swenshuai.xi case Audio_infoType_capability:
5416*53ee8cc1Swenshuai.xi {
5417*53ee8cc1Swenshuai.xi MMA_AudioType * pA_Type = (MMA_AudioType *) pInfo;
5418*53ee8cc1Swenshuai.xi *pA_Type = _GetAudioCaps(DecId);
5419*53ee8cc1Swenshuai.xi break;
5420*53ee8cc1Swenshuai.xi }
5421*53ee8cc1Swenshuai.xi
5422*53ee8cc1Swenshuai.xi case Audio_infoType_DecStatus: //no change
5423*53ee8cc1Swenshuai.xi {
5424*53ee8cc1Swenshuai.xi MS_U8 * pResult = (MS_U8 *) pInfo;
5425*53ee8cc1Swenshuai.xi
5426*53ee8cc1Swenshuai.xi if(adec_id >= MAX_ADEC) // SHM only has 2 mem
5427*53ee8cc1Swenshuai.xi {
5428*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DEC_ID not Supported\n", __FUNCTION__ );
5429*53ee8cc1Swenshuai.xi return FALSE;
5430*53ee8cc1Swenshuai.xi }
5431*53ee8cc1Swenshuai.xi
5432*53ee8cc1Swenshuai.xi if ( HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_STAUS, adec_id) != 0 )
5433*53ee8cc1Swenshuai.xi {
5434*53ee8cc1Swenshuai.xi *pResult = 1;
5435*53ee8cc1Swenshuai.xi }
5436*53ee8cc1Swenshuai.xi else
5437*53ee8cc1Swenshuai.xi {
5438*53ee8cc1Swenshuai.xi *pResult = 0;
5439*53ee8cc1Swenshuai.xi }
5440*53ee8cc1Swenshuai.xi break;
5441*53ee8cc1Swenshuai.xi }
5442*53ee8cc1Swenshuai.xi
5443*53ee8cc1Swenshuai.xi case Audio_infoType_AudioSyncStatus:
5444*53ee8cc1Swenshuai.xi {
5445*53ee8cc1Swenshuai.xi MS_U8 * pResult = (MS_U8 *) pInfo;
5446*53ee8cc1Swenshuai.xi if ( DecId == AU_DEC_ID3 )
5447*53ee8cc1Swenshuai.xi {
5448*53ee8cc1Swenshuai.xi if(HAL_AUDIO_AbsReadByte(REG_R2_DECODE2_CMD)&0x80)
5449*53ee8cc1Swenshuai.xi *pResult = 0; // Free-run
5450*53ee8cc1Swenshuai.xi else
5451*53ee8cc1Swenshuai.xi *pResult = 1; // AV-sync
5452*53ee8cc1Swenshuai.xi }
5453*53ee8cc1Swenshuai.xi else
5454*53ee8cc1Swenshuai.xi {
5455*53ee8cc1Swenshuai.xi if(HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_CMD)&0x80)
5456*53ee8cc1Swenshuai.xi *pResult = 0; // Free-run
5457*53ee8cc1Swenshuai.xi else
5458*53ee8cc1Swenshuai.xi *pResult = 1; // AV-sync
5459*53ee8cc1Swenshuai.xi }
5460*53ee8cc1Swenshuai.xi break;
5461*53ee8cc1Swenshuai.xi }
5462*53ee8cc1Swenshuai.xi
5463*53ee8cc1Swenshuai.xi case Audio_infoType_SampleRate: //HAL_MAD_GetMadSamplingRate
5464*53ee8cc1Swenshuai.xi {
5465*53ee8cc1Swenshuai.xi MS_U32 fs_type = 0xFFFFFFFF;
5466*53ee8cc1Swenshuai.xi AUDIO_FS_TYPE * pFS_Type = (AUDIO_FS_TYPE *) pInfo;
5467*53ee8cc1Swenshuai.xi
5468*53ee8cc1Swenshuai.xi if(adec_id >= MAX_ADEC) // SHM only has 2 mem
5469*53ee8cc1Swenshuai.xi {
5470*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DEC_ID not Supported\n", __FUNCTION__ );
5471*53ee8cc1Swenshuai.xi return FALSE;
5472*53ee8cc1Swenshuai.xi }
5473*53ee8cc1Swenshuai.xi
5474*53ee8cc1Swenshuai.xi fs_type = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_SMP_RATE, adec_id);
5475*53ee8cc1Swenshuai.xi
5476*53ee8cc1Swenshuai.xi *pFS_Type = AUDIO_FS_NONE;
5477*53ee8cc1Swenshuai.xi
5478*53ee8cc1Swenshuai.xi switch ( fs_type )
5479*53ee8cc1Swenshuai.xi {
5480*53ee8cc1Swenshuai.xi case 8000: *pFS_Type = AUDIO_FS_8KHZ; break;
5481*53ee8cc1Swenshuai.xi case 11025: *pFS_Type = AUDIO_FS_11KHZ; break;
5482*53ee8cc1Swenshuai.xi case 12000: *pFS_Type = AUDIO_FS_12KHZ; break;
5483*53ee8cc1Swenshuai.xi case 16000: *pFS_Type = AUDIO_FS_16KHZ; break;
5484*53ee8cc1Swenshuai.xi case 22050: *pFS_Type = AUDIO_FS_22KHZ; break;
5485*53ee8cc1Swenshuai.xi case 24000: *pFS_Type = AUDIO_FS_24KHZ; break;
5486*53ee8cc1Swenshuai.xi case 32000: *pFS_Type = AUDIO_FS_32KHZ; break;
5487*53ee8cc1Swenshuai.xi case 44100: *pFS_Type = AUDIO_FS_44KHZ; break;
5488*53ee8cc1Swenshuai.xi case 48000: *pFS_Type = AUDIO_FS_48KHZ; break;
5489*53ee8cc1Swenshuai.xi case 64000: *pFS_Type = AUDIO_FS_64KHZ; break;
5490*53ee8cc1Swenshuai.xi case 88200: *pFS_Type = AUDIO_FS_88KHZ; break;
5491*53ee8cc1Swenshuai.xi case 96000: *pFS_Type = AUDIO_FS_96KHZ; break;
5492*53ee8cc1Swenshuai.xi default: *pFS_Type = AUDIO_FS_NONE; break;
5493*53ee8cc1Swenshuai.xi }
5494*53ee8cc1Swenshuai.xi break;
5495*53ee8cc1Swenshuai.xi }
5496*53ee8cc1Swenshuai.xi
5497*53ee8cc1Swenshuai.xi case Audio_infoType_SoundMode:
5498*53ee8cc1Swenshuai.xi {
5499*53ee8cc1Swenshuai.xi MS_U16 * pRet = (MS_U16 *) pInfo;
5500*53ee8cc1Swenshuai.xi *pRet = HAL_AUDIO_ReadReg(REG_MB_MODE_SELECT) & 0x3;
5501*53ee8cc1Swenshuai.xi
5502*53ee8cc1Swenshuai.xi break;
5503*53ee8cc1Swenshuai.xi }
5504*53ee8cc1Swenshuai.xi
5505*53ee8cc1Swenshuai.xi case Audio_infoType_errFrmCnt:
5506*53ee8cc1Swenshuai.xi {
5507*53ee8cc1Swenshuai.xi MS_U32 * pRet = (MS_U32 *) pInfo;
5508*53ee8cc1Swenshuai.xi
5509*53ee8cc1Swenshuai.xi if(adec_id >= MAX_ADEC) // SHM only has 2 mem
5510*53ee8cc1Swenshuai.xi {
5511*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DEC_ID not Supported\n", __FUNCTION__ );
5512*53ee8cc1Swenshuai.xi return FALSE;
5513*53ee8cc1Swenshuai.xi }
5514*53ee8cc1Swenshuai.xi
5515*53ee8cc1Swenshuai.xi *pRet = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ERR_FRMCNT, adec_id);
5516*53ee8cc1Swenshuai.xi
5517*53ee8cc1Swenshuai.xi break;
5518*53ee8cc1Swenshuai.xi }
5519*53ee8cc1Swenshuai.xi
5520*53ee8cc1Swenshuai.xi case Audio_infoType_1ms_timeStamp:
5521*53ee8cc1Swenshuai.xi {
5522*53ee8cc1Swenshuai.xi MS_U32 * pRet = (MS_U32 *) pInfo;
5523*53ee8cc1Swenshuai.xi
5524*53ee8cc1Swenshuai.xi MS_U32 pts;
5525*53ee8cc1Swenshuai.xi
5526*53ee8cc1Swenshuai.xi if(adec_id >= MAX_ADEC) // SHM only has 2 mem
5527*53ee8cc1Swenshuai.xi {
5528*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DEC_ID not Supported\n", __FUNCTION__ );
5529*53ee8cc1Swenshuai.xi return FALSE;
5530*53ee8cc1Swenshuai.xi }
5531*53ee8cc1Swenshuai.xi
5532*53ee8cc1Swenshuai.xi pts = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_CURR_PTS, adec_id);
5533*53ee8cc1Swenshuai.xi *pRet = pts/45;
5534*53ee8cc1Swenshuai.xi
5535*53ee8cc1Swenshuai.xi break;
5536*53ee8cc1Swenshuai.xi }
5537*53ee8cc1Swenshuai.xi
5538*53ee8cc1Swenshuai.xi case Audio_infoType_33bit_PTS:
5539*53ee8cc1Swenshuai.xi {
5540*53ee8cc1Swenshuai.xi MS_U64 * pRet = (MS_U64 *) pInfo;
5541*53ee8cc1Swenshuai.xi
5542*53ee8cc1Swenshuai.xi if(adec_id >= MAX_ADEC) // SHM only has 2 mem
5543*53ee8cc1Swenshuai.xi {
5544*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DEC_ID not Supported\n", __FUNCTION__ );
5545*53ee8cc1Swenshuai.xi return FALSE;
5546*53ee8cc1Swenshuai.xi }
5547*53ee8cc1Swenshuai.xi
5548*53ee8cc1Swenshuai.xi *pRet = ((MS_U64)HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_CURR_PTS, adec_id))<<1;
5549*53ee8cc1Swenshuai.xi break;
5550*53ee8cc1Swenshuai.xi }
5551*53ee8cc1Swenshuai.xi
5552*53ee8cc1Swenshuai.xi case Audio_infoType_BufferAddr:
5553*53ee8cc1Swenshuai.xi {
5554*53ee8cc1Swenshuai.xi MS_U32 * pRet = (MS_U32 *) pInfo;
5555*53ee8cc1Swenshuai.xi if ( DecId == AU_DEC_ID3 )
5556*53ee8cc1Swenshuai.xi {
5557*53ee8cc1Swenshuai.xi *pRet = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC2, 0) + OFFSET_ES3_DRAM_ADDR;
5558*53ee8cc1Swenshuai.xi }
5559*53ee8cc1Swenshuai.xi else
5560*53ee8cc1Swenshuai.xi {
5561*53ee8cc1Swenshuai.xi *pRet = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC1, 0) + OFFSET_ES1_DRAM_ADDR;
5562*53ee8cc1Swenshuai.xi }
5563*53ee8cc1Swenshuai.xi
5564*53ee8cc1Swenshuai.xi break;
5565*53ee8cc1Swenshuai.xi }
5566*53ee8cc1Swenshuai.xi
5567*53ee8cc1Swenshuai.xi case Audio_infoType_BufferSize:
5568*53ee8cc1Swenshuai.xi {
5569*53ee8cc1Swenshuai.xi MS_U32 * pRet = (MS_U32 *) pInfo;
5570*53ee8cc1Swenshuai.xi
5571*53ee8cc1Swenshuai.xi if(adec_id >= MAX_ADEC) // SHM only has 2 mem
5572*53ee8cc1Swenshuai.xi {
5573*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DEC_ID not Supported\n", __FUNCTION__ );
5574*53ee8cc1Swenshuai.xi return FALSE;
5575*53ee8cc1Swenshuai.xi }
5576*53ee8cc1Swenshuai.xi
5577*53ee8cc1Swenshuai.xi *pRet = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MM_FILE_REQ_SIZE, adec_id);
5578*53ee8cc1Swenshuai.xi
5579*53ee8cc1Swenshuai.xi break;
5580*53ee8cc1Swenshuai.xi }
5581*53ee8cc1Swenshuai.xi
5582*53ee8cc1Swenshuai.xi case Audio_infoType_esBuf_req:
5583*53ee8cc1Swenshuai.xi {
5584*53ee8cc1Swenshuai.xi MS_BOOL bFlag = FALSE;
5585*53ee8cc1Swenshuai.xi
5586*53ee8cc1Swenshuai.xi if ( DecId == AU_DEC_ID3 )
5587*53ee8cc1Swenshuai.xi {
5588*53ee8cc1Swenshuai.xi bFlag = g_AudioVars2->g_bSePlayFileFlag;
5589*53ee8cc1Swenshuai.xi }
5590*53ee8cc1Swenshuai.xi else
5591*53ee8cc1Swenshuai.xi {
5592*53ee8cc1Swenshuai.xi bFlag = g_AudioVars2->g_bDecPlayFileFlag;
5593*53ee8cc1Swenshuai.xi }
5594*53ee8cc1Swenshuai.xi
5595*53ee8cc1Swenshuai.xi if ( bFlag )
5596*53ee8cc1Swenshuai.xi {
5597*53ee8cc1Swenshuai.xi Audio_MM_Data_Request * pDataReq = (Audio_MM_Data_Request *) pInfo;
5598*53ee8cc1Swenshuai.xi
5599*53ee8cc1Swenshuai.xi if ( DecId == AU_DEC_ID3 )
5600*53ee8cc1Swenshuai.xi {
5601*53ee8cc1Swenshuai.xi pDataReq->U32WrtBytes = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MM_FILE_REQ_SIZE, ADEC2);
5602*53ee8cc1Swenshuai.xi pDataReq->U32WrtAddr = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC2, 0) + OFFSET_ES2_DRAM_ADDR + HAL_AUDIO_GetDspMadBaseAddr(DSP_SE);
5603*53ee8cc1Swenshuai.xi }
5604*53ee8cc1Swenshuai.xi else
5605*53ee8cc1Swenshuai.xi {
5606*53ee8cc1Swenshuai.xi pDataReq->U32WrtBytes = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MM_FILE_REQ_SIZE, ADEC1);
5607*53ee8cc1Swenshuai.xi pDataReq->U32WrtAddr = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC1, 0) + OFFSET_ES1_DRAM_ADDR + HAL_AUDIO_GetDspMadBaseAddr(DSP_SE);
5608*53ee8cc1Swenshuai.xi }
5609*53ee8cc1Swenshuai.xi
5610*53ee8cc1Swenshuai.xi result = TRUE;
5611*53ee8cc1Swenshuai.xi }
5612*53ee8cc1Swenshuai.xi else
5613*53ee8cc1Swenshuai.xi {
5614*53ee8cc1Swenshuai.xi result = FALSE;
5615*53ee8cc1Swenshuai.xi }
5616*53ee8cc1Swenshuai.xi
5617*53ee8cc1Swenshuai.xi break;
5618*53ee8cc1Swenshuai.xi }
5619*53ee8cc1Swenshuai.xi
5620*53ee8cc1Swenshuai.xi case Audio_infoType_esBuf_currLevel:
5621*53ee8cc1Swenshuai.xi {
5622*53ee8cc1Swenshuai.xi MS_U32 * pRet = (MS_U32 *) pInfo;
5623*53ee8cc1Swenshuai.xi
5624*53ee8cc1Swenshuai.xi if(adec_id >= MAX_ADEC) // SHM only has 2 mem
5625*53ee8cc1Swenshuai.xi {
5626*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DEC_ID not Supported\n", __FUNCTION__ );
5627*53ee8cc1Swenshuai.xi return FALSE;
5628*53ee8cc1Swenshuai.xi }
5629*53ee8cc1Swenshuai.xi
5630*53ee8cc1Swenshuai.xi *pRet = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ES_LEVEL, adec_id);
5631*53ee8cc1Swenshuai.xi
5632*53ee8cc1Swenshuai.xi break;
5633*53ee8cc1Swenshuai.xi }
5634*53ee8cc1Swenshuai.xi
5635*53ee8cc1Swenshuai.xi case Audio_infoType_pcmBuf_currLevel:
5636*53ee8cc1Swenshuai.xi {
5637*53ee8cc1Swenshuai.xi MS_U32 * pRet = (MS_U32 *) pInfo;
5638*53ee8cc1Swenshuai.xi
5639*53ee8cc1Swenshuai.xi if(adec_id >= MAX_ADEC) // SHM only has 2 mem
5640*53ee8cc1Swenshuai.xi {
5641*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DEC_ID not Supported\n", __FUNCTION__ );
5642*53ee8cc1Swenshuai.xi return FALSE;
5643*53ee8cc1Swenshuai.xi }
5644*53ee8cc1Swenshuai.xi
5645*53ee8cc1Swenshuai.xi *pRet = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PCM_DMX_LEVEL, adec_id);
5646*53ee8cc1Swenshuai.xi
5647*53ee8cc1Swenshuai.xi break;
5648*53ee8cc1Swenshuai.xi }
5649*53ee8cc1Swenshuai.xi
5650*53ee8cc1Swenshuai.xi case Audio_infoType_get_audio_filter:
5651*53ee8cc1Swenshuai.xi {
5652*53ee8cc1Swenshuai.xi MS_U32 * pRet = (MS_U32 *) pInfo;
5653*53ee8cc1Swenshuai.xi if ( DecId == AU_DEC_ID3 )
5654*53ee8cc1Swenshuai.xi {
5655*53ee8cc1Swenshuai.xi *pRet = (MS_U32) FILTER_TYPE_AUDIO_2;
5656*53ee8cc1Swenshuai.xi }
5657*53ee8cc1Swenshuai.xi else if ( DecId == AU_DEC_ID1 )
5658*53ee8cc1Swenshuai.xi {
5659*53ee8cc1Swenshuai.xi *pRet = (MS_U32) FILTER_TYPE_AUDIO_1;
5660*53ee8cc1Swenshuai.xi }
5661*53ee8cc1Swenshuai.xi else
5662*53ee8cc1Swenshuai.xi {
5663*53ee8cc1Swenshuai.xi *pRet = (MS_U32) FILTER_TYPE_AUDIO_INVALID;
5664*53ee8cc1Swenshuai.xi }
5665*53ee8cc1Swenshuai.xi
5666*53ee8cc1Swenshuai.xi break;
5667*53ee8cc1Swenshuai.xi }
5668*53ee8cc1Swenshuai.xi
5669*53ee8cc1Swenshuai.xi case Audio_infoType_audio_unsupported:
5670*53ee8cc1Swenshuai.xi {
5671*53ee8cc1Swenshuai.xi HALMAD_ERROR ("Currently, it is not used\n");
5672*53ee8cc1Swenshuai.xi break;
5673*53ee8cc1Swenshuai.xi }
5674*53ee8cc1Swenshuai.xi
5675*53ee8cc1Swenshuai.xi case Audio_infoType_UNI_PCM1_Info:
5676*53ee8cc1Swenshuai.xi {
5677*53ee8cc1Swenshuai.xi Audio_MM_PCM_Info * pPCMInfo = (Audio_MM_PCM_Info *) pInfo;
5678*53ee8cc1Swenshuai.xi
5679*53ee8cc1Swenshuai.xi if ( HAL_AUDIO_GetUniDecodeFrameCnt(DecId) != g_AudioVars2->u16DecodeFrmCnt[DecId] )
5680*53ee8cc1Swenshuai.xi {
5681*53ee8cc1Swenshuai.xi if(adec_id >= MAX_ADEC) // SHM only has 2 mem
5682*53ee8cc1Swenshuai.xi {
5683*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DEC_ID not Supported\n", __FUNCTION__ );
5684*53ee8cc1Swenshuai.xi return FALSE;
5685*53ee8cc1Swenshuai.xi }
5686*53ee8cc1Swenshuai.xi
5687*53ee8cc1Swenshuai.xi g_AudioVars2->u16DecodeFrmCnt[DecId] = HAL_AUDIO_GetUniDecodeFrameCnt(DecId);
5688*53ee8cc1Swenshuai.xi
5689*53ee8cc1Swenshuai.xi if ( DecId == AU_DEC_ID3 )
5690*53ee8cc1Swenshuai.xi {
5691*53ee8cc1Swenshuai.xi pPCMInfo->U32WrtAddr = HAL_AUDIO_GetDspMadBaseAddr(DSP_SE) + ASND_DSP_DDR_SIZE + OFFSET_PCM2_DRAM_ADDR+HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_UNI_DECODE_DONE_PCM_ADDR, adec_id);
5692*53ee8cc1Swenshuai.xi }
5693*53ee8cc1Swenshuai.xi else
5694*53ee8cc1Swenshuai.xi {
5695*53ee8cc1Swenshuai.xi pPCMInfo->U32WrtAddr = HAL_AUDIO_GetDspMadBaseAddr(DSP_SE) + ASND_DSP_DDR_SIZE + OFFSET_PCM1_DRAM_ADDR+ HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_UNI_DECODE_DONE_PCM_ADDR, adec_id);
5696*53ee8cc1Swenshuai.xi }
5697*53ee8cc1Swenshuai.xi
5698*53ee8cc1Swenshuai.xi pPCMInfo->U32WrtBytes = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_UNI_DECODE_DONE_PCM_SIZE, adec_id);
5699*53ee8cc1Swenshuai.xi #if OMX_AUDIO_DEBUG
5700*53ee8cc1Swenshuai.xi HALMAD_PRINT("\r\n===DecId:%d Audio_infoType_UNI_PCM1_Info addr :0x%X size:0x%X DecodeFrame=0x%X==========\r\n", (MS_U32)DecId,(MS_U32)pPCMInfo->U32WrtAddr, (MS_U32)pPCMInfo->U32WrtBytes,(MS_U32)g_AudioVars2->u16DecodeFrmCnt[DecId]);
5701*53ee8cc1Swenshuai.xi #endif
5702*53ee8cc1Swenshuai.xi }
5703*53ee8cc1Swenshuai.xi
5704*53ee8cc1Swenshuai.xi pPCMInfo->U32DecodeFrame = g_AudioVars2->u16DecodeFrmCnt[DecId];
5705*53ee8cc1Swenshuai.xi }
5706*53ee8cc1Swenshuai.xi break;
5707*53ee8cc1Swenshuai.xi
5708*53ee8cc1Swenshuai.xi case Audio_infoType_UNI_PCM3_Level:
5709*53ee8cc1Swenshuai.xi {
5710*53ee8cc1Swenshuai.xi MS_U32 * pRet = (MS_U32 *) pInfo;
5711*53ee8cc1Swenshuai.xi
5712*53ee8cc1Swenshuai.xi if(adec_id >= MAX_ADEC) // SHM only has 2 mem
5713*53ee8cc1Swenshuai.xi {
5714*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DEC_ID not Supported\n", __FUNCTION__ );
5715*53ee8cc1Swenshuai.xi return FALSE;
5716*53ee8cc1Swenshuai.xi }
5717*53ee8cc1Swenshuai.xi
5718*53ee8cc1Swenshuai.xi *pRet = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PCM_DMX_LEVEL, adec_id);
5719*53ee8cc1Swenshuai.xi break;
5720*53ee8cc1Swenshuai.xi }
5721*53ee8cc1Swenshuai.xi
5722*53ee8cc1Swenshuai.xi case Audio_infoType_UNI_ES_Level:
5723*53ee8cc1Swenshuai.xi {
5724*53ee8cc1Swenshuai.xi MS_U32 * pRet = (MS_U32 *) pInfo;
5725*53ee8cc1Swenshuai.xi
5726*53ee8cc1Swenshuai.xi if(adec_id >= MAX_ADEC) // SHM only has 2 mem
5727*53ee8cc1Swenshuai.xi {
5728*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DEC_ID not Supported\n", __FUNCTION__ );
5729*53ee8cc1Swenshuai.xi return FALSE;
5730*53ee8cc1Swenshuai.xi }
5731*53ee8cc1Swenshuai.xi
5732*53ee8cc1Swenshuai.xi *pRet = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ES_LEVEL, adec_id);
5733*53ee8cc1Swenshuai.xi #if OMX_AUDIO_DEBUG
5734*53ee8cc1Swenshuai.xi HALMAD_PRINT("\r\n=====ID:%X Audio_infoType_UNI_ES_Level =0x%X==========\r\n", (MS_U32)adec_id, (MS_U32)*pRet);
5735*53ee8cc1Swenshuai.xi #endif
5736*53ee8cc1Swenshuai.xi break;
5737*53ee8cc1Swenshuai.xi }
5738*53ee8cc1Swenshuai.xi
5739*53ee8cc1Swenshuai.xi case Audio_infoType_UNI_ES_Base:
5740*53ee8cc1Swenshuai.xi {
5741*53ee8cc1Swenshuai.xi MS_U32 * pRet = (MS_U32 *) pInfo;
5742*53ee8cc1Swenshuai.xi
5743*53ee8cc1Swenshuai.xi if ( DecId == AU_DEC_ID3 )
5744*53ee8cc1Swenshuai.xi {
5745*53ee8cc1Swenshuai.xi *pRet = (MS_U32) (HAL_AUDIO_GetDspMadBaseAddr(DSP_SE) + OFFSET_ES3_DRAM_ADDR);
5746*53ee8cc1Swenshuai.xi }
5747*53ee8cc1Swenshuai.xi else
5748*53ee8cc1Swenshuai.xi {
5749*53ee8cc1Swenshuai.xi *pRet = (MS_U32) (HAL_AUDIO_GetDspMadBaseAddr(DSP_SE) + OFFSET_ES1_DRAM_ADDR);
5750*53ee8cc1Swenshuai.xi }
5751*53ee8cc1Swenshuai.xi break;
5752*53ee8cc1Swenshuai.xi }
5753*53ee8cc1Swenshuai.xi
5754*53ee8cc1Swenshuai.xi case Audio_infoType_UNI_ES_Size:
5755*53ee8cc1Swenshuai.xi {
5756*53ee8cc1Swenshuai.xi MS_U32 * pRet = (MS_U32 *) pInfo;
5757*53ee8cc1Swenshuai.xi if ( DecId == AU_DEC_ID3 )
5758*53ee8cc1Swenshuai.xi {
5759*53ee8cc1Swenshuai.xi *pRet = ES3_DRAM_SIZE;
5760*53ee8cc1Swenshuai.xi }
5761*53ee8cc1Swenshuai.xi else
5762*53ee8cc1Swenshuai.xi {
5763*53ee8cc1Swenshuai.xi *pRet = ES1_DRAM_SIZE;
5764*53ee8cc1Swenshuai.xi }
5765*53ee8cc1Swenshuai.xi break;
5766*53ee8cc1Swenshuai.xi }
5767*53ee8cc1Swenshuai.xi
5768*53ee8cc1Swenshuai.xi case Audio_infoType_UNI_PCM_Base:
5769*53ee8cc1Swenshuai.xi {
5770*53ee8cc1Swenshuai.xi MS_U32 * pRet = (MS_U32 *) pInfo;
5771*53ee8cc1Swenshuai.xi if ( DecId == AU_DEC_ID3 )
5772*53ee8cc1Swenshuai.xi {
5773*53ee8cc1Swenshuai.xi *pRet = (MS_U32) (HAL_AUDIO_GetDspMadBaseAddr(DSP_SE) + ASND_DSP_DDR_SIZE + OFFSET_PCM2_DRAM_ADDR);
5774*53ee8cc1Swenshuai.xi }
5775*53ee8cc1Swenshuai.xi else
5776*53ee8cc1Swenshuai.xi {
5777*53ee8cc1Swenshuai.xi *pRet = (MS_U32) (HAL_AUDIO_GetDspMadBaseAddr(DSP_SE) + ASND_DSP_DDR_SIZE + OFFSET_PCM1_DRAM_ADDR);
5778*53ee8cc1Swenshuai.xi }
5779*53ee8cc1Swenshuai.xi break;
5780*53ee8cc1Swenshuai.xi }
5781*53ee8cc1Swenshuai.xi
5782*53ee8cc1Swenshuai.xi case Audio_infoType_UNI_PCM_Size:
5783*53ee8cc1Swenshuai.xi {
5784*53ee8cc1Swenshuai.xi MS_U32 * pRet = (MS_U32 *) pInfo;
5785*53ee8cc1Swenshuai.xi if ( DecId == AU_DEC_ID3 )
5786*53ee8cc1Swenshuai.xi {
5787*53ee8cc1Swenshuai.xi *pRet = PCM2_DRAM_SIZE;
5788*53ee8cc1Swenshuai.xi }
5789*53ee8cc1Swenshuai.xi else
5790*53ee8cc1Swenshuai.xi {
5791*53ee8cc1Swenshuai.xi *pRet = PCM1_DRAM_SIZE;
5792*53ee8cc1Swenshuai.xi }
5793*53ee8cc1Swenshuai.xi break;
5794*53ee8cc1Swenshuai.xi }
5795*53ee8cc1Swenshuai.xi
5796*53ee8cc1Swenshuai.xi case Audio_infoType_MadBaseAddr:
5797*53ee8cc1Swenshuai.xi {
5798*53ee8cc1Swenshuai.xi MS_U32 * pRet = (MS_U32 *) pInfo;
5799*53ee8cc1Swenshuai.xi if ( DecId == AU_DEC_ID3 )
5800*53ee8cc1Swenshuai.xi {
5801*53ee8cc1Swenshuai.xi *pRet = HAL_AUDIO_GetDspMadBaseAddr(DSP_ADV);
5802*53ee8cc1Swenshuai.xi }
5803*53ee8cc1Swenshuai.xi else
5804*53ee8cc1Swenshuai.xi {
5805*53ee8cc1Swenshuai.xi *pRet = HAL_AUDIO_GetDspMadBaseAddr(DSP_ADV);
5806*53ee8cc1Swenshuai.xi }
5807*53ee8cc1Swenshuai.xi break;
5808*53ee8cc1Swenshuai.xi }
5809*53ee8cc1Swenshuai.xi
5810*53ee8cc1Swenshuai.xi case Audio_infoType_hashkey:
5811*53ee8cc1Swenshuai.xi {
5812*53ee8cc1Swenshuai.xi Audio_Hashkey_Info * pHashkeyInfo = (Audio_Hashkey_Info *) pInfo;
5813*53ee8cc1Swenshuai.xi MS_U32 audio_ipauth = HAL_MAD2_Read_DSP_sram(REG_DEC2_AUDIO_IPAUTH, DSP_MEM_TYPE_PM);
5814*53ee8cc1Swenshuai.xi
5815*53ee8cc1Swenshuai.xi pHashkeyInfo->U32IsHashkeySupported = TRUE;
5816*53ee8cc1Swenshuai.xi
5817*53ee8cc1Swenshuai.xi switch ( pHashkeyInfo->U32Name )
5818*53ee8cc1Swenshuai.xi {
5819*53ee8cc1Swenshuai.xi case Audio_DEC_AC3:
5820*53ee8cc1Swenshuai.xi {
5821*53ee8cc1Swenshuai.xi if ((audio_ipauth & AUDIO_HASHKEY_DISABLE_AC3)
5822*53ee8cc1Swenshuai.xi && (audio_ipauth & AUDIO_HASHKEY_DISABLE_DOLBY_MS11)
5823*53ee8cc1Swenshuai.xi && (audio_ipauth & AUDIO_HASHKEY_DISABLE_MS12_LC_PROFILE)
5824*53ee8cc1Swenshuai.xi && (audio_ipauth & AUDIO_HASHKEY_DISABLE_MS12_C_PROFILE)
5825*53ee8cc1Swenshuai.xi && (audio_ipauth & AUDIO_HASHKEY_DISABLE_MS12_B_PROFILE))
5826*53ee8cc1Swenshuai.xi {
5827*53ee8cc1Swenshuai.xi pHashkeyInfo->U32IsHashkeySupported = FALSE;
5828*53ee8cc1Swenshuai.xi }
5829*53ee8cc1Swenshuai.xi break;
5830*53ee8cc1Swenshuai.xi }
5831*53ee8cc1Swenshuai.xi
5832*53ee8cc1Swenshuai.xi case Audio_DEC_AC3P:
5833*53ee8cc1Swenshuai.xi {
5834*53ee8cc1Swenshuai.xi if ((audio_ipauth & AUDIO_HASHKEY_DISABLE_AC3P)
5835*53ee8cc1Swenshuai.xi && (audio_ipauth & AUDIO_HASHKEY_DISABLE_DOLBY_MS11)
5836*53ee8cc1Swenshuai.xi && (audio_ipauth & AUDIO_HASHKEY_DISABLE_MS12_LC_PROFILE)
5837*53ee8cc1Swenshuai.xi && (audio_ipauth & AUDIO_HASHKEY_DISABLE_MS12_C_PROFILE)
5838*53ee8cc1Swenshuai.xi && (audio_ipauth & AUDIO_HASHKEY_DISABLE_MS12_B_PROFILE))
5839*53ee8cc1Swenshuai.xi {
5840*53ee8cc1Swenshuai.xi pHashkeyInfo->U32IsHashkeySupported = FALSE;
5841*53ee8cc1Swenshuai.xi }
5842*53ee8cc1Swenshuai.xi break;
5843*53ee8cc1Swenshuai.xi }
5844*53ee8cc1Swenshuai.xi
5845*53ee8cc1Swenshuai.xi case Audio_DEC_AAC_LC:
5846*53ee8cc1Swenshuai.xi case Audio_DEC_HEAAC_V1:
5847*53ee8cc1Swenshuai.xi case Audio_DEC_HEAAC_V2:
5848*53ee8cc1Swenshuai.xi case Audio_DEC_DOLBYPULSE:
5849*53ee8cc1Swenshuai.xi {
5850*53ee8cc1Swenshuai.xi if ((audio_ipauth & AUDIO_HASHKEY_DISABLE_DOLBY_MS10)
5851*53ee8cc1Swenshuai.xi && (audio_ipauth & AUDIO_HASHKEY_DISABLE_GAAC)
5852*53ee8cc1Swenshuai.xi && (audio_ipauth & AUDIO_HASHKEY_DISABLE_DOLBY_MS11)
5853*53ee8cc1Swenshuai.xi && (audio_ipauth & AUDIO_HASHKEY_DISABLE_MS12_C_PROFILE)
5854*53ee8cc1Swenshuai.xi && (audio_ipauth & AUDIO_HASHKEY_DISABLE_MS12_B_PROFILE))
5855*53ee8cc1Swenshuai.xi {
5856*53ee8cc1Swenshuai.xi pHashkeyInfo->U32IsHashkeySupported = FALSE;
5857*53ee8cc1Swenshuai.xi }
5858*53ee8cc1Swenshuai.xi break;
5859*53ee8cc1Swenshuai.xi }
5860*53ee8cc1Swenshuai.xi
5861*53ee8cc1Swenshuai.xi case Audio_DEC_WMA:
5862*53ee8cc1Swenshuai.xi case Audio_DEC_WMAPRO:
5863*53ee8cc1Swenshuai.xi {
5864*53ee8cc1Swenshuai.xi if ((audio_ipauth & AUDIO_HASHKEY_DISABLE_WMA))
5865*53ee8cc1Swenshuai.xi {
5866*53ee8cc1Swenshuai.xi pHashkeyInfo->U32IsHashkeySupported = FALSE;
5867*53ee8cc1Swenshuai.xi }
5868*53ee8cc1Swenshuai.xi break;
5869*53ee8cc1Swenshuai.xi }
5870*53ee8cc1Swenshuai.xi
5871*53ee8cc1Swenshuai.xi case Audio_DEC_DTS:
5872*53ee8cc1Swenshuai.xi {
5873*53ee8cc1Swenshuai.xi if ((audio_ipauth & AUDIO_HASHKEY_DISABLE_DTS)
5874*53ee8cc1Swenshuai.xi && (audio_ipauth & AUDIO_HASHKEY_DISABLE_DTS_XLL))
5875*53ee8cc1Swenshuai.xi {
5876*53ee8cc1Swenshuai.xi pHashkeyInfo->U32IsHashkeySupported = FALSE;
5877*53ee8cc1Swenshuai.xi }
5878*53ee8cc1Swenshuai.xi break;
5879*53ee8cc1Swenshuai.xi }
5880*53ee8cc1Swenshuai.xi
5881*53ee8cc1Swenshuai.xi case Audio_DEC_DTSLBR:
5882*53ee8cc1Swenshuai.xi {
5883*53ee8cc1Swenshuai.xi if ((audio_ipauth & AUDIO_HASHKEY_DISABLE_DTSLBR)
5884*53ee8cc1Swenshuai.xi && (audio_ipauth & AUDIO_HASHKEY_DISABLE_DTS_XLL))
5885*53ee8cc1Swenshuai.xi {
5886*53ee8cc1Swenshuai.xi pHashkeyInfo->U32IsHashkeySupported = FALSE;
5887*53ee8cc1Swenshuai.xi }
5888*53ee8cc1Swenshuai.xi break;
5889*53ee8cc1Swenshuai.xi }
5890*53ee8cc1Swenshuai.xi
5891*53ee8cc1Swenshuai.xi case Audio_DEC_DRA:
5892*53ee8cc1Swenshuai.xi {
5893*53ee8cc1Swenshuai.xi if ((audio_ipauth & AUDIO_HASHKEY_DISABLE_DRA))
5894*53ee8cc1Swenshuai.xi {
5895*53ee8cc1Swenshuai.xi pHashkeyInfo->U32IsHashkeySupported = FALSE;
5896*53ee8cc1Swenshuai.xi }
5897*53ee8cc1Swenshuai.xi break;
5898*53ee8cc1Swenshuai.xi }
5899*53ee8cc1Swenshuai.xi
5900*53ee8cc1Swenshuai.xi case Audio_DEC_RA8:
5901*53ee8cc1Swenshuai.xi {
5902*53ee8cc1Swenshuai.xi if ((audio_ipauth & AUDIO_HASHKEY_DISABLE_COOK))
5903*53ee8cc1Swenshuai.xi {
5904*53ee8cc1Swenshuai.xi pHashkeyInfo->U32IsHashkeySupported = FALSE;
5905*53ee8cc1Swenshuai.xi }
5906*53ee8cc1Swenshuai.xi break;
5907*53ee8cc1Swenshuai.xi }
5908*53ee8cc1Swenshuai.xi
5909*53ee8cc1Swenshuai.xi default:
5910*53ee8cc1Swenshuai.xi break;
5911*53ee8cc1Swenshuai.xi }
5912*53ee8cc1Swenshuai.xi
5913*53ee8cc1Swenshuai.xi break;
5914*53ee8cc1Swenshuai.xi }
5915*53ee8cc1Swenshuai.xi
5916*53ee8cc1Swenshuai.xi case Audio_infoType_AccumEsCnt:
5917*53ee8cc1Swenshuai.xi {
5918*53ee8cc1Swenshuai.xi MS_U32 * pRet = (MS_U32 *) pInfo;
5919*53ee8cc1Swenshuai.xi
5920*53ee8cc1Swenshuai.xi if(adec_id >= MAX_ADEC) // SHM only has 2 mem
5921*53ee8cc1Swenshuai.xi {
5922*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DEC_ID not Supported\n", __FUNCTION__ );
5923*53ee8cc1Swenshuai.xi return FALSE;
5924*53ee8cc1Swenshuai.xi }
5925*53ee8cc1Swenshuai.xi
5926*53ee8cc1Swenshuai.xi *pRet = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ACCUM_ES_BYTECNT, adec_id);
5927*53ee8cc1Swenshuai.xi break;
5928*53ee8cc1Swenshuai.xi }
5929*53ee8cc1Swenshuai.xi
5930*53ee8cc1Swenshuai.xi case Audio_infoType_Pcm_Output_Channel:
5931*53ee8cc1Swenshuai.xi {
5932*53ee8cc1Swenshuai.xi MS_U32 * pRet = (MS_U32 *) pInfo;
5933*53ee8cc1Swenshuai.xi
5934*53ee8cc1Swenshuai.xi if(adec_id >= MAX_ADEC) // SHM only has 2 mem
5935*53ee8cc1Swenshuai.xi {
5936*53ee8cc1Swenshuai.xi HALMAD_ERROR("%s: DEC_ID not Supported\n", __FUNCTION__ );
5937*53ee8cc1Swenshuai.xi return FALSE;
5938*53ee8cc1Swenshuai.xi }
5939*53ee8cc1Swenshuai.xi
5940*53ee8cc1Swenshuai.xi *pRet = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PCM_OUTPUT_CHANNEL, adec_id);
5941*53ee8cc1Swenshuai.xi break;
5942*53ee8cc1Swenshuai.xi }
5943*53ee8cc1Swenshuai.xi
5944*53ee8cc1Swenshuai.xi case Audio_infoType_omx_no_mixing:
5945*53ee8cc1Swenshuai.xi {
5946*53ee8cc1Swenshuai.xi MS_U32 * pRet = (MS_U32 *) pInfo;
5947*53ee8cc1Swenshuai.xi
5948*53ee8cc1Swenshuai.xi if(adec_id >= MAX_ADEC) // SHM only has 2 mem
5949*53ee8cc1Swenshuai.xi {
5950*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DEC_ID not Supported\n", __FUNCTION__ );
5951*53ee8cc1Swenshuai.xi return FALSE;
5952*53ee8cc1Swenshuai.xi }
5953*53ee8cc1Swenshuai.xi
5954*53ee8cc1Swenshuai.xi *pRet = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_OMX_NO_MIXING, adec_id);
5955*53ee8cc1Swenshuai.xi break;
5956*53ee8cc1Swenshuai.xi }
5957*53ee8cc1Swenshuai.xi
5958*53ee8cc1Swenshuai.xi case Audio_infoType_omx_ES_bypass:
5959*53ee8cc1Swenshuai.xi {
5960*53ee8cc1Swenshuai.xi MS_U32 * pRet = (MS_U32 *) pInfo;
5961*53ee8cc1Swenshuai.xi
5962*53ee8cc1Swenshuai.xi if(adec_id >= MAX_ADEC) // SHM only has 2 mem
5963*53ee8cc1Swenshuai.xi {
5964*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: DEC_ID not Supported\n", __FUNCTION__ );
5965*53ee8cc1Swenshuai.xi return FALSE;
5966*53ee8cc1Swenshuai.xi }
5967*53ee8cc1Swenshuai.xi
5968*53ee8cc1Swenshuai.xi *pRet = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_OMX_ES_BYPASS, adec_id);
5969*53ee8cc1Swenshuai.xi break;
5970*53ee8cc1Swenshuai.xi }
5971*53ee8cc1Swenshuai.xi
5972*53ee8cc1Swenshuai.xi case Audio_infoType_acmod:
5973*53ee8cc1Swenshuai.xi {
5974*53ee8cc1Swenshuai.xi Audio_COMM_infoType eInfoType;
5975*53ee8cc1Swenshuai.xi MS_U64 * pRet = (MS_U64 *) pInfo;
5976*53ee8cc1Swenshuai.xi
5977*53ee8cc1Swenshuai.xi if (pInfo == NULL)
5978*53ee8cc1Swenshuai.xi {
5979*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: Audio_infoType_acmod pInfo is NULL\n", __FUNCTION__);
5980*53ee8cc1Swenshuai.xi return FALSE;
5981*53ee8cc1Swenshuai.xi }
5982*53ee8cc1Swenshuai.xi
5983*53ee8cc1Swenshuai.xi if (adec_id >= MAX_ADEC) // SHM only has 2 mem
5984*53ee8cc1Swenshuai.xi {
5985*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: Audio_infoType_acmod more than MAX_ADEC ID %d\n", __FUNCTION__, adec_id);
5986*53ee8cc1Swenshuai.xi return FALSE;
5987*53ee8cc1Swenshuai.xi }
5988*53ee8cc1Swenshuai.xi
5989*53ee8cc1Swenshuai.xi if (adec_id == ADEC1)
5990*53ee8cc1Swenshuai.xi {
5991*53ee8cc1Swenshuai.xi eInfoType = Audio_Comm_infoType_ADEC1_acmod;
5992*53ee8cc1Swenshuai.xi }
5993*53ee8cc1Swenshuai.xi else if (adec_id == ADEC2)
5994*53ee8cc1Swenshuai.xi {
5995*53ee8cc1Swenshuai.xi eInfoType = Audio_Comm_infoType_ADEC2_acmod;
5996*53ee8cc1Swenshuai.xi }
5997*53ee8cc1Swenshuai.xi else
5998*53ee8cc1Swenshuai.xi {
5999*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: Audio_infoType_acmod DEC_ID %d not Supported\n", __FUNCTION__, adec_id);
6000*53ee8cc1Swenshuai.xi return FALSE;
6001*53ee8cc1Swenshuai.xi }
6002*53ee8cc1Swenshuai.xi
6003*53ee8cc1Swenshuai.xi *pRet = HAL_MAD_GetCommInfo(eInfoType);
6004*53ee8cc1Swenshuai.xi
6005*53ee8cc1Swenshuai.xi break;
6006*53ee8cc1Swenshuai.xi }
6007*53ee8cc1Swenshuai.xi
6008*53ee8cc1Swenshuai.xi case Audio_infoType_Abs_ReadReg:
6009*53ee8cc1Swenshuai.xi {
6010*53ee8cc1Swenshuai.xi MS_U16 * pRet = (MS_U16 *) pInfo;
6011*53ee8cc1Swenshuai.xi
6012*53ee8cc1Swenshuai.xi *pRet = HAL_AUDIO_AbsReadReg(g_ReadTargetAddr);
6013*53ee8cc1Swenshuai.xi break;
6014*53ee8cc1Swenshuai.xi }
6015*53ee8cc1Swenshuai.xi
6016*53ee8cc1Swenshuai.xi case Audio_infoType_ReadDM_Value:
6017*53ee8cc1Swenshuai.xi {
6018*53ee8cc1Swenshuai.xi MS_U16 * pRet = (MS_U16 *) pInfo;
6019*53ee8cc1Swenshuai.xi
6020*53ee8cc1Swenshuai.xi switch(DecId)
6021*53ee8cc1Swenshuai.xi {
6022*53ee8cc1Swenshuai.xi case AU_DEC_ID1:
6023*53ee8cc1Swenshuai.xi {
6024*53ee8cc1Swenshuai.xi *pRet = (MS_U16)HAL_MAD_Read_DSP_sram(g_ReadDMTargetAddr, DSP_MEM_TYPE_DM);
6025*53ee8cc1Swenshuai.xi }
6026*53ee8cc1Swenshuai.xi break;
6027*53ee8cc1Swenshuai.xi case AU_DEC_ID3:
6028*53ee8cc1Swenshuai.xi {
6029*53ee8cc1Swenshuai.xi *pRet = (MS_U16)HAL_MAD2_Read_DSP_sram(g_ReadDMTargetAddr, DSP_MEM_TYPE_DM);
6030*53ee8cc1Swenshuai.xi }
6031*53ee8cc1Swenshuai.xi break;
6032*53ee8cc1Swenshuai.xi default:
6033*53ee8cc1Swenshuai.xi break;
6034*53ee8cc1Swenshuai.xi }
6035*53ee8cc1Swenshuai.xi break;
6036*53ee8cc1Swenshuai.xi }
6037*53ee8cc1Swenshuai.xi
6038*53ee8cc1Swenshuai.xi case Audio_infoType_ReadPM_Value:
6039*53ee8cc1Swenshuai.xi {
6040*53ee8cc1Swenshuai.xi MS_U16 * pRet = (MS_U16 *) pInfo;
6041*53ee8cc1Swenshuai.xi
6042*53ee8cc1Swenshuai.xi switch(DecId)
6043*53ee8cc1Swenshuai.xi {
6044*53ee8cc1Swenshuai.xi case AU_DEC_ID1:
6045*53ee8cc1Swenshuai.xi {
6046*53ee8cc1Swenshuai.xi *pRet = (MS_U16)HAL_MAD_Read_DSP_sram(g_ReadPMTargetAddr, DSP_MEM_TYPE_PM);
6047*53ee8cc1Swenshuai.xi }
6048*53ee8cc1Swenshuai.xi break;
6049*53ee8cc1Swenshuai.xi case AU_DEC_ID3:
6050*53ee8cc1Swenshuai.xi {
6051*53ee8cc1Swenshuai.xi *pRet = (MS_U16)HAL_MAD2_Read_DSP_sram(g_ReadPMTargetAddr, DSP_MEM_TYPE_PM);
6052*53ee8cc1Swenshuai.xi }
6053*53ee8cc1Swenshuai.xi break;
6054*53ee8cc1Swenshuai.xi default:
6055*53ee8cc1Swenshuai.xi break;
6056*53ee8cc1Swenshuai.xi }
6057*53ee8cc1Swenshuai.xi break;
6058*53ee8cc1Swenshuai.xi }
6059*53ee8cc1Swenshuai.xi
6060*53ee8cc1Swenshuai.xi case Audio_infoType_Decoder_Type:
6061*53ee8cc1Swenshuai.xi {
6062*53ee8cc1Swenshuai.xi AUDIO_DSP_CODE_TYPE eDecoder = AU_DVB_STANDARD_INVALID;
6063*53ee8cc1Swenshuai.xi MS_U32 u32DecoderType = 0;
6064*53ee8cc1Swenshuai.xi MS_U32 *pRet = (MS_U32 *)pInfo;
6065*53ee8cc1Swenshuai.xi
6066*53ee8cc1Swenshuai.xi switch (adec_id)
6067*53ee8cc1Swenshuai.xi {
6068*53ee8cc1Swenshuai.xi case ADEC1:
6069*53ee8cc1Swenshuai.xi {
6070*53ee8cc1Swenshuai.xi eDecoder = g_AudioVars2->g_DspCodeType;
6071*53ee8cc1Swenshuai.xi break;
6072*53ee8cc1Swenshuai.xi }
6073*53ee8cc1Swenshuai.xi
6074*53ee8cc1Swenshuai.xi case ADEC2:
6075*53ee8cc1Swenshuai.xi {
6076*53ee8cc1Swenshuai.xi eDecoder = g_AudioVars2->g_Dsp2CodeType;
6077*53ee8cc1Swenshuai.xi break;
6078*53ee8cc1Swenshuai.xi }
6079*53ee8cc1Swenshuai.xi
6080*53ee8cc1Swenshuai.xi default:
6081*53ee8cc1Swenshuai.xi {
6082*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: invalid ID (%d, %d)\n", __FUNCTION__, DecId, adec_id);
6083*53ee8cc1Swenshuai.xi result = FALSE;
6084*53ee8cc1Swenshuai.xi break;
6085*53ee8cc1Swenshuai.xi }
6086*53ee8cc1Swenshuai.xi }
6087*53ee8cc1Swenshuai.xi
6088*53ee8cc1Swenshuai.xi if (result == TRUE)
6089*53ee8cc1Swenshuai.xi {
6090*53ee8cc1Swenshuai.xi switch (eDecoder)
6091*53ee8cc1Swenshuai.xi {
6092*53ee8cc1Swenshuai.xi case AU_DVB_STANDARD_DTS:
6093*53ee8cc1Swenshuai.xi case AU_DVB_STANDARD_DTSLBR:
6094*53ee8cc1Swenshuai.xi {
6095*53ee8cc1Swenshuai.xi u32DecoderType = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DTS_ES_TYPE, adec_id) & 0x00FFFFFF;
6096*53ee8cc1Swenshuai.xi
6097*53ee8cc1Swenshuai.xi switch (u32DecoderType)
6098*53ee8cc1Swenshuai.xi {
6099*53ee8cc1Swenshuai.xi case DTS_TYPE_CORE:
6100*53ee8cc1Swenshuai.xi case DTS_TYPE_CORE_XLL:
6101*53ee8cc1Swenshuai.xi {
6102*53ee8cc1Swenshuai.xi *pRet = AUDIO_DTS_TYPE_CORE;
6103*53ee8cc1Swenshuai.xi break;
6104*53ee8cc1Swenshuai.xi }
6105*53ee8cc1Swenshuai.xi
6106*53ee8cc1Swenshuai.xi case DTS_TYPE_LBR:
6107*53ee8cc1Swenshuai.xi {
6108*53ee8cc1Swenshuai.xi *pRet = AUDIO_DTS_TYPE_LBR;
6109*53ee8cc1Swenshuai.xi break;
6110*53ee8cc1Swenshuai.xi }
6111*53ee8cc1Swenshuai.xi
6112*53ee8cc1Swenshuai.xi case DTS_TYPE_XLL:
6113*53ee8cc1Swenshuai.xi {
6114*53ee8cc1Swenshuai.xi *pRet = AUDIO_DTS_TYPE_HD;
6115*53ee8cc1Swenshuai.xi break;
6116*53ee8cc1Swenshuai.xi }
6117*53ee8cc1Swenshuai.xi
6118*53ee8cc1Swenshuai.xi default:
6119*53ee8cc1Swenshuai.xi {
6120*53ee8cc1Swenshuai.xi result = FALSE;
6121*53ee8cc1Swenshuai.xi break;
6122*53ee8cc1Swenshuai.xi }
6123*53ee8cc1Swenshuai.xi }
6124*53ee8cc1Swenshuai.xi break;
6125*53ee8cc1Swenshuai.xi }
6126*53ee8cc1Swenshuai.xi
6127*53ee8cc1Swenshuai.xi default:
6128*53ee8cc1Swenshuai.xi {
6129*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: invalid ID (%d, %d)\n", __FUNCTION__, DecId, adec_id);
6130*53ee8cc1Swenshuai.xi result = FALSE;
6131*53ee8cc1Swenshuai.xi break;
6132*53ee8cc1Swenshuai.xi }
6133*53ee8cc1Swenshuai.xi }
6134*53ee8cc1Swenshuai.xi }
6135*53ee8cc1Swenshuai.xi
6136*53ee8cc1Swenshuai.xi break;
6137*53ee8cc1Swenshuai.xi }
6138*53ee8cc1Swenshuai.xi
6139*53ee8cc1Swenshuai.xi /* not support cmd */
6140*53ee8cc1Swenshuai.xi default:
6141*53ee8cc1Swenshuai.xi HALMAD_ERROR ("%s: cmd not Supported\n", __FUNCTION__ );
6142*53ee8cc1Swenshuai.xi result = FALSE;
6143*53ee8cc1Swenshuai.xi break;
6144*53ee8cc1Swenshuai.xi }
6145*53ee8cc1Swenshuai.xi
6146*53ee8cc1Swenshuai.xi return result;
6147*53ee8cc1Swenshuai.xi }
6148*53ee8cc1Swenshuai.xi
6149*53ee8cc1Swenshuai.xi //====== STAOS PIP END 2012/02/01 ========
6150*53ee8cc1Swenshuai.xi
HAL_MAD_CommonCmd_TrasferData(void * pSrc,MS_U32 u32SrcSize,void * pDst,MS_U32 u32DstSzie)6151*53ee8cc1Swenshuai.xi MS_S32 HAL_MAD_CommonCmd_TrasferData(void *pSrc, MS_U32 u32SrcSize, void *pDst, MS_U32 u32DstSzie)
6152*53ee8cc1Swenshuai.xi {
6153*53ee8cc1Swenshuai.xi MS_S32 s32Ret = 0;
6154*53ee8cc1Swenshuai.xi MS_U32 u32TransferSize = 0;
6155*53ee8cc1Swenshuai.xi
6156*53ee8cc1Swenshuai.xi if (pSrc == NULL)
6157*53ee8cc1Swenshuai.xi {
6158*53ee8cc1Swenshuai.xi AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s: Error! pSrc should not be NULL!\n", __FUNCTION__);
6159*53ee8cc1Swenshuai.xi return -A_EFAULT;
6160*53ee8cc1Swenshuai.xi }
6161*53ee8cc1Swenshuai.xi
6162*53ee8cc1Swenshuai.xi if (u32SrcSize == 0)
6163*53ee8cc1Swenshuai.xi {
6164*53ee8cc1Swenshuai.xi AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s: Error! u32SrcSize should not be zero!\n", __FUNCTION__);
6165*53ee8cc1Swenshuai.xi return -A_EINVAL;
6166*53ee8cc1Swenshuai.xi }
6167*53ee8cc1Swenshuai.xi
6168*53ee8cc1Swenshuai.xi if (pDst == NULL)
6169*53ee8cc1Swenshuai.xi {
6170*53ee8cc1Swenshuai.xi AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s: Error! pDst should not be NULL!\n", __FUNCTION__);
6171*53ee8cc1Swenshuai.xi return -A_EFAULT;
6172*53ee8cc1Swenshuai.xi }
6173*53ee8cc1Swenshuai.xi
6174*53ee8cc1Swenshuai.xi if (u32DstSzie == 0)
6175*53ee8cc1Swenshuai.xi {
6176*53ee8cc1Swenshuai.xi AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s: Error! u32DstSzie should not be zero!\n", __FUNCTION__);
6177*53ee8cc1Swenshuai.xi return -A_EINVAL;
6178*53ee8cc1Swenshuai.xi }
6179*53ee8cc1Swenshuai.xi
6180*53ee8cc1Swenshuai.xi u32TransferSize = (u32SrcSize < u32DstSzie) ? u32SrcSize : u32DstSzie;
6181*53ee8cc1Swenshuai.xi memcpy(((MS_U8 *)pDst + 8), ((MS_U8 *)pSrc + 8),(u32TransferSize - 8));
6182*53ee8cc1Swenshuai.xi if(u32SrcSize < u32DstSzie)
6183*53ee8cc1Swenshuai.xi {
6184*53ee8cc1Swenshuai.xi memset(((MS_U8 *)pDst + u32TransferSize), 0x00, (u32DstSzie - u32SrcSize));
6185*53ee8cc1Swenshuai.xi }
6186*53ee8cc1Swenshuai.xi
6187*53ee8cc1Swenshuai.xi return s32Ret;
6188*53ee8cc1Swenshuai.xi }
6189*53ee8cc1Swenshuai.xi
HAL_MAD_SetAudioOutputDeviceSelection(AUDIO_OUTPUT_DEVICE_SELECTION_t * pAudioOutputDeviceSelection)6190*53ee8cc1Swenshuai.xi MS_S32 HAL_MAD_SetAudioOutputDeviceSelection(AUDIO_OUTPUT_DEVICE_SELECTION_t * pAudioOutputDeviceSelection)
6191*53ee8cc1Swenshuai.xi {
6192*53ee8cc1Swenshuai.xi MS_S32 s32Ret = 0;
6193*53ee8cc1Swenshuai.xi MS_U32 u32UserStrucVer = 0;
6194*53ee8cc1Swenshuai.xi MS_U32 u32UserStrucSize = 0;
6195*53ee8cc1Swenshuai.xi MS_U32 u32DriverStrucVer = 0;
6196*53ee8cc1Swenshuai.xi MS_U32 u32DriverStrucSize = 0;
6197*53ee8cc1Swenshuai.xi
6198*53ee8cc1Swenshuai.xi HALMAD_CHECK_SHM_INIT;
6199*53ee8cc1Swenshuai.xi
6200*53ee8cc1Swenshuai.xi if (pAudioOutputDeviceSelection == NULL)
6201*53ee8cc1Swenshuai.xi {
6202*53ee8cc1Swenshuai.xi AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s: Error! pAudioOutputDeviceSelection should not be NULL!\n", __FUNCTION__);
6203*53ee8cc1Swenshuai.xi return -A_EFAULT;
6204*53ee8cc1Swenshuai.xi }
6205*53ee8cc1Swenshuai.xi
6206*53ee8cc1Swenshuai.xi u32UserStrucVer = pAudioOutputDeviceSelection->u32StructVersion;
6207*53ee8cc1Swenshuai.xi u32DriverStrucVer = g_AudioVars2->g_AudioOutputDeviceSelection.u32StructVersion;
6208*53ee8cc1Swenshuai.xi
6209*53ee8cc1Swenshuai.xi if ((u32UserStrucVer & AUDIO_MAJOR_VERSION_MASK) != (u32DriverStrucVer & AUDIO_MAJOR_VERSION_MASK))
6210*53ee8cc1Swenshuai.xi {
6211*53ee8cc1Swenshuai.xi AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s(): structure version is mismatch, user is 0x%08X, driver is 0x%08X!\n", __FUNCTION__,u32UserStrucVer,u32DriverStrucVer);
6212*53ee8cc1Swenshuai.xi return -A_EPERM;
6213*53ee8cc1Swenshuai.xi }
6214*53ee8cc1Swenshuai.xi
6215*53ee8cc1Swenshuai.xi u32UserStrucSize = pAudioOutputDeviceSelection->u32StructSize;
6216*53ee8cc1Swenshuai.xi u32DriverStrucSize = g_AudioVars2->g_AudioOutputDeviceSelection.u32StructSize;
6217*53ee8cc1Swenshuai.xi
6218*53ee8cc1Swenshuai.xi s32Ret = HAL_MAD_CommonCmd_TrasferData(pAudioOutputDeviceSelection, u32UserStrucSize, &g_AudioVars2->g_AudioOutputDeviceSelection, u32DriverStrucSize);
6219*53ee8cc1Swenshuai.xi if (s32Ret < 0)
6220*53ee8cc1Swenshuai.xi {
6221*53ee8cc1Swenshuai.xi return s32Ret;
6222*53ee8cc1Swenshuai.xi }
6223*53ee8cc1Swenshuai.xi
6224*53ee8cc1Swenshuai.xi if ((g_AudioVars2->g_AudioOutputDeviceSelection.u32OutputDeviceSelection & AUDIO_OUTPUT_DEVICE_SPEAKER) == 0)
6225*53ee8cc1Swenshuai.xi {
6226*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_SPEAKER_EN, ADEC1, DISABLE, 0);
6227*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_SPEAKER_EN, ADEC2, DISABLE, 0);
6228*53ee8cc1Swenshuai.xi
6229*53ee8cc1Swenshuai.xi HAL_ADVSOUND_SubProcessEnable(DOLBY_DAP_EN, FALSE);
6230*53ee8cc1Swenshuai.xi }
6231*53ee8cc1Swenshuai.xi else
6232*53ee8cc1Swenshuai.xi {
6233*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_SPEAKER_EN, ADEC1, ENABLE, 0);
6234*53ee8cc1Swenshuai.xi HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_SPEAKER_EN, ADEC2, ENABLE, 0);
6235*53ee8cc1Swenshuai.xi
6236*53ee8cc1Swenshuai.xi HAL_ADVSOUND_SubProcessEnable(DOLBY_DAP_EN, g_AudioVars2->g_DolbyDAPEnable);
6237*53ee8cc1Swenshuai.xi }
6238*53ee8cc1Swenshuai.xi
6239*53ee8cc1Swenshuai.xi return s32Ret;
6240*53ee8cc1Swenshuai.xi }
6241*53ee8cc1Swenshuai.xi
HAL_MAD_SpecifyDigitalOutputCodec(AUDIO_SPECIFIED_DIGITAL_OUTPUT_t * pAudioSpecifiedDigitalOutput,DIGITAL_OUTPUT_TYPE u32DigitalOutputType)6242*53ee8cc1Swenshuai.xi MS_S32 HAL_MAD_SpecifyDigitalOutputCodec(AUDIO_SPECIFIED_DIGITAL_OUTPUT_t * pAudioSpecifiedDigitalOutput, DIGITAL_OUTPUT_TYPE u32DigitalOutputType)
6243*53ee8cc1Swenshuai.xi {
6244*53ee8cc1Swenshuai.xi MS_S32 s32Ret = 0;
6245*53ee8cc1Swenshuai.xi MS_U32 u32UserStrucVer = 0;
6246*53ee8cc1Swenshuai.xi MS_U32 u32UserStrucSize = 0;
6247*53ee8cc1Swenshuai.xi MS_U32 u32DriverStrucVer = 0;
6248*53ee8cc1Swenshuai.xi MS_U32 u32DriverStrucSize = 0;
6249*53ee8cc1Swenshuai.xi AUDIO_SPECIFIED_DIGITAL_OUTPUT_t tSpecifiedDigitalOutput;
6250*53ee8cc1Swenshuai.xi
6251*53ee8cc1Swenshuai.xi HALMAD_CHECK_SHM_INIT;
6252*53ee8cc1Swenshuai.xi
6253*53ee8cc1Swenshuai.xi if (pAudioSpecifiedDigitalOutput == NULL)
6254*53ee8cc1Swenshuai.xi {
6255*53ee8cc1Swenshuai.xi AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s: Error! pAudioSpecifiedDigitalOutput should not be NULL!\n", __FUNCTION__);
6256*53ee8cc1Swenshuai.xi return -A_EFAULT;
6257*53ee8cc1Swenshuai.xi }
6258*53ee8cc1Swenshuai.xi
6259*53ee8cc1Swenshuai.xi u32UserStrucVer = pAudioSpecifiedDigitalOutput->u32StructVersion;
6260*53ee8cc1Swenshuai.xi u32DriverStrucVer = g_AudioVars2->g_AudioSpecifiedDigitalOutput.u32StructVersion;
6261*53ee8cc1Swenshuai.xi
6262*53ee8cc1Swenshuai.xi if ((u32UserStrucVer & AUDIO_MAJOR_VERSION_MASK) != (u32DriverStrucVer & AUDIO_MAJOR_VERSION_MASK))
6263*53ee8cc1Swenshuai.xi {
6264*53ee8cc1Swenshuai.xi AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s(): structure version is mismatch, user is 0x%08X, driver is 0x%08X!\n", __FUNCTION__,u32UserStrucVer,u32DriverStrucVer);
6265*53ee8cc1Swenshuai.xi return -A_EPERM;
6266*53ee8cc1Swenshuai.xi }
6267*53ee8cc1Swenshuai.xi
6268*53ee8cc1Swenshuai.xi u32UserStrucSize = pAudioSpecifiedDigitalOutput->u32StructSize;
6269*53ee8cc1Swenshuai.xi u32DriverStrucSize = g_AudioVars2->g_AudioSpecifiedDigitalOutput.u32StructSize;
6270*53ee8cc1Swenshuai.xi
6271*53ee8cc1Swenshuai.xi memset((void *)&tSpecifiedDigitalOutput, 0x00, sizeof(AUDIO_SPECIFIED_DIGITAL_OUTPUT_t));
6272*53ee8cc1Swenshuai.xi tSpecifiedDigitalOutput.u32StructVersion = AUDIO_SPECIFIED_DIGITAL_OUTPUT_VERSION;
6273*53ee8cc1Swenshuai.xi tSpecifiedDigitalOutput.u32StructSize = sizeof(AUDIO_SPECIFIED_DIGITAL_OUTPUT_t);
6274*53ee8cc1Swenshuai.xi
6275*53ee8cc1Swenshuai.xi s32Ret = HAL_MAD_CommonCmd_TrasferData(pAudioSpecifiedDigitalOutput, u32UserStrucSize, &tSpecifiedDigitalOutput, u32DriverStrucSize);
6276*53ee8cc1Swenshuai.xi if (s32Ret < 0)
6277*53ee8cc1Swenshuai.xi {
6278*53ee8cc1Swenshuai.xi return s32Ret;
6279*53ee8cc1Swenshuai.xi }
6280*53ee8cc1Swenshuai.xi
6281*53ee8cc1Swenshuai.xi switch (u32DigitalOutputType)
6282*53ee8cc1Swenshuai.xi {
6283*53ee8cc1Swenshuai.xi case DIGITAL_SPDIF_OUTPUT:
6284*53ee8cc1Swenshuai.xi {
6285*53ee8cc1Swenshuai.xi g_AudioVars2->g_AudioSpecifiedDigitalOutput.u32SpdifOutputCodec = tSpecifiedDigitalOutput.u32SpdifOutputCodec;
6286*53ee8cc1Swenshuai.xi break;
6287*53ee8cc1Swenshuai.xi }
6288*53ee8cc1Swenshuai.xi
6289*53ee8cc1Swenshuai.xi case DIGITAL_HDMI_ARC_OUTPUT:
6290*53ee8cc1Swenshuai.xi {
6291*53ee8cc1Swenshuai.xi g_AudioVars2->g_AudioSpecifiedDigitalOutput.u32HdmiArcOutputCodec = tSpecifiedDigitalOutput.u32HdmiArcOutputCodec;
6292*53ee8cc1Swenshuai.xi break;
6293*53ee8cc1Swenshuai.xi }
6294*53ee8cc1Swenshuai.xi
6295*53ee8cc1Swenshuai.xi case DIGITAL_HDMI_OUTPUT:
6296*53ee8cc1Swenshuai.xi {
6297*53ee8cc1Swenshuai.xi g_AudioVars2->g_AudioSpecifiedDigitalOutput.u32HdmiTxOutputCodec = tSpecifiedDigitalOutput.u32HdmiTxOutputCodec;
6298*53ee8cc1Swenshuai.xi break;
6299*53ee8cc1Swenshuai.xi }
6300*53ee8cc1Swenshuai.xi
6301*53ee8cc1Swenshuai.xi default:
6302*53ee8cc1Swenshuai.xi {
6303*53ee8cc1Swenshuai.xi memcpy((void *)&g_AudioVars2->g_AudioSpecifiedDigitalOutput, (void *)&tSpecifiedDigitalOutput, sizeof(AUDIO_SPECIFIED_DIGITAL_OUTPUT_t));
6304*53ee8cc1Swenshuai.xi break;
6305*53ee8cc1Swenshuai.xi }
6306*53ee8cc1Swenshuai.xi }
6307*53ee8cc1Swenshuai.xi
6308*53ee8cc1Swenshuai.xi return s32Ret;
6309*53ee8cc1Swenshuai.xi }
6310*53ee8cc1Swenshuai.xi
HAL_MAD_DAP_Control(AUDIO_DAP_CONTROL_t * pDapControl)6311*53ee8cc1Swenshuai.xi MS_S32 HAL_MAD_DAP_Control(AUDIO_DAP_CONTROL_t * pDapControl)
6312*53ee8cc1Swenshuai.xi {
6313*53ee8cc1Swenshuai.xi MS_S32 s32Ret = 0;
6314*53ee8cc1Swenshuai.xi MS_U32 u32UserStrucVer = 0;
6315*53ee8cc1Swenshuai.xi MS_U8 u8PcmRenderControl = 0; //0: decoder mode, 1: multi-channel mode, 2: stereo mode
6316*53ee8cc1Swenshuai.xi
6317*53ee8cc1Swenshuai.xi HALMAD_CHECK_SHM_INIT;
6318*53ee8cc1Swenshuai.xi
6319*53ee8cc1Swenshuai.xi if (pDapControl == NULL)
6320*53ee8cc1Swenshuai.xi {
6321*53ee8cc1Swenshuai.xi AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s: Error! pDapControl should not be NULL!\n", __FUNCTION__);
6322*53ee8cc1Swenshuai.xi return -A_EFAULT;
6323*53ee8cc1Swenshuai.xi }
6324*53ee8cc1Swenshuai.xi
6325*53ee8cc1Swenshuai.xi u32UserStrucVer = pDapControl->u32StructVersion;
6326*53ee8cc1Swenshuai.xi
6327*53ee8cc1Swenshuai.xi if ((u32UserStrucVer & AUDIO_MAJOR_VERSION_MASK) != (AUDIO_DAP_CONTROL_VERSION & AUDIO_MAJOR_VERSION_MASK))
6328*53ee8cc1Swenshuai.xi {
6329*53ee8cc1Swenshuai.xi AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s(): structure version is mismatch, user is 0x%08X, driver is 0x%08X!\n", __FUNCTION__, u32UserStrucVer, AUDIO_DAP_CONTROL_VERSION);
6330*53ee8cc1Swenshuai.xi return -A_EPERM;
6331*53ee8cc1Swenshuai.xi }
6332*53ee8cc1Swenshuai.xi
6333*53ee8cc1Swenshuai.xi if (pDapControl->u32McuCtrlEnable == TRUE)
6334*53ee8cc1Swenshuai.xi {
6335*53ee8cc1Swenshuai.xi if (pDapControl->u32MultiChannelEnable == TRUE)
6336*53ee8cc1Swenshuai.xi {
6337*53ee8cc1Swenshuai.xi u8PcmRenderControl = 1; //multi-channel mode
6338*53ee8cc1Swenshuai.xi }
6339*53ee8cc1Swenshuai.xi else
6340*53ee8cc1Swenshuai.xi {
6341*53ee8cc1Swenshuai.xi u8PcmRenderControl = 2; //stereo mode
6342*53ee8cc1Swenshuai.xi }
6343*53ee8cc1Swenshuai.xi }
6344*53ee8cc1Swenshuai.xi else
6345*53ee8cc1Swenshuai.xi {
6346*53ee8cc1Swenshuai.xi u8PcmRenderControl = 0; //decoder mode
6347*53ee8cc1Swenshuai.xi }
6348*53ee8cc1Swenshuai.xi
6349*53ee8cc1Swenshuai.xi HAL_AUR2_WriteMaskByte(REG_SNDR2_MBOX_BYTE_DAP_SEL, 0x06, (u8PcmRenderControl << 1));
6350*53ee8cc1Swenshuai.xi
6351*53ee8cc1Swenshuai.xi return s32Ret;
6352*53ee8cc1Swenshuai.xi }
6353*53ee8cc1Swenshuai.xi
HAL_MAD_GetDecoderInfo(AUDIO_DECODER_INFO_t * pDecoderInfo)6354*53ee8cc1Swenshuai.xi MS_S32 HAL_MAD_GetDecoderInfo(AUDIO_DECODER_INFO_t * pDecoderInfo)
6355*53ee8cc1Swenshuai.xi {
6356*53ee8cc1Swenshuai.xi MS_S32 s32Ret = 0;
6357*53ee8cc1Swenshuai.xi MS_U32 u32UserStrucVer = 0;
6358*53ee8cc1Swenshuai.xi MS_U32 u32UserStrucSize = 0;
6359*53ee8cc1Swenshuai.xi MS_U32 u32DriverStrucVer = 0;
6360*53ee8cc1Swenshuai.xi MS_U32 u32DriverStrucSize = 0;
6361*53ee8cc1Swenshuai.xi Audio_id adec_id = 0;
6362*53ee8cc1Swenshuai.xi AUDIO_DECODER_INFO_t tDecoderInfo;
6363*53ee8cc1Swenshuai.xi
6364*53ee8cc1Swenshuai.xi if (pDecoderInfo == NULL)
6365*53ee8cc1Swenshuai.xi {
6366*53ee8cc1Swenshuai.xi AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s: Error! pChannelInfo should not be NULL!\n", __FUNCTION__);
6367*53ee8cc1Swenshuai.xi return -A_EFAULT;
6368*53ee8cc1Swenshuai.xi }
6369*53ee8cc1Swenshuai.xi
6370*53ee8cc1Swenshuai.xi u32UserStrucVer = pDecoderInfo->u32StructVersion;
6371*53ee8cc1Swenshuai.xi u32DriverStrucVer = AUDIO_DECODER_INFO_VERSION;
6372*53ee8cc1Swenshuai.xi
6373*53ee8cc1Swenshuai.xi if ((u32UserStrucVer & AUDIO_MAJOR_VERSION_MASK) != (u32DriverStrucVer & AUDIO_MAJOR_VERSION_MASK))
6374*53ee8cc1Swenshuai.xi {
6375*53ee8cc1Swenshuai.xi AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s(): structure version is mismatch, user is 0x%08X, driver is 0x%08X!\n", __FUNCTION__, u32UserStrucVer, AUDIO_DECODER_INFO_VERSION);
6376*53ee8cc1Swenshuai.xi return -A_EPERM;
6377*53ee8cc1Swenshuai.xi }
6378*53ee8cc1Swenshuai.xi
6379*53ee8cc1Swenshuai.xi u32UserStrucSize = pDecoderInfo->u32StructSize;
6380*53ee8cc1Swenshuai.xi u32DriverStrucSize = sizeof(AUDIO_DECODER_INFO_t);
6381*53ee8cc1Swenshuai.xi adec_id = HAL_AUDIO_Convert_DecId_to_ADECId(pDecoderInfo->u8DecId);
6382*53ee8cc1Swenshuai.xi
6383*53ee8cc1Swenshuai.xi memset((void *)&tDecoderInfo, 0x00, sizeof(AUDIO_DECODER_INFO_t));
6384*53ee8cc1Swenshuai.xi tDecoderInfo.u32StructVersion = AUDIO_DECODER_INFO_VERSION;
6385*53ee8cc1Swenshuai.xi tDecoderInfo.u32StructSize = sizeof(AUDIO_DECODER_INFO_t);
6386*53ee8cc1Swenshuai.xi tDecoderInfo.u8DecId = pDecoderInfo->u8DecId;
6387*53ee8cc1Swenshuai.xi tDecoderInfo.bForceMchOutput = TRUE;
6388*53ee8cc1Swenshuai.xi tDecoderInfo.u32PcmOutputType = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_OMX_MCH_VALID, adec_id);
6389*53ee8cc1Swenshuai.xi
6390*53ee8cc1Swenshuai.xi s32Ret = HAL_MAD_CommonCmd_TrasferData(&tDecoderInfo, u32DriverStrucSize, pDecoderInfo, u32UserStrucSize);
6391*53ee8cc1Swenshuai.xi
6392*53ee8cc1Swenshuai.xi return s32Ret;
6393*53ee8cc1Swenshuai.xi }
6394*53ee8cc1Swenshuai.xi
HAL_MAD_CommonCmd(AUDIO_COMMON_CMD_t * cmd)6395*53ee8cc1Swenshuai.xi MS_S32 HAL_MAD_CommonCmd(AUDIO_COMMON_CMD_t * cmd)
6396*53ee8cc1Swenshuai.xi {
6397*53ee8cc1Swenshuai.xi char *name = (char *)cmd->u8StrCmd;
6398*53ee8cc1Swenshuai.xi MS_S32 s32Ret = 0;
6399*53ee8cc1Swenshuai.xi
6400*53ee8cc1Swenshuai.xi if (cmd == NULL)
6401*53ee8cc1Swenshuai.xi {
6402*53ee8cc1Swenshuai.xi AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s: Error! cmd should not be NULL!\n", __FUNCTION__);
6403*53ee8cc1Swenshuai.xi return -A_EFAULT;
6404*53ee8cc1Swenshuai.xi }
6405*53ee8cc1Swenshuai.xi
6406*53ee8cc1Swenshuai.xi if (!(strcmp(name, "SetAudioOutputDeviceSelection")))
6407*53ee8cc1Swenshuai.xi {
6408*53ee8cc1Swenshuai.xi s32Ret = HAL_MAD_SetAudioOutputDeviceSelection((AUDIO_OUTPUT_DEVICE_SELECTION_t *)cmd->pData);
6409*53ee8cc1Swenshuai.xi }
6410*53ee8cc1Swenshuai.xi else if (!(strcmp(name, "SpecifyDigitalOutputCodec")))
6411*53ee8cc1Swenshuai.xi {
6412*53ee8cc1Swenshuai.xi s32Ret = HAL_MAD_SpecifyDigitalOutputCodec((AUDIO_SPECIFIED_DIGITAL_OUTPUT_t *)cmd->pData, DIGITAL_MAX_OUTPUT);
6413*53ee8cc1Swenshuai.xi }
6414*53ee8cc1Swenshuai.xi else if (!(strcmp(name, "SpecifyDigitalOutputCodec_Spdif")))
6415*53ee8cc1Swenshuai.xi {
6416*53ee8cc1Swenshuai.xi s32Ret = HAL_MAD_SpecifyDigitalOutputCodec((AUDIO_SPECIFIED_DIGITAL_OUTPUT_t *)cmd->pData, DIGITAL_SPDIF_OUTPUT);
6417*53ee8cc1Swenshuai.xi }
6418*53ee8cc1Swenshuai.xi else if (!(strcmp(name, "SpecifyDigitalOutputCodec_HdmiArc")))
6419*53ee8cc1Swenshuai.xi {
6420*53ee8cc1Swenshuai.xi s32Ret = HAL_MAD_SpecifyDigitalOutputCodec((AUDIO_SPECIFIED_DIGITAL_OUTPUT_t *)cmd->pData, DIGITAL_HDMI_ARC_OUTPUT);
6421*53ee8cc1Swenshuai.xi }
6422*53ee8cc1Swenshuai.xi else if (!(strcmp(name, "SpecifyDigitalOutputCodec_HdmiTx")))
6423*53ee8cc1Swenshuai.xi {
6424*53ee8cc1Swenshuai.xi s32Ret = HAL_MAD_SpecifyDigitalOutputCodec((AUDIO_SPECIFIED_DIGITAL_OUTPUT_t *)cmd->pData, DIGITAL_HDMI_OUTPUT);
6425*53ee8cc1Swenshuai.xi }
6426*53ee8cc1Swenshuai.xi else if (!(strcmp(name, "DAP_Control")))
6427*53ee8cc1Swenshuai.xi {
6428*53ee8cc1Swenshuai.xi s32Ret = HAL_MAD_DAP_Control((AUDIO_DAP_CONTROL_t *) cmd->pData);
6429*53ee8cc1Swenshuai.xi }
6430*53ee8cc1Swenshuai.xi else if (!(strcmp(name, "GetDecoderInfo")))
6431*53ee8cc1Swenshuai.xi {
6432*53ee8cc1Swenshuai.xi s32Ret = HAL_MAD_GetDecoderInfo((AUDIO_DECODER_INFO_t *) cmd->pData);
6433*53ee8cc1Swenshuai.xi }
6434*53ee8cc1Swenshuai.xi else
6435*53ee8cc1Swenshuai.xi {
6436*53ee8cc1Swenshuai.xi AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s(): Error! Unsupportted Common Cmd (%s)!!\n", __FUNCTION__, cmd->u8StrCmd);
6437*53ee8cc1Swenshuai.xi s32Ret = -A_EINVAL;
6438*53ee8cc1Swenshuai.xi }
6439*53ee8cc1Swenshuai.xi
6440*53ee8cc1Swenshuai.xi return s32Ret;
6441*53ee8cc1Swenshuai.xi }