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 /// file drvMJPEG.c
98*53ee8cc1Swenshuai.xi /// @brief MJPEG Driver Interface
99*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor Inc.
100*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
101*53ee8cc1Swenshuai.xi
102*53ee8cc1Swenshuai.xi
103*53ee8cc1Swenshuai.xi #if (!defined(MSOS_TYPE_NUTTX) && !defined(MSOS_TYPE_OPTEE)) || defined(SUPPORT_X_MODEL_FEATURE)
104*53ee8cc1Swenshuai.xi
105*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
106*53ee8cc1Swenshuai.xi // Include Files
107*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
108*53ee8cc1Swenshuai.xi // Common Definition
109*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
110*53ee8cc1Swenshuai.xi #include <linux/string.h>
111*53ee8cc1Swenshuai.xi #else
112*53ee8cc1Swenshuai.xi #include <string.h>
113*53ee8cc1Swenshuai.xi #endif
114*53ee8cc1Swenshuai.xi
115*53ee8cc1Swenshuai.xi #include "MsCommon.h"
116*53ee8cc1Swenshuai.xi #include "MsVersion.h"
117*53ee8cc1Swenshuai.xi #include "MsOS.h"
118*53ee8cc1Swenshuai.xi #include "halCHIP.h"
119*53ee8cc1Swenshuai.xi // Internal Definition
120*53ee8cc1Swenshuai.xi #include "drvMJPEG.h"
121*53ee8cc1Swenshuai.xi #include "VirtualhalMJPEG.h"
122*53ee8cc1Swenshuai.xi #include "halVPU_EX.h"
123*53ee8cc1Swenshuai.xi #include "fwHVD_if.h"
124*53ee8cc1Swenshuai.xi
125*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
126*53ee8cc1Swenshuai.xi // Driver Compiler Options
127*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
128*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
129*53ee8cc1Swenshuai.xi #undef printf
130*53ee8cc1Swenshuai.xi #define printf(format, args...) printk(format, ##args);
131*53ee8cc1Swenshuai.xi #endif
132*53ee8cc1Swenshuai.xi
133*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
134*53ee8cc1Swenshuai.xi // Local Defines
135*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
136*53ee8cc1Swenshuai.xi //MJPEG driver debug macro
137*53ee8cc1Swenshuai.xi #ifndef ANDROID
138*53ee8cc1Swenshuai.xi #define MJPEG_DEBUG_DRV_MSG(format, args...) do{if(u8MJPEG_DrvDbgLevel & E_MJPEG_DEBUG_DRV_MSG) printf(format, ##args);}while(0)
139*53ee8cc1Swenshuai.xi #define MJPEG_DEBUG_DRV_ERR(format, args...) do{if(u8MJPEG_DrvDbgLevel & E_MJPEG_DEBUG_DRV_ERR) printf(format, ##args);}while(0)
140*53ee8cc1Swenshuai.xi #else
141*53ee8cc1Swenshuai.xi #define LOG_TAG "DRV_JPD"
142*53ee8cc1Swenshuai.xi #include <cutils/log.h>
143*53ee8cc1Swenshuai.xi #ifndef LOGD
144*53ee8cc1Swenshuai.xi #define MJPEG_DEBUG_DRV_MSG(format, args...) do{if(u8MJPEG_DrvDbgLevel & E_MJPEG_DEBUG_DRV_MSG) ALOGI(format, ##args);}while(0)
145*53ee8cc1Swenshuai.xi #define MJPEG_DEBUG_DRV_ERR(format, args...) do{if(u8MJPEG_DrvDbgLevel & E_MJPEG_DEBUG_DRV_ERR) ALOGE(format, ##args);}while(0)
146*53ee8cc1Swenshuai.xi #else
147*53ee8cc1Swenshuai.xi #define MJPEG_DEBUG_DRV_MSG(format, args...) do{if(u8MJPEG_DrvDbgLevel & E_MJPEG_DEBUG_DRV_MSG) LOGI(format, ##args);}while(0)
148*53ee8cc1Swenshuai.xi #define MJPEG_DEBUG_DRV_ERR(format, args...) do{if(u8MJPEG_DrvDbgLevel & E_MJPEG_DEBUG_DRV_ERR) LOGE(format, ##args);}while(0)
149*53ee8cc1Swenshuai.xi #endif
150*53ee8cc1Swenshuai.xi
151*53ee8cc1Swenshuai.xi #endif
152*53ee8cc1Swenshuai.xi
153*53ee8cc1Swenshuai.xi #ifndef UNUSED
154*53ee8cc1Swenshuai.xi #define UNUSED(x) ((x)=(x))
155*53ee8cc1Swenshuai.xi #endif
156*53ee8cc1Swenshuai.xi
157*53ee8cc1Swenshuai.xi #define HVD_FW_MEM_OFFSET 0x100000UL // 1M
158*53ee8cc1Swenshuai.xi #define MJPEG_U32_MAX 0xFFFFFFFFUL
159*53ee8cc1Swenshuai.xi #define MJPEG_GENERAL_MAX ((size_t)(-1))
160*53ee8cc1Swenshuai.xi
161*53ee8cc1Swenshuai.xi
162*53ee8cc1Swenshuai.xi static MS_U8 u8MJPEG_DrvDbgLevel = E_MJPEG_DEBUG_DRV_NONE;
163*53ee8cc1Swenshuai.xi
164*53ee8cc1Swenshuai.xi static MS_VIRT __u32FwAddr = MJPEG_U32_MAX;
165*53ee8cc1Swenshuai.xi
166*53ee8cc1Swenshuai.xi static MS_BOOL bDisplayOutSideMode[E_MJPEG_MJPEG_TOTAL] = {0, 0, 0, 0};
167*53ee8cc1Swenshuai.xi static MS_VIRT u32FrameBuffStAddr[E_MJPEG_MJPEG_TOTAL] = {0, 0, 0, 0};
168*53ee8cc1Swenshuai.xi static MS_U32 u32FrameBuffTotalSize[E_MJPEG_MJPEG_TOTAL] = {0, 0, 0, 0};
169*53ee8cc1Swenshuai.xi static MS_U32 u32FrameBuffUnitSize[E_MJPEG_MJPEG_TOTAL] = {0, 0, 0, 0};
170*53ee8cc1Swenshuai.xi static MS_U32 u32FrameBuffTotalNum[E_MJPEG_MJPEG_TOTAL] = {0, 0, 0, 0};
171*53ee8cc1Swenshuai.xi static MS_U16 u16Width[E_MJPEG_MJPEG_TOTAL] = {0, 0, 0, 0};
172*53ee8cc1Swenshuai.xi static MS_U16 u16Height[E_MJPEG_MJPEG_TOTAL] = {0, 0, 0, 0};
173*53ee8cc1Swenshuai.xi static MS_U16 u16Pitch[E_MJPEG_MJPEG_TOTAL] = {0, 0, 0, 0};
174*53ee8cc1Swenshuai.xi static MS_U32 u32FrameCnt[E_MJPEG_MJPEG_TOTAL] = {0, 0, 0, 0};
175*53ee8cc1Swenshuai.xi static MS_U32 u32FrameRate[E_MJPEG_MJPEG_TOTAL] = {0, 0, 0, 0};
176*53ee8cc1Swenshuai.xi static MS_U32 u32FrameRateBase[E_MJPEG_MJPEG_TOTAL] = {0, 0, 0, 0};
177*53ee8cc1Swenshuai.xi static MS_U32 u32FrameTime[E_MJPEG_MJPEG_TOTAL] = {0, 0, 0, 0};
178*53ee8cc1Swenshuai.xi
MDrv_MJPEG_SetFrameBuffStAddr(MS_U8 u8DrvId,MS_VIRT u32Value)179*53ee8cc1Swenshuai.xi void MDrv_MJPEG_SetFrameBuffStAddr(MS_U8 u8DrvId, MS_VIRT u32Value)
180*53ee8cc1Swenshuai.xi {
181*53ee8cc1Swenshuai.xi u32FrameBuffStAddr[u8DrvId] = u32Value;
182*53ee8cc1Swenshuai.xi }
MDrv_MJPEG_GetFrameBuffStAddr(MS_U8 u8DrvId)183*53ee8cc1Swenshuai.xi MS_VIRT MDrv_MJPEG_GetFrameBuffStAddr(MS_U8 u8DrvId)
184*53ee8cc1Swenshuai.xi {
185*53ee8cc1Swenshuai.xi return u32FrameBuffStAddr[u8DrvId];
186*53ee8cc1Swenshuai.xi }
187*53ee8cc1Swenshuai.xi
MDrv_MJPEG_SetFrameBuffTotalSize(MS_U8 u8DrvId,MS_U32 u32Value)188*53ee8cc1Swenshuai.xi void MDrv_MJPEG_SetFrameBuffTotalSize(MS_U8 u8DrvId, MS_U32 u32Value)
189*53ee8cc1Swenshuai.xi {
190*53ee8cc1Swenshuai.xi u32FrameBuffTotalSize[u8DrvId] = u32Value;
191*53ee8cc1Swenshuai.xi }
MDrv_MJPEG_GetFrameBuffTotalSize(MS_U8 u8DrvId)192*53ee8cc1Swenshuai.xi MS_U32 MDrv_MJPEG_GetFrameBuffTotalSize(MS_U8 u8DrvId)
193*53ee8cc1Swenshuai.xi {
194*53ee8cc1Swenshuai.xi return u32FrameBuffTotalSize[u8DrvId];
195*53ee8cc1Swenshuai.xi }
196*53ee8cc1Swenshuai.xi
MDrv_MJPEG_SetFrameBuffUnitSize(MS_U8 u8DrvId,MS_U32 u32Value)197*53ee8cc1Swenshuai.xi void MDrv_MJPEG_SetFrameBuffUnitSize(MS_U8 u8DrvId, MS_U32 u32Value)
198*53ee8cc1Swenshuai.xi {
199*53ee8cc1Swenshuai.xi u32FrameBuffUnitSize[u8DrvId] = u32Value;
200*53ee8cc1Swenshuai.xi }
MDrv_MJPEG_GetFrameBuffUnitSize(MS_U8 u8DrvId)201*53ee8cc1Swenshuai.xi MS_U32 MDrv_MJPEG_GetFrameBuffUnitSize(MS_U8 u8DrvId)
202*53ee8cc1Swenshuai.xi {
203*53ee8cc1Swenshuai.xi return u32FrameBuffUnitSize[u8DrvId];
204*53ee8cc1Swenshuai.xi }
205*53ee8cc1Swenshuai.xi
MDrv_MJPEG_SetFrameBuffTotalNum(MS_U8 u8DrvId,MS_U32 u32Value)206*53ee8cc1Swenshuai.xi void MDrv_MJPEG_SetFrameBuffTotalNum(MS_U8 u8DrvId, MS_U32 u32Value)
207*53ee8cc1Swenshuai.xi {
208*53ee8cc1Swenshuai.xi u32FrameBuffTotalNum[u8DrvId] = u32Value;
209*53ee8cc1Swenshuai.xi }
MDrv_MJPEG_GetFrameBuffTotalNum(MS_U8 u8DrvId)210*53ee8cc1Swenshuai.xi MS_U32 MDrv_MJPEG_GetFrameBuffTotalNum(MS_U8 u8DrvId)
211*53ee8cc1Swenshuai.xi {
212*53ee8cc1Swenshuai.xi return u32FrameBuffTotalNum[u8DrvId];
213*53ee8cc1Swenshuai.xi }
214*53ee8cc1Swenshuai.xi
MDrv_MJPEG_SetWidth(MS_U8 u8DrvId,MS_U16 u16Value)215*53ee8cc1Swenshuai.xi void MDrv_MJPEG_SetWidth(MS_U8 u8DrvId, MS_U16 u16Value)
216*53ee8cc1Swenshuai.xi {
217*53ee8cc1Swenshuai.xi u16Width[u8DrvId] = u16Value;
218*53ee8cc1Swenshuai.xi }
MDrv_MJPEG_GetWidth(MS_U8 u8DrvId)219*53ee8cc1Swenshuai.xi MS_U16 MDrv_MJPEG_GetWidth(MS_U8 u8DrvId)
220*53ee8cc1Swenshuai.xi {
221*53ee8cc1Swenshuai.xi return u16Width[u8DrvId];
222*53ee8cc1Swenshuai.xi }
223*53ee8cc1Swenshuai.xi
MDrv_MJPEG_SetHeight(MS_U8 u8DrvId,MS_U16 u16Value)224*53ee8cc1Swenshuai.xi void MDrv_MJPEG_SetHeight(MS_U8 u8DrvId, MS_U16 u16Value)
225*53ee8cc1Swenshuai.xi {
226*53ee8cc1Swenshuai.xi u16Height[u8DrvId] = u16Value;
227*53ee8cc1Swenshuai.xi }
MDrv_MJPEG_GetHeight(MS_U8 u8DrvId)228*53ee8cc1Swenshuai.xi MS_U16 MDrv_MJPEG_GetHeight(MS_U8 u8DrvId)
229*53ee8cc1Swenshuai.xi {
230*53ee8cc1Swenshuai.xi return u16Height[u8DrvId];
231*53ee8cc1Swenshuai.xi }
232*53ee8cc1Swenshuai.xi
MDrv_MJPEG_SetPitch(MS_U8 u8DrvId,MS_U16 u16Value)233*53ee8cc1Swenshuai.xi void MDrv_MJPEG_SetPitch(MS_U8 u8DrvId, MS_U16 u16Value)
234*53ee8cc1Swenshuai.xi {
235*53ee8cc1Swenshuai.xi u16Pitch[u8DrvId] = u16Value;
236*53ee8cc1Swenshuai.xi }
MDrv_MJPEG_GetPitch(MS_U8 u8DrvId)237*53ee8cc1Swenshuai.xi MS_U16 MDrv_MJPEG_GetPitch(MS_U8 u8DrvId)
238*53ee8cc1Swenshuai.xi {
239*53ee8cc1Swenshuai.xi return u16Pitch[u8DrvId];
240*53ee8cc1Swenshuai.xi }
241*53ee8cc1Swenshuai.xi
MDrv_MJPEG_SetFrameCnt(MS_U8 u8DrvId,MS_U32 u32Value)242*53ee8cc1Swenshuai.xi void MDrv_MJPEG_SetFrameCnt(MS_U8 u8DrvId, MS_U32 u32Value)
243*53ee8cc1Swenshuai.xi {
244*53ee8cc1Swenshuai.xi u32FrameCnt[u8DrvId] = u32Value;
245*53ee8cc1Swenshuai.xi }
MDrv_MJPEG_GetFrameCnt(MS_U8 u8DrvId)246*53ee8cc1Swenshuai.xi MS_U32 MDrv_MJPEG_GetFrameCnt(MS_U8 u8DrvId)
247*53ee8cc1Swenshuai.xi {
248*53ee8cc1Swenshuai.xi return u32FrameCnt[u8DrvId];
249*53ee8cc1Swenshuai.xi }
250*53ee8cc1Swenshuai.xi
MDrv_MJPEG_SetFrameRate(MS_U8 u8DrvId,MS_U32 u32Value)251*53ee8cc1Swenshuai.xi void MDrv_MJPEG_SetFrameRate(MS_U8 u8DrvId, MS_U32 u32Value)
252*53ee8cc1Swenshuai.xi {
253*53ee8cc1Swenshuai.xi u32FrameRate[u8DrvId] = u32Value;
254*53ee8cc1Swenshuai.xi }
MDrv_MJPEG_GetFrameRate(MS_U8 u8DrvId)255*53ee8cc1Swenshuai.xi MS_U32 MDrv_MJPEG_GetFrameRate(MS_U8 u8DrvId)
256*53ee8cc1Swenshuai.xi {
257*53ee8cc1Swenshuai.xi return u32FrameRate[u8DrvId];
258*53ee8cc1Swenshuai.xi }
259*53ee8cc1Swenshuai.xi
MDrv_MJPEG_SetFrameRateBase(MS_U8 u8DrvId,MS_U32 u32Value)260*53ee8cc1Swenshuai.xi void MDrv_MJPEG_SetFrameRateBase(MS_U8 u8DrvId, MS_U32 u32Value)
261*53ee8cc1Swenshuai.xi {
262*53ee8cc1Swenshuai.xi u32FrameRateBase[u8DrvId] = u32Value;
263*53ee8cc1Swenshuai.xi }
MDrv_MJPEG_GetFrameRateBase(MS_U8 u8DrvId)264*53ee8cc1Swenshuai.xi MS_U32 MDrv_MJPEG_GetFrameRateBase(MS_U8 u8DrvId)
265*53ee8cc1Swenshuai.xi {
266*53ee8cc1Swenshuai.xi return u32FrameRateBase[u8DrvId];
267*53ee8cc1Swenshuai.xi }
268*53ee8cc1Swenshuai.xi
MDrv_MJPEG_SetFrameTime(MS_U8 u8DrvId,MS_U32 u32Value)269*53ee8cc1Swenshuai.xi void MDrv_MJPEG_SetFrameTime(MS_U8 u8DrvId, MS_U32 u32Value)
270*53ee8cc1Swenshuai.xi {
271*53ee8cc1Swenshuai.xi u32FrameTime[u8DrvId] = u32Value;
272*53ee8cc1Swenshuai.xi }
MDrv_MJPEG_GetFrameTime(MS_U8 u8DrvId)273*53ee8cc1Swenshuai.xi MS_U32 MDrv_MJPEG_GetFrameTime(MS_U8 u8DrvId)
274*53ee8cc1Swenshuai.xi {
275*53ee8cc1Swenshuai.xi return u32FrameTime[u8DrvId];
276*53ee8cc1Swenshuai.xi }
277*53ee8cc1Swenshuai.xi
278*53ee8cc1Swenshuai.xi /********************************************************************/
279*53ee8cc1Swenshuai.xi ///Set MJPEG Debug level
280*53ee8cc1Swenshuai.xi ///@para MS_U8 u8DbgLevel \b IN The MJPEG debug level
281*53ee8cc1Swenshuai.xi ///@return none
282*53ee8cc1Swenshuai.xi /********************************************************************/
MDrv_MJPEG_SetDbgLevel(MS_U8 u8DbgLevel)283*53ee8cc1Swenshuai.xi void MDrv_MJPEG_SetDbgLevel(MS_U8 u8DbgLevel)
284*53ee8cc1Swenshuai.xi {
285*53ee8cc1Swenshuai.xi u8MJPEG_DrvDbgLevel = u8DbgLevel;
286*53ee8cc1Swenshuai.xi }
287*53ee8cc1Swenshuai.xi
288*53ee8cc1Swenshuai.xi /* =============================== MJPEG =====================================*/
289*53ee8cc1Swenshuai.xi
MDrv_MJPEG_GetDrvId(MS_U32 u32Id)290*53ee8cc1Swenshuai.xi MS_U8 MDrv_MJPEG_GetDrvId(MS_U32 u32Id)
291*53ee8cc1Swenshuai.xi {
292*53ee8cc1Swenshuai.xi return (0xFF & (u32Id >> 16));
293*53ee8cc1Swenshuai.xi }
294*53ee8cc1Swenshuai.xi /******************************************************************************/
295*53ee8cc1Swenshuai.xi /// Stop VPU
296*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_MJPEG_StopVPU(MS_U32 u32Id)297*53ee8cc1Swenshuai.xi void MDrv_MJPEG_StopVPU(MS_U32 u32Id)
298*53ee8cc1Swenshuai.xi {
299*53ee8cc1Swenshuai.xi VirtualHal_MJPEG_StopVPU(u32Id);
300*53ee8cc1Swenshuai.xi }
301*53ee8cc1Swenshuai.xi
302*53ee8cc1Swenshuai.xi
303*53ee8cc1Swenshuai.xi /******************************************************************************/
304*53ee8cc1Swenshuai.xi /// Release VPU
305*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_MJPEG_ReleaseVPU(MS_U32 u32Id)306*53ee8cc1Swenshuai.xi void MDrv_MJPEG_ReleaseVPU(MS_U32 u32Id)
307*53ee8cc1Swenshuai.xi {
308*53ee8cc1Swenshuai.xi VirtualHal_MJPEG_ReleaseVPU(u32Id);
309*53ee8cc1Swenshuai.xi }
310*53ee8cc1Swenshuai.xi
311*53ee8cc1Swenshuai.xi /******************************************************************************/
312*53ee8cc1Swenshuai.xi ///Check if MJPEG firmware ready or not
313*53ee8cc1Swenshuai.xi ///@return TRUE or FALSE
314*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_MJPEG_IsFirmwareReady(MS_U32 u32Id)315*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MJPEG_IsFirmwareReady(MS_U32 u32Id)
316*53ee8cc1Swenshuai.xi {
317*53ee8cc1Swenshuai.xi MS_U32 u32FirmVer = 0, u32Timeout = 50000;
318*53ee8cc1Swenshuai.xi
319*53ee8cc1Swenshuai.xi // read VPU_RISC_MBOX0 to get firmware version
320*53ee8cc1Swenshuai.xi while(u32Timeout)
321*53ee8cc1Swenshuai.xi {
322*53ee8cc1Swenshuai.xi if(VirtualHal_MJPEG_IsVPUMBoxReady(u32Id, VPU_RISC_MBOX0))
323*53ee8cc1Swenshuai.xi {
324*53ee8cc1Swenshuai.xi VirtualHal_MJPEG_ReadVPUMBox(u32Id, VPU_RISC_MBOX0, (MS_U32 *)&u32FirmVer);
325*53ee8cc1Swenshuai.xi VirtualHal_MJPEG_ClearVPUMBox(u32Id, VPU_RISC_MBOX0);
326*53ee8cc1Swenshuai.xi break;
327*53ee8cc1Swenshuai.xi }
328*53ee8cc1Swenshuai.xi u32Timeout--;
329*53ee8cc1Swenshuai.xi }
330*53ee8cc1Swenshuai.xi if(u32Timeout > 0)
331*53ee8cc1Swenshuai.xi {
332*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("MJPEG firmware version 0x%tx\n", (ptrdiff_t)u32FirmVer);
333*53ee8cc1Swenshuai.xi }
334*53ee8cc1Swenshuai.xi else
335*53ee8cc1Swenshuai.xi {
336*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get MJPEG firmware version !! \n");
337*53ee8cc1Swenshuai.xi return FALSE;
338*53ee8cc1Swenshuai.xi }
339*53ee8cc1Swenshuai.xi
340*53ee8cc1Swenshuai.xi return TRUE;
341*53ee8cc1Swenshuai.xi }
342*53ee8cc1Swenshuai.xi
343*53ee8cc1Swenshuai.xi /******************************************************************************/
344*53ee8cc1Swenshuai.xi ///Set VPU Command
345*53ee8cc1Swenshuai.xi ///@return TRUE or FALSE
346*53ee8cc1Swenshuai.xi ///@param u8Cmd \b IN: VPU Command
347*53ee8cc1Swenshuai.xi /// - MJPEG_CMD_SET_FRAME_BUFF_ADDR, Set frame buffer address
348*53ee8cc1Swenshuai.xi /// - MJPEG_CMD_SET_FRAME_BUFF_SIZE, Set frame buffer size
349*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_MJPEG_SetVPUCmd(MS_U32 u32Id,MS_U32 u32Cmd)350*53ee8cc1Swenshuai.xi static MS_BOOL MDrv_MJPEG_SetVPUCmd(MS_U32 u32Id, MS_U32 u32Cmd)
351*53ee8cc1Swenshuai.xi {
352*53ee8cc1Swenshuai.xi //currently we only use VPU_HI_MBOX0 to send command.
353*53ee8cc1Swenshuai.xi //MS_U32 u32TimeOut = MsOS_GetSystemTime() + _u32FrameTime;
354*53ee8cc1Swenshuai.xi MS_U32 u32TimeOut = 200000;
355*53ee8cc1Swenshuai.xi MS_BOOL bResult = FALSE;
356*53ee8cc1Swenshuai.xi
357*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("Send CMD 0x%tx to MJPEG firmware\n", (ptrdiff_t)u32Cmd);
358*53ee8cc1Swenshuai.xi //while(MsOS_GetSystemTime() < u32TimeOut)
359*53ee8cc1Swenshuai.xi while(u32TimeOut)
360*53ee8cc1Swenshuai.xi {
361*53ee8cc1Swenshuai.xi if(VirtualHal_MJPEG_IsVPUMBoxReady(u32Id, VPU_HI_MBOX0))
362*53ee8cc1Swenshuai.xi {
363*53ee8cc1Swenshuai.xi bResult = VirtualHal_MJPEG_SendVPUMBox(u32Id, VPU_HI_MBOX0, u32Cmd);
364*53ee8cc1Swenshuai.xi break;
365*53ee8cc1Swenshuai.xi }
366*53ee8cc1Swenshuai.xi u32TimeOut--;
367*53ee8cc1Swenshuai.xi }
368*53ee8cc1Swenshuai.xi if(u32TimeOut <= 0)
369*53ee8cc1Swenshuai.xi {
370*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("MJPEG send command timeout !!....pc=0x%tx \n", (ptrdiff_t)HAL_VPU_EX_GetProgCnt(u32Id));
371*53ee8cc1Swenshuai.xi bResult = FALSE;
372*53ee8cc1Swenshuai.xi }
373*53ee8cc1Swenshuai.xi
374*53ee8cc1Swenshuai.xi return bResult;
375*53ee8cc1Swenshuai.xi }
376*53ee8cc1Swenshuai.xi
377*53ee8cc1Swenshuai.xi /******************************************************************************/
378*53ee8cc1Swenshuai.xi ///Set VPU command argument
379*53ee8cc1Swenshuai.xi ///@return TRUE or FALSE
380*53ee8cc1Swenshuai.xi ///@param u32Arg \b IN: VPU command argument
381*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_MJPEG_SetVPUCmdArg(MS_U32 u32Id,MS_U32 u32Arg)382*53ee8cc1Swenshuai.xi static MS_BOOL MDrv_MJPEG_SetVPUCmdArg(MS_U32 u32Id, MS_U32 u32Arg)
383*53ee8cc1Swenshuai.xi {
384*53ee8cc1Swenshuai.xi // we use VPU_HI_MBOX1 to send command argument
385*53ee8cc1Swenshuai.xi //U16 u16TimeOut = 0xFFFF;
386*53ee8cc1Swenshuai.xi MS_U32 u32TimeOut = 200000;
387*53ee8cc1Swenshuai.xi MS_BOOL bResult = FALSE;
388*53ee8cc1Swenshuai.xi
389*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("Send argument 0x%tx to VPU \n", (ptrdiff_t)u32Arg);
390*53ee8cc1Swenshuai.xi while(--u32TimeOut)
391*53ee8cc1Swenshuai.xi {
392*53ee8cc1Swenshuai.xi if( VirtualHal_MJPEG_IsVPUMBoxReady(u32Id, VPU_HI_MBOX0)&& VirtualHal_MJPEG_IsVPUMBoxReady(u32Id, VPU_HI_MBOX1))
393*53ee8cc1Swenshuai.xi {
394*53ee8cc1Swenshuai.xi // the argument to be sent doesn't need to add task information in prefix
395*53ee8cc1Swenshuai.xi bResult = VirtualHal_MJPEG_SendVPUMBox(0, VPU_HI_MBOX1, u32Arg);
396*53ee8cc1Swenshuai.xi break;
397*53ee8cc1Swenshuai.xi }
398*53ee8cc1Swenshuai.xi }
399*53ee8cc1Swenshuai.xi if(u32TimeOut <= 0)
400*53ee8cc1Swenshuai.xi {
401*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("MJPEG send command argument timeout !! \n");
402*53ee8cc1Swenshuai.xi bResult = FALSE;
403*53ee8cc1Swenshuai.xi }
404*53ee8cc1Swenshuai.xi
405*53ee8cc1Swenshuai.xi return bResult;
406*53ee8cc1Swenshuai.xi }
407*53ee8cc1Swenshuai.xi
408*53ee8cc1Swenshuai.xi
409*53ee8cc1Swenshuai.xi /******************************************************************************/
410*53ee8cc1Swenshuai.xi ///Set VPU command argument
411*53ee8cc1Swenshuai.xi ///@return TRUE or FALSE
412*53ee8cc1Swenshuai.xi ///@param u32Arg \b IN: VPU command argument
413*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_MJPEG_SendVPUCommand(MS_U32 u32Id,MJPEG_User_Cmd eCmd,MS_VIRT u32Arg)414*53ee8cc1Swenshuai.xi MS_U32 MDrv_MJPEG_SendVPUCommand(MS_U32 u32Id, MJPEG_User_Cmd eCmd, MS_VIRT u32Arg)
415*53ee8cc1Swenshuai.xi {
416*53ee8cc1Swenshuai.xi MS_U32 u32Ret = 0;
417*53ee8cc1Swenshuai.xi
418*53ee8cc1Swenshuai.xi MS_U32 idx = 0;
419*53ee8cc1Swenshuai.xi MS_U8 u8DrvId = MDrv_MJPEG_GetDrvId(u32Id);
420*53ee8cc1Swenshuai.xi
421*53ee8cc1Swenshuai.xi if (bDisplayOutSideMode[u8DrvId])
422*53ee8cc1Swenshuai.xi {
423*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
424*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
425*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
426*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
427*53ee8cc1Swenshuai.xi {
428*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!![%d]\n", __LINE__);
429*53ee8cc1Swenshuai.xi return MJPEG_U32_MAX;
430*53ee8cc1Swenshuai.xi }
431*53ee8cc1Swenshuai.xi
432*53ee8cc1Swenshuai.xi switch (eCmd)
433*53ee8cc1Swenshuai.xi {
434*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_FRAME_BUFF_START_ADDR:
435*53ee8cc1Swenshuai.xi u32FrameBuffStAddr[u8DrvId] = u32Arg;
436*53ee8cc1Swenshuai.xi pShareMem->DispQueue[0].u32LumaAddr = u32FrameBuffStAddr[u8DrvId];
437*53ee8cc1Swenshuai.xi pShareMem->DispQueue[0].u32Status = E_HVD_DISPQ_STATUS_FREE;
438*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("[MJPEG_FB][free(init) 0][%td %td %td %td %td %td %td %td]\n", (ptrdiff_t)pShareMem->DispQueue[0].u32Status, (ptrdiff_t)pShareMem->DispQueue[1].u32Status,
439*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[2].u32Status, (ptrdiff_t)pShareMem->DispQueue[3].u32Status, (ptrdiff_t)pShareMem->DispQueue[4].u32Status,
440*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[5].u32Status, (ptrdiff_t)pShareMem->DispQueue[6].u32Status, (ptrdiff_t)pShareMem->DispQueue[7].u32Status);
441*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
442*53ee8cc1Swenshuai.xi break;
443*53ee8cc1Swenshuai.xi
444*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_FRAME_BUFF_UNIT_SIZE:
445*53ee8cc1Swenshuai.xi u32FrameBuffUnitSize[u8DrvId] = u32Arg;
446*53ee8cc1Swenshuai.xi break;
447*53ee8cc1Swenshuai.xi
448*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_FRAME_BUFF_TOTAL_NUM:
449*53ee8cc1Swenshuai.xi if (u32FrameBuffTotalNum[u8DrvId] > HVD_DISP_QUEUE_MAX_SIZE)
450*53ee8cc1Swenshuai.xi u32FrameBuffTotalNum[u8DrvId] = HVD_DISP_QUEUE_MAX_SIZE;
451*53ee8cc1Swenshuai.xi else
452*53ee8cc1Swenshuai.xi u32FrameBuffTotalNum[u8DrvId] = u32Arg;
453*53ee8cc1Swenshuai.xi
454*53ee8cc1Swenshuai.xi pShareMem->u16DispQSize = u32FrameBuffTotalNum[u8DrvId];
455*53ee8cc1Swenshuai.xi
456*53ee8cc1Swenshuai.xi for (idx = 0; idx < u32FrameBuffTotalNum[u8DrvId]-1; idx++)
457*53ee8cc1Swenshuai.xi {
458*53ee8cc1Swenshuai.xi if (u32FrameBuffUnitSize[u8DrvId] != 0)
459*53ee8cc1Swenshuai.xi {
460*53ee8cc1Swenshuai.xi pShareMem->DispQueue[idx+1].u32LumaAddr = pShareMem->DispQueue[idx].u32LumaAddr + u32FrameBuffUnitSize[u8DrvId];
461*53ee8cc1Swenshuai.xi pShareMem->DispQueue[idx+1].u32Status = E_HVD_DISPQ_STATUS_FREE;
462*53ee8cc1Swenshuai.xi }
463*53ee8cc1Swenshuai.xi }
464*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("[MJPEG_FB][free(init) all][%td %td %td %td %td %td %td %td]\n", (ptrdiff_t)pShareMem->DispQueue[0].u32Status, (ptrdiff_t)pShareMem->DispQueue[1].u32Status,
465*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[2].u32Status, (ptrdiff_t)pShareMem->DispQueue[3].u32Status, (ptrdiff_t)pShareMem->DispQueue[4].u32Status,
466*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[5].u32Status, (ptrdiff_t)pShareMem->DispQueue[6].u32Status, (ptrdiff_t)pShareMem->DispQueue[7].u32Status);
467*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
468*53ee8cc1Swenshuai.xi break;
469*53ee8cc1Swenshuai.xi
470*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_PUSH_QUEUE_PARA_SETTING:
471*53ee8cc1Swenshuai.xi
472*53ee8cc1Swenshuai.xi pShareMem->DispQueue[pShareMem->u32MJPEGFrameBuffIdx].u32Status = E_HVD_DISPQ_STATUS_NONE;
473*53ee8cc1Swenshuai.xi pShareMem->DispQueue[pShareMem->u32MJPEGFrameBuffIdx].u32TimeStamp = pShareMem->u32MJPEGTimeStamp;
474*53ee8cc1Swenshuai.xi pShareMem->DispQueue[pShareMem->u32MJPEGFrameBuffIdx].u32ID_L = pShareMem->u32MJPEGID_L;
475*53ee8cc1Swenshuai.xi pShareMem->DispQueue[pShareMem->u32MJPEGFrameBuffIdx].u32ID_H = pShareMem->u32MJPEGID_H;
476*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("[MJPEG_FB][none %td][%td %td %td %td %td %td %td %td]\n", (ptrdiff_t)pShareMem->u32MJPEGFrameBuffIdx, (ptrdiff_t)pShareMem->DispQueue[0].u32Status, (ptrdiff_t)pShareMem->DispQueue[1].u32Status,
477*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[2].u32Status, (ptrdiff_t)pShareMem->DispQueue[3].u32Status, (ptrdiff_t)pShareMem->DispQueue[4].u32Status,
478*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[5].u32Status, (ptrdiff_t)pShareMem->DispQueue[6].u32Status, (ptrdiff_t)pShareMem->DispQueue[7].u32Status);
479*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
480*53ee8cc1Swenshuai.xi break;
481*53ee8cc1Swenshuai.xi
482*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_DISPLAY_OUTSIDE_MODE:
483*53ee8cc1Swenshuai.xi
484*53ee8cc1Swenshuai.xi if(u32Arg==0)
485*53ee8cc1Swenshuai.xi {
486*53ee8cc1Swenshuai.xi bDisplayOutSideMode[u8DrvId] = FALSE;
487*53ee8cc1Swenshuai.xi }
488*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
489*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_SET_DISPLAY_OUTSIDE_MODE);
490*53ee8cc1Swenshuai.xi break;
491*53ee8cc1Swenshuai.xi
492*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_FRAME_BUFF_IDX_READY:
493*53ee8cc1Swenshuai.xi if (u32Arg < u32FrameBuffTotalNum[u8DrvId])
494*53ee8cc1Swenshuai.xi {
495*53ee8cc1Swenshuai.xi u32FrameCnt[u8DrvId]++;
496*53ee8cc1Swenshuai.xi pShareMem->DispQueue[u32Arg].u32Status = E_HVD_DISPQ_STATUS_INIT;
497*53ee8cc1Swenshuai.xi pShareMem->DispQueue[u32Arg].u32ChromaAddr = pShareMem->DispQueue[u32Arg].u32LumaAddr;
498*53ee8cc1Swenshuai.xi pShareMem->DispQueue[u32Arg].u16Width = u16Width[u8DrvId];
499*53ee8cc1Swenshuai.xi pShareMem->DispQueue[u32Arg].u16Height = u16Height[u8DrvId];
500*53ee8cc1Swenshuai.xi pShareMem->DispQueue[u32Arg].u16Pitch = u16Pitch[u8DrvId];
501*53ee8cc1Swenshuai.xi pShareMem->DispQueue[u32Arg].u32PrivateData = u32FrameCnt[u8DrvId];
502*53ee8cc1Swenshuai.xi
503*53ee8cc1Swenshuai.xi for (idx = 0; idx < u32FrameBuffTotalNum[u8DrvId]; idx++)
504*53ee8cc1Swenshuai.xi {
505*53ee8cc1Swenshuai.xi if (pShareMem->DispQueue[idx].u32Status == E_HVD_DISPQ_STATUS_FREE)
506*53ee8cc1Swenshuai.xi {
507*53ee8cc1Swenshuai.xi pShareMem->u32MJPEG_NextFrameBuffIdx = idx;
508*53ee8cc1Swenshuai.xi break;
509*53ee8cc1Swenshuai.xi }
510*53ee8cc1Swenshuai.xi else
511*53ee8cc1Swenshuai.xi {
512*53ee8cc1Swenshuai.xi pShareMem->u32MJPEG_NextFrameBuffIdx = 0xFFFF;
513*53ee8cc1Swenshuai.xi }
514*53ee8cc1Swenshuai.xi }
515*53ee8cc1Swenshuai.xi }
516*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("[MJPEG_FB][init %td][%td %td %td %td %td %td %td %td]\n", (ptrdiff_t)u32Arg, (ptrdiff_t)pShareMem->DispQueue[0].u32Status, (ptrdiff_t)pShareMem->DispQueue[1].u32Status,
517*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[2].u32Status, (ptrdiff_t)pShareMem->DispQueue[3].u32Status, (ptrdiff_t)pShareMem->DispQueue[4].u32Status,
518*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[5].u32Status, (ptrdiff_t)pShareMem->DispQueue[6].u32Status, (ptrdiff_t)pShareMem->DispQueue[7].u32Status);
519*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
520*53ee8cc1Swenshuai.xi break;
521*53ee8cc1Swenshuai.xi
522*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_FRAME_BUFF_IDX_VALID:
523*53ee8cc1Swenshuai.xi if (u32Arg < u32FrameBuffTotalNum[u8DrvId])
524*53ee8cc1Swenshuai.xi {
525*53ee8cc1Swenshuai.xi pShareMem->DispQueue[u32Arg].u32Status = E_HVD_DISPQ_STATUS_FREE;
526*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
527*53ee8cc1Swenshuai.xi }
528*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("[MJPEG_FB][free(valid) %td][%td %td %td %td %td %td %td %td]\n", (ptrdiff_t)u32Arg, (ptrdiff_t)pShareMem->DispQueue[0].u32Status, (ptrdiff_t)pShareMem->DispQueue[1].u32Status,
529*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[2].u32Status, (ptrdiff_t)pShareMem->DispQueue[3].u32Status, (ptrdiff_t)pShareMem->DispQueue[4].u32Status,
530*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[5].u32Status, (ptrdiff_t)pShareMem->DispQueue[6].u32Status, (ptrdiff_t)pShareMem->DispQueue[7].u32Status);
531*53ee8cc1Swenshuai.xi break;
532*53ee8cc1Swenshuai.xi
533*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_FLUSH_DISP_QUEUE:
534*53ee8cc1Swenshuai.xi
535*53ee8cc1Swenshuai.xi for (idx = 0; idx < u32FrameBuffTotalNum[u8DrvId]; idx++)
536*53ee8cc1Swenshuai.xi {
537*53ee8cc1Swenshuai.xi if (pShareMem->DispQueue[idx].u32Status != E_HVD_DISPQ_STATUS_VIEW)
538*53ee8cc1Swenshuai.xi {
539*53ee8cc1Swenshuai.xi pShareMem->DispQueue[idx].u32Status = E_HVD_DISPQ_STATUS_FREE;
540*53ee8cc1Swenshuai.xi pShareMem->DispQueue[idx].u32TimeStamp = 0;
541*53ee8cc1Swenshuai.xi pShareMem->DispQueue[idx].u32ID_L = 0xFFFFFFFF;
542*53ee8cc1Swenshuai.xi pShareMem->DispQueue[idx].u32ID_H = 0xFFFFFFFF;
543*53ee8cc1Swenshuai.xi }
544*53ee8cc1Swenshuai.xi }
545*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("[MJPEG_FB][free(flush) all][%td %td %td %td %td %td %td %td]\n", (ptrdiff_t)pShareMem->DispQueue[0].u32Status, (ptrdiff_t)pShareMem->DispQueue[1].u32Status,
546*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[2].u32Status, (ptrdiff_t)pShareMem->DispQueue[3].u32Status, (ptrdiff_t)pShareMem->DispQueue[4].u32Status,
547*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[5].u32Status, (ptrdiff_t)pShareMem->DispQueue[6].u32Status, (ptrdiff_t)pShareMem->DispQueue[7].u32Status);
548*53ee8cc1Swenshuai.xi
549*53ee8cc1Swenshuai.xi pShareMem->u8MJPEG_bFlushQueue = 0;
550*53ee8cc1Swenshuai.xi u32Ret = 2;
551*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
552*53ee8cc1Swenshuai.xi break;
553*53ee8cc1Swenshuai.xi
554*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_IS_DISPLAY_QUEUE_FULL:
555*53ee8cc1Swenshuai.xi for (idx = 0; idx < u32FrameBuffTotalNum[u8DrvId]; idx++)
556*53ee8cc1Swenshuai.xi {
557*53ee8cc1Swenshuai.xi if (pShareMem->DispQueue[idx].u32Status == E_HVD_DISPQ_STATUS_FREE)
558*53ee8cc1Swenshuai.xi {
559*53ee8cc1Swenshuai.xi return 0;
560*53ee8cc1Swenshuai.xi }
561*53ee8cc1Swenshuai.xi }
562*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("Display Q is full[%d]\n", __LINE__);
563*53ee8cc1Swenshuai.xi // return full
564*53ee8cc1Swenshuai.xi return 1;
565*53ee8cc1Swenshuai.xi break;
566*53ee8cc1Swenshuai.xi
567*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_WIDTH:
568*53ee8cc1Swenshuai.xi u16Width[u8DrvId] = (MS_U16)u32Arg;
569*53ee8cc1Swenshuai.xi break;
570*53ee8cc1Swenshuai.xi
571*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_HEIGHT:
572*53ee8cc1Swenshuai.xi u16Height[u8DrvId] = (MS_U16)u32Arg;
573*53ee8cc1Swenshuai.xi break;
574*53ee8cc1Swenshuai.xi
575*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_PITCH:
576*53ee8cc1Swenshuai.xi u16Pitch[u8DrvId] = (MS_U16)u32Arg;
577*53ee8cc1Swenshuai.xi break;
578*53ee8cc1Swenshuai.xi
579*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_IS_DISP_FINISH:
580*53ee8cc1Swenshuai.xi u32Ret = TRUE;
581*53ee8cc1Swenshuai.xi break;
582*53ee8cc1Swenshuai.xi
583*53ee8cc1Swenshuai.xi
584*53ee8cc1Swenshuai.xi #ifdef VDEC3
585*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_FREE_FRAME_BUFFER:
586*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_FREE_FRAME_BUFFER);
587*53ee8cc1Swenshuai.xi u32Ret = (MS_U32) MDrv_MJPEG_IsFreeFinish(u32Id);
588*53ee8cc1Swenshuai.xi break;
589*53ee8cc1Swenshuai.xi #endif
590*53ee8cc1Swenshuai.xi
591*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_GO:
592*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_FRAMERATE:
593*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_FRAMERATE_BASE:
594*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_PLAY:
595*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_PAUSE:
596*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_RESUME:
597*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_STEP_PLAY:
598*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_SPEED_TYPE:
599*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_SPEED:
600*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_FREEZE_DISP:
601*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_ENABLE_AVSYNC:
602*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_AVSYNC_DELAY:
603*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_AVSYNC_TOLERENCE:
604*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_PTS_BASE:
605*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_STC_BASE:
606*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_BLUE_SCREEN:
607*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_COMPENSATE_PTS:
608*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_ENABLE_DISP_CMD_QUEUE:
609*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG(" Unused MJPEG Command[0x%x] in display outside mode\n", eCmd);
610*53ee8cc1Swenshuai.xi u32Ret = 0xFFFFFFFF;
611*53ee8cc1Swenshuai.xi break;
612*53ee8cc1Swenshuai.xi
613*53ee8cc1Swenshuai.xi default:
614*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG(" !!! Unknown MJPEG Command[0x%x] !!!\n", eCmd);
615*53ee8cc1Swenshuai.xi u32Ret = 0xFFFFFFFF;
616*53ee8cc1Swenshuai.xi break;
617*53ee8cc1Swenshuai.xi }
618*53ee8cc1Swenshuai.xi
619*53ee8cc1Swenshuai.xi return u32Ret;
620*53ee8cc1Swenshuai.xi }
621*53ee8cc1Swenshuai.xi
622*53ee8cc1Swenshuai.xi switch (eCmd)
623*53ee8cc1Swenshuai.xi {
624*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_FRAME_BUFF_START_ADDR:
625*53ee8cc1Swenshuai.xi u32FrameBuffStAddr[u8DrvId] = u32Arg;
626*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
627*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_SET_FRAME_BUFF_START_ADDR);
628*53ee8cc1Swenshuai.xi break;
629*53ee8cc1Swenshuai.xi
630*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_FRAME_BUFF_UNIT_SIZE:
631*53ee8cc1Swenshuai.xi u32FrameBuffUnitSize[u8DrvId] = u32Arg;
632*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
633*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_SET_FRAME_BUFF_UNIT_SIZE);
634*53ee8cc1Swenshuai.xi break;
635*53ee8cc1Swenshuai.xi
636*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_FRAME_BUFF_TOTAL_NUM:
637*53ee8cc1Swenshuai.xi if (u32FrameBuffTotalNum[u8DrvId] > HVD_DISP_QUEUE_MAX_SIZE)
638*53ee8cc1Swenshuai.xi u32FrameBuffTotalNum[u8DrvId] = HVD_DISP_QUEUE_MAX_SIZE;
639*53ee8cc1Swenshuai.xi else
640*53ee8cc1Swenshuai.xi u32FrameBuffTotalNum[u8DrvId] = u32Arg;
641*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
642*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_SET_FRAME_BUFF_TOTAL_NUM);
643*53ee8cc1Swenshuai.xi break;
644*53ee8cc1Swenshuai.xi
645*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_FRAME_BUFF_IDX_READY:
646*53ee8cc1Swenshuai.xi u32FrameCnt[u8DrvId]++;
647*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
648*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_SET_FRAME_BUFF_IDX_READY);
649*53ee8cc1Swenshuai.xi break;
650*53ee8cc1Swenshuai.xi
651*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_WIDTH:
652*53ee8cc1Swenshuai.xi u16Width[u8DrvId] = (MS_U16)u32Arg;
653*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
654*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_SET_WIDTH);
655*53ee8cc1Swenshuai.xi break;
656*53ee8cc1Swenshuai.xi
657*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_HEIGHT:
658*53ee8cc1Swenshuai.xi u16Height[u8DrvId] = (MS_U16)u32Arg;
659*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
660*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_SET_HEIGHT);
661*53ee8cc1Swenshuai.xi break;
662*53ee8cc1Swenshuai.xi
663*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_PITCH:
664*53ee8cc1Swenshuai.xi u16Pitch[u8DrvId] = (MS_U16)u32Arg;
665*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
666*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_SET_PITCH);
667*53ee8cc1Swenshuai.xi break;
668*53ee8cc1Swenshuai.xi
669*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_FRAMERATE:
670*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
671*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_SET_FRAMERATE);
672*53ee8cc1Swenshuai.xi break;
673*53ee8cc1Swenshuai.xi
674*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_FRAMERATE_BASE:
675*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
676*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_SET_FRAMERATE_BASE);
677*53ee8cc1Swenshuai.xi break;
678*53ee8cc1Swenshuai.xi
679*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_FRAME_BUFF_IDX_VALID:
680*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
681*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_SET_FRAME_BUFF_IDX_VALID);
682*53ee8cc1Swenshuai.xi break;
683*53ee8cc1Swenshuai.xi
684*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_PLAY:
685*53ee8cc1Swenshuai.xi u32Ret = (MS_U32)MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_PLAY);
686*53ee8cc1Swenshuai.xi break;
687*53ee8cc1Swenshuai.xi
688*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_PAUSE:
689*53ee8cc1Swenshuai.xi u32Ret = (MS_U32)MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_PAUSE);
690*53ee8cc1Swenshuai.xi break;
691*53ee8cc1Swenshuai.xi
692*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_RESUME:
693*53ee8cc1Swenshuai.xi u32Ret = (MS_U32)MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_RESUME);
694*53ee8cc1Swenshuai.xi break;
695*53ee8cc1Swenshuai.xi
696*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_STEP_PLAY:
697*53ee8cc1Swenshuai.xi u32Ret = (MS_U32)MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_STEP_PLAY);
698*53ee8cc1Swenshuai.xi break;
699*53ee8cc1Swenshuai.xi
700*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_SPEED_TYPE:
701*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
702*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_SET_SPEED_TYPE);
703*53ee8cc1Swenshuai.xi break;
704*53ee8cc1Swenshuai.xi
705*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_SPEED:
706*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
707*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_SET_SPEED);
708*53ee8cc1Swenshuai.xi break;
709*53ee8cc1Swenshuai.xi
710*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_FLUSH_DISP_QUEUE:
711*53ee8cc1Swenshuai.xi u32Ret = (MS_U32)MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_FLUSH_DISP_QUEUE);
712*53ee8cc1Swenshuai.xi break;
713*53ee8cc1Swenshuai.xi
714*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_FREEZE_DISP:
715*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
716*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_FREEZE_DISP);
717*53ee8cc1Swenshuai.xi break;
718*53ee8cc1Swenshuai.xi
719*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_ENABLE_AVSYNC:
720*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
721*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_ENABLE_AVSYNC);
722*53ee8cc1Swenshuai.xi break;
723*53ee8cc1Swenshuai.xi
724*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_AVSYNC_DELAY:
725*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
726*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_SET_AVSYNC_DELAY);
727*53ee8cc1Swenshuai.xi break;
728*53ee8cc1Swenshuai.xi
729*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_AVSYNC_TOLERENCE:
730*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
731*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_SET_AVSYNC_TOLERENCE);
732*53ee8cc1Swenshuai.xi break;
733*53ee8cc1Swenshuai.xi
734*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_PTS_BASE:
735*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
736*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_SET_PTS_BASE);
737*53ee8cc1Swenshuai.xi break;
738*53ee8cc1Swenshuai.xi
739*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_STC_BASE:
740*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_SET_STC_BASE);
741*53ee8cc1Swenshuai.xi break;
742*53ee8cc1Swenshuai.xi
743*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_BLUE_SCREEN:
744*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
745*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_SET_BLUE_SCREEN);
746*53ee8cc1Swenshuai.xi break;
747*53ee8cc1Swenshuai.xi
748*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_PUSH_QUEUE_PARA_SETTING:
749*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_PUSH_QUEUE_PARA_SETTING);
750*53ee8cc1Swenshuai.xi break;
751*53ee8cc1Swenshuai.xi
752*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_SET_DISPLAY_OUTSIDE_MODE:
753*53ee8cc1Swenshuai.xi
754*53ee8cc1Swenshuai.xi if(u32Arg)
755*53ee8cc1Swenshuai.xi {
756*53ee8cc1Swenshuai.xi bDisplayOutSideMode[u8DrvId] = TRUE;
757*53ee8cc1Swenshuai.xi }
758*53ee8cc1Swenshuai.xi if (bDisplayOutSideMode[u8DrvId])
759*53ee8cc1Swenshuai.xi {
760*53ee8cc1Swenshuai.xi // set E_JPD_CMD_SET_FRAME_BUFF_TOTAL_NUM to 0 previent F/W write share mem
761*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, 0);
762*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_SET_FRAME_BUFF_TOTAL_NUM);
763*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, 0);
764*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_ENABLE_DISP_CMD_QUEUE);
765*53ee8cc1Swenshuai.xi
766*53ee8cc1Swenshuai.xi MsOS_DelayTaskUs(10* 1000);
767*53ee8cc1Swenshuai.xi u32FrameCnt[u8DrvId] = 0;
768*53ee8cc1Swenshuai.xi
769*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
770*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
771*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
772*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
773*53ee8cc1Swenshuai.xi {
774*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!![%d]\n", __LINE__);
775*53ee8cc1Swenshuai.xi return MJPEG_U32_MAX;
776*53ee8cc1Swenshuai.xi }
777*53ee8cc1Swenshuai.xi
778*53ee8cc1Swenshuai.xi pShareMem->DispQueue[0].u32LumaAddr = u32FrameBuffStAddr[u8DrvId];
779*53ee8cc1Swenshuai.xi pShareMem->DispQueue[0].u32Status = E_HVD_DISPQ_STATUS_FREE;
780*53ee8cc1Swenshuai.xi pShareMem->u16DispQSize = u32FrameBuffTotalNum[u8DrvId];
781*53ee8cc1Swenshuai.xi
782*53ee8cc1Swenshuai.xi for (idx = 0; idx < u32FrameBuffTotalNum[u8DrvId]-1; idx++)
783*53ee8cc1Swenshuai.xi {
784*53ee8cc1Swenshuai.xi if (u32FrameBuffUnitSize[u8DrvId] != 0)
785*53ee8cc1Swenshuai.xi {
786*53ee8cc1Swenshuai.xi pShareMem->DispQueue[idx+1].u32LumaAddr = pShareMem->DispQueue[idx].u32LumaAddr + u32FrameBuffUnitSize[u8DrvId];
787*53ee8cc1Swenshuai.xi pShareMem->DispQueue[idx+1].u32Status = E_HVD_DISPQ_STATUS_FREE;
788*53ee8cc1Swenshuai.xi }
789*53ee8cc1Swenshuai.xi }
790*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("[MJPEG_FB][free all][%td %td %td %td %td %td %td %td]\n", (ptrdiff_t)pShareMem->DispQueue[0].u32Status, (ptrdiff_t)pShareMem->DispQueue[1].u32Status,
791*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[2].u32Status, (ptrdiff_t)pShareMem->DispQueue[3].u32Status, (ptrdiff_t)pShareMem->DispQueue[4].u32Status,
792*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[5].u32Status, (ptrdiff_t)pShareMem->DispQueue[6].u32Status, (ptrdiff_t)pShareMem->DispQueue[7].u32Status);
793*53ee8cc1Swenshuai.xi
794*53ee8cc1Swenshuai.xi for (idx = 0; idx < u32FrameBuffTotalNum[u8DrvId]; idx++)
795*53ee8cc1Swenshuai.xi {
796*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("pShareMem->DispQueue[idx].u32Status : 0x%tX %td\n", (ptrdiff_t)pShareMem->DispQueue[idx].u32Status, (ptrdiff_t)idx);
797*53ee8cc1Swenshuai.xi }
798*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
799*53ee8cc1Swenshuai.xi }
800*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
801*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_SET_DISPLAY_OUTSIDE_MODE);
802*53ee8cc1Swenshuai.xi break;
803*53ee8cc1Swenshuai.xi
804*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_COMPENSATE_PTS:
805*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
806*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_COMPENSATE_PTS);
807*53ee8cc1Swenshuai.xi break;
808*53ee8cc1Swenshuai.xi
809*53ee8cc1Swenshuai.xi // Display Command Queue -- BEGIN
810*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_ENABLE_DISP_CMD_QUEUE:
811*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmdArg(u32Id, u32Arg);
812*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_ENABLE_DISP_CMD_QUEUE);
813*53ee8cc1Swenshuai.xi break;
814*53ee8cc1Swenshuai.xi
815*53ee8cc1Swenshuai.xi // Display Command Queue -- END
816*53ee8cc1Swenshuai.xi
817*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_IS_DISP_FINISH:
818*53ee8cc1Swenshuai.xi MDrv_MJPEG_Init_IsDispFinish(u32Id);
819*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_IS_DISP_FINISH);
820*53ee8cc1Swenshuai.xi u32Ret = (MS_U32) MDrv_MJPEG_IsDispFinish(u32Id);
821*53ee8cc1Swenshuai.xi break;
822*53ee8cc1Swenshuai.xi
823*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_IS_DISPLAY_QUEUE_FULL:
824*53ee8cc1Swenshuai.xi MDrv_MJPEG_Init_IsQueueFull(u32Id);
825*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_IS_DISPLAY_QUEUE_FULL);
826*53ee8cc1Swenshuai.xi u32Ret = (MS_U32) MDrv_MJPEG_IsQueueFull(u32Id);
827*53ee8cc1Swenshuai.xi break;
828*53ee8cc1Swenshuai.xi
829*53ee8cc1Swenshuai.xi #ifdef VDEC3
830*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_GET_FRAME_BUFFER:
831*53ee8cc1Swenshuai.xi MDrv_MJPEG_Init_GetFrameBuffer(u32Id);
832*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_GET_FRAME_BUFFER);
833*53ee8cc1Swenshuai.xi u32Ret = (MS_U32) MDrv_MJPEG_GetFrameBuffer(u32Id);
834*53ee8cc1Swenshuai.xi break;
835*53ee8cc1Swenshuai.xi case E_MJPEG_CMD_FREE_FRAME_BUFFER:
836*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetVPUCmd(u32Id, E_JPD_CMD_FREE_FRAME_BUFFER);
837*53ee8cc1Swenshuai.xi u32Ret = (MS_U32) MDrv_MJPEG_IsFreeFinish(u32Id);
838*53ee8cc1Swenshuai.xi break;
839*53ee8cc1Swenshuai.xi #endif
840*53ee8cc1Swenshuai.xi
841*53ee8cc1Swenshuai.xi default:
842*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG(" !!! Unknown MJPEG Command !!!\n");
843*53ee8cc1Swenshuai.xi u32Ret = 0xFFFFFFFF;
844*53ee8cc1Swenshuai.xi break;
845*53ee8cc1Swenshuai.xi }
846*53ee8cc1Swenshuai.xi
847*53ee8cc1Swenshuai.xi
848*53ee8cc1Swenshuai.xi return u32Ret;
849*53ee8cc1Swenshuai.xi }
850*53ee8cc1Swenshuai.xi
851*53ee8cc1Swenshuai.xi #if 0
852*53ee8cc1Swenshuai.xi /******************************************************************************/
853*53ee8cc1Swenshuai.xi ///
854*53ee8cc1Swenshuai.xi ///@param value \b IN
855*53ee8cc1Swenshuai.xi ///@param value \b OUT
856*53ee8cc1Swenshuai.xi ///@return status
857*53ee8cc1Swenshuai.xi /******************************************************************************/
858*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MJPEG_IsVPUOnMiu1(void)
859*53ee8cc1Swenshuai.xi {
860*53ee8cc1Swenshuai.xi return VirtualHal_MJPEG_IsVPUOnMiu1();
861*53ee8cc1Swenshuai.xi }
862*53ee8cc1Swenshuai.xi
863*53ee8cc1Swenshuai.xi /******************************************************************************/
864*53ee8cc1Swenshuai.xi ///
865*53ee8cc1Swenshuai.xi ///@param value \b IN
866*53ee8cc1Swenshuai.xi ///@param value \b OUT
867*53ee8cc1Swenshuai.xi ///@return status
868*53ee8cc1Swenshuai.xi /******************************************************************************/
869*53ee8cc1Swenshuai.xi MS_U32 MDrv_MJPEG_GetMiuBase(void)
870*53ee8cc1Swenshuai.xi {
871*53ee8cc1Swenshuai.xi return VirtualHal_MJPEG_GetMiuBase();
872*53ee8cc1Swenshuai.xi }
873*53ee8cc1Swenshuai.xi #endif
874*53ee8cc1Swenshuai.xi
875*53ee8cc1Swenshuai.xi /******************************************************************************/
876*53ee8cc1Swenshuai.xi ///Get ShareMemory address
877*53ee8cc1Swenshuai.xi ///@param u32Value \b IN new PTS value
878*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_MJPEG_GetShareMemAddr(MS_U32 u32Id)879*53ee8cc1Swenshuai.xi MS_VIRT MDrv_MJPEG_GetShareMemAddr(MS_U32 u32Id)
880*53ee8cc1Swenshuai.xi {
881*53ee8cc1Swenshuai.xi MS_VIRT u32ShareMemAddr = MJPEG_U32_MAX;
882*53ee8cc1Swenshuai.xi
883*53ee8cc1Swenshuai.xi if (__u32FwAddr != MJPEG_U32_MAX)
884*53ee8cc1Swenshuai.xi u32ShareMemAddr = __u32FwAddr +(HAL_VPU_EX_GetTaskId(u32Id) * HVD_FW_MEM_OFFSET) + HVD_SHARE_MEM_ST_OFFSET;
885*53ee8cc1Swenshuai.xi else
886*53ee8cc1Swenshuai.xi return MJPEG_U32_MAX;
887*53ee8cc1Swenshuai.xi
888*53ee8cc1Swenshuai.xi u32ShareMemAddr = MS_PA2KSEG1((MS_VIRT)u32ShareMemAddr); //PhysicalAddr to VirtualAddr
889*53ee8cc1Swenshuai.xi
890*53ee8cc1Swenshuai.xi return u32ShareMemAddr;
891*53ee8cc1Swenshuai.xi }
892*53ee8cc1Swenshuai.xi
893*53ee8cc1Swenshuai.xi /******************************************************************************/
894*53ee8cc1Swenshuai.xi ///Description
895*53ee8cc1Swenshuai.xi ///@param in \b IN in parameter
896*53ee8cc1Swenshuai.xi ///@param out \b OUT out parameter
897*53ee8cc1Swenshuai.xi ///@return status
898*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_MJPEG_ClearShareMemory(MS_U32 u32Id)899*53ee8cc1Swenshuai.xi void MDrv_MJPEG_ClearShareMemory(MS_U32 u32Id)
900*53ee8cc1Swenshuai.xi {
901*53ee8cc1Swenshuai.xi MS_U32 u32Idx = 0, u32Size;
902*53ee8cc1Swenshuai.xi volatile MS_U8 *u8Ptr = 0;
903*53ee8cc1Swenshuai.xi
904*53ee8cc1Swenshuai.xi u8Ptr = (volatile MS_U8 *)MDrv_MJPEG_GetShareMemAddr(u32Id);
905*53ee8cc1Swenshuai.xi if((MS_VIRT)u8Ptr==MJPEG_U32_MAX)
906*53ee8cc1Swenshuai.xi {
907*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
908*53ee8cc1Swenshuai.xi return;
909*53ee8cc1Swenshuai.xi }
910*53ee8cc1Swenshuai.xi u32Size = sizeof(HVD_ShareMem);
911*53ee8cc1Swenshuai.xi
912*53ee8cc1Swenshuai.xi for (u32Idx = 0; u32Idx < u32Size; u32Idx++)
913*53ee8cc1Swenshuai.xi {
914*53ee8cc1Swenshuai.xi *u8Ptr = 0;
915*53ee8cc1Swenshuai.xi u8Ptr++;
916*53ee8cc1Swenshuai.xi }
917*53ee8cc1Swenshuai.xi return;
918*53ee8cc1Swenshuai.xi }
919*53ee8cc1Swenshuai.xi
920*53ee8cc1Swenshuai.xi /******************************************************************************/
921*53ee8cc1Swenshuai.xi ///Get PTS table address
922*53ee8cc1Swenshuai.xi ///@param u32Value \b IN new PTS value
923*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_MJPEG_GetPtsTableAddr(MS_U32 u32Id)924*53ee8cc1Swenshuai.xi MS_VIRT MDrv_MJPEG_GetPtsTableAddr(MS_U32 u32Id)
925*53ee8cc1Swenshuai.xi {
926*53ee8cc1Swenshuai.xi MS_VIRT u32PtsAddr = MJPEG_U32_MAX;
927*53ee8cc1Swenshuai.xi #if defined(SUPPORT_NEW_MEM_LAYOUT)
928*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
929*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
930*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
931*53ee8cc1Swenshuai.xi MS_U32 u32HVD_PTS_TABLE_ST_OFFSET = pShareMem->u32HVD_PTS_TABLE_ST_OFFSET - HAL_VPU_EX_GetTaskId(u32Id) * HVD_FW_MEM_OFFSET;
932*53ee8cc1Swenshuai.xi #else
933*53ee8cc1Swenshuai.xi MS_U32 u32HVD_PTS_TABLE_ST_OFFSET = HVD_PTS_TABLE_ST_OFFSET;
934*53ee8cc1Swenshuai.xi #endif
935*53ee8cc1Swenshuai.xi
936*53ee8cc1Swenshuai.xi if (__u32FwAddr != MJPEG_U32_MAX)
937*53ee8cc1Swenshuai.xi u32PtsAddr = __u32FwAddr + u32HVD_PTS_TABLE_ST_OFFSET;
938*53ee8cc1Swenshuai.xi else
939*53ee8cc1Swenshuai.xi return MJPEG_U32_MAX;
940*53ee8cc1Swenshuai.xi
941*53ee8cc1Swenshuai.xi u32PtsAddr = MS_PA2KSEG1((MS_VIRT)u32PtsAddr); //PhysicalAddr to VirtualAddr
942*53ee8cc1Swenshuai.xi
943*53ee8cc1Swenshuai.xi return u32PtsAddr;
944*53ee8cc1Swenshuai.xi }
945*53ee8cc1Swenshuai.xi
946*53ee8cc1Swenshuai.xi /******************************************************************************/
947*53ee8cc1Swenshuai.xi ///Reset PTS value
948*53ee8cc1Swenshuai.xi ///@param u32Value \b IN new PTS value
949*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_MJPEG_ResetPTS(MS_U32 u32Id,MS_U32 u32PtsBase)950*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MJPEG_ResetPTS(MS_U32 u32Id, MS_U32 u32PtsBase)
951*53ee8cc1Swenshuai.xi {
952*53ee8cc1Swenshuai.xi
953*53ee8cc1Swenshuai.xi MDrv_MJPEG_SendVPUCommand(u32Id, E_MJPEG_CMD_SET_PTS_BASE, u32PtsBase);
954*53ee8cc1Swenshuai.xi
955*53ee8cc1Swenshuai.xi return TRUE;
956*53ee8cc1Swenshuai.xi }
957*53ee8cc1Swenshuai.xi
958*53ee8cc1Swenshuai.xi /******************************************************************************/
959*53ee8cc1Swenshuai.xi ///Return PTS of current displayed frame
960*53ee8cc1Swenshuai.xi ///@return PTS
961*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_MJPEG_GetPTS(MS_U32 u32Id)962*53ee8cc1Swenshuai.xi MS_U32 MDrv_MJPEG_GetPTS(MS_U32 u32Id)
963*53ee8cc1Swenshuai.xi {
964*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
965*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
966*53ee8cc1Swenshuai.xi
967*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
968*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
969*53ee8cc1Swenshuai.xi {
970*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
971*53ee8cc1Swenshuai.xi return NULL;
972*53ee8cc1Swenshuai.xi }
973*53ee8cc1Swenshuai.xi
974*53ee8cc1Swenshuai.xi return pShareMem->DispFrmInfo.u32TimeStamp;
975*53ee8cc1Swenshuai.xi }
976*53ee8cc1Swenshuai.xi
977*53ee8cc1Swenshuai.xi /******************************************************************************/
978*53ee8cc1Swenshuai.xi ///Description
979*53ee8cc1Swenshuai.xi ///@param in \b IN in parameter
980*53ee8cc1Swenshuai.xi ///@param out \b OUT out parameter
981*53ee8cc1Swenshuai.xi ///@return status
982*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_MJPEG_DispFrame(MS_U32 u32Id,MS_U32 u32DispIdx)983*53ee8cc1Swenshuai.xi void MDrv_MJPEG_DispFrame(MS_U32 u32Id, MS_U32 u32DispIdx)
984*53ee8cc1Swenshuai.xi {
985*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
986*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
987*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
988*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
989*53ee8cc1Swenshuai.xi {
990*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
991*53ee8cc1Swenshuai.xi return;
992*53ee8cc1Swenshuai.xi }
993*53ee8cc1Swenshuai.xi
994*53ee8cc1Swenshuai.xi if (pShareMem->DispQueue[u32DispIdx].u32Status == E_HVD_DISPQ_STATUS_VIEW)
995*53ee8cc1Swenshuai.xi {
996*53ee8cc1Swenshuai.xi pShareMem->DispQueue[u32DispIdx].u32Status = E_HVD_DISPQ_STATUS_DISP;
997*53ee8cc1Swenshuai.xi }
998*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("[MJPEG_FB][disp %td][%td %td %td %td %td %td %td %td]\n", (ptrdiff_t)u32DispIdx, (ptrdiff_t)pShareMem->DispQueue[0].u32Status, (ptrdiff_t)pShareMem->DispQueue[1].u32Status,
999*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[2].u32Status, (ptrdiff_t)pShareMem->DispQueue[3].u32Status, (ptrdiff_t)pShareMem->DispQueue[4].u32Status,
1000*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[5].u32Status, (ptrdiff_t)pShareMem->DispQueue[6].u32Status, (ptrdiff_t)pShareMem->DispQueue[7].u32Status);
1001*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
1002*53ee8cc1Swenshuai.xi }
1003*53ee8cc1Swenshuai.xi
1004*53ee8cc1Swenshuai.xi /******************************************************************************/
1005*53ee8cc1Swenshuai.xi ///Description
1006*53ee8cc1Swenshuai.xi ///@param in \b IN in parameter
1007*53ee8cc1Swenshuai.xi ///@param out \b OUT out parameter
1008*53ee8cc1Swenshuai.xi ///@return status
1009*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_MJPEG_FreeFrame(MS_U32 u32Id,MS_U32 u32DispIdx)1010*53ee8cc1Swenshuai.xi void MDrv_MJPEG_FreeFrame(MS_U32 u32Id, MS_U32 u32DispIdx)
1011*53ee8cc1Swenshuai.xi {
1012*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1013*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1014*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1015*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
1016*53ee8cc1Swenshuai.xi {
1017*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1018*53ee8cc1Swenshuai.xi return;
1019*53ee8cc1Swenshuai.xi }
1020*53ee8cc1Swenshuai.xi
1021*53ee8cc1Swenshuai.xi if (pShareMem->DispQueue[u32DispIdx].u32Status == E_HVD_DISPQ_STATUS_VIEW)
1022*53ee8cc1Swenshuai.xi {
1023*53ee8cc1Swenshuai.xi pShareMem->DispQueue[u32DispIdx].u32Status = E_HVD_DISPQ_STATUS_FREE;
1024*53ee8cc1Swenshuai.xi }
1025*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("[MJPEG_FB][free %td][%td %td %td %td %td %td %td %td]\n", (ptrdiff_t)u32DispIdx, (ptrdiff_t)pShareMem->DispQueue[0].u32Status, (ptrdiff_t)pShareMem->DispQueue[1].u32Status,
1026*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[2].u32Status, (ptrdiff_t)pShareMem->DispQueue[3].u32Status, (ptrdiff_t)pShareMem->DispQueue[4].u32Status,
1027*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[5].u32Status, (ptrdiff_t)pShareMem->DispQueue[6].u32Status, (ptrdiff_t)pShareMem->DispQueue[7].u32Status);
1028*53ee8cc1Swenshuai.xi
1029*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
1030*53ee8cc1Swenshuai.xi }
1031*53ee8cc1Swenshuai.xi
1032*53ee8cc1Swenshuai.xi /******************************************************************************/
1033*53ee8cc1Swenshuai.xi ///Description
1034*53ee8cc1Swenshuai.xi ///@param in \b IN in parameter
1035*53ee8cc1Swenshuai.xi ///@param out \b OUT out parameter
1036*53ee8cc1Swenshuai.xi ///@return status
1037*53ee8cc1Swenshuai.xi /******************************************************************************/
1038*53ee8cc1Swenshuai.xi #define MJPEG_DISPQ_PREFETCH_COUNT 2
1039*53ee8cc1Swenshuai.xi
1040*53ee8cc1Swenshuai.xi static MS_U16 _u16DispQPtr[E_MJPEG_MJPEG_TOTAL] = {0, 0, 0, 0};
MDrv_MJPEG_GetNextDispFrame(MS_U32 u32Id)1041*53ee8cc1Swenshuai.xi void* MDrv_MJPEG_GetNextDispFrame(MS_U32 u32Id)
1042*53ee8cc1Swenshuai.xi {
1043*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1044*53ee8cc1Swenshuai.xi MS_U8 u8DrvId = MDrv_MJPEG_GetDrvId(u32Id);
1045*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1046*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1047*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
1048*53ee8cc1Swenshuai.xi {
1049*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1050*53ee8cc1Swenshuai.xi return NULL;
1051*53ee8cc1Swenshuai.xi }
1052*53ee8cc1Swenshuai.xi
1053*53ee8cc1Swenshuai.xi HVD_Frm_Information *pFrm;
1054*53ee8cc1Swenshuai.xi
1055*53ee8cc1Swenshuai.xi if (bDisplayOutSideMode[u8DrvId])
1056*53ee8cc1Swenshuai.xi {
1057*53ee8cc1Swenshuai.xi MS_U32 idx = 0;
1058*53ee8cc1Swenshuai.xi MS_S32 found = -1;
1059*53ee8cc1Swenshuai.xi
1060*53ee8cc1Swenshuai.xi for (idx = 0; idx < u32FrameBuffTotalNum[u8DrvId]; idx++)
1061*53ee8cc1Swenshuai.xi {
1062*53ee8cc1Swenshuai.xi if (pShareMem->DispQueue[idx].u32Status == E_HVD_DISPQ_STATUS_INIT)
1063*53ee8cc1Swenshuai.xi {
1064*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("MDrv_MJPEG_GetNextDispFrame, pShareMem->DispQueue[%td].u32PrivateData = %td", (ptrdiff_t)idx, (ptrdiff_t)pShareMem->DispQueue[idx].u32PrivateData);
1065*53ee8cc1Swenshuai.xi
1066*53ee8cc1Swenshuai.xi if (found >= 0)
1067*53ee8cc1Swenshuai.xi {
1068*53ee8cc1Swenshuai.xi // find the older one
1069*53ee8cc1Swenshuai.xi if (pShareMem->DispQueue[idx].u32PrivateData < pShareMem->DispQueue[found].u32PrivateData)
1070*53ee8cc1Swenshuai.xi found = idx;
1071*53ee8cc1Swenshuai.xi }
1072*53ee8cc1Swenshuai.xi else
1073*53ee8cc1Swenshuai.xi {
1074*53ee8cc1Swenshuai.xi found = idx;
1075*53ee8cc1Swenshuai.xi }
1076*53ee8cc1Swenshuai.xi }
1077*53ee8cc1Swenshuai.xi }
1078*53ee8cc1Swenshuai.xi
1079*53ee8cc1Swenshuai.xi if (found >= 0)
1080*53ee8cc1Swenshuai.xi {
1081*53ee8cc1Swenshuai.xi pFrm = (HVD_Frm_Information *)(MS_VIRT)&(pShareMem->DispQueue[found]);
1082*53ee8cc1Swenshuai.xi _u16DispQPtr[u8DrvId] = found;
1083*53ee8cc1Swenshuai.xi pFrm->u32Status = E_HVD_DISPQ_STATUS_VIEW;
1084*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
1085*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("[MJPEG_FB][view %td][%td %td %td %td %td %td %td %td]\n", (ptrdiff_t)found, (ptrdiff_t)pShareMem->DispQueue[0].u32Status, (ptrdiff_t)pShareMem->DispQueue[1].u32Status,
1086*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[2].u32Status, (ptrdiff_t)pShareMem->DispQueue[3].u32Status, (ptrdiff_t)pShareMem->DispQueue[4].u32Status,
1087*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[5].u32Status, (ptrdiff_t)pShareMem->DispQueue[6].u32Status, (ptrdiff_t)pShareMem->DispQueue[7].u32Status);
1088*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("bDisplayOutSideMode-->FrameDone: %td, pFrm=0x%tx, timestamp=%td\n", (ptrdiff_t)idx, (ptrdiff_t)pFrm, (ptrdiff_t)pFrm->u32TimeStamp);
1089*53ee8cc1Swenshuai.xi return pFrm;
1090*53ee8cc1Swenshuai.xi }
1091*53ee8cc1Swenshuai.xi else
1092*53ee8cc1Swenshuai.xi {
1093*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("MDrv_MJPEG_GetNextDispFrame return NULL!!! [MJPEG_FB][%td %td %td %td %td %td %td %td]\n",
1094*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[0].u32Status, (ptrdiff_t)pShareMem->DispQueue[1].u32Status,
1095*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[2].u32Status, (ptrdiff_t)pShareMem->DispQueue[3].u32Status, (ptrdiff_t)pShareMem->DispQueue[4].u32Status,
1096*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[5].u32Status, (ptrdiff_t)pShareMem->DispQueue[6].u32Status, (ptrdiff_t)pShareMem->DispQueue[7].u32Status);
1097*53ee8cc1Swenshuai.xi return NULL;
1098*53ee8cc1Swenshuai.xi }
1099*53ee8cc1Swenshuai.xi }
1100*53ee8cc1Swenshuai.xi else
1101*53ee8cc1Swenshuai.xi {
1102*53ee8cc1Swenshuai.xi
1103*53ee8cc1Swenshuai.xi MS_U16 u16QNum = pShareMem->u16DispQNumb;
1104*53ee8cc1Swenshuai.xi MS_U16 u16QPtr = pShareMem->u16DispQPtr;
1105*53ee8cc1Swenshuai.xi
1106*53ee8cc1Swenshuai.xi #if 0
1107*53ee8cc1Swenshuai.xi if (u16QNum > MJPEG_DISPQ_PREFETCH_COUNT) u16QNum = MJPEG_DISPQ_PREFETCH_COUNT;
1108*53ee8cc1Swenshuai.xi #endif
1109*53ee8cc1Swenshuai.xi
1110*53ee8cc1Swenshuai.xi while (u16QNum != 0)
1111*53ee8cc1Swenshuai.xi {
1112*53ee8cc1Swenshuai.xi pFrm = (HVD_Frm_Information*)(MS_VIRT)&(pShareMem->DispQueue[u16QPtr]);
1113*53ee8cc1Swenshuai.xi
1114*53ee8cc1Swenshuai.xi if (pFrm->u32Status == E_HVD_DISPQ_STATUS_INIT)
1115*53ee8cc1Swenshuai.xi {
1116*53ee8cc1Swenshuai.xi _u16DispQPtr[u8DrvId] = u16QPtr;
1117*53ee8cc1Swenshuai.xi pFrm->u32Status = E_HVD_DISPQ_STATUS_VIEW; /////Change its state!!
1118*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("[MJPEG_FB][view %td][%td %td %td %td %td %td %td %td]\n", (ptrdiff_t)_u16DispQPtr[u8DrvId], (ptrdiff_t)pShareMem->DispQueue[0].u32Status, (ptrdiff_t)pShareMem->DispQueue[1].u32Status,
1119*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[2].u32Status, (ptrdiff_t)pShareMem->DispQueue[3].u32Status, (ptrdiff_t)pShareMem->DispQueue[4].u32Status,
1120*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->DispQueue[5].u32Status, (ptrdiff_t)pShareMem->DispQueue[6].u32Status, (ptrdiff_t)pShareMem->DispQueue[7].u32Status);
1121*53ee8cc1Swenshuai.xi
1122*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("FrameDone: %td, pFrm=0x%tx, timestamp=%td\n", (ptrdiff_t)u16QPtr, (ptrdiff_t)pFrm, (ptrdiff_t)pFrm->u32TimeStamp);
1123*53ee8cc1Swenshuai.xi return pFrm;
1124*53ee8cc1Swenshuai.xi }
1125*53ee8cc1Swenshuai.xi u16QNum--;
1126*53ee8cc1Swenshuai.xi u16QPtr++;
1127*53ee8cc1Swenshuai.xi if (u16QPtr == pShareMem->u16DispQSize) u16QPtr = 0; //wrap to the begin
1128*53ee8cc1Swenshuai.xi }
1129*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
1130*53ee8cc1Swenshuai.xi return NULL;
1131*53ee8cc1Swenshuai.xi }
1132*53ee8cc1Swenshuai.xi }
1133*53ee8cc1Swenshuai.xi
MDrv_MJPEG_GetDispFrameNum(MS_U32 u32Id)1134*53ee8cc1Swenshuai.xi MS_U32 MDrv_MJPEG_GetDispFrameNum(MS_U32 u32Id)
1135*53ee8cc1Swenshuai.xi {
1136*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1137*53ee8cc1Swenshuai.xi MS_U8 u8DrvId = MDrv_MJPEG_GetDrvId(u32Id);
1138*53ee8cc1Swenshuai.xi
1139*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1140*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1141*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
1142*53ee8cc1Swenshuai.xi {
1143*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1144*53ee8cc1Swenshuai.xi return NULL;
1145*53ee8cc1Swenshuai.xi }
1146*53ee8cc1Swenshuai.xi
1147*53ee8cc1Swenshuai.xi HVD_Frm_Information *pFrm;
1148*53ee8cc1Swenshuai.xi MS_U32 u32DispFrmNum = 0;
1149*53ee8cc1Swenshuai.xi
1150*53ee8cc1Swenshuai.xi if (bDisplayOutSideMode[u8DrvId])
1151*53ee8cc1Swenshuai.xi {
1152*53ee8cc1Swenshuai.xi MS_U32 idx = 0;
1153*53ee8cc1Swenshuai.xi for (idx = 0; idx < u32FrameBuffTotalNum[u8DrvId]; idx++)
1154*53ee8cc1Swenshuai.xi {
1155*53ee8cc1Swenshuai.xi pFrm = (HVD_Frm_Information *)(MS_VIRT)&(pShareMem->DispQueue[idx]);
1156*53ee8cc1Swenshuai.xi
1157*53ee8cc1Swenshuai.xi if (pFrm->u32Status == E_HVD_DISPQ_STATUS_INIT)
1158*53ee8cc1Swenshuai.xi {
1159*53ee8cc1Swenshuai.xi u32DispFrmNum++;
1160*53ee8cc1Swenshuai.xi }
1161*53ee8cc1Swenshuai.xi }
1162*53ee8cc1Swenshuai.xi return u32DispFrmNum;
1163*53ee8cc1Swenshuai.xi }
1164*53ee8cc1Swenshuai.xi else
1165*53ee8cc1Swenshuai.xi {
1166*53ee8cc1Swenshuai.xi MS_U16 u16QNum = pShareMem->u16DispQNumb;
1167*53ee8cc1Swenshuai.xi MS_U16 u16QPtr = pShareMem->u16DispQPtr;
1168*53ee8cc1Swenshuai.xi
1169*53ee8cc1Swenshuai.xi while (u16QNum != 0)
1170*53ee8cc1Swenshuai.xi {
1171*53ee8cc1Swenshuai.xi pFrm = (HVD_Frm_Information *)(MS_VIRT)&(pShareMem->DispQueue[u16QPtr]);
1172*53ee8cc1Swenshuai.xi
1173*53ee8cc1Swenshuai.xi if (pFrm->u32Status == E_HVD_DISPQ_STATUS_INIT)
1174*53ee8cc1Swenshuai.xi {
1175*53ee8cc1Swenshuai.xi u32DispFrmNum++;
1176*53ee8cc1Swenshuai.xi }
1177*53ee8cc1Swenshuai.xi u16QNum--;
1178*53ee8cc1Swenshuai.xi u16QPtr++;
1179*53ee8cc1Swenshuai.xi if (u16QPtr == pShareMem->u16DispQSize)
1180*53ee8cc1Swenshuai.xi {
1181*53ee8cc1Swenshuai.xi u16QPtr = 0; //wrap to the begin
1182*53ee8cc1Swenshuai.xi }
1183*53ee8cc1Swenshuai.xi }
1184*53ee8cc1Swenshuai.xi return u32DispFrmNum;
1185*53ee8cc1Swenshuai.xi }
1186*53ee8cc1Swenshuai.xi }
1187*53ee8cc1Swenshuai.xi
1188*53ee8cc1Swenshuai.xi /******************************************************************************/
1189*53ee8cc1Swenshuai.xi ///Description
1190*53ee8cc1Swenshuai.xi ///@param in \b IN in parameter
1191*53ee8cc1Swenshuai.xi ///@param out \b OUT out parameter
1192*53ee8cc1Swenshuai.xi ///@return status
1193*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_MJPEG_GetNextDispQPtr(MS_U32 u32Id)1194*53ee8cc1Swenshuai.xi MS_U32 MDrv_MJPEG_GetNextDispQPtr(MS_U32 u32Id)
1195*53ee8cc1Swenshuai.xi {
1196*53ee8cc1Swenshuai.xi MS_U8 u8DrvId = MDrv_MJPEG_GetDrvId(u32Id);
1197*53ee8cc1Swenshuai.xi return _u16DispQPtr[u8DrvId];
1198*53ee8cc1Swenshuai.xi }
1199*53ee8cc1Swenshuai.xi
1200*53ee8cc1Swenshuai.xi /******************************************************************************/
1201*53ee8cc1Swenshuai.xi ///Description
1202*53ee8cc1Swenshuai.xi ///@param in \b IN in parameter
1203*53ee8cc1Swenshuai.xi ///@param out \b OUT out parameter
1204*53ee8cc1Swenshuai.xi ///@return status
1205*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_MJPEG_GetDispFrameInfo(MS_U32 u32Id,void * pInfo)1206*53ee8cc1Swenshuai.xi void MDrv_MJPEG_GetDispFrameInfo(MS_U32 u32Id, void *pInfo)
1207*53ee8cc1Swenshuai.xi {
1208*53ee8cc1Swenshuai.xi MJPEG_DRV_FrameInfo *pFrmInfo = (MJPEG_DRV_FrameInfo *)pInfo;
1209*53ee8cc1Swenshuai.xi
1210*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1211*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1212*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1213*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
1214*53ee8cc1Swenshuai.xi {
1215*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1216*53ee8cc1Swenshuai.xi return;
1217*53ee8cc1Swenshuai.xi }
1218*53ee8cc1Swenshuai.xi
1219*53ee8cc1Swenshuai.xi pFrmInfo->u32LumaAddr = pShareMem->DispFrmInfo.u32LumaAddr;
1220*53ee8cc1Swenshuai.xi pFrmInfo->u32ChromaAddr = pShareMem->DispFrmInfo.u32ChromaAddr;
1221*53ee8cc1Swenshuai.xi pFrmInfo->u32TimeStamp = pShareMem->DispFrmInfo.u32TimeStamp;
1222*53ee8cc1Swenshuai.xi pFrmInfo->u32ID_L = pShareMem->DispFrmInfo.u32ID_L;
1223*53ee8cc1Swenshuai.xi pFrmInfo->u32ID_H = pShareMem->DispFrmInfo.u32ID_H;
1224*53ee8cc1Swenshuai.xi }
1225*53ee8cc1Swenshuai.xi
MDrv_MJPEG_EnableTurboFWMode(MS_U32 u32Id,MS_BOOL bEnable)1226*53ee8cc1Swenshuai.xi void MDrv_MJPEG_EnableTurboFWMode(MS_U32 u32Id, MS_BOOL bEnable)
1227*53ee8cc1Swenshuai.xi {
1228*53ee8cc1Swenshuai.xi // gbEnableTurboFWMode = bEnable;
1229*53ee8cc1Swenshuai.xi HAL_VPU_EX_SetFWReload(u32Id, !bEnable);
1230*53ee8cc1Swenshuai.xi }
1231*53ee8cc1Swenshuai.xi
MDrv_MJPEG_InitFw(MS_U32 u32Id,MJPEG_FW_Info FWInfo)1232*53ee8cc1Swenshuai.xi MJPEG_Return MDrv_MJPEG_InitFw(MS_U32 u32Id, MJPEG_FW_Info FWInfo)
1233*53ee8cc1Swenshuai.xi {
1234*53ee8cc1Swenshuai.xi __u32FwAddr = FWInfo.u32Addr;
1235*53ee8cc1Swenshuai.xi MS_U8 u8DrvId = MDrv_MJPEG_GetDrvId(u32Id);
1236*53ee8cc1Swenshuai.xi
1237*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("MDrv_MJPEG_InitFw u32Size = 0x%tx, u32Addr = 0x%tx, u32BinSize = 0x%tx, u32BinAddr = 0x%tx, u8FwSrcType = %td\n", (ptrdiff_t)FWInfo.u32Size, (ptrdiff_t)FWInfo.u32Addr, (ptrdiff_t)FWInfo.u32BinSize, (ptrdiff_t)FWInfo.u32BinAddr, (ptrdiff_t)FWInfo.u8FwSrcType);
1238*53ee8cc1Swenshuai.xi // for wb
1239*53ee8cc1Swenshuai.xi //MDrv_MJPEG_ClearShareMemory(u32Id);
1240*53ee8cc1Swenshuai.xi
1241*53ee8cc1Swenshuai.xi bDisplayOutSideMode[MDrv_MJPEG_GetDrvId(u32Id)] = FALSE;
1242*53ee8cc1Swenshuai.xi
1243*53ee8cc1Swenshuai.xi // Set Codec Type for HVD Firmware
1244*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pHVDShareMem = NULL;
1245*53ee8cc1Swenshuai.xi pHVDShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1246*53ee8cc1Swenshuai.xi if((MS_VIRT)pHVDShareMem==MJPEG_U32_MAX)
1247*53ee8cc1Swenshuai.xi {
1248*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1249*53ee8cc1Swenshuai.xi return E_MJPEG_FAILED;
1250*53ee8cc1Swenshuai.xi }
1251*53ee8cc1Swenshuai.xi pHVDShareMem->u32CodecType = E_HVD_Codec_MJPEG;
1252*53ee8cc1Swenshuai.xi // u16ChipID is set in HAL_HVD_EX_InitShareMem()
1253*53ee8cc1Swenshuai.xi //pHVDShareMem->u16ChipID = E_MSTAR_CHIP_J2;
1254*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
1255*53ee8cc1Swenshuai.xi
1256*53ee8cc1Swenshuai.xi // Create Task
1257*53ee8cc1Swenshuai.xi VPU_EX_FWCodeCfg stVpuFWCfg;
1258*53ee8cc1Swenshuai.xi VPU_EX_TaskInfo stTaskInfo;
1259*53ee8cc1Swenshuai.xi VPU_EX_VLCTblCfg stVlcCfg;
1260*53ee8cc1Swenshuai.xi #ifdef VDEC3
1261*53ee8cc1Swenshuai.xi VPU_EX_FBCfg stFBCfg;
1262*53ee8cc1Swenshuai.xi #endif
1263*53ee8cc1Swenshuai.xi VPU_EX_NDecInitPara stVpuInitPara;
1264*53ee8cc1Swenshuai.xi
1265*53ee8cc1Swenshuai.xi memset(&stVpuFWCfg, 0, sizeof(VPU_EX_FWCodeCfg));
1266*53ee8cc1Swenshuai.xi memset(&stTaskInfo, 0, sizeof(VPU_EX_TaskInfo));
1267*53ee8cc1Swenshuai.xi memset(&stVlcCfg, 0, sizeof(VPU_EX_VLCTblCfg));
1268*53ee8cc1Swenshuai.xi #ifdef VDEC3
1269*53ee8cc1Swenshuai.xi memset(&stFBCfg, 0, sizeof(VPU_EX_FBCfg));
1270*53ee8cc1Swenshuai.xi #endif
1271*53ee8cc1Swenshuai.xi memset(&stVpuInitPara, 0, sizeof(VPU_EX_NDecInitPara));
1272*53ee8cc1Swenshuai.xi
1273*53ee8cc1Swenshuai.xi stVpuInitPara.pFWCodeCfg = &stVpuFWCfg;
1274*53ee8cc1Swenshuai.xi stVpuInitPara.pTaskInfo = &stTaskInfo;
1275*53ee8cc1Swenshuai.xi #ifdef VDEC3
1276*53ee8cc1Swenshuai.xi stVpuInitPara.pFBCfg = &stFBCfg;
1277*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("[MJPEG] FWInfo.u32MWCAddr=0x%tx, FWInfo.u32MWCSize=0x%tx\n", (ptrdiff_t)FWInfo.u32MWCAddr, (ptrdiff_t)FWInfo.u32MWCSize);
1278*53ee8cc1Swenshuai.xi
1279*53ee8cc1Swenshuai.xi MS_U8 MIUAllocation;
1280*53ee8cc1Swenshuai.xi _phy_to_miu_offset(MIUAllocation, stVpuInitPara.pFBCfg->u32FrameBufAddr, FWInfo.u32MWCAddr);
1281*53ee8cc1Swenshuai.xi MDrv_MJPEG_SetMIUInfo(u32Id, MIUAllocation);
1282*53ee8cc1Swenshuai.xi stVpuInitPara.pFBCfg->u32FrameBufSize = FWInfo.u32MWCSize;
1283*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("[MJPEG] u32FrameBufAddr=0x%tx, u32FrameBufSize=0x%tx\n", (ptrdiff_t)stVpuInitPara.pFBCfg->u32FrameBufAddr, (ptrdiff_t)stVpuInitPara.pFBCfg->u32FrameBufSize);
1284*53ee8cc1Swenshuai.xi #endif
1285*53ee8cc1Swenshuai.xi
1286*53ee8cc1Swenshuai.xi stVpuFWCfg.u32DstAddr = MsOS_PA2KSEG1(FWInfo.u32Addr);
1287*53ee8cc1Swenshuai.xi stVpuFWCfg.u32DstSize = FWInfo.u32Size;
1288*53ee8cc1Swenshuai.xi stVpuFWCfg.u32BinAddr = MsOS_PA2KSEG1(FWInfo.u32BinAddr);
1289*53ee8cc1Swenshuai.xi stVpuFWCfg.u32BinSize = FWInfo.u32BinSize;
1290*53ee8cc1Swenshuai.xi stVpuFWCfg.u8SrcType = FWInfo.u8FwSrcType;
1291*53ee8cc1Swenshuai.xi
1292*53ee8cc1Swenshuai.xi stTaskInfo.u32Id = u32Id;
1293*53ee8cc1Swenshuai.xi stTaskInfo.eDecType = E_VPU_EX_DECODER_HVD;
1294*53ee8cc1Swenshuai.xi stTaskInfo.eVpuId = (HAL_VPU_StreamId) (0xFF & u32Id);
1295*53ee8cc1Swenshuai.xi stTaskInfo.eSrcType = E_VPU_EX_INPUT_FILE;
1296*53ee8cc1Swenshuai.xi #ifdef VDEC3
1297*53ee8cc1Swenshuai.xi HAL_VPU_EX_TaskCreate(u32Id, &stVpuInitPara, FWInfo.bFWdecideFB, 0);
1298*53ee8cc1Swenshuai.xi #else
1299*53ee8cc1Swenshuai.xi HAL_VPU_EX_TaskCreate(u32Id, &stVpuInitPara);
1300*53ee8cc1Swenshuai.xi #endif
1301*53ee8cc1Swenshuai.xi VirtualHal_MJPEG_Init(u8DrvId);
1302*53ee8cc1Swenshuai.xi
1303*53ee8cc1Swenshuai.xi return E_MJPEG_OK;
1304*53ee8cc1Swenshuai.xi }
1305*53ee8cc1Swenshuai.xi
MDrv_MJPEG_Get_Chip_ID(void)1306*53ee8cc1Swenshuai.xi MJPEG_MSTAR_CHIP_ID MDrv_MJPEG_Get_Chip_ID(void)
1307*53ee8cc1Swenshuai.xi {
1308*53ee8cc1Swenshuai.xi return VirtualHal_MJPEG_Get_Chip_ID();
1309*53ee8cc1Swenshuai.xi }
1310*53ee8cc1Swenshuai.xi
MDrv_MJPEG_GetFreeStream(MS_U32 * pu32Id,MJPEG_DRV_StreamType eStreamType)1311*53ee8cc1Swenshuai.xi MJPEG_Return MDrv_MJPEG_GetFreeStream(MS_U32 *pu32Id, MJPEG_DRV_StreamType eStreamType)
1312*53ee8cc1Swenshuai.xi {
1313*53ee8cc1Swenshuai.xi MJPEG_Return eRet = E_MJPEG_INVALID_PARAM;
1314*53ee8cc1Swenshuai.xi MS_U8 i = 0xff;
1315*53ee8cc1Swenshuai.xi MS_U32 u32VPUStreamId = 0;
1316*53ee8cc1Swenshuai.xi MS_U32 u32MJPEGStreamId = 0;
1317*53ee8cc1Swenshuai.xi
1318*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("%20s:%30s: Id=0x%tX\n", __FILE__, __FUNCTION__, (ptrdiff_t)(*pu32Id));
1319*53ee8cc1Swenshuai.xi
1320*53ee8cc1Swenshuai.xi #ifdef VDEC3
1321*53ee8cc1Swenshuai.xi if ((eStreamType >= E_MJPEG_DRV_N_STREAM) && (eStreamType < E_MJPEG_DRV_N_STREAM + E_MJPEG_MJPEG_TOTAL))
1322*53ee8cc1Swenshuai.xi {
1323*53ee8cc1Swenshuai.xi i = eStreamType - E_MJPEG_DRV_N_STREAM;
1324*53ee8cc1Swenshuai.xi }
1325*53ee8cc1Swenshuai.xi else
1326*53ee8cc1Swenshuai.xi {
1327*53ee8cc1Swenshuai.xi return E_MJPEG_FAILED;
1328*53ee8cc1Swenshuai.xi }
1329*53ee8cc1Swenshuai.xi u32VPUStreamId = (MS_U32) HAL_VPU_EX_GetFreeStream(E_HAL_VPU_N_STREAM + i, FALSE, FALSE);
1330*53ee8cc1Swenshuai.xi u32MJPEGStreamId = (MS_U32) VirtualHal_MJPEG_GetFreeStream(E_HAL_MJPEG_N_STREAM + i);
1331*53ee8cc1Swenshuai.xi
1332*53ee8cc1Swenshuai.xi if (u32VPUStreamId && u32MJPEGStreamId)
1333*53ee8cc1Swenshuai.xi {
1334*53ee8cc1Swenshuai.xi *pu32Id = (i << 16 | u32MJPEGStreamId << 8 | u32VPUStreamId);
1335*53ee8cc1Swenshuai.xi eRet = E_MJPEG_OK;
1336*53ee8cc1Swenshuai.xi }
1337*53ee8cc1Swenshuai.xi #else
1338*53ee8cc1Swenshuai.xi switch(eStreamType)
1339*53ee8cc1Swenshuai.xi {
1340*53ee8cc1Swenshuai.xi case(E_MJPEG_DRV_MAIN_STREAM):
1341*53ee8cc1Swenshuai.xi i = 0;
1342*53ee8cc1Swenshuai.xi break;
1343*53ee8cc1Swenshuai.xi case(E_MJPEG_DRV_SUB_STREAM):
1344*53ee8cc1Swenshuai.xi i = 1;
1345*53ee8cc1Swenshuai.xi break;
1346*53ee8cc1Swenshuai.xi case(E_MJPEG_DRV_STREAM_NONE):
1347*53ee8cc1Swenshuai.xi default:
1348*53ee8cc1Swenshuai.xi i = 0xff;
1349*53ee8cc1Swenshuai.xi break;
1350*53ee8cc1Swenshuai.xi }
1351*53ee8cc1Swenshuai.xi
1352*53ee8cc1Swenshuai.xi if ( i == 0xff )
1353*53ee8cc1Swenshuai.xi {
1354*53ee8cc1Swenshuai.xi return E_MJPEG_FAILED;
1355*53ee8cc1Swenshuai.xi }
1356*53ee8cc1Swenshuai.xi
1357*53ee8cc1Swenshuai.xi if (E_MJPEG_DRV_MAIN_STREAM == eStreamType)
1358*53ee8cc1Swenshuai.xi {
1359*53ee8cc1Swenshuai.xi u32VPUStreamId = (MS_U32) HAL_VPU_EX_GetFreeStream(E_HAL_VPU_MAIN_STREAM, FALSE);
1360*53ee8cc1Swenshuai.xi u32MJPEGStreamId = (MS_U32) VirtualHal_MJPEG_GetFreeStream(E_HAL_MJPEG_MAIN_STREAM);
1361*53ee8cc1Swenshuai.xi
1362*53ee8cc1Swenshuai.xi if(u32MJPEGStreamId == E_HAL_MJPEG_STREAM_NONE)
1363*53ee8cc1Swenshuai.xi {
1364*53ee8cc1Swenshuai.xi HAL_VPU_EX_ReleaseFreeStream(0);
1365*53ee8cc1Swenshuai.xi }
1366*53ee8cc1Swenshuai.xi
1367*53ee8cc1Swenshuai.xi if (u32VPUStreamId && u32MJPEGStreamId)
1368*53ee8cc1Swenshuai.xi {
1369*53ee8cc1Swenshuai.xi *pu32Id = (i << 16 | u32MJPEGStreamId << 8 | u32VPUStreamId);
1370*53ee8cc1Swenshuai.xi eRet = E_MJPEG_OK;
1371*53ee8cc1Swenshuai.xi }
1372*53ee8cc1Swenshuai.xi }
1373*53ee8cc1Swenshuai.xi else //if (E_MJPEG_DRV_SUB_STREAM== eStreamType)
1374*53ee8cc1Swenshuai.xi {
1375*53ee8cc1Swenshuai.xi u32VPUStreamId = (MS_U32) HAL_VPU_EX_GetFreeStream(E_HAL_VPU_SUB_STREAM, FALSE);
1376*53ee8cc1Swenshuai.xi u32MJPEGStreamId = (MS_U32) VirtualHal_MJPEG_GetFreeStream(E_HAL_MJPEG_SUB_STREAM);
1377*53ee8cc1Swenshuai.xi
1378*53ee8cc1Swenshuai.xi if(u32MJPEGStreamId == E_HAL_MJPEG_STREAM_NONE)
1379*53ee8cc1Swenshuai.xi {
1380*53ee8cc1Swenshuai.xi HAL_VPU_EX_ReleaseFreeStream(1);
1381*53ee8cc1Swenshuai.xi }
1382*53ee8cc1Swenshuai.xi
1383*53ee8cc1Swenshuai.xi if (u32VPUStreamId && u32MJPEGStreamId)
1384*53ee8cc1Swenshuai.xi {
1385*53ee8cc1Swenshuai.xi *pu32Id = (i << 16 | u32MJPEGStreamId << 8 | u32VPUStreamId);
1386*53ee8cc1Swenshuai.xi eRet = E_MJPEG_OK;
1387*53ee8cc1Swenshuai.xi }
1388*53ee8cc1Swenshuai.xi }
1389*53ee8cc1Swenshuai.xi #endif
1390*53ee8cc1Swenshuai.xi
1391*53ee8cc1Swenshuai.xi
1392*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("%20s:%30s: Id=0x%tX\n", __FILE__, __FUNCTION__, (ptrdiff_t)(*pu32Id));
1393*53ee8cc1Swenshuai.xi
1394*53ee8cc1Swenshuai.xi return eRet;
1395*53ee8cc1Swenshuai.xi }
1396*53ee8cc1Swenshuai.xi
MDrv_MJPEG_DeInit(MS_U32 u32Id)1397*53ee8cc1Swenshuai.xi MJPEG_Return MDrv_MJPEG_DeInit(MS_U32 u32Id)
1398*53ee8cc1Swenshuai.xi {
1399*53ee8cc1Swenshuai.xi MJPEG_Return eRet = E_MJPEG_INVALID_PARAM;
1400*53ee8cc1Swenshuai.xi MS_U8 u8DrvId = MDrv_MJPEG_GetDrvId(u32Id);
1401*53ee8cc1Swenshuai.xi
1402*53ee8cc1Swenshuai.xi VPU_EX_FWCodeCfg stVpuFWCfg;
1403*53ee8cc1Swenshuai.xi VPU_EX_TaskInfo stTaskInfo;
1404*53ee8cc1Swenshuai.xi VPU_EX_NDecInitPara stVpuInitPara;
1405*53ee8cc1Swenshuai.xi
1406*53ee8cc1Swenshuai.xi stVpuInitPara.pFWCodeCfg = &stVpuFWCfg;
1407*53ee8cc1Swenshuai.xi stVpuInitPara.pTaskInfo = &stTaskInfo;
1408*53ee8cc1Swenshuai.xi
1409*53ee8cc1Swenshuai.xi stVpuFWCfg.u32DstAddr = MsOS_PA2KSEG1(__u32FwAddr);
1410*53ee8cc1Swenshuai.xi stVpuFWCfg.u8SrcType = E_HVD_FW_INPUT_SOURCE_NONE;
1411*53ee8cc1Swenshuai.xi
1412*53ee8cc1Swenshuai.xi stTaskInfo.u32Id = u32Id;
1413*53ee8cc1Swenshuai.xi stTaskInfo.eDecType = E_VPU_EX_DECODER_HVD;
1414*53ee8cc1Swenshuai.xi stTaskInfo.eVpuId = (HAL_VPU_StreamId) (0xFF & u32Id);
1415*53ee8cc1Swenshuai.xi stTaskInfo.eSrcType = E_VPU_EX_INPUT_FILE;
1416*53ee8cc1Swenshuai.xi
1417*53ee8cc1Swenshuai.xi VirtualHal_MJPEG_DeInit(u8DrvId);
1418*53ee8cc1Swenshuai.xi
1419*53ee8cc1Swenshuai.xi if ( HAL_VPU_EX_TaskDelete(u32Id, &stVpuInitPara) ) eRet = E_MJPEG_OK;
1420*53ee8cc1Swenshuai.xi
1421*53ee8cc1Swenshuai.xi return eRet;
1422*53ee8cc1Swenshuai.xi }
1423*53ee8cc1Swenshuai.xi
MDrv_MJPEG_InitRegBase(MS_VIRT u32RegBase)1424*53ee8cc1Swenshuai.xi void MDrv_MJPEG_InitRegBase(MS_VIRT u32RegBase)
1425*53ee8cc1Swenshuai.xi {
1426*53ee8cc1Swenshuai.xi HAL_VPU_EX_InitRegBase(u32RegBase);
1427*53ee8cc1Swenshuai.xi }
1428*53ee8cc1Swenshuai.xi
MDrv_MJPEG_SetPushQPara(MS_U32 u32Id,MS_U32 u32TimeStamp,MS_U32 u32ID_L,MS_U32 u32ID_H,MS_U32 u32NextFrameBuffIdx)1429*53ee8cc1Swenshuai.xi void MDrv_MJPEG_SetPushQPara(MS_U32 u32Id, MS_U32 u32TimeStamp, MS_U32 u32ID_L, MS_U32 u32ID_H, MS_U32 u32NextFrameBuffIdx)
1430*53ee8cc1Swenshuai.xi {
1431*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1432*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1433*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
1434*53ee8cc1Swenshuai.xi {
1435*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1436*53ee8cc1Swenshuai.xi return;
1437*53ee8cc1Swenshuai.xi }
1438*53ee8cc1Swenshuai.xi
1439*53ee8cc1Swenshuai.xi pShareMem->u32MJPEGFrameBuffIdx = u32NextFrameBuffIdx;
1440*53ee8cc1Swenshuai.xi pShareMem->u32MJPEGTimeStamp = u32TimeStamp;
1441*53ee8cc1Swenshuai.xi pShareMem->u32MJPEGID_L = u32ID_L;
1442*53ee8cc1Swenshuai.xi pShareMem->u32MJPEGID_H = u32ID_H;
1443*53ee8cc1Swenshuai.xi pShareMem->u32MJPEG_NextFrameBuffIdx = 0xffff;
1444*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
1445*53ee8cc1Swenshuai.xi
1446*53ee8cc1Swenshuai.xi }
1447*53ee8cc1Swenshuai.xi
1448*53ee8cc1Swenshuai.xi
MDrv_MJPEG_SetStepDispPara(MS_U32 u32Id)1449*53ee8cc1Swenshuai.xi void MDrv_MJPEG_SetStepDispPara(MS_U32 u32Id)
1450*53ee8cc1Swenshuai.xi {
1451*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1452*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1453*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
1454*53ee8cc1Swenshuai.xi {
1455*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1456*53ee8cc1Swenshuai.xi return;
1457*53ee8cc1Swenshuai.xi }
1458*53ee8cc1Swenshuai.xi pShareMem->u8MJPEG_bStepPlay = TRUE;
1459*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
1460*53ee8cc1Swenshuai.xi
1461*53ee8cc1Swenshuai.xi }
1462*53ee8cc1Swenshuai.xi
MDrv_MJPEG_SetMIUInfo(MS_U32 u32Id,MS_U8 u8MIU)1463*53ee8cc1Swenshuai.xi void MDrv_MJPEG_SetMIUInfo(MS_U32 u32Id, MS_U8 u8MIU)
1464*53ee8cc1Swenshuai.xi {
1465*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1466*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1467*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==0xFFFFFFFF)
1468*53ee8cc1Swenshuai.xi {
1469*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1470*53ee8cc1Swenshuai.xi return;
1471*53ee8cc1Swenshuai.xi }
1472*53ee8cc1Swenshuai.xi pShareMem->u32VDEC_MIU_SEL = (MS_U32)u8MIU;
1473*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
1474*53ee8cc1Swenshuai.xi
1475*53ee8cc1Swenshuai.xi }
1476*53ee8cc1Swenshuai.xi
1477*53ee8cc1Swenshuai.xi
1478*53ee8cc1Swenshuai.xi
MDrv_MJPEG_PrintShareInfo(MS_U32 u32Id)1479*53ee8cc1Swenshuai.xi void MDrv_MJPEG_PrintShareInfo(MS_U32 u32Id)
1480*53ee8cc1Swenshuai.xi {
1481*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1482*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1483*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1484*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
1485*53ee8cc1Swenshuai.xi {
1486*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1487*53ee8cc1Swenshuai.xi return;
1488*53ee8cc1Swenshuai.xi }
1489*53ee8cc1Swenshuai.xi
1490*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("0x%08tx, r:%td, w:%td, sys=%td, v_pts=%td, s/r=%td(%c)\n",
1491*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->u32MJPEGDbg_DispStatus,
1492*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->u8MJPEGDbg_ReadFbIdx, (ptrdiff_t)pShareMem->u8MJPEGDbg_WriteFbIdx,
1493*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->u32MJPEGDbg_SysTime, (ptrdiff_t)pShareMem->u32MJPEGDbg_VideoPts,
1494*53ee8cc1Swenshuai.xi (ptrdiff_t)pShareMem->u32MJPEGDbg_SkipRepeatTime, pShareMem->u8MJPEGDbg_SkipRepeat
1495*53ee8cc1Swenshuai.xi );
1496*53ee8cc1Swenshuai.xi }
1497*53ee8cc1Swenshuai.xi
MDrv_MJPEG_GetNextFrameBufferIdx(MS_U32 u32Id)1498*53ee8cc1Swenshuai.xi MS_U32 MDrv_MJPEG_GetNextFrameBufferIdx(MS_U32 u32Id)
1499*53ee8cc1Swenshuai.xi {
1500*53ee8cc1Swenshuai.xi MS_U8 u8DrvId = MDrv_MJPEG_GetDrvId(u32Id);
1501*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1502*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1503*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1504*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
1505*53ee8cc1Swenshuai.xi {
1506*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1507*53ee8cc1Swenshuai.xi return NULL;
1508*53ee8cc1Swenshuai.xi }
1509*53ee8cc1Swenshuai.xi
1510*53ee8cc1Swenshuai.xi if (bDisplayOutSideMode[u8DrvId])
1511*53ee8cc1Swenshuai.xi {
1512*53ee8cc1Swenshuai.xi MS_U32 idx = 0;
1513*53ee8cc1Swenshuai.xi for (idx = 0; idx < u32FrameBuffTotalNum[u8DrvId]; idx++)
1514*53ee8cc1Swenshuai.xi {
1515*53ee8cc1Swenshuai.xi if (pShareMem->DispQueue[idx].u32Status == E_HVD_DISPQ_STATUS_FREE) return idx;
1516*53ee8cc1Swenshuai.xi }
1517*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("MDrv_MJPEG_GetNextFrameBufferIdx is full!!!\n");
1518*53ee8cc1Swenshuai.xi return (MJPEG_U32_MAX);
1519*53ee8cc1Swenshuai.xi }
1520*53ee8cc1Swenshuai.xi else
1521*53ee8cc1Swenshuai.xi {
1522*53ee8cc1Swenshuai.xi return pShareMem->u32MJPEG_NextFrameBuffIdx;
1523*53ee8cc1Swenshuai.xi }
1524*53ee8cc1Swenshuai.xi }
1525*53ee8cc1Swenshuai.xi
MDrv_MJPEG_IsStepPlayDone(MS_U32 u32Id)1526*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MJPEG_IsStepPlayDone(MS_U32 u32Id)
1527*53ee8cc1Swenshuai.xi {
1528*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1529*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1530*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1531*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
1532*53ee8cc1Swenshuai.xi {
1533*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1534*53ee8cc1Swenshuai.xi return FALSE;
1535*53ee8cc1Swenshuai.xi }
1536*53ee8cc1Swenshuai.xi return (MS_BOOL)pShareMem->u8MJPEG_bStepPlay;
1537*53ee8cc1Swenshuai.xi }
1538*53ee8cc1Swenshuai.xi
MDrv_MJPEG_IsPlaying(MS_U32 u32Id)1539*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MJPEG_IsPlaying(MS_U32 u32Id)
1540*53ee8cc1Swenshuai.xi {
1541*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1542*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1543*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1544*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
1545*53ee8cc1Swenshuai.xi {
1546*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1547*53ee8cc1Swenshuai.xi return FALSE;
1548*53ee8cc1Swenshuai.xi }
1549*53ee8cc1Swenshuai.xi return (MS_BOOL)pShareMem->u8MJPEG_bPlaying;
1550*53ee8cc1Swenshuai.xi }
1551*53ee8cc1Swenshuai.xi
MDrv_MJPEG_IsAVSyncOn(MS_U32 u32Id)1552*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MJPEG_IsAVSyncOn(MS_U32 u32Id)
1553*53ee8cc1Swenshuai.xi {
1554*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1555*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1556*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1557*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
1558*53ee8cc1Swenshuai.xi {
1559*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1560*53ee8cc1Swenshuai.xi return FALSE;
1561*53ee8cc1Swenshuai.xi }
1562*53ee8cc1Swenshuai.xi return (MS_BOOL)pShareMem->u8MJPEG_bIsAVSyncOn;
1563*53ee8cc1Swenshuai.xi }
1564*53ee8cc1Swenshuai.xi
MDrv_MJPEG_IsReachAVSync(MS_U32 u32Id)1565*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MJPEG_IsReachAVSync(MS_U32 u32Id)
1566*53ee8cc1Swenshuai.xi {
1567*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1568*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1569*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1570*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
1571*53ee8cc1Swenshuai.xi {
1572*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1573*53ee8cc1Swenshuai.xi return FALSE;
1574*53ee8cc1Swenshuai.xi }
1575*53ee8cc1Swenshuai.xi return (MS_BOOL)pShareMem->u8MJPEG_bIsReachAVSync;
1576*53ee8cc1Swenshuai.xi }
1577*53ee8cc1Swenshuai.xi
MDrv_MJPEG_IsFlushDone(MS_U32 u32Id)1578*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MJPEG_IsFlushDone(MS_U32 u32Id)
1579*53ee8cc1Swenshuai.xi {
1580*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1581*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1582*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1583*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
1584*53ee8cc1Swenshuai.xi {
1585*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1586*53ee8cc1Swenshuai.xi return FALSE;
1587*53ee8cc1Swenshuai.xi }
1588*53ee8cc1Swenshuai.xi return (MS_BOOL)(!pShareMem->u8MJPEG_bFlushQueue);
1589*53ee8cc1Swenshuai.xi }
1590*53ee8cc1Swenshuai.xi
MDrv_MJPEG_InitFlush(MS_U32 u32Id)1591*53ee8cc1Swenshuai.xi void MDrv_MJPEG_InitFlush(MS_U32 u32Id)
1592*53ee8cc1Swenshuai.xi {
1593*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1594*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1595*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
1596*53ee8cc1Swenshuai.xi {
1597*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1598*53ee8cc1Swenshuai.xi return;
1599*53ee8cc1Swenshuai.xi }
1600*53ee8cc1Swenshuai.xi pShareMem->u8MJPEG_bFlushQueue = 1;
1601*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
1602*53ee8cc1Swenshuai.xi }
1603*53ee8cc1Swenshuai.xi
1604*53ee8cc1Swenshuai.xi
MDrv_MJPEG_Init_IsDispFinish(MS_U32 u32Id)1605*53ee8cc1Swenshuai.xi void MDrv_MJPEG_Init_IsDispFinish(MS_U32 u32Id)
1606*53ee8cc1Swenshuai.xi {
1607*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1608*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1609*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
1610*53ee8cc1Swenshuai.xi {
1611*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1612*53ee8cc1Swenshuai.xi return;
1613*53ee8cc1Swenshuai.xi }
1614*53ee8cc1Swenshuai.xi pShareMem->u8MJPEG_bIsDispFinish = 0xff;
1615*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
1616*53ee8cc1Swenshuai.xi }
1617*53ee8cc1Swenshuai.xi
MDrv_MJPEG_IsDispFinish(MS_U32 u32Id)1618*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MJPEG_IsDispFinish(MS_U32 u32Id)
1619*53ee8cc1Swenshuai.xi {
1620*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1621*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1622*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1623*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
1624*53ee8cc1Swenshuai.xi {
1625*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1626*53ee8cc1Swenshuai.xi return FALSE;
1627*53ee8cc1Swenshuai.xi }
1628*53ee8cc1Swenshuai.xi MS_U32 u32Timer;
1629*53ee8cc1Swenshuai.xi
1630*53ee8cc1Swenshuai.xi u32Timer = MsOS_GetSystemTime();
1631*53ee8cc1Swenshuai.xi while(1)
1632*53ee8cc1Swenshuai.xi {
1633*53ee8cc1Swenshuai.xi if (MsOS_GetSystemTime()-u32Timer > 30)
1634*53ee8cc1Swenshuai.xi {
1635*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("MDrv_MJPEG_IsDispFinish() timeout...\n");
1636*53ee8cc1Swenshuai.xi break;
1637*53ee8cc1Swenshuai.xi }
1638*53ee8cc1Swenshuai.xi if(pShareMem->u8MJPEG_bIsDispFinish!=0xff)
1639*53ee8cc1Swenshuai.xi break;
1640*53ee8cc1Swenshuai.xi }
1641*53ee8cc1Swenshuai.xi return (MS_BOOL)(pShareMem->u8MJPEG_bIsDispFinish);
1642*53ee8cc1Swenshuai.xi }
1643*53ee8cc1Swenshuai.xi
1644*53ee8cc1Swenshuai.xi
MDrv_MJPEG_Init_IsQueueFull(MS_U32 u32Id)1645*53ee8cc1Swenshuai.xi void MDrv_MJPEG_Init_IsQueueFull(MS_U32 u32Id)
1646*53ee8cc1Swenshuai.xi {
1647*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1648*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1649*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1650*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
1651*53ee8cc1Swenshuai.xi {
1652*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1653*53ee8cc1Swenshuai.xi return;
1654*53ee8cc1Swenshuai.xi }
1655*53ee8cc1Swenshuai.xi pShareMem->u8MJPEG_bQueueFull = 0xff;
1656*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
1657*53ee8cc1Swenshuai.xi }
1658*53ee8cc1Swenshuai.xi
MDrv_MJPEG_IsQueueFull(MS_U32 u32Id)1659*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MJPEG_IsQueueFull(MS_U32 u32Id)
1660*53ee8cc1Swenshuai.xi {
1661*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1662*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1663*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1664*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
1665*53ee8cc1Swenshuai.xi {
1666*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1667*53ee8cc1Swenshuai.xi return FALSE;
1668*53ee8cc1Swenshuai.xi }
1669*53ee8cc1Swenshuai.xi MS_U32 u32Timer;
1670*53ee8cc1Swenshuai.xi
1671*53ee8cc1Swenshuai.xi u32Timer = MsOS_GetSystemTime();
1672*53ee8cc1Swenshuai.xi while(1)
1673*53ee8cc1Swenshuai.xi {
1674*53ee8cc1Swenshuai.xi if (MsOS_GetSystemTime()-u32Timer > 1000)
1675*53ee8cc1Swenshuai.xi {
1676*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("MDrv_MJPEG_IsQueueFull() timeout...\n");
1677*53ee8cc1Swenshuai.xi break;
1678*53ee8cc1Swenshuai.xi }
1679*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1680*53ee8cc1Swenshuai.xi if(pShareMem->u8MJPEG_bQueueFull!=0xff)
1681*53ee8cc1Swenshuai.xi {
1682*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("[%td]ms\n", (ptrdiff_t)(MsOS_GetSystemTime()-u32Timer));
1683*53ee8cc1Swenshuai.xi break;
1684*53ee8cc1Swenshuai.xi }
1685*53ee8cc1Swenshuai.xi }
1686*53ee8cc1Swenshuai.xi return (MS_BOOL)(pShareMem->u8MJPEG_bQueueFull);
1687*53ee8cc1Swenshuai.xi
1688*53ee8cc1Swenshuai.xi }
1689*53ee8cc1Swenshuai.xi
1690*53ee8cc1Swenshuai.xi #ifdef VDEC3
MDrv_MJPEG_Init_GetFrameBuffer(MS_U32 u32Id)1691*53ee8cc1Swenshuai.xi void MDrv_MJPEG_Init_GetFrameBuffer(MS_U32 u32Id)
1692*53ee8cc1Swenshuai.xi {
1693*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1694*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1695*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1696*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
1697*53ee8cc1Swenshuai.xi {
1698*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1699*53ee8cc1Swenshuai.xi return;
1700*53ee8cc1Swenshuai.xi }
1701*53ee8cc1Swenshuai.xi pShareMem->u32FrameBufAddr = 0;
1702*53ee8cc1Swenshuai.xi pShareMem->u32FrameBufSize = 0;
1703*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
1704*53ee8cc1Swenshuai.xi }
1705*53ee8cc1Swenshuai.xi
MDrv_MJPEG_GetFrameBuffer(MS_U32 u32Id)1706*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MJPEG_GetFrameBuffer(MS_U32 u32Id)
1707*53ee8cc1Swenshuai.xi {
1708*53ee8cc1Swenshuai.xi MS_BOOL bRet = FALSE;
1709*53ee8cc1Swenshuai.xi MS_U8 u8DrvId = MDrv_MJPEG_GetDrvId(u32Id);
1710*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1711*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1712*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1713*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
1714*53ee8cc1Swenshuai.xi {
1715*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1716*53ee8cc1Swenshuai.xi return FALSE;
1717*53ee8cc1Swenshuai.xi }
1718*53ee8cc1Swenshuai.xi MS_U32 u32Timer;
1719*53ee8cc1Swenshuai.xi
1720*53ee8cc1Swenshuai.xi u32Timer = MsOS_GetSystemTime();
1721*53ee8cc1Swenshuai.xi while(1)
1722*53ee8cc1Swenshuai.xi {
1723*53ee8cc1Swenshuai.xi if (MsOS_GetSystemTime()-u32Timer > 1000)
1724*53ee8cc1Swenshuai.xi {
1725*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("MDrv_MJPEG_GetFrameBuffer() timeout...\n");
1726*53ee8cc1Swenshuai.xi return FALSE;
1727*53ee8cc1Swenshuai.xi }
1728*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1729*53ee8cc1Swenshuai.xi if(pShareMem->u32FrameBufAddr!=0)
1730*53ee8cc1Swenshuai.xi {
1731*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("[%td]ms, get ok\n", (ptrdiff_t)(MsOS_GetSystemTime()-u32Timer));
1732*53ee8cc1Swenshuai.xi break;
1733*53ee8cc1Swenshuai.xi }
1734*53ee8cc1Swenshuai.xi }
1735*53ee8cc1Swenshuai.xi if(pShareMem->u32FrameBufAddr!=MJPEG_U32_MAX
1736*53ee8cc1Swenshuai.xi && pShareMem->u32FrameBufSize!=MJPEG_U32_MAX)
1737*53ee8cc1Swenshuai.xi {
1738*53ee8cc1Swenshuai.xi bRet = TRUE;
1739*53ee8cc1Swenshuai.xi u32FrameBuffStAddr[u8DrvId] = (MS_VIRT)pShareMem->u32FrameBufAddr;
1740*53ee8cc1Swenshuai.xi u32FrameBuffTotalSize[u8DrvId] = pShareMem->u32FrameBufSize;
1741*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("Get addr=0x%tx, size=0x%tx\n", (ptrdiff_t)pShareMem->u32FrameBufAddr, (ptrdiff_t)pShareMem->u32FrameBufSize);
1742*53ee8cc1Swenshuai.xi }
1743*53ee8cc1Swenshuai.xi else
1744*53ee8cc1Swenshuai.xi {
1745*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("[fail]Get addr=0x%tx, size=0x%tx\n", (ptrdiff_t)pShareMem->u32FrameBufAddr, (ptrdiff_t)pShareMem->u32FrameBufSize);
1746*53ee8cc1Swenshuai.xi }
1747*53ee8cc1Swenshuai.xi return bRet;
1748*53ee8cc1Swenshuai.xi }
1749*53ee8cc1Swenshuai.xi
MDrv_MJPEG_IsFreeFinish(MS_U32 u32Id)1750*53ee8cc1Swenshuai.xi MS_BOOL MDrv_MJPEG_IsFreeFinish(MS_U32 u32Id)
1751*53ee8cc1Swenshuai.xi {
1752*53ee8cc1Swenshuai.xi MS_BOOL bRet = FALSE;
1753*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1754*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1755*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1756*53ee8cc1Swenshuai.xi if((MS_VIRT)pShareMem==MJPEG_U32_MAX)
1757*53ee8cc1Swenshuai.xi {
1758*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("Cannot get pShareMem correctly!!!\n");
1759*53ee8cc1Swenshuai.xi return FALSE;
1760*53ee8cc1Swenshuai.xi }
1761*53ee8cc1Swenshuai.xi MS_U32 u32Timer;
1762*53ee8cc1Swenshuai.xi
1763*53ee8cc1Swenshuai.xi u32Timer = MsOS_GetSystemTime();
1764*53ee8cc1Swenshuai.xi while(1)
1765*53ee8cc1Swenshuai.xi {
1766*53ee8cc1Swenshuai.xi if (MsOS_GetSystemTime()-u32Timer > 1000)
1767*53ee8cc1Swenshuai.xi {
1768*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_ERR("MDrv_MJPEG_IsFreeFinish() timeout...\n");
1769*53ee8cc1Swenshuai.xi break;
1770*53ee8cc1Swenshuai.xi }
1771*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1772*53ee8cc1Swenshuai.xi if(pShareMem->u32FrameBufAddr==0)
1773*53ee8cc1Swenshuai.xi {
1774*53ee8cc1Swenshuai.xi MJPEG_DEBUG_DRV_MSG("[%td]ms, free ok\n", (ptrdiff_t)(MsOS_GetSystemTime()-u32Timer));
1775*53ee8cc1Swenshuai.xi bRet = TRUE;
1776*53ee8cc1Swenshuai.xi break;
1777*53ee8cc1Swenshuai.xi }
1778*53ee8cc1Swenshuai.xi }
1779*53ee8cc1Swenshuai.xi return bRet;
1780*53ee8cc1Swenshuai.xi }
1781*53ee8cc1Swenshuai.xi
1782*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX) && defined(SUPPORT_CMA)
MDrv_MJPEG_GetCMAInformation(MS_U32 u32Id,MS_PHY * u32Addr,MS_U32 * u32Size,MS_BOOL * bAllocDone)1783*53ee8cc1Swenshuai.xi void MDrv_MJPEG_GetCMAInformation(MS_U32 u32Id, MS_PHY* u32Addr,MS_U32* u32Size,MS_BOOL* bAllocDone)
1784*53ee8cc1Swenshuai.xi {
1785*53ee8cc1Swenshuai.xi volatile HVD_ShareMem *pShareMem = NULL;
1786*53ee8cc1Swenshuai.xi pShareMem = (HVD_ShareMem *)MDrv_MJPEG_GetShareMemAddr(u32Id);
1787*53ee8cc1Swenshuai.xi *u32Addr = pShareMem->u32FrameBufAddr;
1788*53ee8cc1Swenshuai.xi *u32Size = pShareMem->u32FrameBufSize;
1789*53ee8cc1Swenshuai.xi *bAllocDone = pShareMem->bCMA_AllocDone;
1790*53ee8cc1Swenshuai.xi
1791*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1792*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
1793*53ee8cc1Swenshuai.xi }
1794*53ee8cc1Swenshuai.xi #endif
1795*53ee8cc1Swenshuai.xi #endif
1796*53ee8cc1Swenshuai.xi #endif
1797*53ee8cc1Swenshuai.xi
1798