1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun * Copyright 2021 Rockchip Electronics Co. LTD
3*4882a593Smuzhiyun *
4*4882a593Smuzhiyun * Licensed under the Apache License, Version 2.0 (the "License");
5*4882a593Smuzhiyun * you may not use this file except in compliance with the License.
6*4882a593Smuzhiyun * You may obtain a copy of the License at
7*4882a593Smuzhiyun *
8*4882a593Smuzhiyun * http://www.apache.org/licenses/LICENSE-2.0
9*4882a593Smuzhiyun *
10*4882a593Smuzhiyun * Unless required by applicable law or agreed to in writing, software
11*4882a593Smuzhiyun * distributed under the License is distributed on an "AS IS" BASIS,
12*4882a593Smuzhiyun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4882a593Smuzhiyun * See the License for the specific language governing permissions and
14*4882a593Smuzhiyun * limitations under the License.
15*4882a593Smuzhiyun */
16*4882a593Smuzhiyun #ifdef __cplusplus
17*4882a593Smuzhiyun #if __cplusplus
18*4882a593Smuzhiyun extern "C" {
19*4882a593Smuzhiyun #endif
20*4882a593Smuzhiyun #endif /* End of #ifdef __cplusplus */
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun #include <stdlib.h>
23*4882a593Smuzhiyun #include <string.h>
24*4882a593Smuzhiyun
25*4882a593Smuzhiyun #include "test_comm_rgn.h"
26*4882a593Smuzhiyun #include "test_comm_bmp.h"
27*4882a593Smuzhiyun #include "test_comm_imgproc.h"
28*4882a593Smuzhiyun
29*4882a593Smuzhiyun #include "rk_mpi_rgn.h"
30*4882a593Smuzhiyun #include "rk_mpi_cal.h"
31*4882a593Smuzhiyun #include "rk_comm_rgn.h"
32*4882a593Smuzhiyun #include "rk_common.h"
33*4882a593Smuzhiyun #include "rk_debug.h"
34*4882a593Smuzhiyun
TEST_RGN_CreateOverlayAndAttach(RGN_HANDLE RgnHandle,RK_U32 u32Width,RK_U32 u32Height,PIXEL_FORMAT_E enFmt,const MPP_CHN_S * pstChn,RK_U32 u32ChnNum)35*4882a593Smuzhiyun RK_S32 TEST_RGN_CreateOverlayAndAttach(
36*4882a593Smuzhiyun RGN_HANDLE RgnHandle, RK_U32 u32Width, RK_U32 u32Height,
37*4882a593Smuzhiyun PIXEL_FORMAT_E enFmt, const MPP_CHN_S *pstChn, RK_U32 u32ChnNum) {
38*4882a593Smuzhiyun RGN_ATTR_S stRgnAttr;
39*4882a593Smuzhiyun RGN_CHN_ATTR_S stRgnChnAttr;
40*4882a593Smuzhiyun RK_S32 s32Ret = RK_SUCCESS;
41*4882a593Smuzhiyun
42*4882a593Smuzhiyun memset(&stRgnAttr, 0, sizeof(RGN_ATTR_S));
43*4882a593Smuzhiyun memset(&stRgnChnAttr, 0, sizeof(RGN_CHN_ATTR_S));
44*4882a593Smuzhiyun
45*4882a593Smuzhiyun stRgnAttr.enType = OVERLAY_RGN;
46*4882a593Smuzhiyun stRgnAttr.unAttr.stOverlay.enPixelFmt = enFmt;
47*4882a593Smuzhiyun stRgnAttr.unAttr.stOverlay.stSize.u32Width = u32Width;
48*4882a593Smuzhiyun stRgnAttr.unAttr.stOverlay.stSize.u32Height = u32Height;
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun s32Ret = RK_MPI_RGN_Create(RgnHandle, &stRgnAttr);
51*4882a593Smuzhiyun if (RK_SUCCESS != s32Ret) {
52*4882a593Smuzhiyun RK_LOGE("RK_MPI_RGN_Create (%d) failed with %#x!", RgnHandle, s32Ret);
53*4882a593Smuzhiyun RK_MPI_RGN_Destroy(RgnHandle);
54*4882a593Smuzhiyun return RK_FAILURE;
55*4882a593Smuzhiyun }
56*4882a593Smuzhiyun
57*4882a593Smuzhiyun for (RK_S32 i = 0; i < u32ChnNum; i++) {
58*4882a593Smuzhiyun stRgnChnAttr.bShow = RK_TRUE;
59*4882a593Smuzhiyun stRgnChnAttr.enType = OVERLAY_RGN;
60*4882a593Smuzhiyun stRgnChnAttr.unChnAttr.stOverlayChn.stPoint.s32X = 0;
61*4882a593Smuzhiyun stRgnChnAttr.unChnAttr.stOverlayChn.stPoint.s32Y = 0;
62*4882a593Smuzhiyun stRgnChnAttr.unChnAttr.stOverlayChn.u32BgAlpha = 0;
63*4882a593Smuzhiyun stRgnChnAttr.unChnAttr.stOverlayChn.u32FgAlpha = 255;
64*4882a593Smuzhiyun stRgnChnAttr.unChnAttr.stOverlayChn.u32Layer = i;
65*4882a593Smuzhiyun s32Ret = RK_MPI_RGN_AttachToChn(RgnHandle, &(pstChn[i]), &stRgnChnAttr);
66*4882a593Smuzhiyun if (RK_SUCCESS != s32Ret) {
67*4882a593Smuzhiyun RK_LOGE("RK_MPI_RGN_AttachToChn (%d) failed with %#x!", RgnHandle, s32Ret);
68*4882a593Smuzhiyun return RK_FAILURE;
69*4882a593Smuzhiyun }
70*4882a593Smuzhiyun }
71*4882a593Smuzhiyun
72*4882a593Smuzhiyun return s32Ret;
73*4882a593Smuzhiyun }
74*4882a593Smuzhiyun
TEST_RGN_CreateCoverAndAttach(RGN_HANDLE RgnHandle,const COVER_CHN_ATTR_S * pstCoverAttr,const MPP_CHN_S * pstChn,RK_U32 u32ChnNum)75*4882a593Smuzhiyun RK_S32 TEST_RGN_CreateCoverAndAttach(
76*4882a593Smuzhiyun RGN_HANDLE RgnHandle, const COVER_CHN_ATTR_S *pstCoverAttr,
77*4882a593Smuzhiyun const MPP_CHN_S *pstChn, RK_U32 u32ChnNum) {
78*4882a593Smuzhiyun RGN_ATTR_S stRgnAttr;
79*4882a593Smuzhiyun RGN_CHN_ATTR_S stRgnChnAttr;
80*4882a593Smuzhiyun RK_S32 s32Ret = RK_SUCCESS;
81*4882a593Smuzhiyun
82*4882a593Smuzhiyun memset(&stRgnAttr, 0, sizeof(RGN_ATTR_S));
83*4882a593Smuzhiyun memset(&stRgnChnAttr, 0, sizeof(RGN_CHN_ATTR_S));
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun stRgnAttr.enType = COVER_RGN;
86*4882a593Smuzhiyun
87*4882a593Smuzhiyun s32Ret = RK_MPI_RGN_Create(RgnHandle, &stRgnAttr);
88*4882a593Smuzhiyun if (RK_SUCCESS != s32Ret) {
89*4882a593Smuzhiyun RK_LOGE("RK_MPI_RGN_Create (%d) failed with %#x!", RgnHandle, s32Ret);
90*4882a593Smuzhiyun RK_MPI_RGN_Destroy(RgnHandle);
91*4882a593Smuzhiyun return RK_FAILURE;
92*4882a593Smuzhiyun }
93*4882a593Smuzhiyun
94*4882a593Smuzhiyun for (RK_S32 i = 0; i < u32ChnNum; i++) {
95*4882a593Smuzhiyun stRgnChnAttr.bShow = RK_TRUE;
96*4882a593Smuzhiyun stRgnChnAttr.enType = COVER_RGN;
97*4882a593Smuzhiyun memcpy(&(stRgnChnAttr.unChnAttr.stCoverChn), pstCoverAttr, sizeof(COVER_CHN_ATTR_S));
98*4882a593Smuzhiyun s32Ret = RK_MPI_RGN_AttachToChn(RgnHandle, &(pstChn[i]), &stRgnChnAttr);
99*4882a593Smuzhiyun if (RK_SUCCESS != s32Ret) {
100*4882a593Smuzhiyun RK_LOGE("RK_MPI_RGN_AttachToChn (%d) failed with %#x!", RgnHandle, s32Ret);
101*4882a593Smuzhiyun return RK_FAILURE;
102*4882a593Smuzhiyun }
103*4882a593Smuzhiyun }
104*4882a593Smuzhiyun
105*4882a593Smuzhiyun return s32Ret;
106*4882a593Smuzhiyun }
107*4882a593Smuzhiyun
TEST_RGN_CreateMosaicAndAttach(RGN_HANDLE RgnHandle,const MOSAIC_CHN_ATTR_S * pstMosaicAttr,const MPP_CHN_S * pstChn,RK_U32 u32ChnNum)108*4882a593Smuzhiyun RK_S32 TEST_RGN_CreateMosaicAndAttach(
109*4882a593Smuzhiyun RGN_HANDLE RgnHandle, const MOSAIC_CHN_ATTR_S *pstMosaicAttr,
110*4882a593Smuzhiyun const MPP_CHN_S *pstChn, RK_U32 u32ChnNum) {
111*4882a593Smuzhiyun RGN_ATTR_S stRgnAttr;
112*4882a593Smuzhiyun RGN_CHN_ATTR_S stRgnChnAttr;
113*4882a593Smuzhiyun RK_S32 s32Ret = RK_SUCCESS;
114*4882a593Smuzhiyun
115*4882a593Smuzhiyun memset(&stRgnAttr, 0, sizeof(RGN_ATTR_S));
116*4882a593Smuzhiyun memset(&stRgnChnAttr, 0, sizeof(RGN_CHN_ATTR_S));
117*4882a593Smuzhiyun
118*4882a593Smuzhiyun stRgnAttr.enType = MOSAIC_RGN;
119*4882a593Smuzhiyun
120*4882a593Smuzhiyun s32Ret = RK_MPI_RGN_Create(RgnHandle, &stRgnAttr);
121*4882a593Smuzhiyun if (RK_SUCCESS != s32Ret) {
122*4882a593Smuzhiyun RK_LOGE("RK_MPI_RGN_Create (%d) failed with %#x!", RgnHandle, s32Ret);
123*4882a593Smuzhiyun RK_MPI_RGN_Destroy(RgnHandle);
124*4882a593Smuzhiyun return RK_FAILURE;
125*4882a593Smuzhiyun }
126*4882a593Smuzhiyun
127*4882a593Smuzhiyun for (RK_S32 i = 0; i < u32ChnNum; i++) {
128*4882a593Smuzhiyun stRgnChnAttr.bShow = RK_TRUE;
129*4882a593Smuzhiyun stRgnChnAttr.enType = MOSAIC_RGN;
130*4882a593Smuzhiyun memcpy(&(stRgnChnAttr.unChnAttr.stMosaicChn), pstMosaicAttr, sizeof(MOSAIC_CHN_ATTR_S));
131*4882a593Smuzhiyun s32Ret = RK_MPI_RGN_AttachToChn(RgnHandle, &(pstChn[i]), &stRgnChnAttr);
132*4882a593Smuzhiyun if (RK_SUCCESS != s32Ret) {
133*4882a593Smuzhiyun RK_LOGE("RK_MPI_RGN_AttachToChn (%d) failed with %#x!", RgnHandle, s32Ret);
134*4882a593Smuzhiyun return RK_FAILURE;
135*4882a593Smuzhiyun }
136*4882a593Smuzhiyun }
137*4882a593Smuzhiyun
138*4882a593Smuzhiyun return s32Ret;
139*4882a593Smuzhiyun }
140*4882a593Smuzhiyun
TEST_RGN_CreateLineAndAttach(RGN_HANDLE RgnHandle,const LINE_CHN_ATTR_S * pstLineAttr,const MPP_CHN_S * pstChn,RK_U32 u32ChnNum)141*4882a593Smuzhiyun RK_S32 TEST_RGN_CreateLineAndAttach(
142*4882a593Smuzhiyun RGN_HANDLE RgnHandle, const LINE_CHN_ATTR_S *pstLineAttr,
143*4882a593Smuzhiyun const MPP_CHN_S *pstChn, RK_U32 u32ChnNum) {
144*4882a593Smuzhiyun RGN_ATTR_S stRgnAttr;
145*4882a593Smuzhiyun RGN_CHN_ATTR_S stRgnChnAttr;
146*4882a593Smuzhiyun RK_S32 s32Ret = RK_SUCCESS;
147*4882a593Smuzhiyun
148*4882a593Smuzhiyun memset(&stRgnAttr, 0, sizeof(RGN_ATTR_S));
149*4882a593Smuzhiyun memset(&stRgnChnAttr, 0, sizeof(RGN_CHN_ATTR_S));
150*4882a593Smuzhiyun
151*4882a593Smuzhiyun stRgnAttr.enType = LINE_RGN;
152*4882a593Smuzhiyun
153*4882a593Smuzhiyun s32Ret = RK_MPI_RGN_Create(RgnHandle, &stRgnAttr);
154*4882a593Smuzhiyun if (RK_SUCCESS != s32Ret) {
155*4882a593Smuzhiyun RK_LOGE("RK_MPI_RGN_Create (%d) failed with %#x!", RgnHandle, s32Ret);
156*4882a593Smuzhiyun RK_MPI_RGN_Destroy(RgnHandle);
157*4882a593Smuzhiyun return RK_FAILURE;
158*4882a593Smuzhiyun }
159*4882a593Smuzhiyun
160*4882a593Smuzhiyun for (RK_S32 i = 0; i < u32ChnNum; i++) {
161*4882a593Smuzhiyun stRgnChnAttr.bShow = RK_TRUE;
162*4882a593Smuzhiyun stRgnChnAttr.enType = LINE_RGN;
163*4882a593Smuzhiyun memcpy(&(stRgnChnAttr.unChnAttr.stLineChn), pstLineAttr, sizeof(LINE_CHN_ATTR_S));
164*4882a593Smuzhiyun s32Ret = RK_MPI_RGN_AttachToChn(RgnHandle, &(pstChn[i]), &stRgnChnAttr);
165*4882a593Smuzhiyun if (RK_SUCCESS != s32Ret) {
166*4882a593Smuzhiyun RK_LOGE("RK_MPI_RGN_AttachToChn (%d) failed with %#x!", RgnHandle, s32Ret);
167*4882a593Smuzhiyun return RK_FAILURE;
168*4882a593Smuzhiyun }
169*4882a593Smuzhiyun }
170*4882a593Smuzhiyun
171*4882a593Smuzhiyun return s32Ret;
172*4882a593Smuzhiyun }
173*4882a593Smuzhiyun
TEST_RGN_DestroyAndDetach(RGN_HANDLE RgnHandle,const MPP_CHN_S * pstChn,RK_U32 u32ChnNum)174*4882a593Smuzhiyun RK_S32 TEST_RGN_DestroyAndDetach(
175*4882a593Smuzhiyun RGN_HANDLE RgnHandle, const MPP_CHN_S *pstChn, RK_U32 u32ChnNum) {
176*4882a593Smuzhiyun RK_S32 s32Ret = RK_SUCCESS;
177*4882a593Smuzhiyun
178*4882a593Smuzhiyun for (RK_S32 i = 0; i < u32ChnNum; i++) {
179*4882a593Smuzhiyun s32Ret = RK_MPI_RGN_DetachFromChn(RgnHandle, &(pstChn[i]));
180*4882a593Smuzhiyun if (RK_SUCCESS != s32Ret) {
181*4882a593Smuzhiyun RK_LOGE("RK_MPI_RGN_DetachFrmChn (%d) failed with %#x!", RgnHandle, s32Ret);
182*4882a593Smuzhiyun return RK_FAILURE;
183*4882a593Smuzhiyun }
184*4882a593Smuzhiyun }
185*4882a593Smuzhiyun
186*4882a593Smuzhiyun s32Ret = RK_MPI_RGN_Destroy(RgnHandle);
187*4882a593Smuzhiyun if (RK_SUCCESS != s32Ret) {
188*4882a593Smuzhiyun RK_LOGE("RK_MPI_RGN_Destroy [%d] failed with %#x", RgnHandle, s32Ret);
189*4882a593Smuzhiyun }
190*4882a593Smuzhiyun
191*4882a593Smuzhiyun return s32Ret;
192*4882a593Smuzhiyun }
193*4882a593Smuzhiyun
TEST_RGN_ChangePosition(RGN_HANDLE RgnHandle,const MPP_CHN_S * pstChn,RK_S32 s32X,RK_S32 s32Y)194*4882a593Smuzhiyun RK_S32 TEST_RGN_ChangePosition(
195*4882a593Smuzhiyun RGN_HANDLE RgnHandle, const MPP_CHN_S *pstChn, RK_S32 s32X, RK_S32 s32Y) {
196*4882a593Smuzhiyun RGN_CHN_ATTR_S stChnAttr;
197*4882a593Smuzhiyun RK_S32 s32Ret = RK_SUCCESS;
198*4882a593Smuzhiyun
199*4882a593Smuzhiyun if (RK_NULL == pstChn) {
200*4882a593Smuzhiyun RK_LOGE("input parameter is null. it is invaild!");
201*4882a593Smuzhiyun return RK_FAILURE;
202*4882a593Smuzhiyun }
203*4882a593Smuzhiyun
204*4882a593Smuzhiyun s32Ret = RK_MPI_RGN_GetDisplayAttr(RgnHandle, pstChn, &stChnAttr);
205*4882a593Smuzhiyun if (RK_SUCCESS != s32Ret) {
206*4882a593Smuzhiyun RK_LOGE("RK_MPI_RGN_GetDisplayAttr (%d)) failed with %#x!", RgnHandle, s32Ret);
207*4882a593Smuzhiyun return RK_FAILURE;
208*4882a593Smuzhiyun }
209*4882a593Smuzhiyun
210*4882a593Smuzhiyun switch (stChnAttr.enType) {
211*4882a593Smuzhiyun case OVERLAY_RGN: {
212*4882a593Smuzhiyun stChnAttr.unChnAttr.stOverlayChn.stPoint.s32X = s32X;
213*4882a593Smuzhiyun stChnAttr.unChnAttr.stOverlayChn.stPoint.s32Y = s32Y;
214*4882a593Smuzhiyun } break;
215*4882a593Smuzhiyun case COVER_RGN: {
216*4882a593Smuzhiyun stChnAttr.unChnAttr.stCoverChn.stRect.s32X = s32X;
217*4882a593Smuzhiyun stChnAttr.unChnAttr.stCoverChn.stRect.s32Y = s32Y;
218*4882a593Smuzhiyun } break;
219*4882a593Smuzhiyun case MOSAIC_RGN: {
220*4882a593Smuzhiyun stChnAttr.unChnAttr.stMosaicChn.stRect.s32X = s32X;
221*4882a593Smuzhiyun stChnAttr.unChnAttr.stMosaicChn.stRect.s32Y = s32Y;
222*4882a593Smuzhiyun } break;
223*4882a593Smuzhiyun case LINE_RGN: {
224*4882a593Smuzhiyun stChnAttr.unChnAttr.stLineChn.stStartPoint.s32X = s32X;
225*4882a593Smuzhiyun stChnAttr.unChnAttr.stLineChn.stStartPoint.s32Y = s32Y;
226*4882a593Smuzhiyun } break;
227*4882a593Smuzhiyun default:
228*4882a593Smuzhiyun break;
229*4882a593Smuzhiyun }
230*4882a593Smuzhiyun s32Ret = RK_MPI_RGN_SetDisplayAttr(RgnHandle, pstChn, &stChnAttr);
231*4882a593Smuzhiyun if (RK_SUCCESS != s32Ret) {
232*4882a593Smuzhiyun RK_LOGE("RK_MPI_RGN_SetDisplayAttr (%d)) failed with %#x!", RgnHandle, s32Ret);
233*4882a593Smuzhiyun return RK_FAILURE;
234*4882a593Smuzhiyun }
235*4882a593Smuzhiyun
236*4882a593Smuzhiyun return s32Ret;
237*4882a593Smuzhiyun }
238*4882a593Smuzhiyun
239*4882a593Smuzhiyun /******************************************************************************
240*4882a593Smuzhiyun * funciton : osd region show or hide
241*4882a593Smuzhiyun ******************************************************************************/
TEST_RGN_ShowOrHide(RGN_HANDLE RgnHandle,const MPP_CHN_S * pstChn,RK_BOOL bShow)242*4882a593Smuzhiyun RK_S32 TEST_RGN_ShowOrHide(RGN_HANDLE RgnHandle, const MPP_CHN_S *pstChn, RK_BOOL bShow) {
243*4882a593Smuzhiyun RGN_CHN_ATTR_S stChnAttr;
244*4882a593Smuzhiyun RK_S32 s32Ret = RK_SUCCESS;
245*4882a593Smuzhiyun
246*4882a593Smuzhiyun if (RK_NULL == pstChn) {
247*4882a593Smuzhiyun RK_LOGE("input parameter is null. it is invaild!");
248*4882a593Smuzhiyun return RK_FAILURE;
249*4882a593Smuzhiyun }
250*4882a593Smuzhiyun
251*4882a593Smuzhiyun s32Ret = RK_MPI_RGN_GetDisplayAttr(RgnHandle, pstChn, &stChnAttr);
252*4882a593Smuzhiyun if (RK_SUCCESS != s32Ret) {
253*4882a593Smuzhiyun RK_LOGE("RK_MPI_RGN_GetDisplayAttr (%d)) failed with %#x!", RgnHandle, s32Ret);
254*4882a593Smuzhiyun return RK_FAILURE;
255*4882a593Smuzhiyun }
256*4882a593Smuzhiyun
257*4882a593Smuzhiyun stChnAttr.bShow = bShow;
258*4882a593Smuzhiyun
259*4882a593Smuzhiyun s32Ret = RK_MPI_RGN_SetDisplayAttr(RgnHandle, pstChn, &stChnAttr);
260*4882a593Smuzhiyun if (RK_SUCCESS != s32Ret) {
261*4882a593Smuzhiyun RK_LOGE("RK_MPI_RGN_SetDisplayAttr (%d)) failed with %#x!", RgnHandle, s32Ret);
262*4882a593Smuzhiyun return RK_FAILURE;
263*4882a593Smuzhiyun }
264*4882a593Smuzhiyun
265*4882a593Smuzhiyun return RK_SUCCESS;
266*4882a593Smuzhiyun }
267*4882a593Smuzhiyun
TEST_RGN_ChangeAlpha(RGN_HANDLE RgnHandle,const MPP_CHN_S * pstChn,RK_U32 u32FgAlpha,RK_U32 u32BgAlpha)268*4882a593Smuzhiyun RK_S32 TEST_RGN_ChangeAlpha(
269*4882a593Smuzhiyun RGN_HANDLE RgnHandle, const MPP_CHN_S *pstChn, RK_U32 u32FgAlpha, RK_U32 u32BgAlpha) {
270*4882a593Smuzhiyun RGN_CHN_ATTR_S stChnAttr;
271*4882a593Smuzhiyun RK_S32 s32Ret = RK_SUCCESS;
272*4882a593Smuzhiyun
273*4882a593Smuzhiyun if (RK_NULL == pstChn) {
274*4882a593Smuzhiyun RK_LOGE("input parameter is null. it is invaild!");
275*4882a593Smuzhiyun return RK_FAILURE;
276*4882a593Smuzhiyun }
277*4882a593Smuzhiyun
278*4882a593Smuzhiyun s32Ret = RK_MPI_RGN_GetDisplayAttr(RgnHandle, pstChn, &stChnAttr);
279*4882a593Smuzhiyun if (RK_SUCCESS != s32Ret) {
280*4882a593Smuzhiyun RK_LOGE("RK_MPI_RGN_GetDisplayAttr (%d)) failed with %#x!", RgnHandle, s32Ret);
281*4882a593Smuzhiyun return RK_FAILURE;
282*4882a593Smuzhiyun }
283*4882a593Smuzhiyun
284*4882a593Smuzhiyun stChnAttr.unChnAttr.stOverlayChn.u32FgAlpha = u32FgAlpha;
285*4882a593Smuzhiyun stChnAttr.unChnAttr.stOverlayChn.u32BgAlpha = u32BgAlpha;
286*4882a593Smuzhiyun s32Ret = RK_MPI_RGN_SetDisplayAttr(RgnHandle, pstChn, &stChnAttr);
287*4882a593Smuzhiyun if (RK_SUCCESS != s32Ret) {
288*4882a593Smuzhiyun RK_LOGE("RK_MPI_RGN_SetDisplayAttr (%d)) failed with %#x!", RgnHandle, s32Ret);
289*4882a593Smuzhiyun return RK_FAILURE;
290*4882a593Smuzhiyun }
291*4882a593Smuzhiyun
292*4882a593Smuzhiyun return RK_SUCCESS;
293*4882a593Smuzhiyun }
294*4882a593Smuzhiyun
TEST_RGN_ChangeColor(RGN_HANDLE RgnHandle,const MPP_CHN_S * pstChn,RK_U32 u32Color)295*4882a593Smuzhiyun RK_S32 TEST_RGN_ChangeColor(
296*4882a593Smuzhiyun RGN_HANDLE RgnHandle, const MPP_CHN_S *pstChn, RK_U32 u32Color) {
297*4882a593Smuzhiyun RGN_CHN_ATTR_S stChnAttr;
298*4882a593Smuzhiyun RK_S32 s32Ret = RK_SUCCESS;
299*4882a593Smuzhiyun
300*4882a593Smuzhiyun if (RK_NULL == pstChn) {
301*4882a593Smuzhiyun RK_LOGE("input parameter is null. it is invaild!");
302*4882a593Smuzhiyun return RK_FAILURE;
303*4882a593Smuzhiyun }
304*4882a593Smuzhiyun
305*4882a593Smuzhiyun s32Ret = RK_MPI_RGN_GetDisplayAttr(RgnHandle, pstChn, &stChnAttr);
306*4882a593Smuzhiyun if (RK_SUCCESS != s32Ret) {
307*4882a593Smuzhiyun RK_LOGE("RK_MPI_RGN_GetDisplayAttr (%d)) failed with %#x!", RgnHandle, s32Ret);
308*4882a593Smuzhiyun return RK_FAILURE;
309*4882a593Smuzhiyun }
310*4882a593Smuzhiyun
311*4882a593Smuzhiyun if (stChnAttr.enType == COVER_RGN) {
312*4882a593Smuzhiyun stChnAttr.unChnAttr.stCoverChn.u32Color = u32Color;
313*4882a593Smuzhiyun } else if (stChnAttr.enType == LINE_RGN) {
314*4882a593Smuzhiyun stChnAttr.unChnAttr.stLineChn.u32Color = u32Color;
315*4882a593Smuzhiyun }
316*4882a593Smuzhiyun s32Ret = RK_MPI_RGN_SetDisplayAttr(RgnHandle, pstChn, &stChnAttr);
317*4882a593Smuzhiyun if (RK_SUCCESS != s32Ret) {
318*4882a593Smuzhiyun RK_LOGE("RK_MPI_RGN_SetDisplayAttr (%d)) failed with %#x!", RgnHandle, s32Ret);
319*4882a593Smuzhiyun return RK_FAILURE;
320*4882a593Smuzhiyun }
321*4882a593Smuzhiyun
322*4882a593Smuzhiyun return RK_SUCCESS;
323*4882a593Smuzhiyun }
324*4882a593Smuzhiyun
TEST_RGN_LoadBmp(const RK_CHAR * filename,BITMAP_S * pstBitmap,PIXEL_FORMAT_E enBmpFmt)325*4882a593Smuzhiyun RK_S32 TEST_RGN_LoadBmp(const RK_CHAR *filename, BITMAP_S *pstBitmap, PIXEL_FORMAT_E enBmpFmt) {
326*4882a593Smuzhiyun OSD_SURFACE_S Surface;
327*4882a593Smuzhiyun OSD_BITMAPFILEHEADER bmpFileHeader;
328*4882a593Smuzhiyun OSD_BITMAPINFO bmpInfo;
329*4882a593Smuzhiyun
330*4882a593Smuzhiyun if (TEST_COMM_GetBmpInfo(filename, &bmpFileHeader, &bmpInfo) < 0) {
331*4882a593Smuzhiyun RK_LOGE("GetBmpInfo err!\n");
332*4882a593Smuzhiyun return RK_FAILURE;
333*4882a593Smuzhiyun }
334*4882a593Smuzhiyun
335*4882a593Smuzhiyun switch (enBmpFmt) {
336*4882a593Smuzhiyun case RK_FMT_ARGB8888:
337*4882a593Smuzhiyun Surface.enColorFmt = OSD_COLOR_FMT_ARGB8888;
338*4882a593Smuzhiyun break;
339*4882a593Smuzhiyun case RK_FMT_BGRA8888:
340*4882a593Smuzhiyun Surface.enColorFmt = OSD_COLOR_FMT_BGRA8888;
341*4882a593Smuzhiyun break;
342*4882a593Smuzhiyun case RK_FMT_ARGB1555:
343*4882a593Smuzhiyun Surface.enColorFmt = OSD_COLOR_FMT_ARGB1555;
344*4882a593Smuzhiyun break;
345*4882a593Smuzhiyun case RK_FMT_BGRA5551:
346*4882a593Smuzhiyun Surface.enColorFmt = OSD_COLOR_FMT_BGRA5551;
347*4882a593Smuzhiyun break;
348*4882a593Smuzhiyun case RK_FMT_ARGB4444:
349*4882a593Smuzhiyun Surface.enColorFmt = OSD_COLOR_FMT_ARGB4444;
350*4882a593Smuzhiyun break;
351*4882a593Smuzhiyun case RK_FMT_BGRA4444:
352*4882a593Smuzhiyun Surface.enColorFmt = OSD_COLOR_FMT_BGRA4444;
353*4882a593Smuzhiyun break;
354*4882a593Smuzhiyun default:
355*4882a593Smuzhiyun return RK_FAILURE;
356*4882a593Smuzhiyun }
357*4882a593Smuzhiyun
358*4882a593Smuzhiyun pstBitmap->pData = malloc(4 * (bmpInfo.bmiHeader.biWidth) * (bmpInfo.bmiHeader.biHeight));
359*4882a593Smuzhiyun
360*4882a593Smuzhiyun if (RK_NULL == pstBitmap->pData) {
361*4882a593Smuzhiyun RK_LOGE("malloc osd memroy err!");
362*4882a593Smuzhiyun return RK_FAILURE;
363*4882a593Smuzhiyun }
364*4882a593Smuzhiyun
365*4882a593Smuzhiyun TEST_COMM_CreateSurfaceByBitmap(filename, &Surface, reinterpret_cast<RK_U8 *>(pstBitmap->pData));
366*4882a593Smuzhiyun
367*4882a593Smuzhiyun pstBitmap->u32Width = Surface.u16Width;
368*4882a593Smuzhiyun pstBitmap->u32Height = Surface.u16Height;
369*4882a593Smuzhiyun pstBitmap->enPixelFormat = (PIXEL_FORMAT_E)enBmpFmt;
370*4882a593Smuzhiyun
371*4882a593Smuzhiyun return RK_SUCCESS;
372*4882a593Smuzhiyun }
373*4882a593Smuzhiyun
TEST_RGN_CreateBmp(RK_U32 u32Width,RK_U32 u32Height,PIXEL_FORMAT_E enBmpFmt,BITMAP_S * pstBitmap)374*4882a593Smuzhiyun RK_S32 TEST_RGN_CreateBmp(RK_U32 u32Width, RK_U32 u32Height, PIXEL_FORMAT_E enBmpFmt, BITMAP_S *pstBitmap) {
375*4882a593Smuzhiyun RK_S32 s32Ret = RK_SUCCESS;
376*4882a593Smuzhiyun PIC_BUF_ATTR_S stBuffAttr;
377*4882a593Smuzhiyun MB_PIC_CAL_S stPicCal;
378*4882a593Smuzhiyun RK_U8 *pu8Data = RK_NULL;
379*4882a593Smuzhiyun
380*4882a593Smuzhiyun stBuffAttr.u32Width = u32Width;
381*4882a593Smuzhiyun stBuffAttr.u32Height = u32Height;
382*4882a593Smuzhiyun stBuffAttr.enPixelFormat = enBmpFmt;
383*4882a593Smuzhiyun stBuffAttr.enCompMode = COMPRESS_MODE_NONE;
384*4882a593Smuzhiyun s32Ret = RK_MPI_CAL_COMM_GetPicBufferSize(&stBuffAttr, &stPicCal);
385*4882a593Smuzhiyun if (RK_SUCCESS != s32Ret) {
386*4882a593Smuzhiyun RK_LOGE("RK_MPI_CAL_COMM_GetPicBufferSize failed with %#x!", s32Ret);
387*4882a593Smuzhiyun return s32Ret;
388*4882a593Smuzhiyun }
389*4882a593Smuzhiyun
390*4882a593Smuzhiyun pu8Data = (RK_U8 *)malloc(stPicCal.u32MBSize);
391*4882a593Smuzhiyun
392*4882a593Smuzhiyun // in order to diff raw map data, set 64 frame cnt
393*4882a593Smuzhiyun s32Ret = TEST_COMM_FillImage(pu8Data, u32Width, u32Height,
394*4882a593Smuzhiyun u32Width, u32Height, enBmpFmt, 64);
395*4882a593Smuzhiyun if (RK_SUCCESS != s32Ret) {
396*4882a593Smuzhiyun RK_LOGE("TEST_COMM_FillImage failed with %#x!", s32Ret);
397*4882a593Smuzhiyun return s32Ret;
398*4882a593Smuzhiyun }
399*4882a593Smuzhiyun
400*4882a593Smuzhiyun pstBitmap->u32Width = u32Width;
401*4882a593Smuzhiyun pstBitmap->u32Height = u32Height;
402*4882a593Smuzhiyun pstBitmap->enPixelFormat = enBmpFmt;
403*4882a593Smuzhiyun pstBitmap->pData = (RK_VOID *)pu8Data;
404*4882a593Smuzhiyun
405*4882a593Smuzhiyun return s32Ret;
406*4882a593Smuzhiyun }
407*4882a593Smuzhiyun
408*4882a593Smuzhiyun #ifdef __cplusplus
409*4882a593Smuzhiyun #if __cplusplus
410*4882a593Smuzhiyun }
411*4882a593Smuzhiyun #endif
412*4882a593Smuzhiyun #endif /* End of #ifdef __cplusplus */
413