xref: /OK3568_Linux_fs/external/linux-rga/core/RgaUtils.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright (C) 2016 Rockchip Electronics Co., Ltd.
3*4882a593Smuzhiyun  * Authors:
4*4882a593Smuzhiyun  *  Zhiqin Wei <wzq@rock-chips.com>
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * Licensed under the Apache License, Version 2.0 (the "License");
7*4882a593Smuzhiyun  * you may not use this file except in compliance with the License.
8*4882a593Smuzhiyun  * You may obtain a copy of the License at
9*4882a593Smuzhiyun  *
10*4882a593Smuzhiyun  *      http://www.apache.org/licenses/LICENSE-2.0
11*4882a593Smuzhiyun  *
12*4882a593Smuzhiyun  * Unless required by applicable law or agreed to in writing, software
13*4882a593Smuzhiyun  * distributed under the License is distributed on an "AS IS" BASIS,
14*4882a593Smuzhiyun  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15*4882a593Smuzhiyun  * See the License for the specific language governing permissions and
16*4882a593Smuzhiyun  * limitations under the License.
17*4882a593Smuzhiyun  */
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun #include <stdint.h>
20*4882a593Smuzhiyun #include <stdlib.h>
21*4882a593Smuzhiyun #include <stdio.h>
22*4882a593Smuzhiyun #include <string.h>
23*4882a593Smuzhiyun #include <math.h>
24*4882a593Smuzhiyun #include <fcntl.h>
25*4882a593Smuzhiyun #include <signal.h>
26*4882a593Smuzhiyun #include <time.h>
27*4882a593Smuzhiyun #include <sys/types.h>
28*4882a593Smuzhiyun #include <errno.h>
29*4882a593Smuzhiyun #include <time.h>
30*4882a593Smuzhiyun #include <unistd.h>
31*4882a593Smuzhiyun #include <sys/types.h>
32*4882a593Smuzhiyun #include <sys/mman.h>
33*4882a593Smuzhiyun #include <linux/stddef.h>
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun #include "RgaUtils.h"
36*4882a593Smuzhiyun #include "RockchipRga.h"
37*4882a593Smuzhiyun #include "core/NormalRga.h"
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun struct format_table_entry {
40*4882a593Smuzhiyun     int format;
41*4882a593Smuzhiyun     const char *name;
42*4882a593Smuzhiyun };
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun const struct format_table_entry format_table[] = {
45*4882a593Smuzhiyun     { RK_FORMAT_RGBA_8888,          "rgba8888" },
46*4882a593Smuzhiyun     { RK_FORMAT_RGBX_8888,          "rgbx8888" },
47*4882a593Smuzhiyun     { RK_FORMAT_RGB_888,            "rgb888" },
48*4882a593Smuzhiyun     { RK_FORMAT_RGB_565,            "rgb565" },
49*4882a593Smuzhiyun     { RK_FORMAT_RGBA_5551,          "rgba5551" },
50*4882a593Smuzhiyun     { RK_FORMAT_RGBA_4444,          "rgba4444" },
51*4882a593Smuzhiyun     { RK_FORMAT_BGRA_8888,          "bgra8888" },
52*4882a593Smuzhiyun     { RK_FORMAT_BGRX_8888,          "bgrx8888" },
53*4882a593Smuzhiyun     { RK_FORMAT_BGR_888,            "bgr888" },
54*4882a593Smuzhiyun     { RK_FORMAT_BGR_565,            "bgr565" },
55*4882a593Smuzhiyun     { RK_FORMAT_BGRA_5551,          "bgra5551" },
56*4882a593Smuzhiyun     { RK_FORMAT_BGRA_4444,          "bgra4444" },
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun     { RK_FORMAT_YCbCr_422_SP,       "cbcr422sp" },
59*4882a593Smuzhiyun     { RK_FORMAT_YCbCr_422_P,        "cbcr422p" },
60*4882a593Smuzhiyun     { RK_FORMAT_YCbCr_420_SP,       "nv12" },
61*4882a593Smuzhiyun     { RK_FORMAT_YCbCr_420_P,        "cbcr420p" },
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun     { RK_FORMAT_YCrCb_422_SP,       "crcb422sp" },
64*4882a593Smuzhiyun     { RK_FORMAT_YCrCb_422_P,        "crcb422p" },
65*4882a593Smuzhiyun     { RK_FORMAT_YCrCb_420_SP,       "crcb420sp" },
66*4882a593Smuzhiyun     { RK_FORMAT_YCrCb_420_P,        "crcb420p" },
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun     { RK_FORMAT_BPP1,               "bpp1" },
69*4882a593Smuzhiyun     { RK_FORMAT_BPP2,               "bpp2" },
70*4882a593Smuzhiyun     { RK_FORMAT_BPP4,               "bpp4" },
71*4882a593Smuzhiyun     { RK_FORMAT_BPP8,               "bpp8" },
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun     { RK_FORMAT_Y4,                 "y4" },
74*4882a593Smuzhiyun     { RK_FORMAT_YCbCr_400,          "cbcr400" },
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun     { RK_FORMAT_BGRX_8888,          "bgrx8888" },
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun     { RK_FORMAT_YVYU_422,           "yvyu422" },
79*4882a593Smuzhiyun     { RK_FORMAT_YVYU_420,           "yvyuv420" },
80*4882a593Smuzhiyun     { RK_FORMAT_VYUY_422,           "vyuy422" },
81*4882a593Smuzhiyun     { RK_FORMAT_VYUY_420,           "vyuy420" },
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun     { RK_FORMAT_YUYV_422,           "yuyv422" },
84*4882a593Smuzhiyun     { RK_FORMAT_YUYV_420,           "yuyv420" },
85*4882a593Smuzhiyun     { RK_FORMAT_UYVY_422,           "uyvy422" },
86*4882a593Smuzhiyun     { RK_FORMAT_UYVY_420,           "uyvy420" },
87*4882a593Smuzhiyun 
88*4882a593Smuzhiyun     { RK_FORMAT_YCbCr_420_SP_10B,   "nv12_10" },
89*4882a593Smuzhiyun     { RK_FORMAT_YCrCb_420_SP_10B,   "crcb420sp_10" },
90*4882a593Smuzhiyun     { RK_FORMAT_YCbCr_422_10b_SP,   "cbcr422_10b" },
91*4882a593Smuzhiyun     { RK_FORMAT_YCrCb_422_10b_SP,   "crcb422_10b" },
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun     { RK_FORMAT_BGR_565,            "bgr565" },
94*4882a593Smuzhiyun     { RK_FORMAT_BGRA_5551,          "bgra5551" },
95*4882a593Smuzhiyun     { RK_FORMAT_BGRA_4444,          "bgra4444" },
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun     { RK_FORMAT_ARGB_8888,          "argb8888" },
98*4882a593Smuzhiyun     { RK_FORMAT_XRGB_8888,          "xrgb8888" },
99*4882a593Smuzhiyun     { RK_FORMAT_ARGB_5551,          "argb5551" },
100*4882a593Smuzhiyun     { RK_FORMAT_ARGB_4444,          "argb4444" },
101*4882a593Smuzhiyun     { RK_FORMAT_ABGR_8888,          "abgr8888" },
102*4882a593Smuzhiyun     { RK_FORMAT_XBGR_8888,          "xbgr8888" },
103*4882a593Smuzhiyun     { RK_FORMAT_ABGR_5551,          "abgr5551" },
104*4882a593Smuzhiyun     { RK_FORMAT_ABGR_4444,          "abgr4444" },
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun     { RK_FORMAT_RGBA2BPP,           "rgba2bpp" },
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun     { RK_FORMAT_UNKNOWN,            "unknown" }
109*4882a593Smuzhiyun };
110*4882a593Smuzhiyun 
translate_format_str(int format)111*4882a593Smuzhiyun const char *translate_format_str(int format) {
112*4882a593Smuzhiyun     format = RkRgaGetRgaFormat(format);
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun     for (size_t i = 0; i < sizeof(format_table) / sizeof(format_table[0]); i++)
115*4882a593Smuzhiyun         if (format_table[i].format == format)
116*4882a593Smuzhiyun             return format_table[i].name;
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun     return "unknown";
119*4882a593Smuzhiyun }
120*4882a593Smuzhiyun 
get_string_by_format(char * value,int format)121*4882a593Smuzhiyun int get_string_by_format(char *value, int format) {
122*4882a593Smuzhiyun     const char *name = NULL;
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun     if (!value)
125*4882a593Smuzhiyun         return -EINVAL;
126*4882a593Smuzhiyun 
127*4882a593Smuzhiyun     name = translate_format_str(format);
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun     if (strcmp(name, "unknown") != 0) {
130*4882a593Smuzhiyun         memcpy(value, name, strlen(name) + 1);
131*4882a593Smuzhiyun     } else {
132*4882a593Smuzhiyun         printf("Is unsupport format now, please fix");
133*4882a593Smuzhiyun         return -EINVAL;
134*4882a593Smuzhiyun     }
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun     return 0;
137*4882a593Smuzhiyun }
138*4882a593Smuzhiyun 
get_bpp_from_format(int format)139*4882a593Smuzhiyun float get_bpp_from_format(int format) {
140*4882a593Smuzhiyun     float bpp = 0;
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun #ifdef LINUX
143*4882a593Smuzhiyun     if (!(format & 0xFF00 || format == 0)) {
144*4882a593Smuzhiyun         format = RkRgaCompatibleFormat(format);
145*4882a593Smuzhiyun     }
146*4882a593Smuzhiyun #endif
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun     switch (format) {
149*4882a593Smuzhiyun #ifdef ANDROID
150*4882a593Smuzhiyun         case HAL_PIXEL_FORMAT_RGB_565:
151*4882a593Smuzhiyun             bpp = 2;
152*4882a593Smuzhiyun             break;
153*4882a593Smuzhiyun         case HAL_PIXEL_FORMAT_RGB_888:
154*4882a593Smuzhiyun             bpp = 3;
155*4882a593Smuzhiyun             break;
156*4882a593Smuzhiyun         case HAL_PIXEL_FORMAT_RGBA_8888:
157*4882a593Smuzhiyun         case HAL_PIXEL_FORMAT_RGBX_8888:
158*4882a593Smuzhiyun         case HAL_PIXEL_FORMAT_BGRA_8888:
159*4882a593Smuzhiyun             bpp = 4;
160*4882a593Smuzhiyun             break;
161*4882a593Smuzhiyun         case HAL_PIXEL_FORMAT_YCrCb_420_SP:
162*4882a593Smuzhiyun         case HAL_PIXEL_FORMAT_YCrCb_NV12:
163*4882a593Smuzhiyun         case HAL_PIXEL_FORMAT_YCrCb_NV12_VIDEO:
164*4882a593Smuzhiyun             bpp = 1.5;
165*4882a593Smuzhiyun             break;
166*4882a593Smuzhiyun         case HAL_PIXEL_FORMAT_YCrCb_NV12_10:
167*4882a593Smuzhiyun             /*RK encoder requires alignment of odd multiples of 256.*/
168*4882a593Smuzhiyun             /*Here bpp=2 guarantee to read complete data.*/
169*4882a593Smuzhiyun             bpp = 2;
170*4882a593Smuzhiyun             break;
171*4882a593Smuzhiyun #endif
172*4882a593Smuzhiyun         case RK_FORMAT_RGBA2BPP:
173*4882a593Smuzhiyun             return 0.25;
174*4882a593Smuzhiyun         case RK_FORMAT_Y4:
175*4882a593Smuzhiyun             bpp = 0.5;
176*4882a593Smuzhiyun             break;
177*4882a593Smuzhiyun         case RK_FORMAT_BPP1:
178*4882a593Smuzhiyun         case RK_FORMAT_BPP2:
179*4882a593Smuzhiyun         case RK_FORMAT_BPP4:
180*4882a593Smuzhiyun         case RK_FORMAT_BPP8:
181*4882a593Smuzhiyun         case RK_FORMAT_YCbCr_400:
182*4882a593Smuzhiyun             bpp = 1;
183*4882a593Smuzhiyun             break;
184*4882a593Smuzhiyun         case RK_FORMAT_YCbCr_420_SP:
185*4882a593Smuzhiyun         case RK_FORMAT_YCbCr_420_P:
186*4882a593Smuzhiyun         case RK_FORMAT_YCrCb_420_P:
187*4882a593Smuzhiyun         case RK_FORMAT_YCrCb_420_SP:
188*4882a593Smuzhiyun             bpp = 1.5;
189*4882a593Smuzhiyun             break;
190*4882a593Smuzhiyun         case RK_FORMAT_RGB_565:
191*4882a593Smuzhiyun         case RK_FORMAT_RGBA_5551:
192*4882a593Smuzhiyun         case RK_FORMAT_RGBA_4444:
193*4882a593Smuzhiyun         case RK_FORMAT_BGR_565:
194*4882a593Smuzhiyun         case RK_FORMAT_BGRA_5551:
195*4882a593Smuzhiyun         case RK_FORMAT_BGRA_4444:
196*4882a593Smuzhiyun         case RK_FORMAT_ARGB_5551:
197*4882a593Smuzhiyun         case RK_FORMAT_ARGB_4444:
198*4882a593Smuzhiyun         case RK_FORMAT_ABGR_5551:
199*4882a593Smuzhiyun         case RK_FORMAT_ABGR_4444:
200*4882a593Smuzhiyun         case RK_FORMAT_YCbCr_422_SP:
201*4882a593Smuzhiyun         case RK_FORMAT_YCbCr_422_P:
202*4882a593Smuzhiyun         case RK_FORMAT_YCrCb_422_SP:
203*4882a593Smuzhiyun         case RK_FORMAT_YCrCb_422_P:
204*4882a593Smuzhiyun         /* yuyv */
205*4882a593Smuzhiyun         case RK_FORMAT_YVYU_422:
206*4882a593Smuzhiyun         case RK_FORMAT_VYUY_422:
207*4882a593Smuzhiyun         case RK_FORMAT_YUYV_422:
208*4882a593Smuzhiyun         case RK_FORMAT_UYVY_422:
209*4882a593Smuzhiyun         case RK_FORMAT_YVYU_420:
210*4882a593Smuzhiyun         case RK_FORMAT_VYUY_420:
211*4882a593Smuzhiyun         case RK_FORMAT_YUYV_420:
212*4882a593Smuzhiyun         case RK_FORMAT_UYVY_420:
213*4882a593Smuzhiyun             bpp = 2;
214*4882a593Smuzhiyun             break;
215*4882a593Smuzhiyun         /*RK encoder requires alignment of odd multiples of 256.*/
216*4882a593Smuzhiyun         /*Here bpp=2 guarantee to read complete data.*/
217*4882a593Smuzhiyun         case RK_FORMAT_YCbCr_420_SP_10B:
218*4882a593Smuzhiyun         case RK_FORMAT_YCrCb_420_SP_10B:
219*4882a593Smuzhiyun             bpp = 2;
220*4882a593Smuzhiyun             break;
221*4882a593Smuzhiyun         case RK_FORMAT_YCbCr_422_10b_SP:
222*4882a593Smuzhiyun         case RK_FORMAT_YCrCb_422_10b_SP:
223*4882a593Smuzhiyun             bpp = 2.5;
224*4882a593Smuzhiyun             break;
225*4882a593Smuzhiyun         case RK_FORMAT_BGR_888:
226*4882a593Smuzhiyun         case RK_FORMAT_RGB_888:
227*4882a593Smuzhiyun             bpp = 3;
228*4882a593Smuzhiyun             break;
229*4882a593Smuzhiyun         case RK_FORMAT_RGBA_8888:
230*4882a593Smuzhiyun         case RK_FORMAT_RGBX_8888:
231*4882a593Smuzhiyun         case RK_FORMAT_BGRA_8888:
232*4882a593Smuzhiyun         case RK_FORMAT_BGRX_8888:
233*4882a593Smuzhiyun         case RK_FORMAT_ARGB_8888:
234*4882a593Smuzhiyun         case RK_FORMAT_XRGB_8888:
235*4882a593Smuzhiyun         case RK_FORMAT_ABGR_8888:
236*4882a593Smuzhiyun         case RK_FORMAT_XBGR_8888:
237*4882a593Smuzhiyun             bpp = 4;
238*4882a593Smuzhiyun             break;
239*4882a593Smuzhiyun         default:
240*4882a593Smuzhiyun             printf("Is unsupport format now, please fix \n");
241*4882a593Smuzhiyun             return 0;
242*4882a593Smuzhiyun     }
243*4882a593Smuzhiyun 
244*4882a593Smuzhiyun     return bpp;
245*4882a593Smuzhiyun }
246*4882a593Smuzhiyun 
get_perPixel_stride_from_format(int format)247*4882a593Smuzhiyun int get_perPixel_stride_from_format(int format) {
248*4882a593Smuzhiyun     #ifdef LINUX
249*4882a593Smuzhiyun     if (!(format & 0xFF00 || format == 0)) {
250*4882a593Smuzhiyun         format = RkRgaCompatibleFormat(format);
251*4882a593Smuzhiyun     }
252*4882a593Smuzhiyun #endif
253*4882a593Smuzhiyun 
254*4882a593Smuzhiyun     switch (format) {
255*4882a593Smuzhiyun #ifdef ANDROID
256*4882a593Smuzhiyun         case HAL_PIXEL_FORMAT_RGB_565:
257*4882a593Smuzhiyun             return (2 * 8);
258*4882a593Smuzhiyun         case HAL_PIXEL_FORMAT_RGB_888:
259*4882a593Smuzhiyun             return (3 * 8);
260*4882a593Smuzhiyun         case HAL_PIXEL_FORMAT_RGBA_8888:
261*4882a593Smuzhiyun         case HAL_PIXEL_FORMAT_RGBX_8888:
262*4882a593Smuzhiyun         case HAL_PIXEL_FORMAT_BGRA_8888:
263*4882a593Smuzhiyun             return  (4 * 8);
264*4882a593Smuzhiyun         case HAL_PIXEL_FORMAT_YCrCb_420_SP:
265*4882a593Smuzhiyun         case HAL_PIXEL_FORMAT_YCrCb_NV12:
266*4882a593Smuzhiyun             return  (1 * 8);
267*4882a593Smuzhiyun         case HAL_PIXEL_FORMAT_YCrCb_NV12_10:
268*4882a593Smuzhiyun             return  (1 * 10);
269*4882a593Smuzhiyun #endif
270*4882a593Smuzhiyun         case RK_FORMAT_RGBA2BPP:
271*4882a593Smuzhiyun             return 2;
272*4882a593Smuzhiyun         case RK_FORMAT_Y4:
273*4882a593Smuzhiyun             return  0.5 * 8;
274*4882a593Smuzhiyun         case RK_FORMAT_BPP1:
275*4882a593Smuzhiyun         case RK_FORMAT_BPP2:
276*4882a593Smuzhiyun         case RK_FORMAT_BPP4:
277*4882a593Smuzhiyun         case RK_FORMAT_BPP8:
278*4882a593Smuzhiyun         case RK_FORMAT_YCbCr_400:
279*4882a593Smuzhiyun         case RK_FORMAT_YCbCr_420_SP:
280*4882a593Smuzhiyun         case RK_FORMAT_YCbCr_420_P:
281*4882a593Smuzhiyun         case RK_FORMAT_YCrCb_420_P:
282*4882a593Smuzhiyun         case RK_FORMAT_YCrCb_420_SP:
283*4882a593Smuzhiyun         case RK_FORMAT_YCbCr_422_SP:
284*4882a593Smuzhiyun         case RK_FORMAT_YCbCr_422_P:
285*4882a593Smuzhiyun         case RK_FORMAT_YCrCb_422_SP:
286*4882a593Smuzhiyun         case RK_FORMAT_YCrCb_422_P:
287*4882a593Smuzhiyun             return  (1 * 8);
288*4882a593Smuzhiyun         case RK_FORMAT_YCbCr_420_SP_10B:
289*4882a593Smuzhiyun         case RK_FORMAT_YCrCb_420_SP_10B:
290*4882a593Smuzhiyun         case RK_FORMAT_YCbCr_422_10b_SP:
291*4882a593Smuzhiyun         case RK_FORMAT_YCrCb_422_10b_SP:
292*4882a593Smuzhiyun             return  (1 * 10);
293*4882a593Smuzhiyun         case RK_FORMAT_RGB_565:
294*4882a593Smuzhiyun         case RK_FORMAT_RGBA_5551:
295*4882a593Smuzhiyun         case RK_FORMAT_RGBA_4444:
296*4882a593Smuzhiyun         case RK_FORMAT_BGR_565:
297*4882a593Smuzhiyun         case RK_FORMAT_BGRA_5551:
298*4882a593Smuzhiyun         case RK_FORMAT_BGRA_4444:
299*4882a593Smuzhiyun         case RK_FORMAT_ARGB_5551:
300*4882a593Smuzhiyun         case RK_FORMAT_ARGB_4444:
301*4882a593Smuzhiyun         case RK_FORMAT_ABGR_5551:
302*4882a593Smuzhiyun         case RK_FORMAT_ABGR_4444:
303*4882a593Smuzhiyun         /* yuyv */
304*4882a593Smuzhiyun         case RK_FORMAT_YVYU_422:
305*4882a593Smuzhiyun         case RK_FORMAT_VYUY_422:
306*4882a593Smuzhiyun         case RK_FORMAT_YUYV_422:
307*4882a593Smuzhiyun         case RK_FORMAT_UYVY_422:
308*4882a593Smuzhiyun         case RK_FORMAT_YVYU_420:
309*4882a593Smuzhiyun         case RK_FORMAT_VYUY_420:
310*4882a593Smuzhiyun         case RK_FORMAT_YUYV_420:
311*4882a593Smuzhiyun         case RK_FORMAT_UYVY_420:
312*4882a593Smuzhiyun             return  (2 * 8);
313*4882a593Smuzhiyun         case RK_FORMAT_BGR_888:
314*4882a593Smuzhiyun         case RK_FORMAT_RGB_888:
315*4882a593Smuzhiyun             return  (3 * 8);
316*4882a593Smuzhiyun         case RK_FORMAT_RGBA_8888:
317*4882a593Smuzhiyun         case RK_FORMAT_RGBX_8888:
318*4882a593Smuzhiyun         case RK_FORMAT_BGRA_8888:
319*4882a593Smuzhiyun         case RK_FORMAT_BGRX_8888:
320*4882a593Smuzhiyun         case RK_FORMAT_ARGB_8888:
321*4882a593Smuzhiyun         case RK_FORMAT_XRGB_8888:
322*4882a593Smuzhiyun         case RK_FORMAT_ABGR_8888:
323*4882a593Smuzhiyun         case RK_FORMAT_XBGR_8888:
324*4882a593Smuzhiyun             return  (4 * 8);
325*4882a593Smuzhiyun         default:
326*4882a593Smuzhiyun             printf("Is unsupport format now, please fix \n");
327*4882a593Smuzhiyun             return 0;
328*4882a593Smuzhiyun     }
329*4882a593Smuzhiyun }
330*4882a593Smuzhiyun 
get_buf_size_by_w_h_f(int w,int h,int f)331*4882a593Smuzhiyun int get_buf_size_by_w_h_f(int w, int h, int f) {
332*4882a593Smuzhiyun     float bpp = get_bpp_from_format(f);
333*4882a593Smuzhiyun     int size = 0;
334*4882a593Smuzhiyun 
335*4882a593Smuzhiyun     size = (int)w * h * bpp;
336*4882a593Smuzhiyun     return size;
337*4882a593Smuzhiyun }
338*4882a593Smuzhiyun 
get_buf_from_file(void * buf,int f,int sw,int sh,int index)339*4882a593Smuzhiyun int get_buf_from_file(void *buf, int f, int sw, int sh, int index) {
340*4882a593Smuzhiyun #ifdef ANDROID
341*4882a593Smuzhiyun     const char *inputFilePath = "/data/in%dw%d-h%d-%s.bin";
342*4882a593Smuzhiyun #endif
343*4882a593Smuzhiyun 
344*4882a593Smuzhiyun #ifdef LINUX
345*4882a593Smuzhiyun     const char *inputFilePath = "/usr/data/in%dw%d-h%d-%s.bin";
346*4882a593Smuzhiyun #endif
347*4882a593Smuzhiyun 
348*4882a593Smuzhiyun     char filePath[100];
349*4882a593Smuzhiyun 
350*4882a593Smuzhiyun     snprintf(filePath, 100, inputFilePath, index, sw, sh, translate_format_str(f));
351*4882a593Smuzhiyun 
352*4882a593Smuzhiyun     FILE *file = fopen(filePath, "rb");
353*4882a593Smuzhiyun     if (!file) {
354*4882a593Smuzhiyun         fprintf(stderr, "Could not open %s\n", filePath);
355*4882a593Smuzhiyun         return -EINVAL;
356*4882a593Smuzhiyun     }
357*4882a593Smuzhiyun     fread(buf, get_buf_size_by_w_h_f(sw, sh, f), 1, file);
358*4882a593Smuzhiyun     fclose(file);
359*4882a593Smuzhiyun 
360*4882a593Smuzhiyun     return 0;
361*4882a593Smuzhiyun }
362*4882a593Smuzhiyun 
get_buf_from_file_FBC(void * buf,int f,int sw,int sh,int index)363*4882a593Smuzhiyun int get_buf_from_file_FBC(void *buf, int f, int sw, int sh, int index) {
364*4882a593Smuzhiyun #ifdef ANDROID
365*4882a593Smuzhiyun     const char *inputFilePath = "/data/in%dw%d-h%d-%s-afbc.bin";
366*4882a593Smuzhiyun #endif
367*4882a593Smuzhiyun 
368*4882a593Smuzhiyun #ifdef LINUX
369*4882a593Smuzhiyun     const char *inputFilePath = "/usr/data/in%dw%d-h%d-%s-afbc.bin";
370*4882a593Smuzhiyun #endif
371*4882a593Smuzhiyun 
372*4882a593Smuzhiyun     char filePath[100];
373*4882a593Smuzhiyun     char fstring[30];
374*4882a593Smuzhiyun 
375*4882a593Smuzhiyun     get_string_by_format(fstring, f);
376*4882a593Smuzhiyun     snprintf(filePath, 100, inputFilePath, index, sw, sh, fstring);
377*4882a593Smuzhiyun 
378*4882a593Smuzhiyun     FILE *file = fopen(filePath, "rb");
379*4882a593Smuzhiyun     if (!file) {
380*4882a593Smuzhiyun         fprintf(stderr, "Could not open %s\n", filePath);
381*4882a593Smuzhiyun         return -EINVAL;
382*4882a593Smuzhiyun     }
383*4882a593Smuzhiyun     fread(buf, get_buf_size_by_w_h_f(sw, sh, f) * 1.5, 1, file);
384*4882a593Smuzhiyun     fclose(file);
385*4882a593Smuzhiyun 
386*4882a593Smuzhiyun     return 0;
387*4882a593Smuzhiyun }
388*4882a593Smuzhiyun 
output_buf_data_to_file(void * buf,int f,int sw,int sh,int index)389*4882a593Smuzhiyun int output_buf_data_to_file(void *buf, int f, int sw, int sh, int index) {
390*4882a593Smuzhiyun #ifdef ANDROID
391*4882a593Smuzhiyun     const char *outputFilePath = "/data/out%dw%d-h%d-%s.bin";
392*4882a593Smuzhiyun #endif
393*4882a593Smuzhiyun 
394*4882a593Smuzhiyun #ifdef LINUX
395*4882a593Smuzhiyun     const char *outputFilePath = "/usr/data/out%dw%d-h%d-%s.bin";
396*4882a593Smuzhiyun #endif
397*4882a593Smuzhiyun 
398*4882a593Smuzhiyun     char filePath[100];
399*4882a593Smuzhiyun 
400*4882a593Smuzhiyun     snprintf(filePath, 100, outputFilePath, index, sw, sh, translate_format_str(f));
401*4882a593Smuzhiyun 
402*4882a593Smuzhiyun     FILE *file = fopen(filePath, "wb+");
403*4882a593Smuzhiyun     if (!file) {
404*4882a593Smuzhiyun         fprintf(stderr, "Could not open %s\n", filePath);
405*4882a593Smuzhiyun         return false;
406*4882a593Smuzhiyun     } else
407*4882a593Smuzhiyun         fprintf(stderr, "open %s and write ok\n", filePath);
408*4882a593Smuzhiyun     fwrite(buf, get_buf_size_by_w_h_f(sw, sh, f), 1, file);
409*4882a593Smuzhiyun     fclose(file);
410*4882a593Smuzhiyun 
411*4882a593Smuzhiyun     return 0;
412*4882a593Smuzhiyun }
413*4882a593Smuzhiyun 
output_buf_data_to_file_FBC(void * buf,int f,int sw,int sh,int index)414*4882a593Smuzhiyun int output_buf_data_to_file_FBC(void *buf, int f, int sw, int sh, int index) {
415*4882a593Smuzhiyun #ifdef ANDROID
416*4882a593Smuzhiyun     const char *outputFilePath = "/data/out%dw%d-h%d-%s-afbc.bin";
417*4882a593Smuzhiyun #endif
418*4882a593Smuzhiyun 
419*4882a593Smuzhiyun #ifdef LINUX
420*4882a593Smuzhiyun     const char *outputFilePath = "/usr/data/out%dw%d-h%d-%s-afbc.bin";
421*4882a593Smuzhiyun #endif
422*4882a593Smuzhiyun 
423*4882a593Smuzhiyun     char filePath[100];
424*4882a593Smuzhiyun     char fstring[30];
425*4882a593Smuzhiyun 
426*4882a593Smuzhiyun     get_string_by_format(fstring, f);
427*4882a593Smuzhiyun     snprintf(filePath, 100, outputFilePath, index, sw, sh, fstring);
428*4882a593Smuzhiyun 
429*4882a593Smuzhiyun     FILE *file = fopen(filePath, "wb+");
430*4882a593Smuzhiyun     if (!file) {
431*4882a593Smuzhiyun         fprintf(stderr, "Could not open %s\n", filePath);
432*4882a593Smuzhiyun         return false;
433*4882a593Smuzhiyun     } else
434*4882a593Smuzhiyun         fprintf(stderr, "open %s and write ok\n", filePath);
435*4882a593Smuzhiyun     fwrite(buf, get_buf_size_by_w_h_f(sw, sh, f) * 1.5, 1, file);
436*4882a593Smuzhiyun     fclose(file);
437*4882a593Smuzhiyun 
438*4882a593Smuzhiyun     return 0;
439*4882a593Smuzhiyun }
440