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