1*495ae853SAndroid Build Coastguard Worker /******************************************************************************
2*495ae853SAndroid Build Coastguard Worker *
3*495ae853SAndroid Build Coastguard Worker * Copyright (C) 2022 The Android Open Source Project
4*495ae853SAndroid Build Coastguard Worker *
5*495ae853SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
6*495ae853SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
7*495ae853SAndroid Build Coastguard Worker * You may obtain a copy of the License at:
8*495ae853SAndroid Build Coastguard Worker *
9*495ae853SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
10*495ae853SAndroid Build Coastguard Worker *
11*495ae853SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
12*495ae853SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
13*495ae853SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*495ae853SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
15*495ae853SAndroid Build Coastguard Worker * limitations under the License.
16*495ae853SAndroid Build Coastguard Worker *
17*495ae853SAndroid Build Coastguard Worker *****************************************************************************
18*495ae853SAndroid Build Coastguard Worker * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*495ae853SAndroid Build Coastguard Worker */
20*495ae853SAndroid Build Coastguard Worker /**
21*495ae853SAndroid Build Coastguard Worker *******************************************************************************
22*495ae853SAndroid Build Coastguard Worker * @file
23*495ae853SAndroid Build Coastguard Worker * main.c
24*495ae853SAndroid Build Coastguard Worker *
25*495ae853SAndroid Build Coastguard Worker * @brief
26*495ae853SAndroid Build Coastguard Worker * Contains an application that demonstrates use of H264 decoder API
27*495ae853SAndroid Build Coastguard Worker *
28*495ae853SAndroid Build Coastguard Worker * @author
29*495ae853SAndroid Build Coastguard Worker * Kishore
30*495ae853SAndroid Build Coastguard Worker *
31*495ae853SAndroid Build Coastguard Worker * @remarks
32*495ae853SAndroid Build Coastguard Worker * None
33*495ae853SAndroid Build Coastguard Worker *
34*495ae853SAndroid Build Coastguard Worker *******************************************************************************
35*495ae853SAndroid Build Coastguard Worker */
36*495ae853SAndroid Build Coastguard Worker
37*495ae853SAndroid Build Coastguard Worker #include <stdio.h>
38*495ae853SAndroid Build Coastguard Worker #include <string.h>
39*495ae853SAndroid Build Coastguard Worker #include <stdlib.h>
40*495ae853SAndroid Build Coastguard Worker
41*495ae853SAndroid Build Coastguard Worker #ifdef X86_MINGW
42*495ae853SAndroid Build Coastguard Worker #include <signal.h>
43*495ae853SAndroid Build Coastguard Worker #endif
44*495ae853SAndroid Build Coastguard Worker
45*495ae853SAndroid Build Coastguard Worker #ifdef IOS_DISPLAY
46*495ae853SAndroid Build Coastguard Worker #include "cast_types.h"
47*495ae853SAndroid Build Coastguard Worker #else
48*495ae853SAndroid Build Coastguard Worker #include "ih264_typedefs.h"
49*495ae853SAndroid Build Coastguard Worker #endif
50*495ae853SAndroid Build Coastguard Worker
51*495ae853SAndroid Build Coastguard Worker #include "iv.h"
52*495ae853SAndroid Build Coastguard Worker #include "ivd.h"
53*495ae853SAndroid Build Coastguard Worker #include "ithread.h"
54*495ae853SAndroid Build Coastguard Worker
55*495ae853SAndroid Build Coastguard Worker #include "ih264d.h"
56*495ae853SAndroid Build Coastguard Worker #include "isvcd.h"
57*495ae853SAndroid Build Coastguard Worker #ifdef WINDOWS_TIMER
58*495ae853SAndroid Build Coastguard Worker #include <windows.h>
59*495ae853SAndroid Build Coastguard Worker #else
60*495ae853SAndroid Build Coastguard Worker #include <sys/time.h>
61*495ae853SAndroid Build Coastguard Worker #endif
62*495ae853SAndroid Build Coastguard Worker
63*495ae853SAndroid Build Coastguard Worker // #define ADAPTIVE_TEST
64*495ae853SAndroid Build Coastguard Worker #define ADAPTIVE_MAX_WD 4096
65*495ae853SAndroid Build Coastguard Worker #define ADAPTIVE_MAX_HT 2160
66*495ae853SAndroid Build Coastguard Worker
67*495ae853SAndroid Build Coastguard Worker #define ALIGN8(x) ((((x) + 7) >> 3) << 3)
68*495ae853SAndroid Build Coastguard Worker #define NUM_DISPLAY_BUFFERS 4
69*495ae853SAndroid Build Coastguard Worker #define DEFAULT_FPS 30
70*495ae853SAndroid Build Coastguard Worker
71*495ae853SAndroid Build Coastguard Worker #define ENABLE_DEGRADE 0
72*495ae853SAndroid Build Coastguard Worker #define MAX_DISP_BUFFERS 64
73*495ae853SAndroid Build Coastguard Worker #define EXTRA_DISP_BUFFERS 8
74*495ae853SAndroid Build Coastguard Worker #define STRLENGTH 1000
75*495ae853SAndroid Build Coastguard Worker #define STR2(x) #x
76*495ae853SAndroid Build Coastguard Worker #define STR(X) STR2(X)
77*495ae853SAndroid Build Coastguard Worker
78*495ae853SAndroid Build Coastguard Worker // #define TEST_FLUSH
79*495ae853SAndroid Build Coastguard Worker #define FLUSH_FRM_CNT 100
80*495ae853SAndroid Build Coastguard Worker // #define APP_EXTRA_BUFS 1
81*495ae853SAndroid Build Coastguard Worker
82*495ae853SAndroid Build Coastguard Worker #undef PROFILE_ENABLE
83*495ae853SAndroid Build Coastguard Worker
84*495ae853SAndroid Build Coastguard Worker #ifdef IOS
85*495ae853SAndroid Build Coastguard Worker #define PATHLENMAX 500
86*495ae853SAndroid Build Coastguard Worker char filename_with_path[PATHLENMAX];
87*495ae853SAndroid Build Coastguard Worker #endif
88*495ae853SAndroid Build Coastguard Worker
89*495ae853SAndroid Build Coastguard Worker #ifdef PROFILE_ENABLE
90*495ae853SAndroid Build Coastguard Worker #ifdef WINDOWS_TIMER
91*495ae853SAndroid Build Coastguard Worker typedef LARGE_INTEGER TIMER;
92*495ae853SAndroid Build Coastguard Worker #else
93*495ae853SAndroid Build Coastguard Worker // #ifdef GCC_TIMER
94*495ae853SAndroid Build Coastguard Worker typedef struct timeval TIMER;
95*495ae853SAndroid Build Coastguard Worker // #endif
96*495ae853SAndroid Build Coastguard Worker #endif
97*495ae853SAndroid Build Coastguard Worker #else
98*495ae853SAndroid Build Coastguard Worker typedef WORD32 TIMER;
99*495ae853SAndroid Build Coastguard Worker #endif
100*495ae853SAndroid Build Coastguard Worker
101*495ae853SAndroid Build Coastguard Worker #ifdef PROFILE_ENABLE
102*495ae853SAndroid Build Coastguard Worker #ifdef WINDOWS_TIMER
103*495ae853SAndroid Build Coastguard Worker #define GETTIME(timer) QueryPerformanceCounter(timer);
104*495ae853SAndroid Build Coastguard Worker #else
105*495ae853SAndroid Build Coastguard Worker // #ifdef GCC_TIMER
106*495ae853SAndroid Build Coastguard Worker #define GETTIME(timer) gettimeofday(timer, NULL);
107*495ae853SAndroid Build Coastguard Worker // #endif
108*495ae853SAndroid Build Coastguard Worker #endif
109*495ae853SAndroid Build Coastguard Worker
110*495ae853SAndroid Build Coastguard Worker #ifdef WINDOWS_TIMER
111*495ae853SAndroid Build Coastguard Worker #define ELAPSEDTIME(s_start_timer, s_end_timer, s_elapsed_time, frequency) \
112*495ae853SAndroid Build Coastguard Worker { \
113*495ae853SAndroid Build Coastguard Worker TIMER s_temp_time; \
114*495ae853SAndroid Build Coastguard Worker s_temp_time.LowPart = s_end_timer.LowPart - s_start_timer.LowPart; \
115*495ae853SAndroid Build Coastguard Worker s_elapsed_time = \
116*495ae853SAndroid Build Coastguard Worker (UWORD32) (((DOUBLE) s_temp_time.LowPart / (DOUBLE) frequency.LowPart) * 1000000); \
117*495ae853SAndroid Build Coastguard Worker }
118*495ae853SAndroid Build Coastguard Worker #else
119*495ae853SAndroid Build Coastguard Worker // #ifdef GCC_TIMER
120*495ae853SAndroid Build Coastguard Worker #define ELAPSEDTIME(s_start_timer, s_end_timer, s_elapsed_time, frequency) \
121*495ae853SAndroid Build Coastguard Worker s_elapsed_time = ((s_end_timer.tv_sec - s_start_timer.tv_sec) * 1000000) + \
122*495ae853SAndroid Build Coastguard Worker (s_end_timer.tv_usec - s_start_timer.tv_usec);
123*495ae853SAndroid Build Coastguard Worker // #endif
124*495ae853SAndroid Build Coastguard Worker #endif
125*495ae853SAndroid Build Coastguard Worker
126*495ae853SAndroid Build Coastguard Worker #else
127*495ae853SAndroid Build Coastguard Worker #define GETTIME(timer)
128*495ae853SAndroid Build Coastguard Worker #define ELAPSEDTIME(s_start_timer, s_end_timer, s_elapsed_time, frequency)
129*495ae853SAndroid Build Coastguard Worker #endif
130*495ae853SAndroid Build Coastguard Worker
131*495ae853SAndroid Build Coastguard Worker /* Function declarations */
132*495ae853SAndroid Build Coastguard Worker #ifndef MD5_DISABLE
133*495ae853SAndroid Build Coastguard Worker void calc_md5_cksum(UWORD8 *pu1_inbuf, UWORD32 u4_stride, UWORD32 u4_width, UWORD32 u4_height,
134*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cksum_p);
135*495ae853SAndroid Build Coastguard Worker #else
136*495ae853SAndroid Build Coastguard Worker #define calc_md5_cksum(a, b, c, d, e)
137*495ae853SAndroid Build Coastguard Worker #endif
138*495ae853SAndroid Build Coastguard Worker #ifdef SDL_DISPLAY
139*495ae853SAndroid Build Coastguard Worker void *sdl_disp_init(UWORD32, UWORD32, WORD32, WORD32, WORD32, WORD32, WORD32, WORD32 *, WORD32 *);
140*495ae853SAndroid Build Coastguard Worker void sdl_alloc_disp_buffers(void *);
141*495ae853SAndroid Build Coastguard Worker void sdl_display(void *, WORD32);
142*495ae853SAndroid Build Coastguard Worker void sdl_set_disp_buffers(void *, WORD32, UWORD8 **, UWORD8 **, UWORD8 **);
143*495ae853SAndroid Build Coastguard Worker void sdl_disp_deinit(void *);
144*495ae853SAndroid Build Coastguard Worker void sdl_disp_usleep(UWORD32);
145*495ae853SAndroid Build Coastguard Worker IV_COLOR_FORMAT_T sdl_get_color_fmt(void);
146*495ae853SAndroid Build Coastguard Worker UWORD32 sdl_get_stride(void);
147*495ae853SAndroid Build Coastguard Worker #endif
148*495ae853SAndroid Build Coastguard Worker
149*495ae853SAndroid Build Coastguard Worker #ifdef INTEL_CE5300
150*495ae853SAndroid Build Coastguard Worker void *gdl_disp_init(UWORD32, UWORD32, WORD32, WORD32, WORD32, WORD32, WORD32, WORD32 *, WORD32 *);
151*495ae853SAndroid Build Coastguard Worker void gdl_alloc_disp_buffers(void *);
152*495ae853SAndroid Build Coastguard Worker void gdl_display(void *, WORD32);
153*495ae853SAndroid Build Coastguard Worker void gdl_set_disp_buffers(void *, WORD32, UWORD8 **, UWORD8 **, UWORD8 **);
154*495ae853SAndroid Build Coastguard Worker void gdl_disp_deinit(void *);
155*495ae853SAndroid Build Coastguard Worker void gdl_disp_usleep(UWORD32);
156*495ae853SAndroid Build Coastguard Worker IV_COLOR_FORMAT_T gdl_get_color_fmt(void);
157*495ae853SAndroid Build Coastguard Worker UWORD32 gdl_get_stride(void);
158*495ae853SAndroid Build Coastguard Worker #endif
159*495ae853SAndroid Build Coastguard Worker
160*495ae853SAndroid Build Coastguard Worker #ifdef FBDEV_DISPLAY
161*495ae853SAndroid Build Coastguard Worker void *fbd_disp_init(UWORD32, UWORD32, WORD32, WORD32, WORD32, WORD32, WORD32, WORD32 *, WORD32 *);
162*495ae853SAndroid Build Coastguard Worker void fbd_alloc_disp_buffers(void *);
163*495ae853SAndroid Build Coastguard Worker void fbd_display(void *, WORD32);
164*495ae853SAndroid Build Coastguard Worker void fbd_set_disp_buffers(void *, WORD32, UWORD8 **, UWORD8 **, UWORD8 **);
165*495ae853SAndroid Build Coastguard Worker void fbd_disp_deinit(void *);
166*495ae853SAndroid Build Coastguard Worker void fbd_disp_usleep(UWORD32);
167*495ae853SAndroid Build Coastguard Worker IV_COLOR_FORMAT_T fbd_get_color_fmt(void);
168*495ae853SAndroid Build Coastguard Worker UWORD32 fbd_get_stride(void);
169*495ae853SAndroid Build Coastguard Worker #endif
170*495ae853SAndroid Build Coastguard Worker
171*495ae853SAndroid Build Coastguard Worker #ifdef IOS_DISPLAY
172*495ae853SAndroid Build Coastguard Worker void *ios_disp_init(UWORD32, UWORD32, WORD32, WORD32, WORD32, WORD32, WORD32, WORD32 *, WORD32 *);
173*495ae853SAndroid Build Coastguard Worker void ios_alloc_disp_buffers(void *);
174*495ae853SAndroid Build Coastguard Worker void ios_display(void *, WORD32);
175*495ae853SAndroid Build Coastguard Worker void ios_set_disp_buffers(void *, WORD32, UWORD8 **, UWORD8 **, UWORD8 **);
176*495ae853SAndroid Build Coastguard Worker void ios_disp_deinit(void *);
177*495ae853SAndroid Build Coastguard Worker void ios_disp_usleep(UWORD32);
178*495ae853SAndroid Build Coastguard Worker IV_COLOR_FORMAT_T ios_get_color_fmt(void);
179*495ae853SAndroid Build Coastguard Worker UWORD32 ios_get_stride(void);
180*495ae853SAndroid Build Coastguard Worker #endif
181*495ae853SAndroid Build Coastguard Worker
182*495ae853SAndroid Build Coastguard Worker typedef struct
183*495ae853SAndroid Build Coastguard Worker {
184*495ae853SAndroid Build Coastguard Worker UWORD32 u4_piclen_flag;
185*495ae853SAndroid Build Coastguard Worker UWORD32 u4_file_save_flag;
186*495ae853SAndroid Build Coastguard Worker UWORD32 u4_frame_info_enable;
187*495ae853SAndroid Build Coastguard Worker UWORD32 u4_chksum_save_flag;
188*495ae853SAndroid Build Coastguard Worker UWORD32 u4_max_frm_ts;
189*495ae853SAndroid Build Coastguard Worker IV_COLOR_FORMAT_T e_output_chroma_format;
190*495ae853SAndroid Build Coastguard Worker IVD_ARCH_T e_arch;
191*495ae853SAndroid Build Coastguard Worker IVD_SOC_T e_soc;
192*495ae853SAndroid Build Coastguard Worker UWORD32 dump_q_rd_idx;
193*495ae853SAndroid Build Coastguard Worker UWORD32 dump_q_wr_idx;
194*495ae853SAndroid Build Coastguard Worker WORD32 disp_q_wr_idx;
195*495ae853SAndroid Build Coastguard Worker WORD32 disp_q_rd_idx;
196*495ae853SAndroid Build Coastguard Worker
197*495ae853SAndroid Build Coastguard Worker void *cocodec_obj;
198*495ae853SAndroid Build Coastguard Worker UWORD32 u4_share_disp_buf;
199*495ae853SAndroid Build Coastguard Worker UWORD32 num_disp_buf;
200*495ae853SAndroid Build Coastguard Worker UWORD32 b_pic_present;
201*495ae853SAndroid Build Coastguard Worker UWORD32 u4_disable_dblk_level;
202*495ae853SAndroid Build Coastguard Worker WORD32 i4_target_layer_id;
203*495ae853SAndroid Build Coastguard Worker WORD32 i4_degrade_type;
204*495ae853SAndroid Build Coastguard Worker WORD32 i4_degrade_pics;
205*495ae853SAndroid Build Coastguard Worker UWORD32 u4_num_cores;
206*495ae853SAndroid Build Coastguard Worker UWORD32 disp_delay;
207*495ae853SAndroid Build Coastguard Worker WORD32 trace_enable;
208*495ae853SAndroid Build Coastguard Worker CHAR ac_trace_fname[STRLENGTH];
209*495ae853SAndroid Build Coastguard Worker CHAR ac_piclen_fname[STRLENGTH];
210*495ae853SAndroid Build Coastguard Worker CHAR ac_ip_fname[STRLENGTH];
211*495ae853SAndroid Build Coastguard Worker CHAR ac_op_fname[STRLENGTH];
212*495ae853SAndroid Build Coastguard Worker CHAR ac_qp_map_fname[STRLENGTH];
213*495ae853SAndroid Build Coastguard Worker CHAR ac_blk_type_map_fname[STRLENGTH];
214*495ae853SAndroid Build Coastguard Worker CHAR ac_op_chksum_fname[STRLENGTH];
215*495ae853SAndroid Build Coastguard Worker ivd_out_bufdesc_t s_disp_buffers[MAX_DISP_BUFFERS];
216*495ae853SAndroid Build Coastguard Worker iv_yuv_buf_t s_disp_frm_queue[MAX_DISP_BUFFERS];
217*495ae853SAndroid Build Coastguard Worker UWORD32 s_disp_frm_id_queue[MAX_DISP_BUFFERS];
218*495ae853SAndroid Build Coastguard Worker UWORD32 loopback;
219*495ae853SAndroid Build Coastguard Worker UWORD32 display;
220*495ae853SAndroid Build Coastguard Worker UWORD32 full_screen;
221*495ae853SAndroid Build Coastguard Worker UWORD32 fps;
222*495ae853SAndroid Build Coastguard Worker
223*495ae853SAndroid Build Coastguard Worker UWORD32 u4_strd;
224*495ae853SAndroid Build Coastguard Worker
225*495ae853SAndroid Build Coastguard Worker /* For signalling to display thread */
226*495ae853SAndroid Build Coastguard Worker UWORD32 u4_pic_wd;
227*495ae853SAndroid Build Coastguard Worker UWORD32 u4_pic_ht;
228*495ae853SAndroid Build Coastguard Worker
229*495ae853SAndroid Build Coastguard Worker /* For IOS diplay */
230*495ae853SAndroid Build Coastguard Worker WORD32 i4_screen_wd;
231*495ae853SAndroid Build Coastguard Worker WORD32 i4_screen_ht;
232*495ae853SAndroid Build Coastguard Worker
233*495ae853SAndroid Build Coastguard Worker WORD32 quit;
234*495ae853SAndroid Build Coastguard Worker WORD32 paused;
235*495ae853SAndroid Build Coastguard Worker
236*495ae853SAndroid Build Coastguard Worker void *pv_disp_ctx;
237*495ae853SAndroid Build Coastguard Worker void *display_thread_handle;
238*495ae853SAndroid Build Coastguard Worker WORD32 display_thread_created;
239*495ae853SAndroid Build Coastguard Worker volatile WORD32 display_init_done;
240*495ae853SAndroid Build Coastguard Worker volatile WORD32 display_deinit_flag;
241*495ae853SAndroid Build Coastguard Worker
242*495ae853SAndroid Build Coastguard Worker void *(*disp_init)(UWORD32, UWORD32, WORD32, WORD32, WORD32, WORD32, WORD32, WORD32 *,
243*495ae853SAndroid Build Coastguard Worker WORD32 *);
244*495ae853SAndroid Build Coastguard Worker void (*alloc_disp_buffers)(void *);
245*495ae853SAndroid Build Coastguard Worker void (*display_buffer)(void *, WORD32);
246*495ae853SAndroid Build Coastguard Worker void (*set_disp_buffers)(void *, WORD32, UWORD8 **, UWORD8 **, UWORD8 **);
247*495ae853SAndroid Build Coastguard Worker void (*disp_deinit)(void *);
248*495ae853SAndroid Build Coastguard Worker void (*disp_usleep)(UWORD32);
249*495ae853SAndroid Build Coastguard Worker IV_COLOR_FORMAT_T (*get_color_fmt)(void);
250*495ae853SAndroid Build Coastguard Worker UWORD32 (*get_stride)(void);
251*495ae853SAndroid Build Coastguard Worker } vid_dec_ctx_t;
252*495ae853SAndroid Build Coastguard Worker
253*495ae853SAndroid Build Coastguard Worker /**
254*495ae853SAndroid Build Coastguard Worker * function pointer to malloc
255*495ae853SAndroid Build Coastguard Worker */
256*495ae853SAndroid Build Coastguard Worker void *(*pf_mem_alloc)(UWORD32 u4_size);
257*495ae853SAndroid Build Coastguard Worker
258*495ae853SAndroid Build Coastguard Worker /**
259*495ae853SAndroid Build Coastguard Worker * function pointer to free
260*495ae853SAndroid Build Coastguard Worker */
261*495ae853SAndroid Build Coastguard Worker void (*pf_mem_free)(void *pv_mem);
262*495ae853SAndroid Build Coastguard Worker
263*495ae853SAndroid Build Coastguard Worker typedef enum
264*495ae853SAndroid Build Coastguard Worker {
265*495ae853SAndroid Build Coastguard Worker INVALID,
266*495ae853SAndroid Build Coastguard Worker HELP,
267*495ae853SAndroid Build Coastguard Worker VERSION,
268*495ae853SAndroid Build Coastguard Worker INPUT_FILE,
269*495ae853SAndroid Build Coastguard Worker OUTPUT,
270*495ae853SAndroid Build Coastguard Worker QP_MAP_FILE,
271*495ae853SAndroid Build Coastguard Worker BLK_TYPE_MAP_FILE,
272*495ae853SAndroid Build Coastguard Worker CHKSUM,
273*495ae853SAndroid Build Coastguard Worker SAVE_OUTPUT,
274*495ae853SAndroid Build Coastguard Worker SAVE_FRAME_INFO,
275*495ae853SAndroid Build Coastguard Worker SAVE_CHKSUM,
276*495ae853SAndroid Build Coastguard Worker CHROMA_FORMAT,
277*495ae853SAndroid Build Coastguard Worker NUM_FRAMES,
278*495ae853SAndroid Build Coastguard Worker NUM_CORES,
279*495ae853SAndroid Build Coastguard Worker DISABLE_DEBLOCK_LEVEL,
280*495ae853SAndroid Build Coastguard Worker SHARE_DISPLAY_BUF,
281*495ae853SAndroid Build Coastguard Worker LOOPBACK,
282*495ae853SAndroid Build Coastguard Worker DISPLAY,
283*495ae853SAndroid Build Coastguard Worker FULLSCREEN,
284*495ae853SAndroid Build Coastguard Worker FPS,
285*495ae853SAndroid Build Coastguard Worker TRACE,
286*495ae853SAndroid Build Coastguard Worker CONFIG,
287*495ae853SAndroid Build Coastguard Worker
288*495ae853SAndroid Build Coastguard Worker DEGRADE_TYPE,
289*495ae853SAndroid Build Coastguard Worker DEGRADE_PICS,
290*495ae853SAndroid Build Coastguard Worker ARCH,
291*495ae853SAndroid Build Coastguard Worker SOC,
292*495ae853SAndroid Build Coastguard Worker PICLEN,
293*495ae853SAndroid Build Coastguard Worker PICLEN_FILE,
294*495ae853SAndroid Build Coastguard Worker TARGET_LAYER_ID,
295*495ae853SAndroid Build Coastguard Worker } ARGUMENT_T;
296*495ae853SAndroid Build Coastguard Worker
297*495ae853SAndroid Build Coastguard Worker typedef struct
298*495ae853SAndroid Build Coastguard Worker {
299*495ae853SAndroid Build Coastguard Worker CHAR argument_shortname[4];
300*495ae853SAndroid Build Coastguard Worker CHAR argument_name[128];
301*495ae853SAndroid Build Coastguard Worker ARGUMENT_T argument;
302*495ae853SAndroid Build Coastguard Worker CHAR description[512];
303*495ae853SAndroid Build Coastguard Worker } argument_t;
304*495ae853SAndroid Build Coastguard Worker
305*495ae853SAndroid Build Coastguard Worker static const argument_t argument_mapping[] = {
306*495ae853SAndroid Build Coastguard Worker {"-h", "--help", HELP, "Print this help\n"},
307*495ae853SAndroid Build Coastguard Worker {"-c", "--config", CONFIG, "config file (Default: test.cfg)\n"},
308*495ae853SAndroid Build Coastguard Worker
309*495ae853SAndroid Build Coastguard Worker {"-v", "--version", VERSION, "Version information\n"},
310*495ae853SAndroid Build Coastguard Worker {"-i", "--input", INPUT_FILE, "Input file\n"},
311*495ae853SAndroid Build Coastguard Worker {"-o", "--output", OUTPUT, "Output file\n"},
312*495ae853SAndroid Build Coastguard Worker {"--", "--qp_map_file", QP_MAP_FILE, "QP map file\n"},
313*495ae853SAndroid Build Coastguard Worker {"--", "--blk_type_map_file", BLK_TYPE_MAP_FILE, "Block type map file\n"},
314*495ae853SAndroid Build Coastguard Worker {"--", "--piclen", PICLEN,
315*495ae853SAndroid Build Coastguard Worker "Flag to signal if the decoder has to use a file containing number of "
316*495ae853SAndroid Build Coastguard Worker "bytes in each picture to be fed in each call\n"},
317*495ae853SAndroid Build Coastguard Worker {"--", "--piclen_file", PICLEN_FILE,
318*495ae853SAndroid Build Coastguard Worker "File containing number of bytes in each picture - each line containing "
319*495ae853SAndroid Build Coastguard Worker "one i4_size\n"},
320*495ae853SAndroid Build Coastguard Worker {"--", "--chksum", CHKSUM, "Output MD5 Checksum file\n"},
321*495ae853SAndroid Build Coastguard Worker {"-s", "--save_output", SAVE_OUTPUT, "Save Output file\n"},
322*495ae853SAndroid Build Coastguard Worker {"--", "--save_frame_info", SAVE_FRAME_INFO, "Save frame_info file\n"},
323*495ae853SAndroid Build Coastguard Worker {"--", "--save_chksum", SAVE_CHKSUM, "Save Check sum file\n"},
324*495ae853SAndroid Build Coastguard Worker {"--", "--chroma_format", CHROMA_FORMAT,
325*495ae853SAndroid Build Coastguard Worker "Output Chroma format Supported values YUV_420P, YUV_422ILE, RGB_565, "
326*495ae853SAndroid Build Coastguard Worker "YUV_420SP_UV, YUV_420SP_VU\n"},
327*495ae853SAndroid Build Coastguard Worker {"-n", "--num_frames", NUM_FRAMES, "Number of frames to be decoded\n"},
328*495ae853SAndroid Build Coastguard Worker {"--", "--num_cores", NUM_CORES, "Number of cores to be used\n"},
329*495ae853SAndroid Build Coastguard Worker {"--", "--share_display_buf", SHARE_DISPLAY_BUF, "Enable shared display buffer mode\n"},
330*495ae853SAndroid Build Coastguard Worker {"--", "--disable_deblock_level", DISABLE_DEBLOCK_LEVEL,
331*495ae853SAndroid Build Coastguard Worker "Disable deblocking level : 0 to 4 - 0 Enable deblocking 4 Disable "
332*495ae853SAndroid Build Coastguard Worker "deblocking completely\n"},
333*495ae853SAndroid Build Coastguard Worker {"--", "--loopback", LOOPBACK, "Enable playback in a loop\n"},
334*495ae853SAndroid Build Coastguard Worker {"--", "--display", DISPLAY, "Enable display (uses SDL)\n"},
335*495ae853SAndroid Build Coastguard Worker {"--", "--fullscreen", FULLSCREEN, "Enable full screen (Only for GDL and SDL)\n"},
336*495ae853SAndroid Build Coastguard Worker {"--", "--fps", FPS, "FPS to be used for display \n"},
337*495ae853SAndroid Build Coastguard Worker {"-i", "--trace", TRACE, "Trace file\n"},
338*495ae853SAndroid Build Coastguard Worker
339*495ae853SAndroid Build Coastguard Worker {"--", "--degrade_type", DEGRADE_TYPE,
340*495ae853SAndroid Build Coastguard Worker "Degrade type : 0: No degrade 0th bit set : Disable SAO 1st bit set : "
341*495ae853SAndroid Build Coastguard Worker "Disable deblocking 2nd bit set : Faster inter prediction filters 3rd bit "
342*495ae853SAndroid Build Coastguard Worker "set : Fastest inter prediction filters\n"},
343*495ae853SAndroid Build Coastguard Worker {"--", "--degrade_pics", DEGRADE_PICS,
344*495ae853SAndroid Build Coastguard Worker "Degrade pics : 0 : No degrade 1 : Only on non-reference frames 2 : Do "
345*495ae853SAndroid Build Coastguard Worker "not degrade every 4th or key frames 3 : All non-key frames 4 : All "
346*495ae853SAndroid Build Coastguard Worker "frames"},
347*495ae853SAndroid Build Coastguard Worker
348*495ae853SAndroid Build Coastguard Worker {"--", "--arch", ARCH,
349*495ae853SAndroid Build Coastguard Worker "Set Architecture. Supported values ARM_NONEON, ARM_A9Q, ARM_A7, ARM_A5, "
350*495ae853SAndroid Build Coastguard Worker "ARM_NEONINTR,ARMV8_GENERIC, X86_GENERIC, X86_SSSE3, X86_SSE4 \n"},
351*495ae853SAndroid Build Coastguard Worker {"--", "--soc", SOC, "Set SOC. Supported values GENERIC, HISI_37X \n"},
352*495ae853SAndroid Build Coastguard Worker {"-t", "--target_layer_id", TARGET_LAYER_ID, "Version information\n"},
353*495ae853SAndroid Build Coastguard Worker
354*495ae853SAndroid Build Coastguard Worker };
355*495ae853SAndroid Build Coastguard Worker
356*495ae853SAndroid Build Coastguard Worker #define PEAK_WINDOW_SIZE 8
357*495ae853SAndroid Build Coastguard Worker #define DEFAULT_SHARE_DISPLAY_BUF 0
358*495ae853SAndroid Build Coastguard Worker #define STRIDE 0
359*495ae853SAndroid Build Coastguard Worker #define DEFAULT_NUM_CORES 1
360*495ae853SAndroid Build Coastguard Worker
361*495ae853SAndroid Build Coastguard Worker #define DUMP_SINGLE_BUF 0
362*495ae853SAndroid Build Coastguard Worker #define IV_ISFATALERROR(x) (((x) >> IVD_FATALERROR) & 0x1)
363*495ae853SAndroid Build Coastguard Worker
364*495ae853SAndroid Build Coastguard Worker #define ivd_api_function isvcd_api_function
365*495ae853SAndroid Build Coastguard Worker
366*495ae853SAndroid Build Coastguard Worker #ifdef IOS
367*495ae853SAndroid Build Coastguard Worker char filename_trace[PATHLENMAX];
368*495ae853SAndroid Build Coastguard Worker #endif
369*495ae853SAndroid Build Coastguard Worker
370*495ae853SAndroid Build Coastguard Worker #if ANDROID_NDK
371*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
372*495ae853SAndroid Build Coastguard Worker /* */
373*495ae853SAndroid Build Coastguard Worker /* Function Name : raise */
374*495ae853SAndroid Build Coastguard Worker /* */
375*495ae853SAndroid Build Coastguard Worker /* Description : Needed as a workaround when the application is built in */
376*495ae853SAndroid Build Coastguard Worker /* Android NDK. This is an exception to be called for divide*/
377*495ae853SAndroid Build Coastguard Worker /* by zero error */
378*495ae853SAndroid Build Coastguard Worker /* */
379*495ae853SAndroid Build Coastguard Worker /* Inputs : a */
380*495ae853SAndroid Build Coastguard Worker /* Globals : */
381*495ae853SAndroid Build Coastguard Worker /* Processing : None */
382*495ae853SAndroid Build Coastguard Worker /* */
383*495ae853SAndroid Build Coastguard Worker /* Outputs : */
384*495ae853SAndroid Build Coastguard Worker /* Returns : */
385*495ae853SAndroid Build Coastguard Worker /* */
386*495ae853SAndroid Build Coastguard Worker /* Issues : */
387*495ae853SAndroid Build Coastguard Worker /* */
388*495ae853SAndroid Build Coastguard Worker /* Revision History: */
389*495ae853SAndroid Build Coastguard Worker /* */
390*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
391*495ae853SAndroid Build Coastguard Worker /* 07 09 2012 100189 Initial Version */
392*495ae853SAndroid Build Coastguard Worker /* */
393*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
raise(int a)394*495ae853SAndroid Build Coastguard Worker int raise(int a)
395*495ae853SAndroid Build Coastguard Worker {
396*495ae853SAndroid Build Coastguard Worker printf("Divide by zero\n");
397*495ae853SAndroid Build Coastguard Worker return 0;
398*495ae853SAndroid Build Coastguard Worker }
399*495ae853SAndroid Build Coastguard Worker #endif
400*495ae853SAndroid Build Coastguard Worker
401*495ae853SAndroid Build Coastguard Worker #ifdef _WIN32
402*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
403*495ae853SAndroid Build Coastguard Worker /* Function to print library calls */
404*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
405*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
406*495ae853SAndroid Build Coastguard Worker /* */
407*495ae853SAndroid Build Coastguard Worker /* Function Name : memalign */
408*495ae853SAndroid Build Coastguard Worker /* */
409*495ae853SAndroid Build Coastguard Worker /* Description : Returns malloc data. Ideally should return aligned memory*/
410*495ae853SAndroid Build Coastguard Worker /* support alignment will be added later */
411*495ae853SAndroid Build Coastguard Worker /* */
412*495ae853SAndroid Build Coastguard Worker /* Inputs : alignment i4_size */
413*495ae853SAndroid Build Coastguard Worker /* Globals : */
414*495ae853SAndroid Build Coastguard Worker /* Processing : */
415*495ae853SAndroid Build Coastguard Worker /* */
416*495ae853SAndroid Build Coastguard Worker /* Outputs : */
417*495ae853SAndroid Build Coastguard Worker /* Returns : */
418*495ae853SAndroid Build Coastguard Worker /* */
419*495ae853SAndroid Build Coastguard Worker /* Issues : */
420*495ae853SAndroid Build Coastguard Worker /* */
421*495ae853SAndroid Build Coastguard Worker /* Revision History: */
422*495ae853SAndroid Build Coastguard Worker /* */
423*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
424*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Initial Version */
425*495ae853SAndroid Build Coastguard Worker /* */
426*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
427*495ae853SAndroid Build Coastguard Worker
ih264a_aligned_malloc(void * pv_ctxt,WORD32 alignment,WORD32 i4_size)428*495ae853SAndroid Build Coastguard Worker void *ih264a_aligned_malloc(void *pv_ctxt, WORD32 alignment, WORD32 i4_size)
429*495ae853SAndroid Build Coastguard Worker {
430*495ae853SAndroid Build Coastguard Worker (void) pv_ctxt;
431*495ae853SAndroid Build Coastguard Worker return (void *) _aligned_malloc(i4_size, alignment);
432*495ae853SAndroid Build Coastguard Worker }
433*495ae853SAndroid Build Coastguard Worker
ih264a_aligned_free(void * pv_ctxt,void * pv_buf)434*495ae853SAndroid Build Coastguard Worker void ih264a_aligned_free(void *pv_ctxt, void *pv_buf)
435*495ae853SAndroid Build Coastguard Worker {
436*495ae853SAndroid Build Coastguard Worker (void) pv_ctxt;
437*495ae853SAndroid Build Coastguard Worker _aligned_free(pv_buf);
438*495ae853SAndroid Build Coastguard Worker return;
439*495ae853SAndroid Build Coastguard Worker }
440*495ae853SAndroid Build Coastguard Worker #endif
441*495ae853SAndroid Build Coastguard Worker
442*495ae853SAndroid Build Coastguard Worker #if IOS
ih264a_aligned_malloc(void * pv_ctxt,WORD32 alignment,WORD32 i4_size)443*495ae853SAndroid Build Coastguard Worker void *ih264a_aligned_malloc(void *pv_ctxt, WORD32 alignment, WORD32 i4_size)
444*495ae853SAndroid Build Coastguard Worker {
445*495ae853SAndroid Build Coastguard Worker (void) pv_ctxt;
446*495ae853SAndroid Build Coastguard Worker return malloc(i4_size);
447*495ae853SAndroid Build Coastguard Worker }
448*495ae853SAndroid Build Coastguard Worker
ih264a_aligned_free(void * pv_ctxt,void * pv_buf)449*495ae853SAndroid Build Coastguard Worker void ih264a_aligned_free(void *pv_ctxt, void *pv_buf)
450*495ae853SAndroid Build Coastguard Worker {
451*495ae853SAndroid Build Coastguard Worker (void) pv_ctxt;
452*495ae853SAndroid Build Coastguard Worker free(pv_buf);
453*495ae853SAndroid Build Coastguard Worker }
454*495ae853SAndroid Build Coastguard Worker #endif
455*495ae853SAndroid Build Coastguard Worker
456*495ae853SAndroid Build Coastguard Worker #if(!defined(IOS)) && (!defined(_WIN32))
ih264a_aligned_malloc(void * pv_ctxt,WORD32 alignment,WORD32 i4_size)457*495ae853SAndroid Build Coastguard Worker void *ih264a_aligned_malloc(void *pv_ctxt, WORD32 alignment, WORD32 i4_size)
458*495ae853SAndroid Build Coastguard Worker {
459*495ae853SAndroid Build Coastguard Worker void *buf = NULL;
460*495ae853SAndroid Build Coastguard Worker (void) pv_ctxt;
461*495ae853SAndroid Build Coastguard Worker if(0 != posix_memalign(&buf, alignment, i4_size))
462*495ae853SAndroid Build Coastguard Worker {
463*495ae853SAndroid Build Coastguard Worker return NULL;
464*495ae853SAndroid Build Coastguard Worker }
465*495ae853SAndroid Build Coastguard Worker return buf;
466*495ae853SAndroid Build Coastguard Worker }
467*495ae853SAndroid Build Coastguard Worker
ih264a_aligned_free(void * pv_ctxt,void * pv_buf)468*495ae853SAndroid Build Coastguard Worker void ih264a_aligned_free(void *pv_ctxt, void *pv_buf)
469*495ae853SAndroid Build Coastguard Worker {
470*495ae853SAndroid Build Coastguard Worker (void) pv_ctxt;
471*495ae853SAndroid Build Coastguard Worker free(pv_buf);
472*495ae853SAndroid Build Coastguard Worker }
473*495ae853SAndroid Build Coastguard Worker #endif
474*495ae853SAndroid Build Coastguard Worker
ih264a_memory_alloc(UWORD32 u4_size)475*495ae853SAndroid Build Coastguard Worker void *ih264a_memory_alloc(UWORD32 u4_size) { return (malloc(u4_size)); }
476*495ae853SAndroid Build Coastguard Worker
ih264a_memory_free(void * pv_mem)477*495ae853SAndroid Build Coastguard Worker void ih264a_memory_free(void *pv_mem) { free(pv_mem); }
478*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
479*495ae853SAndroid Build Coastguard Worker /* */
480*495ae853SAndroid Build Coastguard Worker /* Function Name : set_degrade */
481*495ae853SAndroid Build Coastguard Worker /* */
482*495ae853SAndroid Build Coastguard Worker /* Description : Control call to set degrade level */
483*495ae853SAndroid Build Coastguard Worker /* */
484*495ae853SAndroid Build Coastguard Worker /* */
485*495ae853SAndroid Build Coastguard Worker /* Inputs : codec_obj - Codec Handle */
486*495ae853SAndroid Build Coastguard Worker /* type - degrade level value between 0 to 4 */
487*495ae853SAndroid Build Coastguard Worker /* 0 : No degrade */
488*495ae853SAndroid Build Coastguard Worker /* 1st bit : Disable SAO */
489*495ae853SAndroid Build Coastguard Worker /* 2nd bit : Disable Deblock */
490*495ae853SAndroid Build Coastguard Worker /* 3rd bit : Faster MC for non-ref */
491*495ae853SAndroid Build Coastguard Worker /* 4th bit : Fastest MC for non-ref */
492*495ae853SAndroid Build Coastguard Worker /* pics - Pictures that are are degraded */
493*495ae853SAndroid Build Coastguard Worker /* 0 : No degrade */
494*495ae853SAndroid Build Coastguard Worker /* 1 : Non-ref pictures */
495*495ae853SAndroid Build Coastguard Worker /* 2 : Pictures at given interval are not degraded */
496*495ae853SAndroid Build Coastguard Worker /* 3 : All non-key pictures */
497*495ae853SAndroid Build Coastguard Worker /* 4 : All pictures */
498*495ae853SAndroid Build Coastguard Worker /* Globals : */
499*495ae853SAndroid Build Coastguard Worker /* Processing : Calls degrade control to the codec */
500*495ae853SAndroid Build Coastguard Worker /* */
501*495ae853SAndroid Build Coastguard Worker /* Outputs : */
502*495ae853SAndroid Build Coastguard Worker /* Returns : Control call return i4_status */
503*495ae853SAndroid Build Coastguard Worker /* */
504*495ae853SAndroid Build Coastguard Worker /* Issues : */
505*495ae853SAndroid Build Coastguard Worker /* */
506*495ae853SAndroid Build Coastguard Worker /* Revision History: */
507*495ae853SAndroid Build Coastguard Worker /* */
508*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
509*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Initial Version */
510*495ae853SAndroid Build Coastguard Worker /* */
511*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
512*495ae853SAndroid Build Coastguard Worker
set_degrade(void * codec_obj,UWORD32 type,WORD32 pics)513*495ae853SAndroid Build Coastguard Worker IV_API_CALL_STATUS_T set_degrade(void *codec_obj, UWORD32 type, WORD32 pics)
514*495ae853SAndroid Build Coastguard Worker {
515*495ae853SAndroid Build Coastguard Worker isvcd_ctl_degrade_ip_t s_ctl_ip;
516*495ae853SAndroid Build Coastguard Worker isvcd_ctl_degrade_op_t s_ctl_op;
517*495ae853SAndroid Build Coastguard Worker void *pv_api_ip, *pv_api_op;
518*495ae853SAndroid Build Coastguard Worker IV_API_CALL_STATUS_T e_dec_status;
519*495ae853SAndroid Build Coastguard Worker
520*495ae853SAndroid Build Coastguard Worker s_ctl_ip.u4_size = sizeof(isvcd_ctl_degrade_ip_t);
521*495ae853SAndroid Build Coastguard Worker s_ctl_ip.i4_degrade_type = type;
522*495ae853SAndroid Build Coastguard Worker s_ctl_ip.i4_nondegrade_interval = 4;
523*495ae853SAndroid Build Coastguard Worker s_ctl_ip.i4_degrade_pics = pics;
524*495ae853SAndroid Build Coastguard Worker
525*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_size = sizeof(isvcd_ctl_degrade_op_t);
526*495ae853SAndroid Build Coastguard Worker
527*495ae853SAndroid Build Coastguard Worker pv_api_ip = (void *) &s_ctl_ip;
528*495ae853SAndroid Build Coastguard Worker pv_api_op = (void *) &s_ctl_op;
529*495ae853SAndroid Build Coastguard Worker
530*495ae853SAndroid Build Coastguard Worker s_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
531*495ae853SAndroid Build Coastguard Worker s_ctl_ip.e_sub_cmd = (IVD_CONTROL_API_COMMAND_TYPE_T) IH264D_CMD_CTL_DEGRADE;
532*495ae853SAndroid Build Coastguard Worker
533*495ae853SAndroid Build Coastguard Worker e_dec_status = ivd_api_function((iv_obj_t *) codec_obj, pv_api_ip, pv_api_op);
534*495ae853SAndroid Build Coastguard Worker
535*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != e_dec_status)
536*495ae853SAndroid Build Coastguard Worker {
537*495ae853SAndroid Build Coastguard Worker printf("Error in setting degrade level \n");
538*495ae853SAndroid Build Coastguard Worker }
539*495ae853SAndroid Build Coastguard Worker return (e_dec_status);
540*495ae853SAndroid Build Coastguard Worker }
541*495ae853SAndroid Build Coastguard Worker
542*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
543*495ae853SAndroid Build Coastguard Worker /* */
544*495ae853SAndroid Build Coastguard Worker /* Function Name : enable_skipb_frames */
545*495ae853SAndroid Build Coastguard Worker /* */
546*495ae853SAndroid Build Coastguard Worker /* Description : Control call to enable skipping of b frames */
547*495ae853SAndroid Build Coastguard Worker /* */
548*495ae853SAndroid Build Coastguard Worker /* */
549*495ae853SAndroid Build Coastguard Worker /* Inputs : codec_obj : Codec handle */
550*495ae853SAndroid Build Coastguard Worker /* Globals : */
551*495ae853SAndroid Build Coastguard Worker /* Processing : Calls enable skip B frames control */
552*495ae853SAndroid Build Coastguard Worker /* */
553*495ae853SAndroid Build Coastguard Worker /* Outputs : */
554*495ae853SAndroid Build Coastguard Worker /* Returns : Control call return i4_status */
555*495ae853SAndroid Build Coastguard Worker /* */
556*495ae853SAndroid Build Coastguard Worker /* Issues : */
557*495ae853SAndroid Build Coastguard Worker /* */
558*495ae853SAndroid Build Coastguard Worker /* Revision History: */
559*495ae853SAndroid Build Coastguard Worker /* */
560*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
561*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Initial Version */
562*495ae853SAndroid Build Coastguard Worker /* */
563*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
564*495ae853SAndroid Build Coastguard Worker
enable_skipb_frames(void * codec_obj,vid_dec_ctx_t * ps_app_ctx)565*495ae853SAndroid Build Coastguard Worker IV_API_CALL_STATUS_T enable_skipb_frames(void *codec_obj, vid_dec_ctx_t *ps_app_ctx)
566*495ae853SAndroid Build Coastguard Worker {
567*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_config_ip_t s_h264d_ctl_ip;
568*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_config_op_t s_h264d_ctl_op;
569*495ae853SAndroid Build Coastguard Worker ivd_ctl_set_config_ip_t *ps_ctl_ip = &s_h264d_ctl_ip.s_ivd_ctl_set_config_ip_t;
570*495ae853SAndroid Build Coastguard Worker ivd_ctl_set_config_op_t *ps_ctl_op = &s_h264d_ctl_op.s_ivd_ctl_set_config_op_t;
571*495ae853SAndroid Build Coastguard Worker IV_API_CALL_STATUS_T e_dec_status;
572*495ae853SAndroid Build Coastguard Worker
573*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->u4_disp_wd = ps_app_ctx->u4_strd;
574*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_frm_skip_mode = IVD_SKIP_B;
575*495ae853SAndroid Build Coastguard Worker
576*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_frm_out_mode = IVD_DISPLAY_FRAME_OUT;
577*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_vid_dec_mode = IVD_DECODE_FRAME;
578*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_cmd = IVD_CMD_VIDEO_CTL;
579*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_sub_cmd = IVD_CMD_CTL_SETPARAMS;
580*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->u4_size = sizeof(isvcd_ctl_set_config_ip_t);
581*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_size = sizeof(isvcd_ctl_set_config_op_t);
582*495ae853SAndroid Build Coastguard Worker
583*495ae853SAndroid Build Coastguard Worker e_dec_status = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_h264d_ctl_ip,
584*495ae853SAndroid Build Coastguard Worker (void *) &s_h264d_ctl_op);
585*495ae853SAndroid Build Coastguard Worker
586*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != e_dec_status)
587*495ae853SAndroid Build Coastguard Worker {
588*495ae853SAndroid Build Coastguard Worker printf("Error in Enable SkipB frames \n");
589*495ae853SAndroid Build Coastguard Worker }
590*495ae853SAndroid Build Coastguard Worker
591*495ae853SAndroid Build Coastguard Worker return e_dec_status;
592*495ae853SAndroid Build Coastguard Worker }
593*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
594*495ae853SAndroid Build Coastguard Worker /* */
595*495ae853SAndroid Build Coastguard Worker /* Function Name : disable_skipb_frames */
596*495ae853SAndroid Build Coastguard Worker /* */
597*495ae853SAndroid Build Coastguard Worker /* Description : Control call to disable skipping of b frames */
598*495ae853SAndroid Build Coastguard Worker /* */
599*495ae853SAndroid Build Coastguard Worker /* */
600*495ae853SAndroid Build Coastguard Worker /* Inputs : codec_obj : Codec handle */
601*495ae853SAndroid Build Coastguard Worker /* Globals : */
602*495ae853SAndroid Build Coastguard Worker /* Processing : Calls disable B frame skip control */
603*495ae853SAndroid Build Coastguard Worker /* */
604*495ae853SAndroid Build Coastguard Worker /* Outputs : */
605*495ae853SAndroid Build Coastguard Worker /* Returns : Control call return i4_status */
606*495ae853SAndroid Build Coastguard Worker /* */
607*495ae853SAndroid Build Coastguard Worker /* Issues : */
608*495ae853SAndroid Build Coastguard Worker /* */
609*495ae853SAndroid Build Coastguard Worker /* Revision History: */
610*495ae853SAndroid Build Coastguard Worker /* */
611*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
612*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Initial Version */
613*495ae853SAndroid Build Coastguard Worker /* */
614*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
615*495ae853SAndroid Build Coastguard Worker
disable_skipb_frames(void * codec_obj,vid_dec_ctx_t * ps_app_ctx)616*495ae853SAndroid Build Coastguard Worker IV_API_CALL_STATUS_T disable_skipb_frames(void *codec_obj, vid_dec_ctx_t *ps_app_ctx)
617*495ae853SAndroid Build Coastguard Worker {
618*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_config_ip_t s_h264d_ctl_ip;
619*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_config_op_t s_h264d_ctl_op;
620*495ae853SAndroid Build Coastguard Worker ivd_ctl_set_config_ip_t *ps_ctl_ip = &s_h264d_ctl_ip.s_ivd_ctl_set_config_ip_t;
621*495ae853SAndroid Build Coastguard Worker ivd_ctl_set_config_op_t *ps_ctl_op = &s_h264d_ctl_op.s_ivd_ctl_set_config_op_t;
622*495ae853SAndroid Build Coastguard Worker IV_API_CALL_STATUS_T e_dec_status;
623*495ae853SAndroid Build Coastguard Worker
624*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->u4_disp_wd = ps_app_ctx->u4_strd;
625*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_frm_skip_mode = IVD_SKIP_NONE;
626*495ae853SAndroid Build Coastguard Worker
627*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_frm_out_mode = IVD_DISPLAY_FRAME_OUT;
628*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_vid_dec_mode = IVD_DECODE_FRAME;
629*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_cmd = IVD_CMD_VIDEO_CTL;
630*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_sub_cmd = IVD_CMD_CTL_SETPARAMS;
631*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->u4_size = sizeof(isvcd_ctl_set_config_ip_t);
632*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_size = sizeof(isvcd_ctl_set_config_op_t);
633*495ae853SAndroid Build Coastguard Worker
634*495ae853SAndroid Build Coastguard Worker e_dec_status = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_h264d_ctl_ip,
635*495ae853SAndroid Build Coastguard Worker (void *) &s_h264d_ctl_op);
636*495ae853SAndroid Build Coastguard Worker
637*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != e_dec_status)
638*495ae853SAndroid Build Coastguard Worker {
639*495ae853SAndroid Build Coastguard Worker printf("Error in Disable SkipB frames\n");
640*495ae853SAndroid Build Coastguard Worker }
641*495ae853SAndroid Build Coastguard Worker
642*495ae853SAndroid Build Coastguard Worker return e_dec_status;
643*495ae853SAndroid Build Coastguard Worker }
644*495ae853SAndroid Build Coastguard Worker
645*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
646*495ae853SAndroid Build Coastguard Worker /* */
647*495ae853SAndroid Build Coastguard Worker /* Function Name : enable_skippb_frames */
648*495ae853SAndroid Build Coastguard Worker /* */
649*495ae853SAndroid Build Coastguard Worker /* Description : Control call to enable skipping of P & B frames */
650*495ae853SAndroid Build Coastguard Worker /* */
651*495ae853SAndroid Build Coastguard Worker /* */
652*495ae853SAndroid Build Coastguard Worker /* Inputs : codec_obj : Codec handle */
653*495ae853SAndroid Build Coastguard Worker /* Globals : */
654*495ae853SAndroid Build Coastguard Worker /* Processing : Calls enable skip P and B frames control */
655*495ae853SAndroid Build Coastguard Worker /* */
656*495ae853SAndroid Build Coastguard Worker /* Outputs : */
657*495ae853SAndroid Build Coastguard Worker /* Returns : Control call return i4_status */
658*495ae853SAndroid Build Coastguard Worker /* */
659*495ae853SAndroid Build Coastguard Worker /* Issues : */
660*495ae853SAndroid Build Coastguard Worker /* */
661*495ae853SAndroid Build Coastguard Worker /* Revision History: */
662*495ae853SAndroid Build Coastguard Worker /* */
663*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
664*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Initial Version */
665*495ae853SAndroid Build Coastguard Worker /* */
666*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
667*495ae853SAndroid Build Coastguard Worker
enable_skippb_frames(void * codec_obj,vid_dec_ctx_t * ps_app_ctx)668*495ae853SAndroid Build Coastguard Worker IV_API_CALL_STATUS_T enable_skippb_frames(void *codec_obj, vid_dec_ctx_t *ps_app_ctx)
669*495ae853SAndroid Build Coastguard Worker {
670*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_config_ip_t s_h264d_ctl_ip;
671*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_config_op_t s_h264d_ctl_op;
672*495ae853SAndroid Build Coastguard Worker ivd_ctl_set_config_ip_t *ps_ctl_ip = &s_h264d_ctl_ip.s_ivd_ctl_set_config_ip_t;
673*495ae853SAndroid Build Coastguard Worker ivd_ctl_set_config_op_t *ps_ctl_op = &s_h264d_ctl_op.s_ivd_ctl_set_config_op_t;
674*495ae853SAndroid Build Coastguard Worker IV_API_CALL_STATUS_T e_dec_status;
675*495ae853SAndroid Build Coastguard Worker
676*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->u4_disp_wd = ps_app_ctx->u4_strd;
677*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_frm_skip_mode = IVD_SKIP_PB;
678*495ae853SAndroid Build Coastguard Worker
679*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_frm_out_mode = IVD_DISPLAY_FRAME_OUT;
680*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_vid_dec_mode = IVD_DECODE_FRAME;
681*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_cmd = IVD_CMD_VIDEO_CTL;
682*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_sub_cmd = IVD_CMD_CTL_SETPARAMS;
683*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->u4_size = sizeof(isvcd_ctl_set_config_ip_t);
684*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_size = sizeof(isvcd_ctl_set_config_op_t);
685*495ae853SAndroid Build Coastguard Worker
686*495ae853SAndroid Build Coastguard Worker e_dec_status = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_h264d_ctl_ip,
687*495ae853SAndroid Build Coastguard Worker (void *) &s_h264d_ctl_op);
688*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != e_dec_status)
689*495ae853SAndroid Build Coastguard Worker {
690*495ae853SAndroid Build Coastguard Worker printf("Error in Enable SkipPB frames\n");
691*495ae853SAndroid Build Coastguard Worker }
692*495ae853SAndroid Build Coastguard Worker
693*495ae853SAndroid Build Coastguard Worker return e_dec_status;
694*495ae853SAndroid Build Coastguard Worker }
695*495ae853SAndroid Build Coastguard Worker
696*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
697*495ae853SAndroid Build Coastguard Worker /* */
698*495ae853SAndroid Build Coastguard Worker /* Function Name : disable_skippb_frames */
699*495ae853SAndroid Build Coastguard Worker /* */
700*495ae853SAndroid Build Coastguard Worker /* Description : Control call to disable skipping of P and B frames */
701*495ae853SAndroid Build Coastguard Worker /* */
702*495ae853SAndroid Build Coastguard Worker /* */
703*495ae853SAndroid Build Coastguard Worker /* Inputs : codec_obj : Codec handle */
704*495ae853SAndroid Build Coastguard Worker /* Globals : */
705*495ae853SAndroid Build Coastguard Worker /* Processing : Calls disable P and B frame skip control */
706*495ae853SAndroid Build Coastguard Worker /* */
707*495ae853SAndroid Build Coastguard Worker /* Outputs : */
708*495ae853SAndroid Build Coastguard Worker /* Returns : Control call return i4_status */
709*495ae853SAndroid Build Coastguard Worker /* */
710*495ae853SAndroid Build Coastguard Worker /* Issues : */
711*495ae853SAndroid Build Coastguard Worker /* */
712*495ae853SAndroid Build Coastguard Worker /* Revision History: */
713*495ae853SAndroid Build Coastguard Worker /* */
714*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
715*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Initial Version */
716*495ae853SAndroid Build Coastguard Worker /* */
717*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
718*495ae853SAndroid Build Coastguard Worker
disable_skippb_frames(void * codec_obj,vid_dec_ctx_t * ps_app_ctx)719*495ae853SAndroid Build Coastguard Worker IV_API_CALL_STATUS_T disable_skippb_frames(void *codec_obj, vid_dec_ctx_t *ps_app_ctx)
720*495ae853SAndroid Build Coastguard Worker {
721*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_config_ip_t s_h264d_ctl_ip;
722*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_config_op_t s_h264d_ctl_op;
723*495ae853SAndroid Build Coastguard Worker ivd_ctl_set_config_ip_t *ps_ctl_ip = &s_h264d_ctl_ip.s_ivd_ctl_set_config_ip_t;
724*495ae853SAndroid Build Coastguard Worker ivd_ctl_set_config_op_t *ps_ctl_op = &s_h264d_ctl_op.s_ivd_ctl_set_config_op_t;
725*495ae853SAndroid Build Coastguard Worker IV_API_CALL_STATUS_T e_dec_status;
726*495ae853SAndroid Build Coastguard Worker
727*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->u4_disp_wd = ps_app_ctx->u4_strd;
728*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_frm_skip_mode = IVD_SKIP_NONE;
729*495ae853SAndroid Build Coastguard Worker
730*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_frm_out_mode = IVD_DISPLAY_FRAME_OUT;
731*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_vid_dec_mode = IVD_DECODE_FRAME;
732*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_cmd = IVD_CMD_VIDEO_CTL;
733*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_sub_cmd = IVD_CMD_CTL_SETPARAMS;
734*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->u4_size = sizeof(isvcd_ctl_set_config_ip_t);
735*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_size = sizeof(isvcd_ctl_set_config_op_t);
736*495ae853SAndroid Build Coastguard Worker
737*495ae853SAndroid Build Coastguard Worker e_dec_status = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_h264d_ctl_ip,
738*495ae853SAndroid Build Coastguard Worker (void *) &s_h264d_ctl_op);
739*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != e_dec_status)
740*495ae853SAndroid Build Coastguard Worker {
741*495ae853SAndroid Build Coastguard Worker printf("Error in Disable SkipPB frames\n");
742*495ae853SAndroid Build Coastguard Worker }
743*495ae853SAndroid Build Coastguard Worker
744*495ae853SAndroid Build Coastguard Worker return e_dec_status;
745*495ae853SAndroid Build Coastguard Worker }
746*495ae853SAndroid Build Coastguard Worker
747*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
748*495ae853SAndroid Build Coastguard Worker /* */
749*495ae853SAndroid Build Coastguard Worker /* Function Name : release_disp_frame */
750*495ae853SAndroid Build Coastguard Worker /* */
751*495ae853SAndroid Build Coastguard Worker /* Description : Calls release display control - Used to signal to the */
752*495ae853SAndroid Build Coastguard Worker /* decoder that this particular buffer has been displayed */
753*495ae853SAndroid Build Coastguard Worker /* and that the codec is now free to write to this buffer */
754*495ae853SAndroid Build Coastguard Worker /* */
755*495ae853SAndroid Build Coastguard Worker /* */
756*495ae853SAndroid Build Coastguard Worker /* Inputs : codec_obj : Codec Handle */
757*495ae853SAndroid Build Coastguard Worker /* buf_id : Buffer Id of the buffer to be released */
758*495ae853SAndroid Build Coastguard Worker /* This id would have been returned earlier by */
759*495ae853SAndroid Build Coastguard Worker /* the codec */
760*495ae853SAndroid Build Coastguard Worker /* Globals : */
761*495ae853SAndroid Build Coastguard Worker /* Processing : Calls Release Display call */
762*495ae853SAndroid Build Coastguard Worker /* */
763*495ae853SAndroid Build Coastguard Worker /* Outputs : */
764*495ae853SAndroid Build Coastguard Worker /* Returns : Status of release display call */
765*495ae853SAndroid Build Coastguard Worker /* */
766*495ae853SAndroid Build Coastguard Worker /* Issues : */
767*495ae853SAndroid Build Coastguard Worker /* */
768*495ae853SAndroid Build Coastguard Worker /* Revision History: */
769*495ae853SAndroid Build Coastguard Worker /* */
770*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
771*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Initial Version */
772*495ae853SAndroid Build Coastguard Worker /* */
773*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
774*495ae853SAndroid Build Coastguard Worker
release_disp_frame(void * codec_obj,UWORD32 buf_id)775*495ae853SAndroid Build Coastguard Worker IV_API_CALL_STATUS_T release_disp_frame(void *codec_obj, UWORD32 buf_id)
776*495ae853SAndroid Build Coastguard Worker {
777*495ae853SAndroid Build Coastguard Worker ivd_rel_display_frame_ip_t s_video_rel_disp_ip;
778*495ae853SAndroid Build Coastguard Worker ivd_rel_display_frame_op_t s_video_rel_disp_op;
779*495ae853SAndroid Build Coastguard Worker IV_API_CALL_STATUS_T e_dec_status;
780*495ae853SAndroid Build Coastguard Worker
781*495ae853SAndroid Build Coastguard Worker s_video_rel_disp_ip.e_cmd = IVD_CMD_REL_DISPLAY_FRAME;
782*495ae853SAndroid Build Coastguard Worker s_video_rel_disp_ip.u4_size = sizeof(ivd_rel_display_frame_ip_t);
783*495ae853SAndroid Build Coastguard Worker s_video_rel_disp_op.u4_size = sizeof(ivd_rel_display_frame_op_t);
784*495ae853SAndroid Build Coastguard Worker s_video_rel_disp_ip.u4_disp_buf_id = buf_id;
785*495ae853SAndroid Build Coastguard Worker
786*495ae853SAndroid Build Coastguard Worker e_dec_status = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_video_rel_disp_ip,
787*495ae853SAndroid Build Coastguard Worker (void *) &s_video_rel_disp_op);
788*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != e_dec_status)
789*495ae853SAndroid Build Coastguard Worker {
790*495ae853SAndroid Build Coastguard Worker printf("Error in Release Disp frame\n");
791*495ae853SAndroid Build Coastguard Worker }
792*495ae853SAndroid Build Coastguard Worker
793*495ae853SAndroid Build Coastguard Worker return (e_dec_status);
794*495ae853SAndroid Build Coastguard Worker }
795*495ae853SAndroid Build Coastguard Worker
796*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
797*495ae853SAndroid Build Coastguard Worker /* */
798*495ae853SAndroid Build Coastguard Worker /* Function Name : get_version */
799*495ae853SAndroid Build Coastguard Worker /* */
800*495ae853SAndroid Build Coastguard Worker /* Description : Control call to get codec version */
801*495ae853SAndroid Build Coastguard Worker /* */
802*495ae853SAndroid Build Coastguard Worker /* */
803*495ae853SAndroid Build Coastguard Worker /* Inputs : codec_obj : Codec handle */
804*495ae853SAndroid Build Coastguard Worker /* Globals : */
805*495ae853SAndroid Build Coastguard Worker /* Processing : Calls enable skip B frames control */
806*495ae853SAndroid Build Coastguard Worker /* */
807*495ae853SAndroid Build Coastguard Worker /* Outputs : */
808*495ae853SAndroid Build Coastguard Worker /* Returns : Control call return i4_status */
809*495ae853SAndroid Build Coastguard Worker /* */
810*495ae853SAndroid Build Coastguard Worker /* Issues : */
811*495ae853SAndroid Build Coastguard Worker /* */
812*495ae853SAndroid Build Coastguard Worker /* Revision History: */
813*495ae853SAndroid Build Coastguard Worker /* */
814*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
815*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Initial Version */
816*495ae853SAndroid Build Coastguard Worker /* */
817*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
818*495ae853SAndroid Build Coastguard Worker
get_version(void * codec_obj)819*495ae853SAndroid Build Coastguard Worker IV_API_CALL_STATUS_T get_version(void *codec_obj)
820*495ae853SAndroid Build Coastguard Worker {
821*495ae853SAndroid Build Coastguard Worker ivd_ctl_getversioninfo_ip_t ps_ctl_ip;
822*495ae853SAndroid Build Coastguard Worker ivd_ctl_getversioninfo_op_t ps_ctl_op;
823*495ae853SAndroid Build Coastguard Worker UWORD8 au1_buf[512];
824*495ae853SAndroid Build Coastguard Worker IV_API_CALL_STATUS_T i4_status;
825*495ae853SAndroid Build Coastguard Worker ps_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
826*495ae853SAndroid Build Coastguard Worker ps_ctl_ip.e_sub_cmd = IVD_CMD_CTL_GETVERSION;
827*495ae853SAndroid Build Coastguard Worker ps_ctl_ip.u4_size = sizeof(ivd_ctl_getversioninfo_ip_t);
828*495ae853SAndroid Build Coastguard Worker ps_ctl_op.u4_size = sizeof(ivd_ctl_getversioninfo_op_t);
829*495ae853SAndroid Build Coastguard Worker ps_ctl_ip.pv_version_buffer = au1_buf;
830*495ae853SAndroid Build Coastguard Worker ps_ctl_ip.u4_version_buffer_size = sizeof(au1_buf);
831*495ae853SAndroid Build Coastguard Worker
832*495ae853SAndroid Build Coastguard Worker i4_status =
833*495ae853SAndroid Build Coastguard Worker ivd_api_function((iv_obj_t *) codec_obj, (void *) &(ps_ctl_ip), (void *) &(ps_ctl_op));
834*495ae853SAndroid Build Coastguard Worker
835*495ae853SAndroid Build Coastguard Worker if(i4_status != IV_SUCCESS)
836*495ae853SAndroid Build Coastguard Worker {
837*495ae853SAndroid Build Coastguard Worker printf(
838*495ae853SAndroid Build Coastguard Worker "Error in Getting Version number e_dec_status = %d u4_error_code = "
839*495ae853SAndroid Build Coastguard Worker "%x\n",
840*495ae853SAndroid Build Coastguard Worker i4_status, ps_ctl_op.u4_error_code);
841*495ae853SAndroid Build Coastguard Worker }
842*495ae853SAndroid Build Coastguard Worker else
843*495ae853SAndroid Build Coastguard Worker {
844*495ae853SAndroid Build Coastguard Worker printf("Ittiam Decoder Version number: %s\n", (char *) ps_ctl_ip.pv_version_buffer);
845*495ae853SAndroid Build Coastguard Worker }
846*495ae853SAndroid Build Coastguard Worker return i4_status;
847*495ae853SAndroid Build Coastguard Worker }
848*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
849*495ae853SAndroid Build Coastguard Worker /* */
850*495ae853SAndroid Build Coastguard Worker /* Function Name : codec_exit */
851*495ae853SAndroid Build Coastguard Worker /* */
852*495ae853SAndroid Build Coastguard Worker /* Description : handles unrecoverable errors */
853*495ae853SAndroid Build Coastguard Worker /* Inputs : Error message */
854*495ae853SAndroid Build Coastguard Worker /* Globals : None */
855*495ae853SAndroid Build Coastguard Worker /* Processing : Prints error message to console and exits. */
856*495ae853SAndroid Build Coastguard Worker /* Outputs : Error mesage to the console */
857*495ae853SAndroid Build Coastguard Worker /* Returns : None */
858*495ae853SAndroid Build Coastguard Worker /* */
859*495ae853SAndroid Build Coastguard Worker /* Issues : */
860*495ae853SAndroid Build Coastguard Worker /* */
861*495ae853SAndroid Build Coastguard Worker /* Revision History: */
862*495ae853SAndroid Build Coastguard Worker /* */
863*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
864*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Creation */
865*495ae853SAndroid Build Coastguard Worker /* */
866*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
codec_exit(CHAR * pc_err_message)867*495ae853SAndroid Build Coastguard Worker void codec_exit(CHAR *pc_err_message)
868*495ae853SAndroid Build Coastguard Worker {
869*495ae853SAndroid Build Coastguard Worker printf("%s\n", pc_err_message);
870*495ae853SAndroid Build Coastguard Worker exit(-1);
871*495ae853SAndroid Build Coastguard Worker }
872*495ae853SAndroid Build Coastguard Worker
873*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
874*495ae853SAndroid Build Coastguard Worker /* */
875*495ae853SAndroid Build Coastguard Worker /* Function Name : dump_output */
876*495ae853SAndroid Build Coastguard Worker /* */
877*495ae853SAndroid Build Coastguard Worker /* Description : Used to dump output YUV */
878*495ae853SAndroid Build Coastguard Worker /* Inputs : App context, disp output desc, File pointer */
879*495ae853SAndroid Build Coastguard Worker /* Globals : None */
880*495ae853SAndroid Build Coastguard Worker /* Processing : Dumps to a file */
881*495ae853SAndroid Build Coastguard Worker /* Returns : None */
882*495ae853SAndroid Build Coastguard Worker /* */
883*495ae853SAndroid Build Coastguard Worker /* Issues : */
884*495ae853SAndroid Build Coastguard Worker /* */
885*495ae853SAndroid Build Coastguard Worker /* Revision History: */
886*495ae853SAndroid Build Coastguard Worker /* */
887*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
888*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Creation */
889*495ae853SAndroid Build Coastguard Worker /* */
890*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
dump_output(vid_dec_ctx_t * ps_app_ctx,iv_yuv_buf_t * ps_disp_frm_buf,isvcd_video_decode_op_t * ps_h264d_decode_op,UWORD32 u4_disp_frm_id,FILE * ps_op_file,FILE * ps_qp_file,FILE * ps_mb_type_file,FILE * ps_op_chksum_file,WORD32 i4_op_frm_ts,UWORD32 file_save,UWORD32 chksum_save,UWORD32 mbinfo_save)891*495ae853SAndroid Build Coastguard Worker void dump_output(vid_dec_ctx_t *ps_app_ctx, iv_yuv_buf_t *ps_disp_frm_buf,
892*495ae853SAndroid Build Coastguard Worker isvcd_video_decode_op_t *ps_h264d_decode_op, UWORD32 u4_disp_frm_id,
893*495ae853SAndroid Build Coastguard Worker FILE *ps_op_file, FILE *ps_qp_file, FILE *ps_mb_type_file, FILE *ps_op_chksum_file,
894*495ae853SAndroid Build Coastguard Worker WORD32 i4_op_frm_ts, UWORD32 file_save, UWORD32 chksum_save, UWORD32 mbinfo_save)
895*495ae853SAndroid Build Coastguard Worker
896*495ae853SAndroid Build Coastguard Worker {
897*495ae853SAndroid Build Coastguard Worker UWORD32 i;
898*495ae853SAndroid Build Coastguard Worker iv_yuv_buf_t s_dump_disp_frm_buf;
899*495ae853SAndroid Build Coastguard Worker UWORD32 u4_disp_id;
900*495ae853SAndroid Build Coastguard Worker
901*495ae853SAndroid Build Coastguard Worker memset(&s_dump_disp_frm_buf, 0, sizeof(iv_yuv_buf_t));
902*495ae853SAndroid Build Coastguard Worker
903*495ae853SAndroid Build Coastguard Worker if(ps_app_ctx->u4_share_disp_buf)
904*495ae853SAndroid Build Coastguard Worker {
905*495ae853SAndroid Build Coastguard Worker if(ps_app_ctx->dump_q_wr_idx == MAX_DISP_BUFFERS) ps_app_ctx->dump_q_wr_idx = 0;
906*495ae853SAndroid Build Coastguard Worker
907*495ae853SAndroid Build Coastguard Worker if(ps_app_ctx->dump_q_rd_idx == MAX_DISP_BUFFERS) ps_app_ctx->dump_q_rd_idx = 0;
908*495ae853SAndroid Build Coastguard Worker
909*495ae853SAndroid Build Coastguard Worker ps_app_ctx->s_disp_frm_queue[ps_app_ctx->dump_q_wr_idx] = *ps_disp_frm_buf;
910*495ae853SAndroid Build Coastguard Worker ps_app_ctx->s_disp_frm_id_queue[ps_app_ctx->dump_q_wr_idx] = u4_disp_frm_id;
911*495ae853SAndroid Build Coastguard Worker ps_app_ctx->dump_q_wr_idx++;
912*495ae853SAndroid Build Coastguard Worker
913*495ae853SAndroid Build Coastguard Worker if((WORD32) i4_op_frm_ts >= (WORD32) (ps_app_ctx->disp_delay - 1))
914*495ae853SAndroid Build Coastguard Worker {
915*495ae853SAndroid Build Coastguard Worker s_dump_disp_frm_buf = ps_app_ctx->s_disp_frm_queue[ps_app_ctx->dump_q_rd_idx];
916*495ae853SAndroid Build Coastguard Worker u4_disp_id = ps_app_ctx->s_disp_frm_id_queue[ps_app_ctx->dump_q_rd_idx];
917*495ae853SAndroid Build Coastguard Worker ps_app_ctx->dump_q_rd_idx++;
918*495ae853SAndroid Build Coastguard Worker }
919*495ae853SAndroid Build Coastguard Worker else
920*495ae853SAndroid Build Coastguard Worker {
921*495ae853SAndroid Build Coastguard Worker return;
922*495ae853SAndroid Build Coastguard Worker }
923*495ae853SAndroid Build Coastguard Worker }
924*495ae853SAndroid Build Coastguard Worker else
925*495ae853SAndroid Build Coastguard Worker {
926*495ae853SAndroid Build Coastguard Worker s_dump_disp_frm_buf = *ps_disp_frm_buf;
927*495ae853SAndroid Build Coastguard Worker u4_disp_id = u4_disp_frm_id;
928*495ae853SAndroid Build Coastguard Worker }
929*495ae853SAndroid Build Coastguard Worker
930*495ae853SAndroid Build Coastguard Worker release_disp_frame(ps_app_ctx->cocodec_obj, u4_disp_id);
931*495ae853SAndroid Build Coastguard Worker
932*495ae853SAndroid Build Coastguard Worker if(0 == file_save && 0 == chksum_save && 0 == mbinfo_save) return;
933*495ae853SAndroid Build Coastguard Worker
934*495ae853SAndroid Build Coastguard Worker if(0 != mbinfo_save)
935*495ae853SAndroid Build Coastguard Worker {
936*495ae853SAndroid Build Coastguard Worker UWORD8 *buf;
937*495ae853SAndroid Build Coastguard Worker if(ps_h264d_decode_op->pu1_8x8_blk_qp_map && ps_qp_file)
938*495ae853SAndroid Build Coastguard Worker {
939*495ae853SAndroid Build Coastguard Worker buf = ps_h264d_decode_op->pu1_8x8_blk_qp_map;
940*495ae853SAndroid Build Coastguard Worker fwrite(buf, 1, ps_h264d_decode_op->u4_8x8_blk_qp_map_size, ps_qp_file);
941*495ae853SAndroid Build Coastguard Worker fflush(ps_qp_file);
942*495ae853SAndroid Build Coastguard Worker }
943*495ae853SAndroid Build Coastguard Worker if(ps_h264d_decode_op->pu1_8x8_blk_type_map && ps_mb_type_file)
944*495ae853SAndroid Build Coastguard Worker {
945*495ae853SAndroid Build Coastguard Worker buf = ps_h264d_decode_op->pu1_8x8_blk_type_map;
946*495ae853SAndroid Build Coastguard Worker fwrite(buf, 1, ps_h264d_decode_op->u4_8x8_blk_type_map_size, ps_mb_type_file);
947*495ae853SAndroid Build Coastguard Worker fflush(ps_mb_type_file);
948*495ae853SAndroid Build Coastguard Worker }
949*495ae853SAndroid Build Coastguard Worker }
950*495ae853SAndroid Build Coastguard Worker if(NULL == s_dump_disp_frm_buf.pv_y_buf) return;
951*495ae853SAndroid Build Coastguard Worker
952*495ae853SAndroid Build Coastguard Worker if(ps_app_ctx->e_output_chroma_format == IV_YUV_420P)
953*495ae853SAndroid Build Coastguard Worker {
954*495ae853SAndroid Build Coastguard Worker #if DUMP_SINGLE_BUF
955*495ae853SAndroid Build Coastguard Worker {
956*495ae853SAndroid Build Coastguard Worker UWORD8 *buf = s_dump_disp_frm_buf.pv_y_buf - 80 - (s_dump_disp_frm_buf.u4_y_strd * 80);
957*495ae853SAndroid Build Coastguard Worker
958*495ae853SAndroid Build Coastguard Worker UWORD32 i4_size = s_dump_disp_frm_buf.u4_y_strd * ((s_dump_disp_frm_buf.u4_y_ht + 160) +
959*495ae853SAndroid Build Coastguard Worker (s_dump_disp_frm_buf.u4_u_ht + 80));
960*495ae853SAndroid Build Coastguard Worker fwrite(buf, 1, i4_size, ps_op_file);
961*495ae853SAndroid Build Coastguard Worker }
962*495ae853SAndroid Build Coastguard Worker #else
963*495ae853SAndroid Build Coastguard Worker if(0 != file_save && ps_op_file)
964*495ae853SAndroid Build Coastguard Worker {
965*495ae853SAndroid Build Coastguard Worker UWORD8 *buf;
966*495ae853SAndroid Build Coastguard Worker
967*495ae853SAndroid Build Coastguard Worker buf = (UWORD8 *) s_dump_disp_frm_buf.pv_y_buf;
968*495ae853SAndroid Build Coastguard Worker for(i = 0; i < s_dump_disp_frm_buf.u4_y_ht; i++)
969*495ae853SAndroid Build Coastguard Worker {
970*495ae853SAndroid Build Coastguard Worker fwrite(buf, 1, s_dump_disp_frm_buf.u4_y_wd, ps_op_file);
971*495ae853SAndroid Build Coastguard Worker buf += s_dump_disp_frm_buf.u4_y_strd;
972*495ae853SAndroid Build Coastguard Worker }
973*495ae853SAndroid Build Coastguard Worker
974*495ae853SAndroid Build Coastguard Worker buf = (UWORD8 *) s_dump_disp_frm_buf.pv_u_buf;
975*495ae853SAndroid Build Coastguard Worker for(i = 0; i < s_dump_disp_frm_buf.u4_u_ht; i++)
976*495ae853SAndroid Build Coastguard Worker {
977*495ae853SAndroid Build Coastguard Worker fwrite(buf, 1, s_dump_disp_frm_buf.u4_u_wd, ps_op_file);
978*495ae853SAndroid Build Coastguard Worker buf += s_dump_disp_frm_buf.u4_u_strd;
979*495ae853SAndroid Build Coastguard Worker }
980*495ae853SAndroid Build Coastguard Worker buf = (UWORD8 *) s_dump_disp_frm_buf.pv_v_buf;
981*495ae853SAndroid Build Coastguard Worker for(i = 0; i < s_dump_disp_frm_buf.u4_v_ht; i++)
982*495ae853SAndroid Build Coastguard Worker {
983*495ae853SAndroid Build Coastguard Worker fwrite(buf, 1, s_dump_disp_frm_buf.u4_v_wd, ps_op_file);
984*495ae853SAndroid Build Coastguard Worker buf += s_dump_disp_frm_buf.u4_v_strd;
985*495ae853SAndroid Build Coastguard Worker }
986*495ae853SAndroid Build Coastguard Worker }
987*495ae853SAndroid Build Coastguard Worker
988*495ae853SAndroid Build Coastguard Worker if(0 != chksum_save && ps_op_chksum_file)
989*495ae853SAndroid Build Coastguard Worker {
990*495ae853SAndroid Build Coastguard Worker UWORD8 au1_y_chksum[16];
991*495ae853SAndroid Build Coastguard Worker UWORD8 au1_u_chksum[16];
992*495ae853SAndroid Build Coastguard Worker UWORD8 au1_v_chksum[16];
993*495ae853SAndroid Build Coastguard Worker calc_md5_cksum((UWORD8 *) s_dump_disp_frm_buf.pv_y_buf, s_dump_disp_frm_buf.u4_y_strd,
994*495ae853SAndroid Build Coastguard Worker s_dump_disp_frm_buf.u4_y_wd, s_dump_disp_frm_buf.u4_y_ht, au1_y_chksum);
995*495ae853SAndroid Build Coastguard Worker calc_md5_cksum((UWORD8 *) s_dump_disp_frm_buf.pv_u_buf, s_dump_disp_frm_buf.u4_u_strd,
996*495ae853SAndroid Build Coastguard Worker s_dump_disp_frm_buf.u4_u_wd, s_dump_disp_frm_buf.u4_u_ht, au1_u_chksum);
997*495ae853SAndroid Build Coastguard Worker calc_md5_cksum((UWORD8 *) s_dump_disp_frm_buf.pv_v_buf, s_dump_disp_frm_buf.u4_v_strd,
998*495ae853SAndroid Build Coastguard Worker s_dump_disp_frm_buf.u4_v_wd, s_dump_disp_frm_buf.u4_v_ht, au1_v_chksum);
999*495ae853SAndroid Build Coastguard Worker
1000*495ae853SAndroid Build Coastguard Worker fwrite(au1_y_chksum, sizeof(UWORD8), 16, ps_op_chksum_file);
1001*495ae853SAndroid Build Coastguard Worker fwrite(au1_u_chksum, sizeof(UWORD8), 16, ps_op_chksum_file);
1002*495ae853SAndroid Build Coastguard Worker fwrite(au1_v_chksum, sizeof(UWORD8), 16, ps_op_chksum_file);
1003*495ae853SAndroid Build Coastguard Worker }
1004*495ae853SAndroid Build Coastguard Worker #endif
1005*495ae853SAndroid Build Coastguard Worker }
1006*495ae853SAndroid Build Coastguard Worker else if((ps_app_ctx->e_output_chroma_format == IV_YUV_420SP_UV) ||
1007*495ae853SAndroid Build Coastguard Worker (ps_app_ctx->e_output_chroma_format == IV_YUV_420SP_VU))
1008*495ae853SAndroid Build Coastguard Worker {
1009*495ae853SAndroid Build Coastguard Worker #if DUMP_SINGLE_BUF
1010*495ae853SAndroid Build Coastguard Worker {
1011*495ae853SAndroid Build Coastguard Worker UWORD8 *buf = s_dump_disp_frm_buf.pv_y_buf - 24 - (s_dump_disp_frm_buf.u4_y_strd * 40);
1012*495ae853SAndroid Build Coastguard Worker
1013*495ae853SAndroid Build Coastguard Worker UWORD32 i4_size = s_dump_disp_frm_buf.u4_y_strd * ((s_dump_disp_frm_buf.u4_y_ht + 80) +
1014*495ae853SAndroid Build Coastguard Worker (s_dump_disp_frm_buf.u4_u_ht + 40));
1015*495ae853SAndroid Build Coastguard Worker fwrite(buf, 1, i4_size, ps_op_file);
1016*495ae853SAndroid Build Coastguard Worker }
1017*495ae853SAndroid Build Coastguard Worker #else
1018*495ae853SAndroid Build Coastguard Worker {
1019*495ae853SAndroid Build Coastguard Worker UWORD8 *buf;
1020*495ae853SAndroid Build Coastguard Worker
1021*495ae853SAndroid Build Coastguard Worker buf = (UWORD8 *) s_dump_disp_frm_buf.pv_y_buf;
1022*495ae853SAndroid Build Coastguard Worker for(i = 0; i < s_dump_disp_frm_buf.u4_y_ht; i++)
1023*495ae853SAndroid Build Coastguard Worker {
1024*495ae853SAndroid Build Coastguard Worker fwrite(buf, 1, s_dump_disp_frm_buf.u4_y_wd, ps_op_file);
1025*495ae853SAndroid Build Coastguard Worker buf += s_dump_disp_frm_buf.u4_y_strd;
1026*495ae853SAndroid Build Coastguard Worker }
1027*495ae853SAndroid Build Coastguard Worker
1028*495ae853SAndroid Build Coastguard Worker buf = (UWORD8 *) s_dump_disp_frm_buf.pv_u_buf;
1029*495ae853SAndroid Build Coastguard Worker for(i = 0; i < s_dump_disp_frm_buf.u4_u_ht; i++)
1030*495ae853SAndroid Build Coastguard Worker {
1031*495ae853SAndroid Build Coastguard Worker fwrite(buf, 1, s_dump_disp_frm_buf.u4_u_wd, ps_op_file);
1032*495ae853SAndroid Build Coastguard Worker buf += s_dump_disp_frm_buf.u4_u_strd;
1033*495ae853SAndroid Build Coastguard Worker }
1034*495ae853SAndroid Build Coastguard Worker }
1035*495ae853SAndroid Build Coastguard Worker #endif
1036*495ae853SAndroid Build Coastguard Worker }
1037*495ae853SAndroid Build Coastguard Worker else if(ps_app_ctx->e_output_chroma_format == IV_RGBA_8888)
1038*495ae853SAndroid Build Coastguard Worker {
1039*495ae853SAndroid Build Coastguard Worker UWORD8 *buf;
1040*495ae853SAndroid Build Coastguard Worker
1041*495ae853SAndroid Build Coastguard Worker buf = (UWORD8 *) s_dump_disp_frm_buf.pv_y_buf;
1042*495ae853SAndroid Build Coastguard Worker for(i = 0; i < s_dump_disp_frm_buf.u4_y_ht; i++)
1043*495ae853SAndroid Build Coastguard Worker {
1044*495ae853SAndroid Build Coastguard Worker fwrite(buf, 1, s_dump_disp_frm_buf.u4_y_wd * 4, ps_op_file);
1045*495ae853SAndroid Build Coastguard Worker buf += s_dump_disp_frm_buf.u4_y_strd * 4;
1046*495ae853SAndroid Build Coastguard Worker }
1047*495ae853SAndroid Build Coastguard Worker }
1048*495ae853SAndroid Build Coastguard Worker else
1049*495ae853SAndroid Build Coastguard Worker {
1050*495ae853SAndroid Build Coastguard Worker UWORD8 *buf;
1051*495ae853SAndroid Build Coastguard Worker
1052*495ae853SAndroid Build Coastguard Worker buf = (UWORD8 *) s_dump_disp_frm_buf.pv_y_buf;
1053*495ae853SAndroid Build Coastguard Worker for(i = 0; i < s_dump_disp_frm_buf.u4_y_ht; i++)
1054*495ae853SAndroid Build Coastguard Worker {
1055*495ae853SAndroid Build Coastguard Worker fwrite(buf, 1, s_dump_disp_frm_buf.u4_y_strd * 2, ps_op_file);
1056*495ae853SAndroid Build Coastguard Worker buf += s_dump_disp_frm_buf.u4_y_strd * 2;
1057*495ae853SAndroid Build Coastguard Worker }
1058*495ae853SAndroid Build Coastguard Worker }
1059*495ae853SAndroid Build Coastguard Worker
1060*495ae853SAndroid Build Coastguard Worker fflush(ps_op_file);
1061*495ae853SAndroid Build Coastguard Worker fflush(ps_op_chksum_file);
1062*495ae853SAndroid Build Coastguard Worker }
1063*495ae853SAndroid Build Coastguard Worker
1064*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1065*495ae853SAndroid Build Coastguard Worker /* */
1066*495ae853SAndroid Build Coastguard Worker /* Function Name : print_usage */
1067*495ae853SAndroid Build Coastguard Worker /* */
1068*495ae853SAndroid Build Coastguard Worker /* Description : Prints argument format */
1069*495ae853SAndroid Build Coastguard Worker /* */
1070*495ae853SAndroid Build Coastguard Worker /* */
1071*495ae853SAndroid Build Coastguard Worker /* Inputs : */
1072*495ae853SAndroid Build Coastguard Worker /* Globals : */
1073*495ae853SAndroid Build Coastguard Worker /* Processing : Prints argument format */
1074*495ae853SAndroid Build Coastguard Worker /* */
1075*495ae853SAndroid Build Coastguard Worker /* Outputs : */
1076*495ae853SAndroid Build Coastguard Worker /* Returns : */
1077*495ae853SAndroid Build Coastguard Worker /* */
1078*495ae853SAndroid Build Coastguard Worker /* Issues : */
1079*495ae853SAndroid Build Coastguard Worker /* */
1080*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1081*495ae853SAndroid Build Coastguard Worker /* */
1082*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
1083*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Initial Version */
1084*495ae853SAndroid Build Coastguard Worker /* */
1085*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1086*495ae853SAndroid Build Coastguard Worker
print_usage(void)1087*495ae853SAndroid Build Coastguard Worker void print_usage(void)
1088*495ae853SAndroid Build Coastguard Worker {
1089*495ae853SAndroid Build Coastguard Worker WORD32 i = 0;
1090*495ae853SAndroid Build Coastguard Worker WORD32 num_entries = sizeof(argument_mapping) / sizeof(argument_t);
1091*495ae853SAndroid Build Coastguard Worker printf("\nUsage:\n");
1092*495ae853SAndroid Build Coastguard Worker while(i < num_entries)
1093*495ae853SAndroid Build Coastguard Worker {
1094*495ae853SAndroid Build Coastguard Worker printf("%-32s\t %s", argument_mapping[i].argument_name, argument_mapping[i].description);
1095*495ae853SAndroid Build Coastguard Worker i++;
1096*495ae853SAndroid Build Coastguard Worker }
1097*495ae853SAndroid Build Coastguard Worker }
1098*495ae853SAndroid Build Coastguard Worker
1099*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1100*495ae853SAndroid Build Coastguard Worker /* */
1101*495ae853SAndroid Build Coastguard Worker /* Function Name : get_argument */
1102*495ae853SAndroid Build Coastguard Worker /* */
1103*495ae853SAndroid Build Coastguard Worker /* Description : Gets argument for a given string */
1104*495ae853SAndroid Build Coastguard Worker /* */
1105*495ae853SAndroid Build Coastguard Worker /* */
1106*495ae853SAndroid Build Coastguard Worker /* Inputs : name */
1107*495ae853SAndroid Build Coastguard Worker /* Globals : */
1108*495ae853SAndroid Build Coastguard Worker /* Processing : Searches the given string in the array and returns */
1109*495ae853SAndroid Build Coastguard Worker /* appropriate argument ID */
1110*495ae853SAndroid Build Coastguard Worker /* */
1111*495ae853SAndroid Build Coastguard Worker /* Outputs : Argument ID */
1112*495ae853SAndroid Build Coastguard Worker /* Returns : Argument ID */
1113*495ae853SAndroid Build Coastguard Worker /* */
1114*495ae853SAndroid Build Coastguard Worker /* Issues : */
1115*495ae853SAndroid Build Coastguard Worker /* */
1116*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1117*495ae853SAndroid Build Coastguard Worker /* */
1118*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
1119*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Initial Version */
1120*495ae853SAndroid Build Coastguard Worker /* */
1121*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1122*495ae853SAndroid Build Coastguard Worker
get_argument(CHAR * name)1123*495ae853SAndroid Build Coastguard Worker ARGUMENT_T get_argument(CHAR *name)
1124*495ae853SAndroid Build Coastguard Worker {
1125*495ae853SAndroid Build Coastguard Worker WORD32 i = 0;
1126*495ae853SAndroid Build Coastguard Worker WORD32 num_entries = sizeof(argument_mapping) / sizeof(argument_t);
1127*495ae853SAndroid Build Coastguard Worker while(i < num_entries)
1128*495ae853SAndroid Build Coastguard Worker {
1129*495ae853SAndroid Build Coastguard Worker if((0 == strcmp(argument_mapping[i].argument_name, name)) ||
1130*495ae853SAndroid Build Coastguard Worker ((0 == strcmp(argument_mapping[i].argument_shortname, name)) &&
1131*495ae853SAndroid Build Coastguard Worker (0 != strcmp(argument_mapping[i].argument_shortname, "--"))))
1132*495ae853SAndroid Build Coastguard Worker {
1133*495ae853SAndroid Build Coastguard Worker return argument_mapping[i].argument;
1134*495ae853SAndroid Build Coastguard Worker }
1135*495ae853SAndroid Build Coastguard Worker i++;
1136*495ae853SAndroid Build Coastguard Worker }
1137*495ae853SAndroid Build Coastguard Worker return INVALID;
1138*495ae853SAndroid Build Coastguard Worker }
1139*495ae853SAndroid Build Coastguard Worker
1140*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1141*495ae853SAndroid Build Coastguard Worker /* */
1142*495ae853SAndroid Build Coastguard Worker /* Function Name : get_argument */
1143*495ae853SAndroid Build Coastguard Worker /* */
1144*495ae853SAndroid Build Coastguard Worker /* Description : Gets argument for a given string */
1145*495ae853SAndroid Build Coastguard Worker /* */
1146*495ae853SAndroid Build Coastguard Worker /* */
1147*495ae853SAndroid Build Coastguard Worker /* Inputs : name */
1148*495ae853SAndroid Build Coastguard Worker /* Globals : */
1149*495ae853SAndroid Build Coastguard Worker /* Processing : Searches the given string in the array and returns */
1150*495ae853SAndroid Build Coastguard Worker /* appropriate argument ID */
1151*495ae853SAndroid Build Coastguard Worker /* */
1152*495ae853SAndroid Build Coastguard Worker /* Outputs : Argument ID */
1153*495ae853SAndroid Build Coastguard Worker /* Returns : Argument ID */
1154*495ae853SAndroid Build Coastguard Worker /* */
1155*495ae853SAndroid Build Coastguard Worker /* Issues : */
1156*495ae853SAndroid Build Coastguard Worker /* */
1157*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1158*495ae853SAndroid Build Coastguard Worker /* */
1159*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
1160*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Initial Version */
1161*495ae853SAndroid Build Coastguard Worker /* */
1162*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1163*495ae853SAndroid Build Coastguard Worker
parse_argument(vid_dec_ctx_t * ps_app_ctx,CHAR * argument,CHAR * value)1164*495ae853SAndroid Build Coastguard Worker void parse_argument(vid_dec_ctx_t *ps_app_ctx, CHAR *argument, CHAR *value)
1165*495ae853SAndroid Build Coastguard Worker {
1166*495ae853SAndroid Build Coastguard Worker ARGUMENT_T arg;
1167*495ae853SAndroid Build Coastguard Worker
1168*495ae853SAndroid Build Coastguard Worker arg = get_argument(argument);
1169*495ae853SAndroid Build Coastguard Worker switch(arg)
1170*495ae853SAndroid Build Coastguard Worker {
1171*495ae853SAndroid Build Coastguard Worker case HELP:
1172*495ae853SAndroid Build Coastguard Worker print_usage();
1173*495ae853SAndroid Build Coastguard Worker exit(-1);
1174*495ae853SAndroid Build Coastguard Worker case VERSION:
1175*495ae853SAndroid Build Coastguard Worker break;
1176*495ae853SAndroid Build Coastguard Worker case INPUT_FILE:
1177*495ae853SAndroid Build Coastguard Worker sscanf(value, "%" STR(STRLENGTH) "s", ps_app_ctx->ac_ip_fname);
1178*495ae853SAndroid Build Coastguard Worker // input_passed = 1;
1179*495ae853SAndroid Build Coastguard Worker break;
1180*495ae853SAndroid Build Coastguard Worker
1181*495ae853SAndroid Build Coastguard Worker case OUTPUT:
1182*495ae853SAndroid Build Coastguard Worker sscanf(value, "%" STR(STRLENGTH) "s", ps_app_ctx->ac_op_fname);
1183*495ae853SAndroid Build Coastguard Worker break;
1184*495ae853SAndroid Build Coastguard Worker
1185*495ae853SAndroid Build Coastguard Worker case QP_MAP_FILE:
1186*495ae853SAndroid Build Coastguard Worker sscanf(value, "%" STR(STRLENGTH) "s", ps_app_ctx->ac_qp_map_fname);
1187*495ae853SAndroid Build Coastguard Worker break;
1188*495ae853SAndroid Build Coastguard Worker
1189*495ae853SAndroid Build Coastguard Worker case BLK_TYPE_MAP_FILE:
1190*495ae853SAndroid Build Coastguard Worker sscanf(value, "%" STR(STRLENGTH) "s", ps_app_ctx->ac_blk_type_map_fname);
1191*495ae853SAndroid Build Coastguard Worker break;
1192*495ae853SAndroid Build Coastguard Worker
1193*495ae853SAndroid Build Coastguard Worker case CHKSUM:
1194*495ae853SAndroid Build Coastguard Worker sscanf(value, "%" STR(STRLENGTH) "s", ps_app_ctx->ac_op_chksum_fname);
1195*495ae853SAndroid Build Coastguard Worker break;
1196*495ae853SAndroid Build Coastguard Worker
1197*495ae853SAndroid Build Coastguard Worker case SAVE_OUTPUT:
1198*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctx->u4_file_save_flag);
1199*495ae853SAndroid Build Coastguard Worker break;
1200*495ae853SAndroid Build Coastguard Worker
1201*495ae853SAndroid Build Coastguard Worker case SAVE_FRAME_INFO:
1202*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctx->u4_frame_info_enable);
1203*495ae853SAndroid Build Coastguard Worker break;
1204*495ae853SAndroid Build Coastguard Worker
1205*495ae853SAndroid Build Coastguard Worker case SAVE_CHKSUM:
1206*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctx->u4_chksum_save_flag);
1207*495ae853SAndroid Build Coastguard Worker break;
1208*495ae853SAndroid Build Coastguard Worker
1209*495ae853SAndroid Build Coastguard Worker case CHROMA_FORMAT:
1210*495ae853SAndroid Build Coastguard Worker if((strcmp(value, "YUV_420P")) == 0)
1211*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_output_chroma_format = IV_YUV_420P;
1212*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "YUV_422ILE")) == 0)
1213*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_output_chroma_format = IV_YUV_422ILE;
1214*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "RGB_565")) == 0)
1215*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_output_chroma_format = IV_RGB_565;
1216*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "RGBA_8888")) == 0)
1217*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_output_chroma_format = IV_RGBA_8888;
1218*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "YUV_420SP_UV")) == 0)
1219*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_output_chroma_format = IV_YUV_420SP_UV;
1220*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "YUV_420SP_VU")) == 0)
1221*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_output_chroma_format = IV_YUV_420SP_VU;
1222*495ae853SAndroid Build Coastguard Worker else
1223*495ae853SAndroid Build Coastguard Worker {
1224*495ae853SAndroid Build Coastguard Worker printf("\nInvalid colour format setting it to IV_YUV_420P\n");
1225*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_output_chroma_format = IV_YUV_420P;
1226*495ae853SAndroid Build Coastguard Worker }
1227*495ae853SAndroid Build Coastguard Worker
1228*495ae853SAndroid Build Coastguard Worker break;
1229*495ae853SAndroid Build Coastguard Worker case NUM_FRAMES:
1230*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctx->u4_max_frm_ts);
1231*495ae853SAndroid Build Coastguard Worker break;
1232*495ae853SAndroid Build Coastguard Worker
1233*495ae853SAndroid Build Coastguard Worker case NUM_CORES:
1234*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctx->u4_num_cores);
1235*495ae853SAndroid Build Coastguard Worker break;
1236*495ae853SAndroid Build Coastguard Worker case DEGRADE_PICS:
1237*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctx->i4_degrade_pics);
1238*495ae853SAndroid Build Coastguard Worker break;
1239*495ae853SAndroid Build Coastguard Worker case DEGRADE_TYPE:
1240*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctx->i4_degrade_type);
1241*495ae853SAndroid Build Coastguard Worker break;
1242*495ae853SAndroid Build Coastguard Worker case SHARE_DISPLAY_BUF:
1243*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctx->u4_share_disp_buf);
1244*495ae853SAndroid Build Coastguard Worker break;
1245*495ae853SAndroid Build Coastguard Worker case LOOPBACK:
1246*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctx->loopback);
1247*495ae853SAndroid Build Coastguard Worker break;
1248*495ae853SAndroid Build Coastguard Worker case DISPLAY:
1249*495ae853SAndroid Build Coastguard Worker #if defined(SDL_DISPLAY) || defined(FBDEV_DISPLAY) || defined(INTEL_CE5300) || defined(IOS_DISPLAY)
1250*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctx->display);
1251*495ae853SAndroid Build Coastguard Worker #else
1252*495ae853SAndroid Build Coastguard Worker ps_app_ctx->display = 0;
1253*495ae853SAndroid Build Coastguard Worker #endif
1254*495ae853SAndroid Build Coastguard Worker break;
1255*495ae853SAndroid Build Coastguard Worker case FULLSCREEN:
1256*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctx->full_screen);
1257*495ae853SAndroid Build Coastguard Worker break;
1258*495ae853SAndroid Build Coastguard Worker case FPS:
1259*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctx->fps);
1260*495ae853SAndroid Build Coastguard Worker if(ps_app_ctx->fps <= 0) ps_app_ctx->fps = DEFAULT_FPS;
1261*495ae853SAndroid Build Coastguard Worker break;
1262*495ae853SAndroid Build Coastguard Worker case ARCH:
1263*495ae853SAndroid Build Coastguard Worker if((strcmp(value, "ARM_NONEON")) == 0)
1264*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_arch = ARCH_ARM_NONEON;
1265*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "ARM_A9Q")) == 0)
1266*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_arch = ARCH_ARM_A9Q;
1267*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "ARM_A7")) == 0)
1268*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_arch = ARCH_ARM_A7;
1269*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "ARM_A5")) == 0)
1270*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_arch = ARCH_ARM_A5;
1271*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "ARM_NEONINTR")) == 0)
1272*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_arch = ARCH_ARM_NEONINTR;
1273*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "X86_GENERIC")) == 0)
1274*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_arch = ARCH_X86_GENERIC;
1275*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "X86_SSSE3")) == 0)
1276*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_arch = ARCH_X86_SSSE3;
1277*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "X86_SSE42")) == 0)
1278*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_arch = ARCH_X86_SSE42;
1279*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "X86_AVX2")) == 0)
1280*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_arch = ARCH_X86_AVX2;
1281*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "MIPS_GENERIC")) == 0)
1282*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_arch = ARCH_MIPS_GENERIC;
1283*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "MIPS_32")) == 0)
1284*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_arch = ARCH_MIPS_32;
1285*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "ARMV8_GENERIC")) == 0)
1286*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_arch = ARCH_ARMV8_GENERIC;
1287*495ae853SAndroid Build Coastguard Worker else
1288*495ae853SAndroid Build Coastguard Worker {
1289*495ae853SAndroid Build Coastguard Worker printf("\nInvalid Arch. Setting it to ARM_A9Q\n");
1290*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_arch = ARCH_ARM_A9Q;
1291*495ae853SAndroid Build Coastguard Worker }
1292*495ae853SAndroid Build Coastguard Worker
1293*495ae853SAndroid Build Coastguard Worker break;
1294*495ae853SAndroid Build Coastguard Worker case SOC:
1295*495ae853SAndroid Build Coastguard Worker if((strcmp(value, "GENERIC")) == 0)
1296*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_soc = SOC_GENERIC;
1297*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "HISI_37X")) == 0)
1298*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_soc = SOC_HISI_37X;
1299*495ae853SAndroid Build Coastguard Worker else
1300*495ae853SAndroid Build Coastguard Worker {
1301*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_soc = atoi(value);
1302*495ae853SAndroid Build Coastguard Worker /*
1303*495ae853SAndroid Build Coastguard Worker printf("\nInvalid SOC. Setting it to GENERIC\n");
1304*495ae853SAndroid Build Coastguard Worker ps_app_ctx->e_soc = SOC_GENERIC;
1305*495ae853SAndroid Build Coastguard Worker */
1306*495ae853SAndroid Build Coastguard Worker }
1307*495ae853SAndroid Build Coastguard Worker break;
1308*495ae853SAndroid Build Coastguard Worker case PICLEN:
1309*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctx->u4_piclen_flag);
1310*495ae853SAndroid Build Coastguard Worker break;
1311*495ae853SAndroid Build Coastguard Worker
1312*495ae853SAndroid Build Coastguard Worker case PICLEN_FILE:
1313*495ae853SAndroid Build Coastguard Worker sscanf(value, "%" STR(STRLENGTH) "s", ps_app_ctx->ac_piclen_fname);
1314*495ae853SAndroid Build Coastguard Worker break;
1315*495ae853SAndroid Build Coastguard Worker case DISABLE_DEBLOCK_LEVEL:
1316*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctx->u4_disable_dblk_level);
1317*495ae853SAndroid Build Coastguard Worker break;
1318*495ae853SAndroid Build Coastguard Worker
1319*495ae853SAndroid Build Coastguard Worker case TARGET_LAYER_ID:
1320*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctx->i4_target_layer_id);
1321*495ae853SAndroid Build Coastguard Worker break;
1322*495ae853SAndroid Build Coastguard Worker
1323*495ae853SAndroid Build Coastguard Worker case INVALID:
1324*495ae853SAndroid Build Coastguard Worker default:
1325*495ae853SAndroid Build Coastguard Worker printf("Ignoring argument : %s\n", argument);
1326*495ae853SAndroid Build Coastguard Worker break;
1327*495ae853SAndroid Build Coastguard Worker }
1328*495ae853SAndroid Build Coastguard Worker }
1329*495ae853SAndroid Build Coastguard Worker
1330*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1331*495ae853SAndroid Build Coastguard Worker /* */
1332*495ae853SAndroid Build Coastguard Worker /* Function Name : read_cfg_file */
1333*495ae853SAndroid Build Coastguard Worker /* */
1334*495ae853SAndroid Build Coastguard Worker /* Description : Reads arguments from a configuration file */
1335*495ae853SAndroid Build Coastguard Worker /* */
1336*495ae853SAndroid Build Coastguard Worker /* */
1337*495ae853SAndroid Build Coastguard Worker /* Inputs : ps_app_ctx : Application context */
1338*495ae853SAndroid Build Coastguard Worker /* fp_cfg_file : Configuration file handle */
1339*495ae853SAndroid Build Coastguard Worker /* Globals : */
1340*495ae853SAndroid Build Coastguard Worker /* Processing : Parses the arguments and fills in the application context*/
1341*495ae853SAndroid Build Coastguard Worker /* */
1342*495ae853SAndroid Build Coastguard Worker /* Outputs : Arguments parsed */
1343*495ae853SAndroid Build Coastguard Worker /* Returns : None */
1344*495ae853SAndroid Build Coastguard Worker /* */
1345*495ae853SAndroid Build Coastguard Worker /* Issues : */
1346*495ae853SAndroid Build Coastguard Worker /* */
1347*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1348*495ae853SAndroid Build Coastguard Worker /* */
1349*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
1350*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Initial Version */
1351*495ae853SAndroid Build Coastguard Worker /* */
1352*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1353*495ae853SAndroid Build Coastguard Worker
read_cfg_file(vid_dec_ctx_t * ps_app_ctx,FILE * fp_cfg_file)1354*495ae853SAndroid Build Coastguard Worker void read_cfg_file(vid_dec_ctx_t *ps_app_ctx, FILE *fp_cfg_file)
1355*495ae853SAndroid Build Coastguard Worker {
1356*495ae853SAndroid Build Coastguard Worker CHAR line[STRLENGTH];
1357*495ae853SAndroid Build Coastguard Worker CHAR description[STRLENGTH];
1358*495ae853SAndroid Build Coastguard Worker CHAR value[STRLENGTH];
1359*495ae853SAndroid Build Coastguard Worker CHAR argument[STRLENGTH];
1360*495ae853SAndroid Build Coastguard Worker void *ret;
1361*495ae853SAndroid Build Coastguard Worker while(0 == feof(fp_cfg_file))
1362*495ae853SAndroid Build Coastguard Worker {
1363*495ae853SAndroid Build Coastguard Worker line[0] = '\0';
1364*495ae853SAndroid Build Coastguard Worker ret = fgets(line, STRLENGTH, fp_cfg_file);
1365*495ae853SAndroid Build Coastguard Worker if(NULL == ret) break;
1366*495ae853SAndroid Build Coastguard Worker argument[0] = '\0';
1367*495ae853SAndroid Build Coastguard Worker /* Reading Input File Name */
1368*495ae853SAndroid Build Coastguard Worker sscanf(line, "%s %s %s", argument, value, description);
1369*495ae853SAndroid Build Coastguard Worker if(argument[0] == '\0') continue;
1370*495ae853SAndroid Build Coastguard Worker
1371*495ae853SAndroid Build Coastguard Worker parse_argument(ps_app_ctx, argument, value);
1372*495ae853SAndroid Build Coastguard Worker }
1373*495ae853SAndroid Build Coastguard Worker }
1374*495ae853SAndroid Build Coastguard Worker
1375*495ae853SAndroid Build Coastguard Worker /*!
1376*495ae853SAndroid Build Coastguard Worker **************************************************************************
1377*495ae853SAndroid Build Coastguard Worker * \if Function name : dispq_producer_dequeue \endif
1378*495ae853SAndroid Build Coastguard Worker *
1379*495ae853SAndroid Build Coastguard Worker * \brief
1380*495ae853SAndroid Build Coastguard Worker * This function gets a free buffer index where display data can be written
1381*495ae853SAndroid Build Coastguard Worker * This is a blocking call and can be exited by setting quit to true in
1382*495ae853SAndroid Build Coastguard Worker * the application context
1383*495ae853SAndroid Build Coastguard Worker *
1384*495ae853SAndroid Build Coastguard Worker * \param[in] ps_app_ctx : Pointer to application context
1385*495ae853SAndroid Build Coastguard Worker *
1386*495ae853SAndroid Build Coastguard Worker * \return
1387*495ae853SAndroid Build Coastguard Worker * returns Next free buffer index for producer
1388*495ae853SAndroid Build Coastguard Worker *
1389*495ae853SAndroid Build Coastguard Worker * \author
1390*495ae853SAndroid Build Coastguard Worker * Ittiam
1391*495ae853SAndroid Build Coastguard Worker *
1392*495ae853SAndroid Build Coastguard Worker **************************************************************************
1393*495ae853SAndroid Build Coastguard Worker */
dispq_producer_dequeue(vid_dec_ctx_t * ps_app_ctx)1394*495ae853SAndroid Build Coastguard Worker WORD32 dispq_producer_dequeue(vid_dec_ctx_t *ps_app_ctx)
1395*495ae853SAndroid Build Coastguard Worker {
1396*495ae853SAndroid Build Coastguard Worker WORD32 idx;
1397*495ae853SAndroid Build Coastguard Worker
1398*495ae853SAndroid Build Coastguard Worker /* If there is no free buffer wait */
1399*495ae853SAndroid Build Coastguard Worker
1400*495ae853SAndroid Build Coastguard Worker while(((ps_app_ctx->disp_q_wr_idx + 1) % NUM_DISPLAY_BUFFERS) == ps_app_ctx->disp_q_rd_idx)
1401*495ae853SAndroid Build Coastguard Worker {
1402*495ae853SAndroid Build Coastguard Worker ithread_sleep(1000);
1403*495ae853SAndroid Build Coastguard Worker
1404*495ae853SAndroid Build Coastguard Worker if(ps_app_ctx->quit) return (-1);
1405*495ae853SAndroid Build Coastguard Worker }
1406*495ae853SAndroid Build Coastguard Worker
1407*495ae853SAndroid Build Coastguard Worker idx = ps_app_ctx->disp_q_wr_idx;
1408*495ae853SAndroid Build Coastguard Worker return (idx);
1409*495ae853SAndroid Build Coastguard Worker }
1410*495ae853SAndroid Build Coastguard Worker
1411*495ae853SAndroid Build Coastguard Worker /*!
1412*495ae853SAndroid Build Coastguard Worker **************************************************************************
1413*495ae853SAndroid Build Coastguard Worker * \if Function name : dispq_producer_queue \endif
1414*495ae853SAndroid Build Coastguard Worker *
1415*495ae853SAndroid Build Coastguard Worker * \brief
1416*495ae853SAndroid Build Coastguard Worker * This function adds buffer which can be displayed
1417*495ae853SAndroid Build Coastguard Worker *
1418*495ae853SAndroid Build Coastguard Worker * \param[in] ps_app_ctx : Pointer to application context
1419*495ae853SAndroid Build Coastguard Worker *
1420*495ae853SAndroid Build Coastguard Worker * \return
1421*495ae853SAndroid Build Coastguard Worker * returns Next free buffer index for producer
1422*495ae853SAndroid Build Coastguard Worker *
1423*495ae853SAndroid Build Coastguard Worker * \author
1424*495ae853SAndroid Build Coastguard Worker * Ittiam
1425*495ae853SAndroid Build Coastguard Worker *
1426*495ae853SAndroid Build Coastguard Worker **************************************************************************
1427*495ae853SAndroid Build Coastguard Worker */
dispq_producer_queue(vid_dec_ctx_t * ps_app_ctx)1428*495ae853SAndroid Build Coastguard Worker WORD32 dispq_producer_queue(vid_dec_ctx_t *ps_app_ctx)
1429*495ae853SAndroid Build Coastguard Worker {
1430*495ae853SAndroid Build Coastguard Worker ps_app_ctx->disp_q_wr_idx++;
1431*495ae853SAndroid Build Coastguard Worker if(ps_app_ctx->disp_q_wr_idx == NUM_DISPLAY_BUFFERS) ps_app_ctx->disp_q_wr_idx = 0;
1432*495ae853SAndroid Build Coastguard Worker
1433*495ae853SAndroid Build Coastguard Worker return (0);
1434*495ae853SAndroid Build Coastguard Worker }
1435*495ae853SAndroid Build Coastguard Worker /*!
1436*495ae853SAndroid Build Coastguard Worker **************************************************************************
1437*495ae853SAndroid Build Coastguard Worker * \if Function name : dispq_consumer_dequeue \endif
1438*495ae853SAndroid Build Coastguard Worker *
1439*495ae853SAndroid Build Coastguard Worker * \brief
1440*495ae853SAndroid Build Coastguard Worker * This function gets a free buffer index where display data can be written
1441*495ae853SAndroid Build Coastguard Worker * This is a blocking call and can be exited by setting quit to true in
1442*495ae853SAndroid Build Coastguard Worker * the application context
1443*495ae853SAndroid Build Coastguard Worker *
1444*495ae853SAndroid Build Coastguard Worker * \param[in] ps_app_ctx : Pointer to application context
1445*495ae853SAndroid Build Coastguard Worker *
1446*495ae853SAndroid Build Coastguard Worker * \return
1447*495ae853SAndroid Build Coastguard Worker * returns Next free buffer index for producer
1448*495ae853SAndroid Build Coastguard Worker *
1449*495ae853SAndroid Build Coastguard Worker * \author
1450*495ae853SAndroid Build Coastguard Worker * Ittiam
1451*495ae853SAndroid Build Coastguard Worker *
1452*495ae853SAndroid Build Coastguard Worker **************************************************************************
1453*495ae853SAndroid Build Coastguard Worker */
dispq_consumer_dequeue(vid_dec_ctx_t * ps_app_ctx)1454*495ae853SAndroid Build Coastguard Worker WORD32 dispq_consumer_dequeue(vid_dec_ctx_t *ps_app_ctx)
1455*495ae853SAndroid Build Coastguard Worker {
1456*495ae853SAndroid Build Coastguard Worker WORD32 idx;
1457*495ae853SAndroid Build Coastguard Worker
1458*495ae853SAndroid Build Coastguard Worker /* If there is no free buffer wait */
1459*495ae853SAndroid Build Coastguard Worker
1460*495ae853SAndroid Build Coastguard Worker while(ps_app_ctx->disp_q_wr_idx == ps_app_ctx->disp_q_rd_idx)
1461*495ae853SAndroid Build Coastguard Worker {
1462*495ae853SAndroid Build Coastguard Worker ithread_sleep(1000);
1463*495ae853SAndroid Build Coastguard Worker
1464*495ae853SAndroid Build Coastguard Worker if(ps_app_ctx->quit) return (-1);
1465*495ae853SAndroid Build Coastguard Worker }
1466*495ae853SAndroid Build Coastguard Worker
1467*495ae853SAndroid Build Coastguard Worker idx = ps_app_ctx->disp_q_rd_idx;
1468*495ae853SAndroid Build Coastguard Worker return (idx);
1469*495ae853SAndroid Build Coastguard Worker }
1470*495ae853SAndroid Build Coastguard Worker
1471*495ae853SAndroid Build Coastguard Worker /*!
1472*495ae853SAndroid Build Coastguard Worker **************************************************************************
1473*495ae853SAndroid Build Coastguard Worker * \if Function name : dispq_producer_queue \endif
1474*495ae853SAndroid Build Coastguard Worker *
1475*495ae853SAndroid Build Coastguard Worker * \brief
1476*495ae853SAndroid Build Coastguard Worker * This function adds buffer which can be displayed
1477*495ae853SAndroid Build Coastguard Worker *
1478*495ae853SAndroid Build Coastguard Worker * \param[in] ps_app_ctx : Pointer to application context
1479*495ae853SAndroid Build Coastguard Worker *
1480*495ae853SAndroid Build Coastguard Worker * \return
1481*495ae853SAndroid Build Coastguard Worker * returns Next free buffer index for producer
1482*495ae853SAndroid Build Coastguard Worker *
1483*495ae853SAndroid Build Coastguard Worker * \author
1484*495ae853SAndroid Build Coastguard Worker * Ittiam
1485*495ae853SAndroid Build Coastguard Worker *
1486*495ae853SAndroid Build Coastguard Worker **************************************************************************
1487*495ae853SAndroid Build Coastguard Worker */
dispq_consumer_queue(vid_dec_ctx_t * ps_app_ctx)1488*495ae853SAndroid Build Coastguard Worker WORD32 dispq_consumer_queue(vid_dec_ctx_t *ps_app_ctx)
1489*495ae853SAndroid Build Coastguard Worker {
1490*495ae853SAndroid Build Coastguard Worker ps_app_ctx->disp_q_rd_idx++;
1491*495ae853SAndroid Build Coastguard Worker if(ps_app_ctx->disp_q_rd_idx == NUM_DISPLAY_BUFFERS) ps_app_ctx->disp_q_rd_idx = 0;
1492*495ae853SAndroid Build Coastguard Worker
1493*495ae853SAndroid Build Coastguard Worker return (0);
1494*495ae853SAndroid Build Coastguard Worker }
1495*495ae853SAndroid Build Coastguard Worker
1496*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1497*495ae853SAndroid Build Coastguard Worker /* */
1498*495ae853SAndroid Build Coastguard Worker /* Function Name : display_thread */
1499*495ae853SAndroid Build Coastguard Worker /* */
1500*495ae853SAndroid Build Coastguard Worker /* Description : Thread to display the frame */
1501*495ae853SAndroid Build Coastguard Worker /* */
1502*495ae853SAndroid Build Coastguard Worker /* */
1503*495ae853SAndroid Build Coastguard Worker /* Inputs : pv_ctx : Application context */
1504*495ae853SAndroid Build Coastguard Worker /* */
1505*495ae853SAndroid Build Coastguard Worker /* Globals : */
1506*495ae853SAndroid Build Coastguard Worker /* Processing : Wait for a buffer to get produced by decoder and display */
1507*495ae853SAndroid Build Coastguard Worker /* that frame */
1508*495ae853SAndroid Build Coastguard Worker /* */
1509*495ae853SAndroid Build Coastguard Worker /* Outputs : */
1510*495ae853SAndroid Build Coastguard Worker /* Returns : None */
1511*495ae853SAndroid Build Coastguard Worker /* */
1512*495ae853SAndroid Build Coastguard Worker /* Issues : Pause followed by quit is making some deadlock condn */
1513*495ae853SAndroid Build Coastguard Worker /* If decoder was lagging initially and then fasten up, */
1514*495ae853SAndroid Build Coastguard Worker /* display will also go at faster rate till it reaches */
1515*495ae853SAndroid Build Coastguard Worker /* equilibrium wrt the initial time */
1516*495ae853SAndroid Build Coastguard Worker /* */
1517*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1518*495ae853SAndroid Build Coastguard Worker /* */
1519*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
1520*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Initial Version */
1521*495ae853SAndroid Build Coastguard Worker /* */
1522*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1523*495ae853SAndroid Build Coastguard Worker
display_thread(void * pv_ctx)1524*495ae853SAndroid Build Coastguard Worker WORD32 display_thread(void *pv_ctx)
1525*495ae853SAndroid Build Coastguard Worker {
1526*495ae853SAndroid Build Coastguard Worker vid_dec_ctx_t *ps_app_ctx = (vid_dec_ctx_t *) pv_ctx;
1527*495ae853SAndroid Build Coastguard Worker
1528*495ae853SAndroid Build Coastguard Worker UWORD32 frm_duration; /* in us */
1529*495ae853SAndroid Build Coastguard Worker UWORD32 current_time = 0;
1530*495ae853SAndroid Build Coastguard Worker UWORD32 expected_time;
1531*495ae853SAndroid Build Coastguard Worker UWORD32 first_frame_displayed;
1532*495ae853SAndroid Build Coastguard Worker
1533*495ae853SAndroid Build Coastguard Worker #ifdef WINDOWS_TIMER
1534*495ae853SAndroid Build Coastguard Worker LARGE_INTEGER frequency;
1535*495ae853SAndroid Build Coastguard Worker #endif
1536*495ae853SAndroid Build Coastguard Worker
1537*495ae853SAndroid Build Coastguard Worker #ifdef WINDOWS_TIMER
1538*495ae853SAndroid Build Coastguard Worker QueryPerformanceFrequency(&frequency);
1539*495ae853SAndroid Build Coastguard Worker #endif
1540*495ae853SAndroid Build Coastguard Worker
1541*495ae853SAndroid Build Coastguard Worker #ifdef PROFILE_ENABLE
1542*495ae853SAndroid Build Coastguard Worker UWORD32 s_elapsed_time;
1543*495ae853SAndroid Build Coastguard Worker TIMER s_start_timer;
1544*495ae853SAndroid Build Coastguard Worker TIMER s_end_timer;
1545*495ae853SAndroid Build Coastguard Worker TIMER s_first_frame_time;
1546*495ae853SAndroid Build Coastguard Worker #endif
1547*495ae853SAndroid Build Coastguard Worker
1548*495ae853SAndroid Build Coastguard Worker first_frame_displayed = 0;
1549*495ae853SAndroid Build Coastguard Worker expected_time = 0;
1550*495ae853SAndroid Build Coastguard Worker frm_duration = 1000000 / ps_app_ctx->fps;
1551*495ae853SAndroid Build Coastguard Worker
1552*495ae853SAndroid Build Coastguard Worker /* Init display and allocate display buffers */
1553*495ae853SAndroid Build Coastguard Worker ps_app_ctx->pv_disp_ctx = (void *) ps_app_ctx->disp_init(
1554*495ae853SAndroid Build Coastguard Worker ps_app_ctx->u4_pic_wd, ps_app_ctx->u4_pic_ht, ps_app_ctx->i4_screen_wd,
1555*495ae853SAndroid Build Coastguard Worker ps_app_ctx->i4_screen_ht, ps_app_ctx->u4_pic_wd, ps_app_ctx->u4_pic_ht,
1556*495ae853SAndroid Build Coastguard Worker ps_app_ctx->full_screen, &ps_app_ctx->quit, &ps_app_ctx->paused);
1557*495ae853SAndroid Build Coastguard Worker ps_app_ctx->alloc_disp_buffers(ps_app_ctx->pv_disp_ctx);
1558*495ae853SAndroid Build Coastguard Worker
1559*495ae853SAndroid Build Coastguard Worker ps_app_ctx->display_init_done = 1;
1560*495ae853SAndroid Build Coastguard Worker
1561*495ae853SAndroid Build Coastguard Worker while(1)
1562*495ae853SAndroid Build Coastguard Worker {
1563*495ae853SAndroid Build Coastguard Worker WORD32 rd_idx;
1564*495ae853SAndroid Build Coastguard Worker
1565*495ae853SAndroid Build Coastguard Worker rd_idx = dispq_consumer_dequeue(ps_app_ctx);
1566*495ae853SAndroid Build Coastguard Worker if(ps_app_ctx->quit) break;
1567*495ae853SAndroid Build Coastguard Worker
1568*495ae853SAndroid Build Coastguard Worker ps_app_ctx->display_buffer(ps_app_ctx->pv_disp_ctx, rd_idx);
1569*495ae853SAndroid Build Coastguard Worker
1570*495ae853SAndroid Build Coastguard Worker if(0 == first_frame_displayed)
1571*495ae853SAndroid Build Coastguard Worker {
1572*495ae853SAndroid Build Coastguard Worker GETTIME(&s_first_frame_time);
1573*495ae853SAndroid Build Coastguard Worker first_frame_displayed = 1;
1574*495ae853SAndroid Build Coastguard Worker }
1575*495ae853SAndroid Build Coastguard Worker
1576*495ae853SAndroid Build Coastguard Worker /*********************************************************************/
1577*495ae853SAndroid Build Coastguard Worker /* Sleep based on the expected time of arrival of current buffer and */
1578*495ae853SAndroid Build Coastguard Worker /* the Current frame */
1579*495ae853SAndroid Build Coastguard Worker /*********************************************************************/
1580*495ae853SAndroid Build Coastguard Worker
1581*495ae853SAndroid Build Coastguard Worker GETTIME(&s_end_timer);
1582*495ae853SAndroid Build Coastguard Worker ELAPSEDTIME(s_first_frame_time, s_end_timer, current_time, frequency);
1583*495ae853SAndroid Build Coastguard Worker
1584*495ae853SAndroid Build Coastguard Worker /* time in micro second */
1585*495ae853SAndroid Build Coastguard Worker expected_time += frm_duration;
1586*495ae853SAndroid Build Coastguard Worker
1587*495ae853SAndroid Build Coastguard Worker // printf("current_time %d expected_time %d diff %d \n", current_time,
1588*495ae853SAndroid Build Coastguard Worker // expected_time, (expected_time - current_time));
1589*495ae853SAndroid Build Coastguard Worker /* sleep for the diff. in time */
1590*495ae853SAndroid Build Coastguard Worker if(current_time < expected_time)
1591*495ae853SAndroid Build Coastguard Worker ps_app_ctx->disp_usleep((expected_time - current_time));
1592*495ae853SAndroid Build Coastguard Worker else
1593*495ae853SAndroid Build Coastguard Worker expected_time += (current_time - expected_time);
1594*495ae853SAndroid Build Coastguard Worker
1595*495ae853SAndroid Build Coastguard Worker dispq_consumer_queue(ps_app_ctx);
1596*495ae853SAndroid Build Coastguard Worker }
1597*495ae853SAndroid Build Coastguard Worker
1598*495ae853SAndroid Build Coastguard Worker while(0 == ps_app_ctx->display_deinit_flag)
1599*495ae853SAndroid Build Coastguard Worker {
1600*495ae853SAndroid Build Coastguard Worker ps_app_ctx->disp_usleep(1000);
1601*495ae853SAndroid Build Coastguard Worker }
1602*495ae853SAndroid Build Coastguard Worker ps_app_ctx->disp_deinit(ps_app_ctx->pv_disp_ctx);
1603*495ae853SAndroid Build Coastguard Worker
1604*495ae853SAndroid Build Coastguard Worker return 0;
1605*495ae853SAndroid Build Coastguard Worker }
1606*495ae853SAndroid Build Coastguard Worker
output_write_stall(CHAR * fname,UWORD32 cur_frm_idx)1607*495ae853SAndroid Build Coastguard Worker void output_write_stall(CHAR *fname, UWORD32 cur_frm_idx)
1608*495ae853SAndroid Build Coastguard Worker {
1609*495ae853SAndroid Build Coastguard Worker const UWORD8 threshold = 64;
1610*495ae853SAndroid Build Coastguard Worker CHAR past_fname[1000];
1611*495ae853SAndroid Build Coastguard Worker FILE *fp_fast_file = NULL;
1612*495ae853SAndroid Build Coastguard Worker
1613*495ae853SAndroid Build Coastguard Worker if(cur_frm_idx >= threshold)
1614*495ae853SAndroid Build Coastguard Worker {
1615*495ae853SAndroid Build Coastguard Worker sprintf(past_fname, fname, cur_frm_idx - threshold);
1616*495ae853SAndroid Build Coastguard Worker do
1617*495ae853SAndroid Build Coastguard Worker {
1618*495ae853SAndroid Build Coastguard Worker fp_fast_file = fopen(past_fname, "rb");
1619*495ae853SAndroid Build Coastguard Worker if(fp_fast_file != NULL)
1620*495ae853SAndroid Build Coastguard Worker {
1621*495ae853SAndroid Build Coastguard Worker fclose(fp_fast_file);
1622*495ae853SAndroid Build Coastguard Worker /* Wait until the resource is released by a third party app*/
1623*495ae853SAndroid Build Coastguard Worker ithread_sleep(5000);
1624*495ae853SAndroid Build Coastguard Worker }
1625*495ae853SAndroid Build Coastguard Worker else
1626*495ae853SAndroid Build Coastguard Worker break;
1627*495ae853SAndroid Build Coastguard Worker } while(1);
1628*495ae853SAndroid Build Coastguard Worker }
1629*495ae853SAndroid Build Coastguard Worker }
1630*495ae853SAndroid Build Coastguard Worker
flush_output(iv_obj_t * codec_obj,vid_dec_ctx_t * ps_app_ctx,ivd_out_bufdesc_t * ps_out_buf,UWORD8 * pu1_bs_buf,UWORD32 * pu4_op_frm_ts,FILE * ps_op_file,FILE * ps_qp_file,FILE * ps_mb_type_file,UWORD8 * pu1_qp_map_buf,UWORD8 * pu1_blk_type_map_buf,FILE * ps_op_chksum_file,UWORD32 u4_ip_frm_ts,UWORD32 u4_bytes_remaining)1631*495ae853SAndroid Build Coastguard Worker void flush_output(iv_obj_t *codec_obj, vid_dec_ctx_t *ps_app_ctx, ivd_out_bufdesc_t *ps_out_buf,
1632*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_bs_buf, UWORD32 *pu4_op_frm_ts, FILE *ps_op_file, FILE *ps_qp_file,
1633*495ae853SAndroid Build Coastguard Worker FILE *ps_mb_type_file, UWORD8 *pu1_qp_map_buf, UWORD8 *pu1_blk_type_map_buf,
1634*495ae853SAndroid Build Coastguard Worker FILE *ps_op_chksum_file, UWORD32 u4_ip_frm_ts, UWORD32 u4_bytes_remaining)
1635*495ae853SAndroid Build Coastguard Worker {
1636*495ae853SAndroid Build Coastguard Worker WORD32 ret;
1637*495ae853SAndroid Build Coastguard Worker
1638*495ae853SAndroid Build Coastguard Worker do
1639*495ae853SAndroid Build Coastguard Worker {
1640*495ae853SAndroid Build Coastguard Worker ivd_ctl_flush_ip_t s_ctl_ip;
1641*495ae853SAndroid Build Coastguard Worker ivd_ctl_flush_op_t s_ctl_op;
1642*495ae853SAndroid Build Coastguard Worker
1643*495ae853SAndroid Build Coastguard Worker if(*pu4_op_frm_ts >= (ps_app_ctx->u4_max_frm_ts + ps_app_ctx->disp_delay)) break;
1644*495ae853SAndroid Build Coastguard Worker
1645*495ae853SAndroid Build Coastguard Worker s_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
1646*495ae853SAndroid Build Coastguard Worker s_ctl_ip.e_sub_cmd = IVD_CMD_CTL_FLUSH;
1647*495ae853SAndroid Build Coastguard Worker s_ctl_ip.u4_size = sizeof(ivd_ctl_flush_ip_t);
1648*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_size = sizeof(ivd_ctl_flush_op_t);
1649*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_ctl_ip, (void *) &s_ctl_op);
1650*495ae853SAndroid Build Coastguard Worker
1651*495ae853SAndroid Build Coastguard Worker if(ret != IV_SUCCESS)
1652*495ae853SAndroid Build Coastguard Worker {
1653*495ae853SAndroid Build Coastguard Worker printf("Error in Setting the decoder in flush mode\n");
1654*495ae853SAndroid Build Coastguard Worker }
1655*495ae853SAndroid Build Coastguard Worker
1656*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS == ret)
1657*495ae853SAndroid Build Coastguard Worker {
1658*495ae853SAndroid Build Coastguard Worker isvcd_video_decode_ip_t s_h264d_decode_ip;
1659*495ae853SAndroid Build Coastguard Worker isvcd_video_decode_op_t s_h264d_decode_op;
1660*495ae853SAndroid Build Coastguard Worker ivd_video_decode_ip_t *ps_video_decode_ip = &s_h264d_decode_ip.s_ivd_video_decode_ip_t;
1661*495ae853SAndroid Build Coastguard Worker ivd_video_decode_op_t *ps_video_decode_op = &s_h264d_decode_op.s_ivd_video_decode_op_t;
1662*495ae853SAndroid Build Coastguard Worker
1663*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->e_cmd = IVD_CMD_VIDEO_DECODE;
1664*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->u4_ts = u4_ip_frm_ts;
1665*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->pv_stream_buffer = pu1_bs_buf;
1666*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->u4_num_Bytes = u4_bytes_remaining;
1667*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->u4_size = sizeof(isvcd_video_decode_ip_t);
1668*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->s_out_buffer.u4_min_out_buf_size[0] =
1669*495ae853SAndroid Build Coastguard Worker ps_out_buf->u4_min_out_buf_size[0];
1670*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->s_out_buffer.u4_min_out_buf_size[1] =
1671*495ae853SAndroid Build Coastguard Worker ps_out_buf->u4_min_out_buf_size[1];
1672*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->s_out_buffer.u4_min_out_buf_size[2] =
1673*495ae853SAndroid Build Coastguard Worker ps_out_buf->u4_min_out_buf_size[2];
1674*495ae853SAndroid Build Coastguard Worker
1675*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->s_out_buffer.pu1_bufs[0] = ps_out_buf->pu1_bufs[0];
1676*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->s_out_buffer.pu1_bufs[1] = ps_out_buf->pu1_bufs[1];
1677*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->s_out_buffer.pu1_bufs[2] = ps_out_buf->pu1_bufs[2];
1678*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->s_out_buffer.u4_num_bufs = ps_out_buf->u4_num_bufs;
1679*495ae853SAndroid Build Coastguard Worker
1680*495ae853SAndroid Build Coastguard Worker ps_video_decode_op->u4_size = sizeof(isvcd_video_decode_op_t);
1681*495ae853SAndroid Build Coastguard Worker s_h264d_decode_ip.pu1_8x8_blk_qp_map = pu1_qp_map_buf;
1682*495ae853SAndroid Build Coastguard Worker s_h264d_decode_ip.pu1_8x8_blk_type_map = pu1_blk_type_map_buf;
1683*495ae853SAndroid Build Coastguard Worker s_h264d_decode_ip.u4_8x8_blk_qp_map_size = (ADAPTIVE_MAX_HT * ADAPTIVE_MAX_WD) >> 6;
1684*495ae853SAndroid Build Coastguard Worker s_h264d_decode_ip.u4_8x8_blk_type_map_size = (ADAPTIVE_MAX_HT * ADAPTIVE_MAX_WD) >> 6;
1685*495ae853SAndroid Build Coastguard Worker
1686*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1687*495ae853SAndroid Build Coastguard Worker /* API Call: Video Decode */
1688*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1689*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_h264d_decode_ip,
1690*495ae853SAndroid Build Coastguard Worker (void *) &s_h264d_decode_op);
1691*495ae853SAndroid Build Coastguard Worker
1692*495ae853SAndroid Build Coastguard Worker if(1 == ps_video_decode_op->u4_output_present)
1693*495ae853SAndroid Build Coastguard Worker {
1694*495ae853SAndroid Build Coastguard Worker CHAR cur_fname[1000];
1695*495ae853SAndroid Build Coastguard Worker CHAR *extn = NULL;
1696*495ae853SAndroid Build Coastguard Worker /* The objective is to dump the decoded frames into separate files
1697*495ae853SAndroid Build Coastguard Worker * instead of dumping all the frames in one common file. Also, the
1698*495ae853SAndroid Build Coastguard Worker * number of dumped frames at any given instance of time cannot exceed
1699*495ae853SAndroid Build Coastguard Worker * 'frame_memory'
1700*495ae853SAndroid Build Coastguard Worker */
1701*495ae853SAndroid Build Coastguard Worker
1702*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
1703*495ae853SAndroid Build Coastguard Worker /* Get SEI MDCV parameters */
1704*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
1705*495ae853SAndroid Build Coastguard Worker if(1 == ps_video_decode_op->s_sei_decode_op.u1_sei_mdcv_params_present_flag)
1706*495ae853SAndroid Build Coastguard Worker {
1707*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_mdcv_params_ip_t s_ctl_get_sei_mdcv_params_ip;
1708*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_mdcv_params_op_t s_ctl_get_sei_mdcv_params_op;
1709*495ae853SAndroid Build Coastguard Worker
1710*495ae853SAndroid Build Coastguard Worker memset(&s_ctl_get_sei_mdcv_params_ip, 0,
1711*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_ctl_get_sei_mdcv_params_ip_t));
1712*495ae853SAndroid Build Coastguard Worker memset(&s_ctl_get_sei_mdcv_params_op, 0,
1713*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_ctl_get_sei_mdcv_params_op_t));
1714*495ae853SAndroid Build Coastguard Worker
1715*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_mdcv_params_ip.e_cmd = IVD_CMD_VIDEO_CTL;
1716*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_mdcv_params_ip.e_sub_cmd =
1717*495ae853SAndroid Build Coastguard Worker (IVD_CONTROL_API_COMMAND_TYPE_T) IH264D_CMD_CTL_GET_SEI_MDCV_PARAMS;
1718*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_mdcv_params_ip.u4_size =
1719*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_ctl_get_sei_mdcv_params_ip_t);
1720*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_mdcv_params_op.u4_size =
1721*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_ctl_get_sei_mdcv_params_op_t);
1722*495ae853SAndroid Build Coastguard Worker
1723*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj,
1724*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_get_sei_mdcv_params_ip,
1725*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_get_sei_mdcv_params_op);
1726*495ae853SAndroid Build Coastguard Worker
1727*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != ret)
1728*495ae853SAndroid Build Coastguard Worker {
1729*495ae853SAndroid Build Coastguard Worker printf("MDCV SEI params not present : Error %x\n",
1730*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_mdcv_params_op.u4_error_code);
1731*495ae853SAndroid Build Coastguard Worker }
1732*495ae853SAndroid Build Coastguard Worker }
1733*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
1734*495ae853SAndroid Build Coastguard Worker /* Get SEI CLL parameters */
1735*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
1736*495ae853SAndroid Build Coastguard Worker if(1 == ps_video_decode_op->s_sei_decode_op.u1_sei_cll_params_present_flag)
1737*495ae853SAndroid Build Coastguard Worker {
1738*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_cll_params_ip_t s_ctl_get_sei_cll_params_ip;
1739*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_cll_params_op_t s_ctl_get_sei_cll_params_op;
1740*495ae853SAndroid Build Coastguard Worker
1741*495ae853SAndroid Build Coastguard Worker memset(&s_ctl_get_sei_cll_params_ip, 0,
1742*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_ctl_get_sei_cll_params_ip_t));
1743*495ae853SAndroid Build Coastguard Worker memset(&s_ctl_get_sei_cll_params_op, 0,
1744*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_ctl_get_sei_cll_params_op_t));
1745*495ae853SAndroid Build Coastguard Worker
1746*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_cll_params_ip.e_cmd = IVD_CMD_VIDEO_CTL;
1747*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_cll_params_ip.e_sub_cmd =
1748*495ae853SAndroid Build Coastguard Worker (IVD_CONTROL_API_COMMAND_TYPE_T) IH264D_CMD_CTL_GET_SEI_CLL_PARAMS;
1749*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_cll_params_ip.u4_size = sizeof(isvcd_ctl_get_sei_cll_params_ip_t);
1750*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_cll_params_op.u4_size = sizeof(isvcd_ctl_get_sei_cll_params_op_t);
1751*495ae853SAndroid Build Coastguard Worker
1752*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj,
1753*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_get_sei_cll_params_ip,
1754*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_get_sei_cll_params_op);
1755*495ae853SAndroid Build Coastguard Worker
1756*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != ret)
1757*495ae853SAndroid Build Coastguard Worker {
1758*495ae853SAndroid Build Coastguard Worker printf("CLL SEI params not present : Error %x\n",
1759*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_cll_params_op.u4_error_code);
1760*495ae853SAndroid Build Coastguard Worker }
1761*495ae853SAndroid Build Coastguard Worker }
1762*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
1763*495ae853SAndroid Build Coastguard Worker /* Get SEI AVE parameters */
1764*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
1765*495ae853SAndroid Build Coastguard Worker if(1 == ps_video_decode_op->s_sei_decode_op.u1_sei_ave_params_present_flag)
1766*495ae853SAndroid Build Coastguard Worker {
1767*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_ave_params_ip_t s_ctl_get_sei_ave_params_ip;
1768*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_ave_params_op_t s_ctl_get_sei_ave_params_op;
1769*495ae853SAndroid Build Coastguard Worker
1770*495ae853SAndroid Build Coastguard Worker memset(&s_ctl_get_sei_ave_params_ip, 0,
1771*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_ctl_get_sei_ave_params_ip_t));
1772*495ae853SAndroid Build Coastguard Worker memset(&s_ctl_get_sei_ave_params_op, 0,
1773*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_ctl_get_sei_ave_params_op_t));
1774*495ae853SAndroid Build Coastguard Worker
1775*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_ave_params_ip.e_cmd = IVD_CMD_VIDEO_CTL;
1776*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_ave_params_ip.e_sub_cmd =
1777*495ae853SAndroid Build Coastguard Worker (IVD_CONTROL_API_COMMAND_TYPE_T) IH264D_CMD_CTL_GET_SEI_AVE_PARAMS;
1778*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_ave_params_ip.u4_size = sizeof(isvcd_ctl_get_sei_ave_params_ip_t);
1779*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_ave_params_op.u4_size = sizeof(isvcd_ctl_get_sei_ave_params_op_t);
1780*495ae853SAndroid Build Coastguard Worker
1781*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj,
1782*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_get_sei_ave_params_ip,
1783*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_get_sei_ave_params_op);
1784*495ae853SAndroid Build Coastguard Worker
1785*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != ret)
1786*495ae853SAndroid Build Coastguard Worker {
1787*495ae853SAndroid Build Coastguard Worker printf("AVE SEI params not present : Error %x\n",
1788*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_ave_params_op.u4_error_code);
1789*495ae853SAndroid Build Coastguard Worker }
1790*495ae853SAndroid Build Coastguard Worker }
1791*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
1792*495ae853SAndroid Build Coastguard Worker /* Get SEI CCV parameters */
1793*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
1794*495ae853SAndroid Build Coastguard Worker if(1 == ps_video_decode_op->s_sei_decode_op.u1_sei_ccv_params_present_flag)
1795*495ae853SAndroid Build Coastguard Worker {
1796*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_ccv_params_ip_t s_ctl_get_sei_ccv_params_ip;
1797*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_ccv_params_op_t s_ctl_get_sei_ccv_params_op;
1798*495ae853SAndroid Build Coastguard Worker
1799*495ae853SAndroid Build Coastguard Worker memset(&s_ctl_get_sei_ccv_params_ip, 0,
1800*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_ctl_get_sei_ccv_params_ip_t));
1801*495ae853SAndroid Build Coastguard Worker memset(&s_ctl_get_sei_ccv_params_op, 0,
1802*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_ctl_get_sei_ccv_params_op_t));
1803*495ae853SAndroid Build Coastguard Worker
1804*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_ccv_params_ip.e_cmd = IVD_CMD_VIDEO_CTL;
1805*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_ccv_params_ip.e_sub_cmd =
1806*495ae853SAndroid Build Coastguard Worker (IVD_CONTROL_API_COMMAND_TYPE_T) IH264D_CMD_CTL_GET_SEI_CCV_PARAMS;
1807*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_ccv_params_ip.u4_size = sizeof(isvcd_ctl_get_sei_ccv_params_ip_t);
1808*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_ccv_params_op.u4_size = sizeof(isvcd_ctl_get_sei_ccv_params_op_t);
1809*495ae853SAndroid Build Coastguard Worker
1810*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj,
1811*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_get_sei_ccv_params_ip,
1812*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_get_sei_ccv_params_op);
1813*495ae853SAndroid Build Coastguard Worker
1814*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != ret)
1815*495ae853SAndroid Build Coastguard Worker {
1816*495ae853SAndroid Build Coastguard Worker printf("CCV SEI params not present : Error %x\n",
1817*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_ccv_params_op.u4_error_code);
1818*495ae853SAndroid Build Coastguard Worker }
1819*495ae853SAndroid Build Coastguard Worker }
1820*495ae853SAndroid Build Coastguard Worker
1821*495ae853SAndroid Build Coastguard Worker if(ps_app_ctx->u4_file_save_flag)
1822*495ae853SAndroid Build Coastguard Worker {
1823*495ae853SAndroid Build Coastguard Worker /* Locate the position of extension yuv */
1824*495ae853SAndroid Build Coastguard Worker extn = strstr(ps_app_ctx->ac_op_fname, "%d");
1825*495ae853SAndroid Build Coastguard Worker if(extn != NULL)
1826*495ae853SAndroid Build Coastguard Worker {
1827*495ae853SAndroid Build Coastguard Worker output_write_stall(ps_app_ctx->ac_op_fname, *pu4_op_frm_ts);
1828*495ae853SAndroid Build Coastguard Worker /* Generate output file names */
1829*495ae853SAndroid Build Coastguard Worker sprintf(cur_fname, ps_app_ctx->ac_op_fname, *pu4_op_frm_ts);
1830*495ae853SAndroid Build Coastguard Worker /* Open Output file */
1831*495ae853SAndroid Build Coastguard Worker ps_op_file = fopen(cur_fname, "wb");
1832*495ae853SAndroid Build Coastguard Worker if(NULL == ps_op_file)
1833*495ae853SAndroid Build Coastguard Worker {
1834*495ae853SAndroid Build Coastguard Worker CHAR ac_error_str[STRLENGTH];
1835*495ae853SAndroid Build Coastguard Worker snprintf(ac_error_str, sizeof(ac_error_str),
1836*495ae853SAndroid Build Coastguard Worker "Could not open output file %s", cur_fname);
1837*495ae853SAndroid Build Coastguard Worker
1838*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
1839*495ae853SAndroid Build Coastguard Worker }
1840*495ae853SAndroid Build Coastguard Worker }
1841*495ae853SAndroid Build Coastguard Worker }
1842*495ae853SAndroid Build Coastguard Worker
1843*495ae853SAndroid Build Coastguard Worker dump_output(ps_app_ctx, &(ps_video_decode_op->s_disp_frm_buf), &s_h264d_decode_op,
1844*495ae853SAndroid Build Coastguard Worker ps_video_decode_op->u4_disp_buf_id, ps_op_file, ps_qp_file,
1845*495ae853SAndroid Build Coastguard Worker ps_mb_type_file, ps_op_chksum_file, *pu4_op_frm_ts,
1846*495ae853SAndroid Build Coastguard Worker ps_app_ctx->u4_file_save_flag, ps_app_ctx->u4_chksum_save_flag,
1847*495ae853SAndroid Build Coastguard Worker ps_app_ctx->u4_frame_info_enable);
1848*495ae853SAndroid Build Coastguard Worker if(extn != NULL) fclose(ps_op_file);
1849*495ae853SAndroid Build Coastguard Worker (*pu4_op_frm_ts)++;
1850*495ae853SAndroid Build Coastguard Worker }
1851*495ae853SAndroid Build Coastguard Worker }
1852*495ae853SAndroid Build Coastguard Worker } while(IV_SUCCESS == ret);
1853*495ae853SAndroid Build Coastguard Worker }
1854*495ae853SAndroid Build Coastguard Worker
1855*495ae853SAndroid Build Coastguard Worker #ifdef X86_MINGW
sigsegv_handler()1856*495ae853SAndroid Build Coastguard Worker void sigsegv_handler()
1857*495ae853SAndroid Build Coastguard Worker {
1858*495ae853SAndroid Build Coastguard Worker printf("Segmentation fault, Exiting.. \n");
1859*495ae853SAndroid Build Coastguard Worker exit(-1);
1860*495ae853SAndroid Build Coastguard Worker }
1861*495ae853SAndroid Build Coastguard Worker #endif
1862*495ae853SAndroid Build Coastguard Worker
default_get_stride(void)1863*495ae853SAndroid Build Coastguard Worker UWORD32 default_get_stride(void) { return 0; }
1864*495ae853SAndroid Build Coastguard Worker
default_get_color_fmt(void)1865*495ae853SAndroid Build Coastguard Worker IV_COLOR_FORMAT_T default_get_color_fmt(void) { return IV_YUV_420P; }
1866*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1867*495ae853SAndroid Build Coastguard Worker /* */
1868*495ae853SAndroid Build Coastguard Worker /* Function Name : main */
1869*495ae853SAndroid Build Coastguard Worker /* */
1870*495ae853SAndroid Build Coastguard Worker /* Description : Application to demonstrate codec API */
1871*495ae853SAndroid Build Coastguard Worker /* */
1872*495ae853SAndroid Build Coastguard Worker /* */
1873*495ae853SAndroid Build Coastguard Worker /* Inputs : argc - Number of arguments */
1874*495ae853SAndroid Build Coastguard Worker /* argv[] - Arguments */
1875*495ae853SAndroid Build Coastguard Worker /* Globals : */
1876*495ae853SAndroid Build Coastguard Worker /* Processing : Shows how to use create, process, control and delete */
1877*495ae853SAndroid Build Coastguard Worker /* */
1878*495ae853SAndroid Build Coastguard Worker /* Outputs : Codec output in a file */
1879*495ae853SAndroid Build Coastguard Worker /* Returns : */
1880*495ae853SAndroid Build Coastguard Worker /* */
1881*495ae853SAndroid Build Coastguard Worker /* Issues : Assumes both PROFILE_ENABLE to be */
1882*495ae853SAndroid Build Coastguard Worker /* defined for multithread decode-display working */
1883*495ae853SAndroid Build Coastguard Worker /* */
1884*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1885*495ae853SAndroid Build Coastguard Worker /* */
1886*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
1887*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Initial Version */
1888*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1889*495ae853SAndroid Build Coastguard Worker #ifdef IOS
h264dec_main(char * homedir,char * documentdir,int screen_wd,int screen_ht)1890*495ae853SAndroid Build Coastguard Worker int h264dec_main(char *homedir, char *documentdir, int screen_wd, int screen_ht)
1891*495ae853SAndroid Build Coastguard Worker #else
1892*495ae853SAndroid Build Coastguard Worker int main(WORD32 argc, CHAR *argv[])
1893*495ae853SAndroid Build Coastguard Worker #endif
1894*495ae853SAndroid Build Coastguard Worker {
1895*495ae853SAndroid Build Coastguard Worker CHAR ac_cfg_fname[STRLENGTH];
1896*495ae853SAndroid Build Coastguard Worker FILE *fp_cfg_file = NULL;
1897*495ae853SAndroid Build Coastguard Worker FILE *ps_piclen_file = NULL;
1898*495ae853SAndroid Build Coastguard Worker FILE *ps_ip_file = NULL;
1899*495ae853SAndroid Build Coastguard Worker FILE *ps_op_file = NULL;
1900*495ae853SAndroid Build Coastguard Worker FILE *ps_qp_file = NULL;
1901*495ae853SAndroid Build Coastguard Worker FILE *ps_mb_type_file = NULL;
1902*495ae853SAndroid Build Coastguard Worker FILE *ps_op_chksum_file = NULL;
1903*495ae853SAndroid Build Coastguard Worker WORD32 ret;
1904*495ae853SAndroid Build Coastguard Worker CHAR ac_error_str[STRLENGTH];
1905*495ae853SAndroid Build Coastguard Worker vid_dec_ctx_t s_app_ctx;
1906*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_bs_buf = NULL;
1907*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_qp_map_buf = NULL;
1908*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_blk_type_map_buf = NULL;
1909*495ae853SAndroid Build Coastguard Worker
1910*495ae853SAndroid Build Coastguard Worker ivd_out_bufdesc_t *ps_out_buf;
1911*495ae853SAndroid Build Coastguard Worker UWORD32 u4_num_bytes_dec = 0;
1912*495ae853SAndroid Build Coastguard Worker UWORD32 file_pos = 0;
1913*495ae853SAndroid Build Coastguard Worker
1914*495ae853SAndroid Build Coastguard Worker UWORD32 u4_ip_frm_ts = 0, u4_op_frm_ts = 0;
1915*495ae853SAndroid Build Coastguard Worker
1916*495ae853SAndroid Build Coastguard Worker WORD32 u4_bytes_remaining = 0;
1917*495ae853SAndroid Build Coastguard Worker UWORD32 i;
1918*495ae853SAndroid Build Coastguard Worker UWORD32 u4_ip_buf_len;
1919*495ae853SAndroid Build Coastguard Worker WORD32 total_bytes_comsumed;
1920*495ae853SAndroid Build Coastguard Worker UWORD32 max_op_frm_ts;
1921*495ae853SAndroid Build Coastguard Worker UWORD32 u4_num_disp_bufs_with_dec;
1922*495ae853SAndroid Build Coastguard Worker
1923*495ae853SAndroid Build Coastguard Worker #ifdef PROFILE_ENABLE
1924*495ae853SAndroid Build Coastguard Worker UWORD32 u4_tot_cycles = 0;
1925*495ae853SAndroid Build Coastguard Worker UWORD32 frm_cnt = 0;
1926*495ae853SAndroid Build Coastguard Worker UWORD32 u4_tot_fmt_cycles = 0;
1927*495ae853SAndroid Build Coastguard Worker UWORD32 peak_window[PEAK_WINDOW_SIZE];
1928*495ae853SAndroid Build Coastguard Worker UWORD32 peak_window_idx = 0;
1929*495ae853SAndroid Build Coastguard Worker UWORD32 peak_avg_max = 0;
1930*495ae853SAndroid Build Coastguard Worker #ifdef INTEL_CE5300
1931*495ae853SAndroid Build Coastguard Worker UWORD32 time_consumed = 0;
1932*495ae853SAndroid Build Coastguard Worker UWORD32 bytes_consumed = 0;
1933*495ae853SAndroid Build Coastguard Worker #endif
1934*495ae853SAndroid Build Coastguard Worker #endif
1935*495ae853SAndroid Build Coastguard Worker
1936*495ae853SAndroid Build Coastguard Worker #ifdef WINDOWS_TIMER
1937*495ae853SAndroid Build Coastguard Worker LARGE_INTEGER frequency;
1938*495ae853SAndroid Build Coastguard Worker #endif
1939*495ae853SAndroid Build Coastguard Worker #ifdef PROFILE_ENABLE
1940*495ae853SAndroid Build Coastguard Worker WORD32 width = 0, height = 0;
1941*495ae853SAndroid Build Coastguard Worker #endif
1942*495ae853SAndroid Build Coastguard Worker iv_obj_t *codec_obj;
1943*495ae853SAndroid Build Coastguard Worker #if defined(GPU_BUILD) && !defined(X86)
1944*495ae853SAndroid Build Coastguard Worker // int ioctl_init();
1945*495ae853SAndroid Build Coastguard Worker // ioctl_init();
1946*495ae853SAndroid Build Coastguard Worker #endif
1947*495ae853SAndroid Build Coastguard Worker
1948*495ae853SAndroid Build Coastguard Worker #ifdef X86_MINGW
1949*495ae853SAndroid Build Coastguard Worker // For getting printfs without any delay
1950*495ae853SAndroid Build Coastguard Worker setvbuf(stdout, NULL, _IONBF, 0);
1951*495ae853SAndroid Build Coastguard Worker setvbuf(stderr, NULL, _IONBF, 0);
1952*495ae853SAndroid Build Coastguard Worker #endif
1953*495ae853SAndroid Build Coastguard Worker #ifdef IOS
1954*495ae853SAndroid Build Coastguard Worker sprintf(filename_trace, "%s/iostrace.txt", homedir);
1955*495ae853SAndroid Build Coastguard Worker printf("\ntrace file name = %s", filename_trace);
1956*495ae853SAndroid Build Coastguard Worker #endif
1957*495ae853SAndroid Build Coastguard Worker
1958*495ae853SAndroid Build Coastguard Worker #ifdef X86_MINGW
1959*495ae853SAndroid Build Coastguard Worker {
1960*495ae853SAndroid Build Coastguard Worker signal(SIGSEGV, sigsegv_handler);
1961*495ae853SAndroid Build Coastguard Worker }
1962*495ae853SAndroid Build Coastguard Worker #endif
1963*495ae853SAndroid Build Coastguard Worker
1964*495ae853SAndroid Build Coastguard Worker #ifndef IOS
1965*495ae853SAndroid Build Coastguard Worker /* Usage */
1966*495ae853SAndroid Build Coastguard Worker if(argc < 2)
1967*495ae853SAndroid Build Coastguard Worker {
1968*495ae853SAndroid Build Coastguard Worker printf("Using test.cfg as configuration file \n");
1969*495ae853SAndroid Build Coastguard Worker strcpy(ac_cfg_fname, "test.cfg");
1970*495ae853SAndroid Build Coastguard Worker }
1971*495ae853SAndroid Build Coastguard Worker else if(argc == 2)
1972*495ae853SAndroid Build Coastguard Worker {
1973*495ae853SAndroid Build Coastguard Worker strcpy(ac_cfg_fname, argv[1]);
1974*495ae853SAndroid Build Coastguard Worker }
1975*495ae853SAndroid Build Coastguard Worker
1976*495ae853SAndroid Build Coastguard Worker #else
1977*495ae853SAndroid Build Coastguard Worker strcpy(ac_cfg_fname, "test.cfg");
1978*495ae853SAndroid Build Coastguard Worker
1979*495ae853SAndroid Build Coastguard Worker #endif
1980*495ae853SAndroid Build Coastguard Worker
1981*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
1982*495ae853SAndroid Build Coastguard Worker /* Initialize Application parameters */
1983*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
1984*495ae853SAndroid Build Coastguard Worker
1985*495ae853SAndroid Build Coastguard Worker strcpy(s_app_ctx.ac_ip_fname, "\0");
1986*495ae853SAndroid Build Coastguard Worker s_app_ctx.dump_q_wr_idx = 0;
1987*495ae853SAndroid Build Coastguard Worker s_app_ctx.dump_q_rd_idx = 0;
1988*495ae853SAndroid Build Coastguard Worker s_app_ctx.display_thread_created = 0;
1989*495ae853SAndroid Build Coastguard Worker s_app_ctx.disp_q_wr_idx = 0;
1990*495ae853SAndroid Build Coastguard Worker s_app_ctx.disp_q_rd_idx = 0;
1991*495ae853SAndroid Build Coastguard Worker s_app_ctx.disp_delay = 0;
1992*495ae853SAndroid Build Coastguard Worker s_app_ctx.loopback = 0;
1993*495ae853SAndroid Build Coastguard Worker s_app_ctx.display = 0;
1994*495ae853SAndroid Build Coastguard Worker s_app_ctx.full_screen = 0;
1995*495ae853SAndroid Build Coastguard Worker s_app_ctx.u4_piclen_flag = 0;
1996*495ae853SAndroid Build Coastguard Worker s_app_ctx.fps = DEFAULT_FPS;
1997*495ae853SAndroid Build Coastguard Worker file_pos = 0;
1998*495ae853SAndroid Build Coastguard Worker total_bytes_comsumed = 0;
1999*495ae853SAndroid Build Coastguard Worker u4_ip_frm_ts = 0;
2000*495ae853SAndroid Build Coastguard Worker u4_op_frm_ts = 0;
2001*495ae853SAndroid Build Coastguard Worker #ifdef PROFILE_ENABLE
2002*495ae853SAndroid Build Coastguard Worker memset(peak_window, 0, sizeof(WORD32) * PEAK_WINDOW_SIZE);
2003*495ae853SAndroid Build Coastguard Worker #endif
2004*495ae853SAndroid Build Coastguard Worker s_app_ctx.u4_share_disp_buf = DEFAULT_SHARE_DISPLAY_BUF;
2005*495ae853SAndroid Build Coastguard Worker s_app_ctx.u4_num_cores = DEFAULT_NUM_CORES;
2006*495ae853SAndroid Build Coastguard Worker s_app_ctx.i4_degrade_type = 0;
2007*495ae853SAndroid Build Coastguard Worker s_app_ctx.i4_degrade_pics = 0;
2008*495ae853SAndroid Build Coastguard Worker s_app_ctx.e_arch = ARCH_ARM_A9Q;
2009*495ae853SAndroid Build Coastguard Worker s_app_ctx.e_soc = SOC_GENERIC;
2010*495ae853SAndroid Build Coastguard Worker s_app_ctx.i4_target_layer_id = 0;
2011*495ae853SAndroid Build Coastguard Worker
2012*495ae853SAndroid Build Coastguard Worker s_app_ctx.u4_strd = STRIDE;
2013*495ae853SAndroid Build Coastguard Worker
2014*495ae853SAndroid Build Coastguard Worker s_app_ctx.display_thread_handle = malloc(ithread_get_handle_size());
2015*495ae853SAndroid Build Coastguard Worker s_app_ctx.quit = 0;
2016*495ae853SAndroid Build Coastguard Worker s_app_ctx.paused = 0;
2017*495ae853SAndroid Build Coastguard Worker // s_app_ctx.u4_output_present = 0;
2018*495ae853SAndroid Build Coastguard Worker s_app_ctx.u4_chksum_save_flag = 0;
2019*495ae853SAndroid Build Coastguard Worker s_app_ctx.u4_frame_info_enable = 0;
2020*495ae853SAndroid Build Coastguard Worker
2021*495ae853SAndroid Build Coastguard Worker s_app_ctx.get_stride = &default_get_stride;
2022*495ae853SAndroid Build Coastguard Worker
2023*495ae853SAndroid Build Coastguard Worker s_app_ctx.get_color_fmt = &default_get_color_fmt;
2024*495ae853SAndroid Build Coastguard Worker
2025*495ae853SAndroid Build Coastguard Worker /* Set function pointers for display */
2026*495ae853SAndroid Build Coastguard Worker #ifdef SDL_DISPLAY
2027*495ae853SAndroid Build Coastguard Worker s_app_ctx.disp_init = &sdl_disp_init;
2028*495ae853SAndroid Build Coastguard Worker s_app_ctx.alloc_disp_buffers = &sdl_alloc_disp_buffers;
2029*495ae853SAndroid Build Coastguard Worker s_app_ctx.display_buffer = &sdl_display;
2030*495ae853SAndroid Build Coastguard Worker s_app_ctx.set_disp_buffers = &sdl_set_disp_buffers;
2031*495ae853SAndroid Build Coastguard Worker s_app_ctx.disp_deinit = &sdl_disp_deinit;
2032*495ae853SAndroid Build Coastguard Worker s_app_ctx.disp_usleep = &sdl_disp_usleep;
2033*495ae853SAndroid Build Coastguard Worker s_app_ctx.get_color_fmt = &sdl_get_color_fmt;
2034*495ae853SAndroid Build Coastguard Worker s_app_ctx.get_stride = &sdl_get_stride;
2035*495ae853SAndroid Build Coastguard Worker #endif
2036*495ae853SAndroid Build Coastguard Worker
2037*495ae853SAndroid Build Coastguard Worker #ifdef FBDEV_DISPLAY
2038*495ae853SAndroid Build Coastguard Worker s_app_ctx.disp_init = &fbd_disp_init;
2039*495ae853SAndroid Build Coastguard Worker s_app_ctx.alloc_disp_buffers = &fbd_alloc_disp_buffers;
2040*495ae853SAndroid Build Coastguard Worker s_app_ctx.display_buffer = &fbd_display;
2041*495ae853SAndroid Build Coastguard Worker s_app_ctx.set_disp_buffers = &fbd_set_disp_buffers;
2042*495ae853SAndroid Build Coastguard Worker s_app_ctx.disp_deinit = &fbd_disp_deinit;
2043*495ae853SAndroid Build Coastguard Worker s_app_ctx.disp_usleep = &fbd_disp_usleep;
2044*495ae853SAndroid Build Coastguard Worker s_app_ctx.get_color_fmt = &fbd_get_color_fmt;
2045*495ae853SAndroid Build Coastguard Worker s_app_ctx.get_stride = &fbd_get_stride;
2046*495ae853SAndroid Build Coastguard Worker #endif
2047*495ae853SAndroid Build Coastguard Worker
2048*495ae853SAndroid Build Coastguard Worker #ifdef INTEL_CE5300
2049*495ae853SAndroid Build Coastguard Worker s_app_ctx.disp_init = &gdl_disp_init;
2050*495ae853SAndroid Build Coastguard Worker s_app_ctx.alloc_disp_buffers = &gdl_alloc_disp_buffers;
2051*495ae853SAndroid Build Coastguard Worker s_app_ctx.display_buffer = &gdl_display;
2052*495ae853SAndroid Build Coastguard Worker s_app_ctx.set_disp_buffers = &gdl_set_disp_buffers;
2053*495ae853SAndroid Build Coastguard Worker s_app_ctx.disp_deinit = &gdl_disp_deinit;
2054*495ae853SAndroid Build Coastguard Worker s_app_ctx.disp_usleep = &gdl_disp_usleep;
2055*495ae853SAndroid Build Coastguard Worker s_app_ctx.get_color_fmt = &gdl_get_color_fmt;
2056*495ae853SAndroid Build Coastguard Worker s_app_ctx.get_stride = &gdl_get_stride;
2057*495ae853SAndroid Build Coastguard Worker #endif
2058*495ae853SAndroid Build Coastguard Worker
2059*495ae853SAndroid Build Coastguard Worker #ifdef IOS_DISPLAY
2060*495ae853SAndroid Build Coastguard Worker s_app_ctx.disp_init = &ios_disp_init;
2061*495ae853SAndroid Build Coastguard Worker s_app_ctx.alloc_disp_buffers = &ios_alloc_disp_buffers;
2062*495ae853SAndroid Build Coastguard Worker s_app_ctx.display_buffer = &ios_display;
2063*495ae853SAndroid Build Coastguard Worker s_app_ctx.set_disp_buffers = &ios_set_disp_buffers;
2064*495ae853SAndroid Build Coastguard Worker s_app_ctx.disp_deinit = &ios_disp_deinit;
2065*495ae853SAndroid Build Coastguard Worker s_app_ctx.disp_usleep = &ios_disp_usleep;
2066*495ae853SAndroid Build Coastguard Worker s_app_ctx.get_color_fmt = &ios_get_color_fmt;
2067*495ae853SAndroid Build Coastguard Worker s_app_ctx.get_stride = &ios_get_stride;
2068*495ae853SAndroid Build Coastguard Worker #endif
2069*495ae853SAndroid Build Coastguard Worker
2070*495ae853SAndroid Build Coastguard Worker s_app_ctx.display_deinit_flag = 0;
2071*495ae853SAndroid Build Coastguard Worker s_app_ctx.e_output_chroma_format = IV_YUV_420SP_UV;
2072*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2073*495ae853SAndroid Build Coastguard Worker /* Parse arguments */
2074*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2075*495ae853SAndroid Build Coastguard Worker
2076*495ae853SAndroid Build Coastguard Worker #ifndef IOS
2077*495ae853SAndroid Build Coastguard Worker /* Read command line arguments */
2078*495ae853SAndroid Build Coastguard Worker if(argc > 2)
2079*495ae853SAndroid Build Coastguard Worker {
2080*495ae853SAndroid Build Coastguard Worker for(i = 1; i < (UWORD32) argc; i += 2)
2081*495ae853SAndroid Build Coastguard Worker {
2082*495ae853SAndroid Build Coastguard Worker if(CONFIG == get_argument(argv[i]))
2083*495ae853SAndroid Build Coastguard Worker {
2084*495ae853SAndroid Build Coastguard Worker strcpy(ac_cfg_fname, argv[i + 1]);
2085*495ae853SAndroid Build Coastguard Worker if((fp_cfg_file = fopen(ac_cfg_fname, "r")) == NULL)
2086*495ae853SAndroid Build Coastguard Worker {
2087*495ae853SAndroid Build Coastguard Worker snprintf(ac_error_str, sizeof(ac_error_str),
2088*495ae853SAndroid Build Coastguard Worker "Could not open Configuration file %s", ac_cfg_fname);
2089*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2090*495ae853SAndroid Build Coastguard Worker }
2091*495ae853SAndroid Build Coastguard Worker read_cfg_file(&s_app_ctx, fp_cfg_file);
2092*495ae853SAndroid Build Coastguard Worker fclose(fp_cfg_file);
2093*495ae853SAndroid Build Coastguard Worker }
2094*495ae853SAndroid Build Coastguard Worker else
2095*495ae853SAndroid Build Coastguard Worker {
2096*495ae853SAndroid Build Coastguard Worker parse_argument(&s_app_ctx, argv[i], argv[i + 1]);
2097*495ae853SAndroid Build Coastguard Worker }
2098*495ae853SAndroid Build Coastguard Worker }
2099*495ae853SAndroid Build Coastguard Worker }
2100*495ae853SAndroid Build Coastguard Worker else
2101*495ae853SAndroid Build Coastguard Worker {
2102*495ae853SAndroid Build Coastguard Worker if((fp_cfg_file = fopen(ac_cfg_fname, "r")) == NULL)
2103*495ae853SAndroid Build Coastguard Worker {
2104*495ae853SAndroid Build Coastguard Worker snprintf(ac_error_str, sizeof(ac_error_str), "Could not open Configuration file %s",
2105*495ae853SAndroid Build Coastguard Worker ac_cfg_fname);
2106*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2107*495ae853SAndroid Build Coastguard Worker }
2108*495ae853SAndroid Build Coastguard Worker read_cfg_file(&s_app_ctx, fp_cfg_file);
2109*495ae853SAndroid Build Coastguard Worker fclose(fp_cfg_file);
2110*495ae853SAndroid Build Coastguard Worker }
2111*495ae853SAndroid Build Coastguard Worker #else
2112*495ae853SAndroid Build Coastguard Worker snprintf(filename_with_path, sizeof(filename_with_path), "%s/%s", homedir, ac_cfg_fname);
2113*495ae853SAndroid Build Coastguard Worker if((fp_cfg_file = fopen(filename_with_path, "r")) == NULL)
2114*495ae853SAndroid Build Coastguard Worker {
2115*495ae853SAndroid Build Coastguard Worker snprintf(ac_error_str, sizeof(ac_error_str), "Could not open Configuration file %s",
2116*495ae853SAndroid Build Coastguard Worker ac_cfg_fname);
2117*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2118*495ae853SAndroid Build Coastguard Worker }
2119*495ae853SAndroid Build Coastguard Worker read_cfg_file(&s_app_ctx, fp_cfg_file);
2120*495ae853SAndroid Build Coastguard Worker fclose(fp_cfg_file);
2121*495ae853SAndroid Build Coastguard Worker
2122*495ae853SAndroid Build Coastguard Worker #endif
2123*495ae853SAndroid Build Coastguard Worker #ifdef PRINT_PICSIZE
2124*495ae853SAndroid Build Coastguard Worker /* If the binary is used for only getting number of bytes in each picture,
2125*495ae853SAndroid Build Coastguard Worker * then disable the following features */
2126*495ae853SAndroid Build Coastguard Worker s_app_ctx.u4_piclen_flag = 0;
2127*495ae853SAndroid Build Coastguard Worker s_app_ctx.u4_file_save_flag = 0;
2128*495ae853SAndroid Build Coastguard Worker s_app_ctx.u4_chksum_save_flag = 0;
2129*495ae853SAndroid Build Coastguard Worker s_app_ctx.i4_degrade_pics = 0;
2130*495ae853SAndroid Build Coastguard Worker s_app_ctx.i4_degrade_type = 0;
2131*495ae853SAndroid Build Coastguard Worker s_app_ctx.loopback = 0;
2132*495ae853SAndroid Build Coastguard Worker s_app_ctx.u4_share_disp_buf = 0;
2133*495ae853SAndroid Build Coastguard Worker s_app_ctx.display = 0;
2134*495ae853SAndroid Build Coastguard Worker #endif
2135*495ae853SAndroid Build Coastguard Worker
2136*495ae853SAndroid Build Coastguard Worker /* If display is enabled, then turn off shared mode and get color format that
2137*495ae853SAndroid Build Coastguard Worker * is supported by display */
2138*495ae853SAndroid Build Coastguard Worker if(1 == s_app_ctx.display)
2139*495ae853SAndroid Build Coastguard Worker {
2140*495ae853SAndroid Build Coastguard Worker s_app_ctx.u4_share_disp_buf = 0;
2141*495ae853SAndroid Build Coastguard Worker s_app_ctx.e_output_chroma_format = s_app_ctx.get_color_fmt();
2142*495ae853SAndroid Build Coastguard Worker }
2143*495ae853SAndroid Build Coastguard Worker if(strcmp(s_app_ctx.ac_ip_fname, "\0") == 0)
2144*495ae853SAndroid Build Coastguard Worker {
2145*495ae853SAndroid Build Coastguard Worker printf("\nNo input file given for decoding\n");
2146*495ae853SAndroid Build Coastguard Worker exit(-1);
2147*495ae853SAndroid Build Coastguard Worker }
2148*495ae853SAndroid Build Coastguard Worker
2149*495ae853SAndroid Build Coastguard Worker if(1 == s_app_ctx.u4_frame_info_enable)
2150*495ae853SAndroid Build Coastguard Worker {
2151*495ae853SAndroid Build Coastguard Worker pu1_qp_map_buf = calloc((ADAPTIVE_MAX_HT * ADAPTIVE_MAX_WD) >> 6, 1);
2152*495ae853SAndroid Build Coastguard Worker pu1_blk_type_map_buf = calloc((ADAPTIVE_MAX_HT * ADAPTIVE_MAX_WD) >> 6, 1);
2153*495ae853SAndroid Build Coastguard Worker }
2154*495ae853SAndroid Build Coastguard Worker
2155*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
2156*495ae853SAndroid Build Coastguard Worker /* create the file object for input file */
2157*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
2158*495ae853SAndroid Build Coastguard Worker #ifdef IOS
2159*495ae853SAndroid Build Coastguard Worker snprintf(filename_with_path, sizeof(filename_with_path), "%s/%s", homedir,
2160*495ae853SAndroid Build Coastguard Worker s_app_ctx.ac_ip_fname);
2161*495ae853SAndroid Build Coastguard Worker ps_ip_file = fopen(filename_with_path, "rb");
2162*495ae853SAndroid Build Coastguard Worker #else
2163*495ae853SAndroid Build Coastguard Worker ps_ip_file = fopen(s_app_ctx.ac_ip_fname, "rb");
2164*495ae853SAndroid Build Coastguard Worker #endif
2165*495ae853SAndroid Build Coastguard Worker if(NULL == ps_ip_file)
2166*495ae853SAndroid Build Coastguard Worker {
2167*495ae853SAndroid Build Coastguard Worker snprintf(ac_error_str, sizeof(ac_error_str), "Could not open input file %s",
2168*495ae853SAndroid Build Coastguard Worker s_app_ctx.ac_ip_fname);
2169*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2170*495ae853SAndroid Build Coastguard Worker }
2171*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
2172*495ae853SAndroid Build Coastguard Worker /* create the file object for input file */
2173*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
2174*495ae853SAndroid Build Coastguard Worker if(1 == s_app_ctx.u4_piclen_flag)
2175*495ae853SAndroid Build Coastguard Worker {
2176*495ae853SAndroid Build Coastguard Worker #ifdef IOS
2177*495ae853SAndroid Build Coastguard Worker snprintf(filename_with_path, sizeof(filename_with_path), "%s/%s",
2178*495ae853SAndroid Build Coastguard Worker s_app_ctx.ac_piclen_fname);
2179*495ae853SAndroid Build Coastguard Worker ps_piclen_file = fopen(filename_with_path, "rb");
2180*495ae853SAndroid Build Coastguard Worker #else
2181*495ae853SAndroid Build Coastguard Worker ps_piclen_file = fopen(s_app_ctx.ac_piclen_fname, "rb");
2182*495ae853SAndroid Build Coastguard Worker #endif
2183*495ae853SAndroid Build Coastguard Worker if(NULL == ps_piclen_file)
2184*495ae853SAndroid Build Coastguard Worker {
2185*495ae853SAndroid Build Coastguard Worker snprintf(ac_error_str, sizeof(ac_error_str), "Could not open piclen file %s",
2186*495ae853SAndroid Build Coastguard Worker s_app_ctx.ac_piclen_fname);
2187*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2188*495ae853SAndroid Build Coastguard Worker }
2189*495ae853SAndroid Build Coastguard Worker }
2190*495ae853SAndroid Build Coastguard Worker
2191*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
2192*495ae853SAndroid Build Coastguard Worker /* create the file object for output file */
2193*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
2194*495ae853SAndroid Build Coastguard Worker
2195*495ae853SAndroid Build Coastguard Worker /* If the filename does not contain %d, then output will be dumped to
2196*495ae853SAndroid Build Coastguard Worker a single file and it is opened here */
2197*495ae853SAndroid Build Coastguard Worker if((1 == s_app_ctx.u4_file_save_flag) && (strstr(s_app_ctx.ac_op_fname, "%d") == NULL))
2198*495ae853SAndroid Build Coastguard Worker {
2199*495ae853SAndroid Build Coastguard Worker #ifdef IOS
2200*495ae853SAndroid Build Coastguard Worker snprintf(filename_with_path, sizeof(filename_with_path), "%s/%s", documentdir,
2201*495ae853SAndroid Build Coastguard Worker s_app_ctx.ac_op_fname);
2202*495ae853SAndroid Build Coastguard Worker ps_op_file = fopen(filename_with_path, "wb");
2203*495ae853SAndroid Build Coastguard Worker #else
2204*495ae853SAndroid Build Coastguard Worker ps_op_file = fopen(s_app_ctx.ac_op_fname, "wb");
2205*495ae853SAndroid Build Coastguard Worker #endif
2206*495ae853SAndroid Build Coastguard Worker
2207*495ae853SAndroid Build Coastguard Worker if(NULL == ps_op_file)
2208*495ae853SAndroid Build Coastguard Worker {
2209*495ae853SAndroid Build Coastguard Worker snprintf(ac_error_str, sizeof(ac_error_str), "Could not open output file %s",
2210*495ae853SAndroid Build Coastguard Worker s_app_ctx.ac_op_fname);
2211*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2212*495ae853SAndroid Build Coastguard Worker }
2213*495ae853SAndroid Build Coastguard Worker }
2214*495ae853SAndroid Build Coastguard Worker
2215*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
2216*495ae853SAndroid Build Coastguard Worker /* create the file object for mbinfo file */
2217*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
2218*495ae853SAndroid Build Coastguard Worker
2219*495ae853SAndroid Build Coastguard Worker if(1 == s_app_ctx.u4_frame_info_enable)
2220*495ae853SAndroid Build Coastguard Worker {
2221*495ae853SAndroid Build Coastguard Worker #ifdef IOS
2222*495ae853SAndroid Build Coastguard Worker snprintf(filename_with_path, sizeof(filename_with_path), "%s/%s", documentdir,
2223*495ae853SAndroid Build Coastguard Worker s_app_ctx.ac_qp_map_fname);
2224*495ae853SAndroid Build Coastguard Worker ps_qp_file = fopen(filename_with_path, "wb");
2225*495ae853SAndroid Build Coastguard Worker
2226*495ae853SAndroid Build Coastguard Worker snprintf(filename_with_path, sizeof(filename_with_path), "%s/%s", documentdir,
2227*495ae853SAndroid Build Coastguard Worker s_app_ctx.ac_blk_type_map_fname);
2228*495ae853SAndroid Build Coastguard Worker ps_mb_type_file = fopen(filename_with_path, "wb");
2229*495ae853SAndroid Build Coastguard Worker #else
2230*495ae853SAndroid Build Coastguard Worker ps_qp_file = fopen(s_app_ctx.ac_qp_map_fname, "wb");
2231*495ae853SAndroid Build Coastguard Worker ps_mb_type_file = fopen(s_app_ctx.ac_blk_type_map_fname, "wb");
2232*495ae853SAndroid Build Coastguard Worker
2233*495ae853SAndroid Build Coastguard Worker #endif
2234*495ae853SAndroid Build Coastguard Worker
2235*495ae853SAndroid Build Coastguard Worker if(NULL == ps_qp_file)
2236*495ae853SAndroid Build Coastguard Worker {
2237*495ae853SAndroid Build Coastguard Worker snprintf(ac_error_str, sizeof(ac_error_str), "Could not open block_qp map file %s",
2238*495ae853SAndroid Build Coastguard Worker s_app_ctx.ac_qp_map_fname);
2239*495ae853SAndroid Build Coastguard Worker }
2240*495ae853SAndroid Build Coastguard Worker if(NULL == ps_mb_type_file)
2241*495ae853SAndroid Build Coastguard Worker {
2242*495ae853SAndroid Build Coastguard Worker snprintf(ac_error_str, sizeof(ac_error_str), "Could not open block_type map file %s",
2243*495ae853SAndroid Build Coastguard Worker s_app_ctx.ac_blk_type_map_fname);
2244*495ae853SAndroid Build Coastguard Worker }
2245*495ae853SAndroid Build Coastguard Worker }
2246*495ae853SAndroid Build Coastguard Worker
2247*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
2248*495ae853SAndroid Build Coastguard Worker /* create the file object for check sum file */
2249*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
2250*495ae853SAndroid Build Coastguard Worker if(1 == s_app_ctx.u4_chksum_save_flag)
2251*495ae853SAndroid Build Coastguard Worker {
2252*495ae853SAndroid Build Coastguard Worker #if IOS
2253*495ae853SAndroid Build Coastguard Worker snprintf(filename_with_path, sizeof(filename_with_path), "%s/%s", documentdir,
2254*495ae853SAndroid Build Coastguard Worker s_app_ctx.ac_op_chksum_fname);
2255*495ae853SAndroid Build Coastguard Worker ps_op_chksum_file = fopen(filename_with_path, "wb");
2256*495ae853SAndroid Build Coastguard Worker #else
2257*495ae853SAndroid Build Coastguard Worker ps_op_chksum_file = fopen(s_app_ctx.ac_op_chksum_fname, "wb");
2258*495ae853SAndroid Build Coastguard Worker #endif
2259*495ae853SAndroid Build Coastguard Worker if(NULL == ps_op_chksum_file)
2260*495ae853SAndroid Build Coastguard Worker {
2261*495ae853SAndroid Build Coastguard Worker snprintf(ac_error_str, sizeof(ac_error_str), "Could not open check sum file %s",
2262*495ae853SAndroid Build Coastguard Worker s_app_ctx.ac_op_chksum_fname);
2263*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2264*495ae853SAndroid Build Coastguard Worker }
2265*495ae853SAndroid Build Coastguard Worker }
2266*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
2267*495ae853SAndroid Build Coastguard Worker /* Create decoder instance */
2268*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
2269*495ae853SAndroid Build Coastguard Worker {
2270*495ae853SAndroid Build Coastguard Worker ps_out_buf = (ivd_out_bufdesc_t *) malloc(sizeof(ivd_out_bufdesc_t));
2271*495ae853SAndroid Build Coastguard Worker
2272*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2273*495ae853SAndroid Build Coastguard Worker /* API Call: Initialize the Decoder */
2274*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2275*495ae853SAndroid Build Coastguard Worker {
2276*495ae853SAndroid Build Coastguard Worker isvcd_create_ip_t s_create_ip = {};
2277*495ae853SAndroid Build Coastguard Worker isvcd_create_op_t s_create_op = {};
2278*495ae853SAndroid Build Coastguard Worker void *fxns = &ivd_api_function;
2279*495ae853SAndroid Build Coastguard Worker
2280*495ae853SAndroid Build Coastguard Worker s_create_ip.s_ivd_create_ip_t.e_cmd = IVD_CMD_CREATE;
2281*495ae853SAndroid Build Coastguard Worker s_create_ip.s_ivd_create_ip_t.u4_share_disp_buf = s_app_ctx.u4_share_disp_buf;
2282*495ae853SAndroid Build Coastguard Worker s_create_ip.s_ivd_create_ip_t.e_output_format =
2283*495ae853SAndroid Build Coastguard Worker (IV_COLOR_FORMAT_T) s_app_ctx.e_output_chroma_format;
2284*495ae853SAndroid Build Coastguard Worker s_create_ip.s_ivd_create_ip_t.pf_aligned_alloc = ih264a_aligned_malloc;
2285*495ae853SAndroid Build Coastguard Worker s_create_ip.s_ivd_create_ip_t.pf_aligned_free = ih264a_aligned_free;
2286*495ae853SAndroid Build Coastguard Worker s_create_ip.s_ivd_create_ip_t.pv_mem_ctxt = NULL;
2287*495ae853SAndroid Build Coastguard Worker s_create_ip.s_ivd_create_ip_t.u4_size = sizeof(isvcd_create_ip_t);
2288*495ae853SAndroid Build Coastguard Worker s_create_op.s_ivd_create_op_t.u4_size = sizeof(isvcd_create_op_t);
2289*495ae853SAndroid Build Coastguard Worker s_create_ip.u4_enable_frame_info = s_app_ctx.u4_frame_info_enable;
2290*495ae853SAndroid Build Coastguard Worker
2291*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function(NULL, (void *) &s_create_ip, (void *) &s_create_op);
2292*495ae853SAndroid Build Coastguard Worker if(ret != IV_SUCCESS)
2293*495ae853SAndroid Build Coastguard Worker {
2294*495ae853SAndroid Build Coastguard Worker sprintf(ac_error_str, "Error in Create %8x\n",
2295*495ae853SAndroid Build Coastguard Worker s_create_op.s_ivd_create_op_t.u4_error_code);
2296*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2297*495ae853SAndroid Build Coastguard Worker }
2298*495ae853SAndroid Build Coastguard Worker codec_obj = (iv_obj_t *) s_create_op.s_ivd_create_op_t.pv_handle;
2299*495ae853SAndroid Build Coastguard Worker codec_obj->pv_fxns = fxns;
2300*495ae853SAndroid Build Coastguard Worker codec_obj->u4_size = sizeof(iv_obj_t);
2301*495ae853SAndroid Build Coastguard Worker s_app_ctx.cocodec_obj = codec_obj;
2302*495ae853SAndroid Build Coastguard Worker
2303*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2304*495ae853SAndroid Build Coastguard Worker /* set stride */
2305*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2306*495ae853SAndroid Build Coastguard Worker {
2307*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_config_ip_t s_h264d_ctl_ip = {};
2308*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_config_op_t s_h264d_ctl_op = {};
2309*495ae853SAndroid Build Coastguard Worker ivd_ctl_set_config_ip_t *ps_ctl_ip = &s_h264d_ctl_ip.s_ivd_ctl_set_config_ip_t;
2310*495ae853SAndroid Build Coastguard Worker ivd_ctl_set_config_op_t *ps_ctl_op = &s_h264d_ctl_op.s_ivd_ctl_set_config_op_t;
2311*495ae853SAndroid Build Coastguard Worker
2312*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->u4_disp_wd = STRIDE;
2313*495ae853SAndroid Build Coastguard Worker if(1 == s_app_ctx.display) ps_ctl_ip->u4_disp_wd = s_app_ctx.get_stride();
2314*495ae853SAndroid Build Coastguard Worker
2315*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_frm_skip_mode = IVD_SKIP_NONE;
2316*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_frm_out_mode = IVD_DISPLAY_FRAME_OUT;
2317*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_vid_dec_mode = IVD_DECODE_HEADER;
2318*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_cmd = IVD_CMD_VIDEO_CTL;
2319*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_sub_cmd = IVD_CMD_CTL_SETPARAMS;
2320*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->u4_size = sizeof(isvcd_ctl_set_config_ip_t);
2321*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_size = sizeof(isvcd_ctl_set_config_op_t);
2322*495ae853SAndroid Build Coastguard Worker
2323*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_h264d_ctl_ip,
2324*495ae853SAndroid Build Coastguard Worker (void *) &s_h264d_ctl_op);
2325*495ae853SAndroid Build Coastguard Worker if(ret != IV_SUCCESS)
2326*495ae853SAndroid Build Coastguard Worker {
2327*495ae853SAndroid Build Coastguard Worker sprintf(ac_error_str, "\nError in setting the stride");
2328*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2329*495ae853SAndroid Build Coastguard Worker }
2330*495ae853SAndroid Build Coastguard Worker }
2331*495ae853SAndroid Build Coastguard Worker }
2332*495ae853SAndroid Build Coastguard Worker }
2333*495ae853SAndroid Build Coastguard Worker
2334*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2335*495ae853SAndroid Build Coastguard Worker /* set num of cores */
2336*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2337*495ae853SAndroid Build Coastguard Worker {
2338*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_num_cores_ip_t s_ctl_set_cores_ip;
2339*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_num_cores_op_t s_ctl_set_cores_op;
2340*495ae853SAndroid Build Coastguard Worker
2341*495ae853SAndroid Build Coastguard Worker s_ctl_set_cores_ip.e_cmd = IVD_CMD_VIDEO_CTL;
2342*495ae853SAndroid Build Coastguard Worker s_ctl_set_cores_ip.e_sub_cmd =
2343*495ae853SAndroid Build Coastguard Worker (IVD_CONTROL_API_COMMAND_TYPE_T) IH264D_CMD_CTL_SET_NUM_CORES;
2344*495ae853SAndroid Build Coastguard Worker s_ctl_set_cores_ip.u4_num_cores = s_app_ctx.u4_num_cores;
2345*495ae853SAndroid Build Coastguard Worker s_ctl_set_cores_ip.u4_size = sizeof(isvcd_ctl_set_num_cores_ip_t);
2346*495ae853SAndroid Build Coastguard Worker s_ctl_set_cores_op.u4_size = sizeof(isvcd_ctl_set_num_cores_op_t);
2347*495ae853SAndroid Build Coastguard Worker
2348*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_ctl_set_cores_ip,
2349*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_set_cores_op);
2350*495ae853SAndroid Build Coastguard Worker if(ret != IV_SUCCESS)
2351*495ae853SAndroid Build Coastguard Worker {
2352*495ae853SAndroid Build Coastguard Worker sprintf(ac_error_str, "\nError in setting number of cores");
2353*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2354*495ae853SAndroid Build Coastguard Worker }
2355*495ae853SAndroid Build Coastguard Worker }
2356*495ae853SAndroid Build Coastguard Worker
2357*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2358*495ae853SAndroid Build Coastguard Worker /* set target layer */
2359*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2360*495ae853SAndroid Build Coastguard Worker {
2361*495ae853SAndroid Build Coastguard Worker isvcd_set_target_layer_ip_t s_ctl_set_target_layer_ip;
2362*495ae853SAndroid Build Coastguard Worker isvcd_set_target_layer_op_t s_ctl_set_target_layer_op;
2363*495ae853SAndroid Build Coastguard Worker
2364*495ae853SAndroid Build Coastguard Worker s_ctl_set_target_layer_ip.e_cmd = IVD_CMD_VIDEO_CTL;
2365*495ae853SAndroid Build Coastguard Worker s_ctl_set_target_layer_ip.e_sub_cmd =
2366*495ae853SAndroid Build Coastguard Worker (IVD_CONTROL_API_COMMAND_TYPE_T) ISVCD_CMD_CTL_SET_TGT_LAYER;
2367*495ae853SAndroid Build Coastguard Worker s_ctl_set_target_layer_ip.u1_tgt_priority_id = 63;
2368*495ae853SAndroid Build Coastguard Worker s_ctl_set_target_layer_ip.u1_tgt_temp_id = 7;
2369*495ae853SAndroid Build Coastguard Worker s_ctl_set_target_layer_ip.u1_tgt_quality_id = 0;
2370*495ae853SAndroid Build Coastguard Worker s_ctl_set_target_layer_ip.u1_tgt_dep_id = s_app_ctx.i4_target_layer_id;
2371*495ae853SAndroid Build Coastguard Worker s_ctl_set_target_layer_ip.u4_size = sizeof(isvcd_set_target_layer_ip_t);
2372*495ae853SAndroid Build Coastguard Worker s_ctl_set_target_layer_op.u4_size = sizeof(isvcd_set_target_layer_op_t);
2373*495ae853SAndroid Build Coastguard Worker
2374*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_ctl_set_target_layer_ip,
2375*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_set_target_layer_op);
2376*495ae853SAndroid Build Coastguard Worker
2377*495ae853SAndroid Build Coastguard Worker if(ret != IV_SUCCESS)
2378*495ae853SAndroid Build Coastguard Worker {
2379*495ae853SAndroid Build Coastguard Worker sprintf(ac_error_str, "\nError in setting target layer id");
2380*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2381*495ae853SAndroid Build Coastguard Worker }
2382*495ae853SAndroid Build Coastguard Worker }
2383*495ae853SAndroid Build Coastguard Worker
2384*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2385*495ae853SAndroid Build Coastguard Worker /* set processsor */
2386*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2387*495ae853SAndroid Build Coastguard Worker {
2388*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_processor_ip_t s_ctl_set_num_processor_ip;
2389*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_processor_op_t s_ctl_set_num_processor_op;
2390*495ae853SAndroid Build Coastguard Worker
2391*495ae853SAndroid Build Coastguard Worker s_ctl_set_num_processor_ip.e_cmd = IVD_CMD_VIDEO_CTL;
2392*495ae853SAndroid Build Coastguard Worker s_ctl_set_num_processor_ip.e_sub_cmd =
2393*495ae853SAndroid Build Coastguard Worker (IVD_CONTROL_API_COMMAND_TYPE_T) IH264D_CMD_CTL_SET_PROCESSOR;
2394*495ae853SAndroid Build Coastguard Worker s_ctl_set_num_processor_ip.u4_arch = s_app_ctx.e_arch;
2395*495ae853SAndroid Build Coastguard Worker s_ctl_set_num_processor_ip.u4_soc = s_app_ctx.e_soc;
2396*495ae853SAndroid Build Coastguard Worker s_ctl_set_num_processor_ip.u4_size = sizeof(isvcd_ctl_set_processor_ip_t);
2397*495ae853SAndroid Build Coastguard Worker s_ctl_set_num_processor_op.u4_size = sizeof(isvcd_ctl_set_processor_op_t);
2398*495ae853SAndroid Build Coastguard Worker
2399*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_ctl_set_num_processor_ip,
2400*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_set_num_processor_op);
2401*495ae853SAndroid Build Coastguard Worker if(ret != IV_SUCCESS)
2402*495ae853SAndroid Build Coastguard Worker {
2403*495ae853SAndroid Build Coastguard Worker sprintf(ac_error_str, "\nError in setting Processor type");
2404*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2405*495ae853SAndroid Build Coastguard Worker }
2406*495ae853SAndroid Build Coastguard Worker }
2407*495ae853SAndroid Build Coastguard Worker
2408*495ae853SAndroid Build Coastguard Worker flush_output(codec_obj, &s_app_ctx, ps_out_buf, pu1_bs_buf, &u4_op_frm_ts, ps_op_file,
2409*495ae853SAndroid Build Coastguard Worker ps_qp_file, ps_mb_type_file, pu1_qp_map_buf, pu1_blk_type_map_buf,
2410*495ae853SAndroid Build Coastguard Worker ps_op_chksum_file, u4_ip_frm_ts, u4_bytes_remaining);
2411*495ae853SAndroid Build Coastguard Worker
2412*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2413*495ae853SAndroid Build Coastguard Worker /* Decode header to get width and height and buffer sizes */
2414*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2415*495ae853SAndroid Build Coastguard Worker {
2416*495ae853SAndroid Build Coastguard Worker isvcd_video_decode_ip_t s_h264d_decode_ip = {};
2417*495ae853SAndroid Build Coastguard Worker isvcd_video_decode_op_t s_h264d_decode_op = {};
2418*495ae853SAndroid Build Coastguard Worker ivd_video_decode_ip_t *ps_video_decode_ip = &s_h264d_decode_ip.s_ivd_video_decode_ip_t;
2419*495ae853SAndroid Build Coastguard Worker ivd_video_decode_op_t *ps_video_decode_op = &s_h264d_decode_op.s_ivd_video_decode_op_t;
2420*495ae853SAndroid Build Coastguard Worker
2421*495ae853SAndroid Build Coastguard Worker {
2422*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_config_ip_t s_h264d_ctl_ip = {};
2423*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_config_op_t s_h264d_ctl_op = {};
2424*495ae853SAndroid Build Coastguard Worker ivd_ctl_set_config_ip_t *ps_ctl_ip = &s_h264d_ctl_ip.s_ivd_ctl_set_config_ip_t;
2425*495ae853SAndroid Build Coastguard Worker ivd_ctl_set_config_op_t *ps_ctl_op = &s_h264d_ctl_op.s_ivd_ctl_set_config_op_t;
2426*495ae853SAndroid Build Coastguard Worker
2427*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->u4_disp_wd = STRIDE;
2428*495ae853SAndroid Build Coastguard Worker if(1 == s_app_ctx.display) ps_ctl_ip->u4_disp_wd = s_app_ctx.get_stride();
2429*495ae853SAndroid Build Coastguard Worker
2430*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_frm_skip_mode = IVD_SKIP_NONE;
2431*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_frm_out_mode = IVD_DISPLAY_FRAME_OUT;
2432*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_vid_dec_mode = IVD_DECODE_HEADER;
2433*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_cmd = IVD_CMD_VIDEO_CTL;
2434*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_sub_cmd = IVD_CMD_CTL_SETPARAMS;
2435*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->u4_size = sizeof(isvcd_ctl_set_config_ip_t);
2436*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_size = sizeof(isvcd_ctl_set_config_op_t);
2437*495ae853SAndroid Build Coastguard Worker
2438*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_h264d_ctl_ip,
2439*495ae853SAndroid Build Coastguard Worker (void *) &s_h264d_ctl_op);
2440*495ae853SAndroid Build Coastguard Worker if(ret != IV_SUCCESS)
2441*495ae853SAndroid Build Coastguard Worker {
2442*495ae853SAndroid Build Coastguard Worker sprintf(ac_error_str, "\nError in setting the codec in header decode mode");
2443*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2444*495ae853SAndroid Build Coastguard Worker }
2445*495ae853SAndroid Build Coastguard Worker }
2446*495ae853SAndroid Build Coastguard Worker
2447*495ae853SAndroid Build Coastguard Worker /* Allocate input buffer for header */
2448*495ae853SAndroid Build Coastguard Worker u4_ip_buf_len = 256 * 1024;
2449*495ae853SAndroid Build Coastguard Worker pu1_bs_buf = (UWORD8 *) malloc(u4_ip_buf_len);
2450*495ae853SAndroid Build Coastguard Worker
2451*495ae853SAndroid Build Coastguard Worker if(pu1_bs_buf == NULL)
2452*495ae853SAndroid Build Coastguard Worker {
2453*495ae853SAndroid Build Coastguard Worker sprintf(ac_error_str, "\nAllocation failure for input buffer of i4_size %d",
2454*495ae853SAndroid Build Coastguard Worker u4_ip_buf_len);
2455*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2456*495ae853SAndroid Build Coastguard Worker }
2457*495ae853SAndroid Build Coastguard Worker
2458*495ae853SAndroid Build Coastguard Worker do
2459*495ae853SAndroid Build Coastguard Worker {
2460*495ae853SAndroid Build Coastguard Worker WORD32 numbytes;
2461*495ae853SAndroid Build Coastguard Worker
2462*495ae853SAndroid Build Coastguard Worker if(0 == s_app_ctx.u4_piclen_flag)
2463*495ae853SAndroid Build Coastguard Worker {
2464*495ae853SAndroid Build Coastguard Worker fseek(ps_ip_file, file_pos, SEEK_SET);
2465*495ae853SAndroid Build Coastguard Worker numbytes = u4_ip_buf_len;
2466*495ae853SAndroid Build Coastguard Worker }
2467*495ae853SAndroid Build Coastguard Worker else
2468*495ae853SAndroid Build Coastguard Worker {
2469*495ae853SAndroid Build Coastguard Worker WORD32 entries;
2470*495ae853SAndroid Build Coastguard Worker entries = fscanf(ps_piclen_file, "%d\n", &numbytes);
2471*495ae853SAndroid Build Coastguard Worker if(1 != entries) numbytes = u4_ip_buf_len;
2472*495ae853SAndroid Build Coastguard Worker }
2473*495ae853SAndroid Build Coastguard Worker
2474*495ae853SAndroid Build Coastguard Worker u4_bytes_remaining = (WORD32) fread(pu1_bs_buf, sizeof(UWORD8), numbytes, ps_ip_file);
2475*495ae853SAndroid Build Coastguard Worker
2476*495ae853SAndroid Build Coastguard Worker if((1 == s_app_ctx.u4_piclen_flag) && (u4_bytes_remaining > 0))
2477*495ae853SAndroid Build Coastguard Worker {
2478*495ae853SAndroid Build Coastguard Worker *(pu1_bs_buf + numbytes) = 0x00;
2479*495ae853SAndroid Build Coastguard Worker numbytes++;
2480*495ae853SAndroid Build Coastguard Worker *(pu1_bs_buf + numbytes) = 0x00;
2481*495ae853SAndroid Build Coastguard Worker numbytes++;
2482*495ae853SAndroid Build Coastguard Worker *(pu1_bs_buf + numbytes) = 0x00;
2483*495ae853SAndroid Build Coastguard Worker numbytes++;
2484*495ae853SAndroid Build Coastguard Worker *(pu1_bs_buf + numbytes) = 0x01;
2485*495ae853SAndroid Build Coastguard Worker numbytes++;
2486*495ae853SAndroid Build Coastguard Worker *(pu1_bs_buf + numbytes) = 0x09;
2487*495ae853SAndroid Build Coastguard Worker numbytes++;
2488*495ae853SAndroid Build Coastguard Worker *(pu1_bs_buf + numbytes) = 0x10;
2489*495ae853SAndroid Build Coastguard Worker numbytes++;
2490*495ae853SAndroid Build Coastguard Worker
2491*495ae853SAndroid Build Coastguard Worker u4_bytes_remaining += 6;
2492*495ae853SAndroid Build Coastguard Worker }
2493*495ae853SAndroid Build Coastguard Worker
2494*495ae853SAndroid Build Coastguard Worker if(0 == u4_bytes_remaining)
2495*495ae853SAndroid Build Coastguard Worker {
2496*495ae853SAndroid Build Coastguard Worker sprintf(ac_error_str, "\nUnable to read from input file");
2497*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2498*495ae853SAndroid Build Coastguard Worker }
2499*495ae853SAndroid Build Coastguard Worker
2500*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->e_cmd = IVD_CMD_VIDEO_DECODE;
2501*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->u4_ts = u4_ip_frm_ts;
2502*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->pv_stream_buffer = pu1_bs_buf;
2503*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->u4_num_Bytes = u4_bytes_remaining;
2504*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->u4_size = sizeof(isvcd_video_decode_ip_t);
2505*495ae853SAndroid Build Coastguard Worker ps_video_decode_op->u4_size = sizeof(isvcd_video_decode_op_t);
2506*495ae853SAndroid Build Coastguard Worker s_h264d_decode_ip.pu1_8x8_blk_qp_map = pu1_qp_map_buf;
2507*495ae853SAndroid Build Coastguard Worker s_h264d_decode_ip.pu1_8x8_blk_type_map = pu1_blk_type_map_buf;
2508*495ae853SAndroid Build Coastguard Worker s_h264d_decode_ip.u4_8x8_blk_qp_map_size = (ADAPTIVE_MAX_HT * ADAPTIVE_MAX_WD) >> 6;
2509*495ae853SAndroid Build Coastguard Worker s_h264d_decode_ip.u4_8x8_blk_type_map_size = (ADAPTIVE_MAX_HT * ADAPTIVE_MAX_WD) >> 6;
2510*495ae853SAndroid Build Coastguard Worker
2511*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2512*495ae853SAndroid Build Coastguard Worker /* API Call: Header Decode */
2513*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2514*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_h264d_decode_ip,
2515*495ae853SAndroid Build Coastguard Worker (void *) &s_h264d_decode_op);
2516*495ae853SAndroid Build Coastguard Worker
2517*495ae853SAndroid Build Coastguard Worker if(ret != IV_SUCCESS)
2518*495ae853SAndroid Build Coastguard Worker {
2519*495ae853SAndroid Build Coastguard Worker printf("Error in header decode 0x%x\n", ps_video_decode_op->u4_error_code);
2520*495ae853SAndroid Build Coastguard Worker // codec_exit(ac_error_str);
2521*495ae853SAndroid Build Coastguard Worker }
2522*495ae853SAndroid Build Coastguard Worker
2523*495ae853SAndroid Build Coastguard Worker u4_num_bytes_dec = ps_video_decode_op->u4_num_bytes_consumed;
2524*495ae853SAndroid Build Coastguard Worker #ifndef PROFILE_ENABLE
2525*495ae853SAndroid Build Coastguard Worker printf("%d\n", ps_video_decode_op->u4_num_bytes_consumed);
2526*495ae853SAndroid Build Coastguard Worker #endif
2527*495ae853SAndroid Build Coastguard Worker file_pos += u4_num_bytes_dec;
2528*495ae853SAndroid Build Coastguard Worker total_bytes_comsumed += u4_num_bytes_dec;
2529*495ae853SAndroid Build Coastguard Worker } while(ret != IV_SUCCESS);
2530*495ae853SAndroid Build Coastguard Worker
2531*495ae853SAndroid Build Coastguard Worker /* copy pic_wd and pic_ht to initialize buffers */
2532*495ae853SAndroid Build Coastguard Worker s_app_ctx.u4_pic_wd = ps_video_decode_op->u4_pic_wd;
2533*495ae853SAndroid Build Coastguard Worker s_app_ctx.u4_pic_ht = ps_video_decode_op->u4_pic_ht;
2534*495ae853SAndroid Build Coastguard Worker
2535*495ae853SAndroid Build Coastguard Worker free(pu1_bs_buf);
2536*495ae853SAndroid Build Coastguard Worker
2537*495ae853SAndroid Build Coastguard Worker #if IOS_DISPLAY
2538*495ae853SAndroid Build Coastguard Worker s_app_ctx.i4_screen_wd = screen_wd;
2539*495ae853SAndroid Build Coastguard Worker s_app_ctx.i4_screen_ht = screen_ht;
2540*495ae853SAndroid Build Coastguard Worker #endif
2541*495ae853SAndroid Build Coastguard Worker {
2542*495ae853SAndroid Build Coastguard Worker ivd_ctl_getbufinfo_ip_t s_ctl_ip;
2543*495ae853SAndroid Build Coastguard Worker ivd_ctl_getbufinfo_op_t s_ctl_op;
2544*495ae853SAndroid Build Coastguard Worker WORD32 outlen = 0;
2545*495ae853SAndroid Build Coastguard Worker
2546*495ae853SAndroid Build Coastguard Worker s_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
2547*495ae853SAndroid Build Coastguard Worker s_ctl_ip.e_sub_cmd = IVD_CMD_CTL_GETBUFINFO;
2548*495ae853SAndroid Build Coastguard Worker s_ctl_ip.u4_size = sizeof(ivd_ctl_getbufinfo_ip_t);
2549*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_size = sizeof(ivd_ctl_getbufinfo_op_t);
2550*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_ctl_ip, (void *) &s_ctl_op);
2551*495ae853SAndroid Build Coastguard Worker if(ret != IV_SUCCESS)
2552*495ae853SAndroid Build Coastguard Worker {
2553*495ae853SAndroid Build Coastguard Worker sprintf(ac_error_str, "Error in Get Buf Info %x", s_ctl_op.u4_error_code);
2554*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2555*495ae853SAndroid Build Coastguard Worker }
2556*495ae853SAndroid Build Coastguard Worker
2557*495ae853SAndroid Build Coastguard Worker /* Allocate bitstream buffer */
2558*495ae853SAndroid Build Coastguard Worker u4_ip_buf_len = s_ctl_op.u4_min_in_buf_size[0];
2559*495ae853SAndroid Build Coastguard Worker #ifdef ADAPTIVE_TEST
2560*495ae853SAndroid Build Coastguard Worker u4_ip_buf_len = ADAPTIVE_MAX_WD * ADAPTIVE_MAX_HT * 3 >> 1;
2561*495ae853SAndroid Build Coastguard Worker #endif
2562*495ae853SAndroid Build Coastguard Worker pu1_bs_buf = (UWORD8 *) malloc(u4_ip_buf_len);
2563*495ae853SAndroid Build Coastguard Worker
2564*495ae853SAndroid Build Coastguard Worker if(pu1_bs_buf == NULL)
2565*495ae853SAndroid Build Coastguard Worker {
2566*495ae853SAndroid Build Coastguard Worker sprintf(ac_error_str, "\nAllocation failure for input buffer of i4_size %d",
2567*495ae853SAndroid Build Coastguard Worker u4_ip_buf_len);
2568*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2569*495ae853SAndroid Build Coastguard Worker }
2570*495ae853SAndroid Build Coastguard Worker
2571*495ae853SAndroid Build Coastguard Worker s_app_ctx.num_disp_buf = s_ctl_op.u4_num_disp_bufs;
2572*495ae853SAndroid Build Coastguard Worker /* Allocate output buffer only if display buffers are not shared */
2573*495ae853SAndroid Build Coastguard Worker /* Or if shared and output is 420P */
2574*495ae853SAndroid Build Coastguard Worker if((0 == s_app_ctx.u4_share_disp_buf) ||
2575*495ae853SAndroid Build Coastguard Worker (IV_YUV_420P == s_app_ctx.e_output_chroma_format))
2576*495ae853SAndroid Build Coastguard Worker {
2577*495ae853SAndroid Build Coastguard Worker #ifdef ADAPTIVE_TEST
2578*495ae853SAndroid Build Coastguard Worker switch(s_app_ctx.e_output_chroma_format)
2579*495ae853SAndroid Build Coastguard Worker {
2580*495ae853SAndroid Build Coastguard Worker case IV_YUV_420P:
2581*495ae853SAndroid Build Coastguard Worker {
2582*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_min_out_buf_size[0] = ADAPTIVE_MAX_WD * ADAPTIVE_MAX_HT;
2583*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_min_out_buf_size[1] = ADAPTIVE_MAX_WD * ADAPTIVE_MAX_HT >> 2;
2584*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_min_out_buf_size[2] = ADAPTIVE_MAX_WD * ADAPTIVE_MAX_HT >> 2;
2585*495ae853SAndroid Build Coastguard Worker break;
2586*495ae853SAndroid Build Coastguard Worker }
2587*495ae853SAndroid Build Coastguard Worker case IV_YUV_420SP_UV:
2588*495ae853SAndroid Build Coastguard Worker case IV_YUV_420SP_VU:
2589*495ae853SAndroid Build Coastguard Worker {
2590*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_min_out_buf_size[0] = ADAPTIVE_MAX_WD * ADAPTIVE_MAX_HT;
2591*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_min_out_buf_size[1] = ADAPTIVE_MAX_WD * ADAPTIVE_MAX_HT >> 1;
2592*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_min_out_buf_size[2] = 0;
2593*495ae853SAndroid Build Coastguard Worker break;
2594*495ae853SAndroid Build Coastguard Worker }
2595*495ae853SAndroid Build Coastguard Worker case IV_YUV_422ILE:
2596*495ae853SAndroid Build Coastguard Worker {
2597*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_min_out_buf_size[0] = ADAPTIVE_MAX_WD * ADAPTIVE_MAX_HT * 2;
2598*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_min_out_buf_size[1] = 0;
2599*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_min_out_buf_size[2] = 0;
2600*495ae853SAndroid Build Coastguard Worker break;
2601*495ae853SAndroid Build Coastguard Worker }
2602*495ae853SAndroid Build Coastguard Worker case IV_RGBA_8888:
2603*495ae853SAndroid Build Coastguard Worker {
2604*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_min_out_buf_size[0] = ADAPTIVE_MAX_WD * ADAPTIVE_MAX_HT * 4;
2605*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_min_out_buf_size[1] = 0;
2606*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_min_out_buf_size[2] = 0;
2607*495ae853SAndroid Build Coastguard Worker break;
2608*495ae853SAndroid Build Coastguard Worker }
2609*495ae853SAndroid Build Coastguard Worker case IV_RGB_565:
2610*495ae853SAndroid Build Coastguard Worker {
2611*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_min_out_buf_size[0] = ADAPTIVE_MAX_WD * ADAPTIVE_MAX_HT * 2;
2612*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_min_out_buf_size[1] = 0;
2613*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_min_out_buf_size[2] = 0;
2614*495ae853SAndroid Build Coastguard Worker break;
2615*495ae853SAndroid Build Coastguard Worker }
2616*495ae853SAndroid Build Coastguard Worker default:
2617*495ae853SAndroid Build Coastguard Worker break;
2618*495ae853SAndroid Build Coastguard Worker }
2619*495ae853SAndroid Build Coastguard Worker #endif
2620*495ae853SAndroid Build Coastguard Worker ps_out_buf->u4_min_out_buf_size[0] = s_ctl_op.u4_min_out_buf_size[0];
2621*495ae853SAndroid Build Coastguard Worker ps_out_buf->u4_min_out_buf_size[1] = s_ctl_op.u4_min_out_buf_size[1];
2622*495ae853SAndroid Build Coastguard Worker ps_out_buf->u4_min_out_buf_size[2] = s_ctl_op.u4_min_out_buf_size[2];
2623*495ae853SAndroid Build Coastguard Worker
2624*495ae853SAndroid Build Coastguard Worker outlen = s_ctl_op.u4_min_out_buf_size[0];
2625*495ae853SAndroid Build Coastguard Worker if(s_ctl_op.u4_min_num_out_bufs > 1) outlen += s_ctl_op.u4_min_out_buf_size[1];
2626*495ae853SAndroid Build Coastguard Worker
2627*495ae853SAndroid Build Coastguard Worker if(s_ctl_op.u4_min_num_out_bufs > 2) outlen += s_ctl_op.u4_min_out_buf_size[2];
2628*495ae853SAndroid Build Coastguard Worker
2629*495ae853SAndroid Build Coastguard Worker ps_out_buf->pu1_bufs[0] = (UWORD8 *) malloc(outlen);
2630*495ae853SAndroid Build Coastguard Worker if(ps_out_buf->pu1_bufs[0] == NULL)
2631*495ae853SAndroid Build Coastguard Worker {
2632*495ae853SAndroid Build Coastguard Worker sprintf(ac_error_str, "\nAllocation failure for output buffer of i4_size %d",
2633*495ae853SAndroid Build Coastguard Worker outlen);
2634*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2635*495ae853SAndroid Build Coastguard Worker }
2636*495ae853SAndroid Build Coastguard Worker
2637*495ae853SAndroid Build Coastguard Worker if(s_ctl_op.u4_min_num_out_bufs > 1)
2638*495ae853SAndroid Build Coastguard Worker ps_out_buf->pu1_bufs[1] =
2639*495ae853SAndroid Build Coastguard Worker ps_out_buf->pu1_bufs[0] + (s_ctl_op.u4_min_out_buf_size[0]);
2640*495ae853SAndroid Build Coastguard Worker
2641*495ae853SAndroid Build Coastguard Worker if(s_ctl_op.u4_min_num_out_bufs > 2)
2642*495ae853SAndroid Build Coastguard Worker ps_out_buf->pu1_bufs[2] =
2643*495ae853SAndroid Build Coastguard Worker ps_out_buf->pu1_bufs[1] + (s_ctl_op.u4_min_out_buf_size[1]);
2644*495ae853SAndroid Build Coastguard Worker
2645*495ae853SAndroid Build Coastguard Worker ps_out_buf->u4_num_bufs = s_ctl_op.u4_min_num_out_bufs;
2646*495ae853SAndroid Build Coastguard Worker }
2647*495ae853SAndroid Build Coastguard Worker
2648*495ae853SAndroid Build Coastguard Worker #ifdef APP_EXTRA_BUFS
2649*495ae853SAndroid Build Coastguard Worker s_app_ctx.disp_delay = EXTRA_DISP_BUFFERS;
2650*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_num_disp_bufs += EXTRA_DISP_BUFFERS;
2651*495ae853SAndroid Build Coastguard Worker #endif
2652*495ae853SAndroid Build Coastguard Worker
2653*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2654*495ae853SAndroid Build Coastguard Worker /* API Call: Allocate display buffers for display buffer shared case */
2655*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2656*495ae853SAndroid Build Coastguard Worker
2657*495ae853SAndroid Build Coastguard Worker for(i = 0; i < s_ctl_op.u4_num_disp_bufs; i++)
2658*495ae853SAndroid Build Coastguard Worker {
2659*495ae853SAndroid Build Coastguard Worker s_app_ctx.s_disp_buffers[i].u4_min_out_buf_size[0] =
2660*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_min_out_buf_size[0];
2661*495ae853SAndroid Build Coastguard Worker s_app_ctx.s_disp_buffers[i].u4_min_out_buf_size[1] =
2662*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_min_out_buf_size[1];
2663*495ae853SAndroid Build Coastguard Worker s_app_ctx.s_disp_buffers[i].u4_min_out_buf_size[2] =
2664*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_min_out_buf_size[2];
2665*495ae853SAndroid Build Coastguard Worker
2666*495ae853SAndroid Build Coastguard Worker outlen = s_ctl_op.u4_min_out_buf_size[0];
2667*495ae853SAndroid Build Coastguard Worker if(s_ctl_op.u4_min_num_out_bufs > 1) outlen += s_ctl_op.u4_min_out_buf_size[1];
2668*495ae853SAndroid Build Coastguard Worker
2669*495ae853SAndroid Build Coastguard Worker if(s_ctl_op.u4_min_num_out_bufs > 2) outlen += s_ctl_op.u4_min_out_buf_size[2];
2670*495ae853SAndroid Build Coastguard Worker
2671*495ae853SAndroid Build Coastguard Worker s_app_ctx.s_disp_buffers[i].pu1_bufs[0] = (UWORD8 *) malloc(outlen);
2672*495ae853SAndroid Build Coastguard Worker
2673*495ae853SAndroid Build Coastguard Worker if(s_app_ctx.s_disp_buffers[i].pu1_bufs[0] == NULL)
2674*495ae853SAndroid Build Coastguard Worker {
2675*495ae853SAndroid Build Coastguard Worker sprintf(ac_error_str, "\nAllocation failure for output buffer of i4_size %d",
2676*495ae853SAndroid Build Coastguard Worker outlen);
2677*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2678*495ae853SAndroid Build Coastguard Worker }
2679*495ae853SAndroid Build Coastguard Worker
2680*495ae853SAndroid Build Coastguard Worker if(s_ctl_op.u4_min_num_out_bufs > 1)
2681*495ae853SAndroid Build Coastguard Worker s_app_ctx.s_disp_buffers[i].pu1_bufs[1] =
2682*495ae853SAndroid Build Coastguard Worker s_app_ctx.s_disp_buffers[i].pu1_bufs[0] + (s_ctl_op.u4_min_out_buf_size[0]);
2683*495ae853SAndroid Build Coastguard Worker
2684*495ae853SAndroid Build Coastguard Worker if(s_ctl_op.u4_min_num_out_bufs > 2)
2685*495ae853SAndroid Build Coastguard Worker s_app_ctx.s_disp_buffers[i].pu1_bufs[2] =
2686*495ae853SAndroid Build Coastguard Worker s_app_ctx.s_disp_buffers[i].pu1_bufs[1] + (s_ctl_op.u4_min_out_buf_size[1]);
2687*495ae853SAndroid Build Coastguard Worker
2688*495ae853SAndroid Build Coastguard Worker s_app_ctx.s_disp_buffers[i].u4_num_bufs = s_ctl_op.u4_min_num_out_bufs;
2689*495ae853SAndroid Build Coastguard Worker }
2690*495ae853SAndroid Build Coastguard Worker s_app_ctx.num_disp_buf = s_ctl_op.u4_num_disp_bufs;
2691*495ae853SAndroid Build Coastguard Worker }
2692*495ae853SAndroid Build Coastguard Worker
2693*495ae853SAndroid Build Coastguard Worker /* Create display thread and wait for the display buffers to be initialized*/
2694*495ae853SAndroid Build Coastguard Worker if(1 == s_app_ctx.display)
2695*495ae853SAndroid Build Coastguard Worker {
2696*495ae853SAndroid Build Coastguard Worker if(0 == s_app_ctx.display_thread_created)
2697*495ae853SAndroid Build Coastguard Worker {
2698*495ae853SAndroid Build Coastguard Worker s_app_ctx.display_init_done = 0;
2699*495ae853SAndroid Build Coastguard Worker ithread_create(s_app_ctx.display_thread_handle, NULL, (void *) &display_thread,
2700*495ae853SAndroid Build Coastguard Worker (void *) &s_app_ctx);
2701*495ae853SAndroid Build Coastguard Worker s_app_ctx.display_thread_created = 1;
2702*495ae853SAndroid Build Coastguard Worker
2703*495ae853SAndroid Build Coastguard Worker while(1)
2704*495ae853SAndroid Build Coastguard Worker {
2705*495ae853SAndroid Build Coastguard Worker if(s_app_ctx.display_init_done) break;
2706*495ae853SAndroid Build Coastguard Worker
2707*495ae853SAndroid Build Coastguard Worker ithread_msleep(1);
2708*495ae853SAndroid Build Coastguard Worker }
2709*495ae853SAndroid Build Coastguard Worker }
2710*495ae853SAndroid Build Coastguard Worker
2711*495ae853SAndroid Build Coastguard Worker s_app_ctx.u4_strd = s_app_ctx.get_stride();
2712*495ae853SAndroid Build Coastguard Worker }
2713*495ae853SAndroid Build Coastguard Worker }
2714*495ae853SAndroid Build Coastguard Worker
2715*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2716*495ae853SAndroid Build Coastguard Worker /* Get actual number of output buffers requried, which is dependent */
2717*495ae853SAndroid Build Coastguard Worker /* on ps_bitstrm properties such as width, height and level etc */
2718*495ae853SAndroid Build Coastguard Worker /* This is needed mainly for shared display mode */
2719*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2720*495ae853SAndroid Build Coastguard Worker
2721*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2722*495ae853SAndroid Build Coastguard Worker /* API Call: Send the allocated display buffers to codec */
2723*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2724*495ae853SAndroid Build Coastguard Worker {
2725*495ae853SAndroid Build Coastguard Worker ivd_set_display_frame_ip_t s_set_display_frame_ip;
2726*495ae853SAndroid Build Coastguard Worker ivd_set_display_frame_op_t s_set_display_frame_op;
2727*495ae853SAndroid Build Coastguard Worker
2728*495ae853SAndroid Build Coastguard Worker s_set_display_frame_ip.e_cmd = IVD_CMD_SET_DISPLAY_FRAME;
2729*495ae853SAndroid Build Coastguard Worker s_set_display_frame_ip.u4_size = sizeof(ivd_set_display_frame_ip_t);
2730*495ae853SAndroid Build Coastguard Worker s_set_display_frame_op.u4_size = sizeof(ivd_set_display_frame_op_t);
2731*495ae853SAndroid Build Coastguard Worker
2732*495ae853SAndroid Build Coastguard Worker s_set_display_frame_ip.num_disp_bufs = s_app_ctx.num_disp_buf;
2733*495ae853SAndroid Build Coastguard Worker
2734*495ae853SAndroid Build Coastguard Worker memcpy(&(s_set_display_frame_ip.s_disp_buffer), &(s_app_ctx.s_disp_buffers),
2735*495ae853SAndroid Build Coastguard Worker s_app_ctx.num_disp_buf * sizeof(ivd_out_bufdesc_t));
2736*495ae853SAndroid Build Coastguard Worker
2737*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_set_display_frame_ip,
2738*495ae853SAndroid Build Coastguard Worker (void *) &s_set_display_frame_op);
2739*495ae853SAndroid Build Coastguard Worker
2740*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != ret)
2741*495ae853SAndroid Build Coastguard Worker {
2742*495ae853SAndroid Build Coastguard Worker sprintf(ac_error_str, "Error in Set display frame");
2743*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2744*495ae853SAndroid Build Coastguard Worker }
2745*495ae853SAndroid Build Coastguard Worker }
2746*495ae853SAndroid Build Coastguard Worker
2747*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2748*495ae853SAndroid Build Coastguard Worker /* Get frame dimensions for display buffers such as x_offset,y_offset */
2749*495ae853SAndroid Build Coastguard Worker /* etc. This information might be needed to set display buffer */
2750*495ae853SAndroid Build Coastguard Worker /* offsets in case of shared display buffer mode */
2751*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2752*495ae853SAndroid Build Coastguard Worker {
2753*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_frame_dimensions_ip_t s_ctl_get_frame_dimensions_ip;
2754*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_frame_dimensions_op_t s_ctl_get_frame_dimensions_op;
2755*495ae853SAndroid Build Coastguard Worker
2756*495ae853SAndroid Build Coastguard Worker s_ctl_get_frame_dimensions_ip.e_cmd = IVD_CMD_VIDEO_CTL;
2757*495ae853SAndroid Build Coastguard Worker s_ctl_get_frame_dimensions_ip.e_sub_cmd =
2758*495ae853SAndroid Build Coastguard Worker (IVD_CONTROL_API_COMMAND_TYPE_T) IH264D_CMD_CTL_GET_BUFFER_DIMENSIONS;
2759*495ae853SAndroid Build Coastguard Worker s_ctl_get_frame_dimensions_ip.u4_size = sizeof(isvcd_ctl_get_frame_dimensions_ip_t);
2760*495ae853SAndroid Build Coastguard Worker s_ctl_get_frame_dimensions_op.u4_size = sizeof(isvcd_ctl_get_frame_dimensions_op_t);
2761*495ae853SAndroid Build Coastguard Worker
2762*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_ctl_get_frame_dimensions_ip,
2763*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_get_frame_dimensions_op);
2764*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != ret)
2765*495ae853SAndroid Build Coastguard Worker {
2766*495ae853SAndroid Build Coastguard Worker sprintf(ac_error_str, "Error in Get buffer Dimensions");
2767*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2768*495ae853SAndroid Build Coastguard Worker }
2769*495ae853SAndroid Build Coastguard Worker }
2770*495ae853SAndroid Build Coastguard Worker
2771*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2772*495ae853SAndroid Build Coastguard Worker /* Get VUI parameters */
2773*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2774*495ae853SAndroid Build Coastguard Worker {
2775*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_vui_params_ip_t s_ctl_get_vui_params_ip;
2776*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_vui_params_op_t s_ctl_get_vui_params_op;
2777*495ae853SAndroid Build Coastguard Worker
2778*495ae853SAndroid Build Coastguard Worker s_ctl_get_vui_params_ip.e_cmd = IVD_CMD_VIDEO_CTL;
2779*495ae853SAndroid Build Coastguard Worker s_ctl_get_vui_params_ip.e_sub_cmd =
2780*495ae853SAndroid Build Coastguard Worker (IVD_CONTROL_API_COMMAND_TYPE_T) IH264D_CMD_CTL_GET_VUI_PARAMS;
2781*495ae853SAndroid Build Coastguard Worker s_ctl_get_vui_params_ip.u4_size = sizeof(isvcd_ctl_get_vui_params_ip_t);
2782*495ae853SAndroid Build Coastguard Worker s_ctl_get_vui_params_op.u4_size = sizeof(isvcd_ctl_get_vui_params_op_t);
2783*495ae853SAndroid Build Coastguard Worker
2784*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_ctl_get_vui_params_ip,
2785*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_get_vui_params_op);
2786*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != ret)
2787*495ae853SAndroid Build Coastguard Worker {
2788*495ae853SAndroid Build Coastguard Worker sprintf(ac_error_str, "Error in Get VUI params");
2789*495ae853SAndroid Build Coastguard Worker // codec_exit(ac_error_str);
2790*495ae853SAndroid Build Coastguard Worker }
2791*495ae853SAndroid Build Coastguard Worker }
2792*495ae853SAndroid Build Coastguard Worker
2793*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2794*495ae853SAndroid Build Coastguard Worker /* Set the decoder in frame decode mode. It was set in header decode */
2795*495ae853SAndroid Build Coastguard Worker /* mode earlier */
2796*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2797*495ae853SAndroid Build Coastguard Worker {
2798*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_config_ip_t s_h264d_ctl_ip = {};
2799*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_config_op_t s_h264d_ctl_op = {};
2800*495ae853SAndroid Build Coastguard Worker ivd_ctl_set_config_ip_t *ps_ctl_ip = &s_h264d_ctl_ip.s_ivd_ctl_set_config_ip_t;
2801*495ae853SAndroid Build Coastguard Worker ivd_ctl_set_config_op_t *ps_ctl_op = &s_h264d_ctl_op.s_ivd_ctl_set_config_op_t;
2802*495ae853SAndroid Build Coastguard Worker
2803*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->u4_disp_wd = STRIDE;
2804*495ae853SAndroid Build Coastguard Worker if(1 == s_app_ctx.display) ps_ctl_ip->u4_disp_wd = s_app_ctx.get_stride();
2805*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_frm_skip_mode = IVD_SKIP_NONE;
2806*495ae853SAndroid Build Coastguard Worker
2807*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_frm_out_mode = IVD_DISPLAY_FRAME_OUT;
2808*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_vid_dec_mode = IVD_DECODE_FRAME;
2809*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_cmd = IVD_CMD_VIDEO_CTL;
2810*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->e_sub_cmd = IVD_CMD_CTL_SETPARAMS;
2811*495ae853SAndroid Build Coastguard Worker ps_ctl_ip->u4_size = sizeof(isvcd_ctl_set_config_ip_t);
2812*495ae853SAndroid Build Coastguard Worker
2813*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_size = sizeof(isvcd_ctl_set_config_op_t);
2814*495ae853SAndroid Build Coastguard Worker
2815*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_h264d_ctl_ip,
2816*495ae853SAndroid Build Coastguard Worker (void *) &s_h264d_ctl_op);
2817*495ae853SAndroid Build Coastguard Worker
2818*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != ret)
2819*495ae853SAndroid Build Coastguard Worker {
2820*495ae853SAndroid Build Coastguard Worker sprintf(ac_error_str, "Error in Set Parameters");
2821*495ae853SAndroid Build Coastguard Worker // codec_exit(ac_error_str);
2822*495ae853SAndroid Build Coastguard Worker }
2823*495ae853SAndroid Build Coastguard Worker }
2824*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2825*495ae853SAndroid Build Coastguard Worker /* If required disable deblocking and sao at given level */
2826*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2827*495ae853SAndroid Build Coastguard Worker
2828*495ae853SAndroid Build Coastguard Worker set_degrade(codec_obj, s_app_ctx.i4_degrade_type, s_app_ctx.i4_degrade_pics);
2829*495ae853SAndroid Build Coastguard Worker #ifdef WINDOWS_TIMER
2830*495ae853SAndroid Build Coastguard Worker QueryPerformanceFrequency(&frequency);
2831*495ae853SAndroid Build Coastguard Worker #endif
2832*495ae853SAndroid Build Coastguard Worker #ifndef PRINT_PICSIZE
2833*495ae853SAndroid Build Coastguard Worker get_version(codec_obj);
2834*495ae853SAndroid Build Coastguard Worker #endif
2835*495ae853SAndroid Build Coastguard Worker
2836*495ae853SAndroid Build Coastguard Worker max_op_frm_ts = s_app_ctx.u4_max_frm_ts + s_app_ctx.disp_delay;
2837*495ae853SAndroid Build Coastguard Worker
2838*495ae853SAndroid Build Coastguard Worker if(max_op_frm_ts < s_app_ctx.disp_delay)
2839*495ae853SAndroid Build Coastguard Worker max_op_frm_ts = 0xffffffff; /* clip as overflow has occured*/
2840*495ae853SAndroid Build Coastguard Worker
2841*495ae853SAndroid Build Coastguard Worker max_op_frm_ts = (s_app_ctx.u4_max_frm_ts > 0) ? (max_op_frm_ts) : 0xffffffff;
2842*495ae853SAndroid Build Coastguard Worker
2843*495ae853SAndroid Build Coastguard Worker u4_num_disp_bufs_with_dec = 0;
2844*495ae853SAndroid Build Coastguard Worker
2845*495ae853SAndroid Build Coastguard Worker while(u4_op_frm_ts < max_op_frm_ts)
2846*495ae853SAndroid Build Coastguard Worker {
2847*495ae853SAndroid Build Coastguard Worker #ifdef TEST_FLUSH
2848*495ae853SAndroid Build Coastguard Worker if(u4_ip_frm_ts == FLUSH_FRM_CNT)
2849*495ae853SAndroid Build Coastguard Worker {
2850*495ae853SAndroid Build Coastguard Worker ivd_ctl_flush_ip_t s_ctl_ip;
2851*495ae853SAndroid Build Coastguard Worker ivd_ctl_flush_op_t s_ctl_op;
2852*495ae853SAndroid Build Coastguard Worker
2853*495ae853SAndroid Build Coastguard Worker s_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
2854*495ae853SAndroid Build Coastguard Worker s_ctl_ip.e_sub_cmd = IVD_CMD_CTL_FLUSH;
2855*495ae853SAndroid Build Coastguard Worker s_ctl_ip.u4_size = sizeof(ivd_ctl_flush_ip_t);
2856*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_size = sizeof(ivd_ctl_flush_op_t);
2857*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_ctl_ip, (void *) &s_ctl_op);
2858*495ae853SAndroid Build Coastguard Worker
2859*495ae853SAndroid Build Coastguard Worker if(ret != IV_SUCCESS)
2860*495ae853SAndroid Build Coastguard Worker {
2861*495ae853SAndroid Build Coastguard Worker printf("Error in Setting the decoder in flush mode\n");
2862*495ae853SAndroid Build Coastguard Worker }
2863*495ae853SAndroid Build Coastguard Worker // file_pos = 0;
2864*495ae853SAndroid Build Coastguard Worker
2865*495ae853SAndroid Build Coastguard Worker // fseek(ps_ip_file, file_pos, SEEK_SET);
2866*495ae853SAndroid Build Coastguard Worker }
2867*495ae853SAndroid Build Coastguard Worker #endif
2868*495ae853SAndroid Build Coastguard Worker if(u4_num_disp_bufs_with_dec < s_app_ctx.num_disp_buf)
2869*495ae853SAndroid Build Coastguard Worker {
2870*495ae853SAndroid Build Coastguard Worker release_disp_frame(codec_obj, u4_num_disp_bufs_with_dec);
2871*495ae853SAndroid Build Coastguard Worker u4_num_disp_bufs_with_dec++;
2872*495ae853SAndroid Build Coastguard Worker }
2873*495ae853SAndroid Build Coastguard Worker
2874*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2875*495ae853SAndroid Build Coastguard Worker /* set num of cores */
2876*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2877*495ae853SAndroid Build Coastguard Worker #ifdef DYNAMIC_NUMCORES
2878*495ae853SAndroid Build Coastguard Worker {
2879*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_num_cores_ip_t s_ctl_set_cores_ip;
2880*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_num_cores_op_t s_ctl_set_cores_op;
2881*495ae853SAndroid Build Coastguard Worker
2882*495ae853SAndroid Build Coastguard Worker s_ctl_set_cores_ip.e_cmd = IVD_CMD_VIDEO_CTL;
2883*495ae853SAndroid Build Coastguard Worker s_ctl_set_cores_ip.e_sub_cmd = IH264D_CMD_CTL_SET_NUM_CORES;
2884*495ae853SAndroid Build Coastguard Worker s_ctl_set_cores_ip.u4_num_cores = 1 + 3 * (u4_ip_frm_ts % 2);
2885*495ae853SAndroid Build Coastguard Worker s_ctl_set_cores_ip.u4_size = sizeof(isvcd_ctl_set_num_cores_ip_t);
2886*495ae853SAndroid Build Coastguard Worker s_ctl_set_cores_op.u4_size = sizeof(isvcd_ctl_set_num_cores_op_t);
2887*495ae853SAndroid Build Coastguard Worker
2888*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_ctl_set_cores_ip,
2889*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_set_cores_op);
2890*495ae853SAndroid Build Coastguard Worker if(ret != IV_SUCCESS)
2891*495ae853SAndroid Build Coastguard Worker {
2892*495ae853SAndroid Build Coastguard Worker sprintf(ac_error_str, "\nError in setting number of cores");
2893*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
2894*495ae853SAndroid Build Coastguard Worker }
2895*495ae853SAndroid Build Coastguard Worker }
2896*495ae853SAndroid Build Coastguard Worker #endif
2897*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
2898*495ae853SAndroid Build Coastguard Worker /* Seek the file to start of current frame, this is equavelent of */
2899*495ae853SAndroid Build Coastguard Worker /* having a parcer which tells the start of current frame */
2900*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
2901*495ae853SAndroid Build Coastguard Worker {
2902*495ae853SAndroid Build Coastguard Worker WORD32 numbytes;
2903*495ae853SAndroid Build Coastguard Worker
2904*495ae853SAndroid Build Coastguard Worker if(0 == s_app_ctx.u4_piclen_flag)
2905*495ae853SAndroid Build Coastguard Worker {
2906*495ae853SAndroid Build Coastguard Worker fseek(ps_ip_file, file_pos, SEEK_SET);
2907*495ae853SAndroid Build Coastguard Worker numbytes = u4_ip_buf_len;
2908*495ae853SAndroid Build Coastguard Worker }
2909*495ae853SAndroid Build Coastguard Worker else
2910*495ae853SAndroid Build Coastguard Worker {
2911*495ae853SAndroid Build Coastguard Worker WORD32 entries;
2912*495ae853SAndroid Build Coastguard Worker entries = fscanf(ps_piclen_file, "%d\n", &numbytes);
2913*495ae853SAndroid Build Coastguard Worker if(1 != entries) numbytes = u4_ip_buf_len;
2914*495ae853SAndroid Build Coastguard Worker }
2915*495ae853SAndroid Build Coastguard Worker
2916*495ae853SAndroid Build Coastguard Worker u4_bytes_remaining = (WORD32) fread(pu1_bs_buf, sizeof(UWORD8), numbytes, ps_ip_file);
2917*495ae853SAndroid Build Coastguard Worker
2918*495ae853SAndroid Build Coastguard Worker // AUD_PIC_BOUNDARY
2919*495ae853SAndroid Build Coastguard Worker if((1 == s_app_ctx.u4_piclen_flag) && (u4_bytes_remaining > 0))
2920*495ae853SAndroid Build Coastguard Worker {
2921*495ae853SAndroid Build Coastguard Worker *(pu1_bs_buf + numbytes) = 0x00;
2922*495ae853SAndroid Build Coastguard Worker numbytes++;
2923*495ae853SAndroid Build Coastguard Worker *(pu1_bs_buf + numbytes) = 0x00;
2924*495ae853SAndroid Build Coastguard Worker numbytes++;
2925*495ae853SAndroid Build Coastguard Worker *(pu1_bs_buf + numbytes) = 0x00;
2926*495ae853SAndroid Build Coastguard Worker numbytes++;
2927*495ae853SAndroid Build Coastguard Worker *(pu1_bs_buf + numbytes) = 0x01;
2928*495ae853SAndroid Build Coastguard Worker numbytes++;
2929*495ae853SAndroid Build Coastguard Worker *(pu1_bs_buf + numbytes) = 0x09;
2930*495ae853SAndroid Build Coastguard Worker numbytes++;
2931*495ae853SAndroid Build Coastguard Worker *(pu1_bs_buf + numbytes) = 0x10;
2932*495ae853SAndroid Build Coastguard Worker numbytes++;
2933*495ae853SAndroid Build Coastguard Worker
2934*495ae853SAndroid Build Coastguard Worker u4_bytes_remaining += 6;
2935*495ae853SAndroid Build Coastguard Worker }
2936*495ae853SAndroid Build Coastguard Worker
2937*495ae853SAndroid Build Coastguard Worker if(u4_bytes_remaining == 0)
2938*495ae853SAndroid Build Coastguard Worker {
2939*495ae853SAndroid Build Coastguard Worker if(1 == s_app_ctx.loopback)
2940*495ae853SAndroid Build Coastguard Worker {
2941*495ae853SAndroid Build Coastguard Worker file_pos = 0;
2942*495ae853SAndroid Build Coastguard Worker if(0 == s_app_ctx.u4_piclen_flag)
2943*495ae853SAndroid Build Coastguard Worker {
2944*495ae853SAndroid Build Coastguard Worker fseek(ps_ip_file, file_pos, SEEK_SET);
2945*495ae853SAndroid Build Coastguard Worker numbytes = u4_ip_buf_len;
2946*495ae853SAndroid Build Coastguard Worker }
2947*495ae853SAndroid Build Coastguard Worker else
2948*495ae853SAndroid Build Coastguard Worker {
2949*495ae853SAndroid Build Coastguard Worker WORD32 entries;
2950*495ae853SAndroid Build Coastguard Worker entries = fscanf(ps_piclen_file, "%d\n", &numbytes);
2951*495ae853SAndroid Build Coastguard Worker if(1 != entries) numbytes = u4_ip_buf_len;
2952*495ae853SAndroid Build Coastguard Worker }
2953*495ae853SAndroid Build Coastguard Worker
2954*495ae853SAndroid Build Coastguard Worker u4_bytes_remaining =
2955*495ae853SAndroid Build Coastguard Worker (WORD32) fread(pu1_bs_buf, sizeof(UWORD8), numbytes, ps_ip_file);
2956*495ae853SAndroid Build Coastguard Worker }
2957*495ae853SAndroid Build Coastguard Worker else
2958*495ae853SAndroid Build Coastguard Worker break;
2959*495ae853SAndroid Build Coastguard Worker }
2960*495ae853SAndroid Build Coastguard Worker }
2961*495ae853SAndroid Build Coastguard Worker
2962*495ae853SAndroid Build Coastguard Worker /*********************************************************************/
2963*495ae853SAndroid Build Coastguard Worker /* Following calls can be enabled at diffent times */
2964*495ae853SAndroid Build Coastguard Worker /*********************************************************************/
2965*495ae853SAndroid Build Coastguard Worker #if ENABLE_DEGRADE
2966*495ae853SAndroid Build Coastguard Worker if(u4_op_frm_ts >= 10000) disable_deblocking(codec_obj, 4);
2967*495ae853SAndroid Build Coastguard Worker
2968*495ae853SAndroid Build Coastguard Worker if(u4_op_frm_ts == 30000) enable_deblocking(codec_obj);
2969*495ae853SAndroid Build Coastguard Worker
2970*495ae853SAndroid Build Coastguard Worker if(u4_op_frm_ts == 10000) enable_skippb_frames(codec_obj);
2971*495ae853SAndroid Build Coastguard Worker
2972*495ae853SAndroid Build Coastguard Worker if(u4_op_frm_ts == 60000) disable_skippb_frames(codec_obj);
2973*495ae853SAndroid Build Coastguard Worker
2974*495ae853SAndroid Build Coastguard Worker if(u4_op_frm_ts == 30000) enable_skipb_frames(codec_obj);
2975*495ae853SAndroid Build Coastguard Worker
2976*495ae853SAndroid Build Coastguard Worker if(u4_op_frm_ts == 60000) disable_skipb_frames(codec_obj);
2977*495ae853SAndroid Build Coastguard Worker #endif
2978*495ae853SAndroid Build Coastguard Worker
2979*495ae853SAndroid Build Coastguard Worker {
2980*495ae853SAndroid Build Coastguard Worker isvcd_video_decode_ip_t s_h264d_decode_ip = {};
2981*495ae853SAndroid Build Coastguard Worker isvcd_video_decode_op_t s_h264d_decode_op = {};
2982*495ae853SAndroid Build Coastguard Worker ivd_video_decode_ip_t *ps_video_decode_ip = &s_h264d_decode_ip.s_ivd_video_decode_ip_t;
2983*495ae853SAndroid Build Coastguard Worker ivd_video_decode_op_t *ps_video_decode_op = &s_h264d_decode_op.s_ivd_video_decode_op_t;
2984*495ae853SAndroid Build Coastguard Worker #ifdef PROFILE_ENABLE
2985*495ae853SAndroid Build Coastguard Worker UWORD32 s_elapsed_time;
2986*495ae853SAndroid Build Coastguard Worker TIMER s_start_timer;
2987*495ae853SAndroid Build Coastguard Worker TIMER s_end_timer;
2988*495ae853SAndroid Build Coastguard Worker #endif
2989*495ae853SAndroid Build Coastguard Worker
2990*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->e_cmd = IVD_CMD_VIDEO_DECODE;
2991*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->u4_ts = u4_ip_frm_ts;
2992*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->pv_stream_buffer = pu1_bs_buf;
2993*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->u4_num_Bytes = u4_bytes_remaining;
2994*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->u4_size = sizeof(isvcd_video_decode_ip_t);
2995*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->s_out_buffer.u4_min_out_buf_size[0] =
2996*495ae853SAndroid Build Coastguard Worker ps_out_buf->u4_min_out_buf_size[0];
2997*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->s_out_buffer.u4_min_out_buf_size[1] =
2998*495ae853SAndroid Build Coastguard Worker ps_out_buf->u4_min_out_buf_size[1];
2999*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->s_out_buffer.u4_min_out_buf_size[2] =
3000*495ae853SAndroid Build Coastguard Worker ps_out_buf->u4_min_out_buf_size[2];
3001*495ae853SAndroid Build Coastguard Worker
3002*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->s_out_buffer.pu1_bufs[0] = ps_out_buf->pu1_bufs[0];
3003*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->s_out_buffer.pu1_bufs[1] = ps_out_buf->pu1_bufs[1];
3004*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->s_out_buffer.pu1_bufs[2] = ps_out_buf->pu1_bufs[2];
3005*495ae853SAndroid Build Coastguard Worker ps_video_decode_ip->s_out_buffer.u4_num_bufs = ps_out_buf->u4_num_bufs;
3006*495ae853SAndroid Build Coastguard Worker ps_video_decode_op->u4_size = sizeof(isvcd_video_decode_op_t);
3007*495ae853SAndroid Build Coastguard Worker s_h264d_decode_ip.pu1_8x8_blk_qp_map = pu1_qp_map_buf;
3008*495ae853SAndroid Build Coastguard Worker s_h264d_decode_ip.pu1_8x8_blk_type_map = pu1_blk_type_map_buf;
3009*495ae853SAndroid Build Coastguard Worker s_h264d_decode_ip.u4_8x8_blk_qp_map_size = (ADAPTIVE_MAX_HT * ADAPTIVE_MAX_WD) >> 6;
3010*495ae853SAndroid Build Coastguard Worker s_h264d_decode_ip.u4_8x8_blk_type_map_size = (ADAPTIVE_MAX_HT * ADAPTIVE_MAX_WD) >> 6;
3011*495ae853SAndroid Build Coastguard Worker
3012*495ae853SAndroid Build Coastguard Worker /* Get display buffer pointers */
3013*495ae853SAndroid Build Coastguard Worker if(1 == s_app_ctx.display)
3014*495ae853SAndroid Build Coastguard Worker {
3015*495ae853SAndroid Build Coastguard Worker WORD32 wr_idx;
3016*495ae853SAndroid Build Coastguard Worker
3017*495ae853SAndroid Build Coastguard Worker wr_idx = dispq_producer_dequeue(&s_app_ctx);
3018*495ae853SAndroid Build Coastguard Worker
3019*495ae853SAndroid Build Coastguard Worker if(s_app_ctx.quit) break;
3020*495ae853SAndroid Build Coastguard Worker
3021*495ae853SAndroid Build Coastguard Worker s_app_ctx.set_disp_buffers(s_app_ctx.pv_disp_ctx, wr_idx,
3022*495ae853SAndroid Build Coastguard Worker &ps_video_decode_ip->s_out_buffer.pu1_bufs[0],
3023*495ae853SAndroid Build Coastguard Worker &ps_video_decode_ip->s_out_buffer.pu1_bufs[1],
3024*495ae853SAndroid Build Coastguard Worker &ps_video_decode_ip->s_out_buffer.pu1_bufs[2]);
3025*495ae853SAndroid Build Coastguard Worker }
3026*495ae853SAndroid Build Coastguard Worker
3027*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3028*495ae853SAndroid Build Coastguard Worker /* API Call: Video Decode */
3029*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3030*495ae853SAndroid Build Coastguard Worker
3031*495ae853SAndroid Build Coastguard Worker GETTIME(&s_start_timer);
3032*495ae853SAndroid Build Coastguard Worker
3033*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_h264d_decode_ip,
3034*495ae853SAndroid Build Coastguard Worker (void *) &s_h264d_decode_op);
3035*495ae853SAndroid Build Coastguard Worker
3036*495ae853SAndroid Build Coastguard Worker GETTIME(&s_end_timer);
3037*495ae853SAndroid Build Coastguard Worker ELAPSEDTIME(s_start_timer, s_end_timer, s_elapsed_time, frequency);
3038*495ae853SAndroid Build Coastguard Worker #ifdef PROFILE_ENABLE
3039*495ae853SAndroid Build Coastguard Worker {
3040*495ae853SAndroid Build Coastguard Worker UWORD32 peak_avg, id;
3041*495ae853SAndroid Build Coastguard Worker u4_tot_cycles += s_elapsed_time;
3042*495ae853SAndroid Build Coastguard Worker peak_window[peak_window_idx++] = s_elapsed_time;
3043*495ae853SAndroid Build Coastguard Worker if(peak_window_idx == PEAK_WINDOW_SIZE) peak_window_idx = 0;
3044*495ae853SAndroid Build Coastguard Worker peak_avg = 0;
3045*495ae853SAndroid Build Coastguard Worker for(id = 0; id < PEAK_WINDOW_SIZE; id++)
3046*495ae853SAndroid Build Coastguard Worker {
3047*495ae853SAndroid Build Coastguard Worker peak_avg += peak_window[id];
3048*495ae853SAndroid Build Coastguard Worker }
3049*495ae853SAndroid Build Coastguard Worker peak_avg /= PEAK_WINDOW_SIZE;
3050*495ae853SAndroid Build Coastguard Worker if(peak_avg > peak_avg_max) peak_avg_max = peak_avg;
3051*495ae853SAndroid Build Coastguard Worker frm_cnt++;
3052*495ae853SAndroid Build Coastguard Worker
3053*495ae853SAndroid Build Coastguard Worker printf(
3054*495ae853SAndroid Build Coastguard Worker "FrameNum: %4d TimeTaken(microsec): %6d AvgTime: %6d "
3055*495ae853SAndroid Build Coastguard Worker "PeakAvgTimeMax: %6d Output: %2d NumBytes: %6d \n",
3056*495ae853SAndroid Build Coastguard Worker frm_cnt, s_elapsed_time, u4_tot_cycles / frm_cnt, peak_avg_max,
3057*495ae853SAndroid Build Coastguard Worker ps_video_decode_op->u4_output_present,
3058*495ae853SAndroid Build Coastguard Worker ps_video_decode_op->u4_num_bytes_consumed);
3059*495ae853SAndroid Build Coastguard Worker }
3060*495ae853SAndroid Build Coastguard Worker #else
3061*495ae853SAndroid Build Coastguard Worker printf("%d\n", ps_video_decode_op->u4_num_bytes_consumed);
3062*495ae853SAndroid Build Coastguard Worker #endif
3063*495ae853SAndroid Build Coastguard Worker
3064*495ae853SAndroid Build Coastguard Worker if(ret != IV_SUCCESS)
3065*495ae853SAndroid Build Coastguard Worker {
3066*495ae853SAndroid Build Coastguard Worker printf("Error in video Frame decode : ret %x Error %x\n", ret,
3067*495ae853SAndroid Build Coastguard Worker ps_video_decode_op->u4_error_code);
3068*495ae853SAndroid Build Coastguard Worker }
3069*495ae853SAndroid Build Coastguard Worker
3070*495ae853SAndroid Build Coastguard Worker if((IV_SUCCESS != ret) &&
3071*495ae853SAndroid Build Coastguard Worker ((ps_video_decode_op->u4_error_code & 0xFF) == IVD_RES_CHANGED))
3072*495ae853SAndroid Build Coastguard Worker {
3073*495ae853SAndroid Build Coastguard Worker ivd_ctl_reset_ip_t s_ctl_ip;
3074*495ae853SAndroid Build Coastguard Worker ivd_ctl_reset_op_t s_ctl_op;
3075*495ae853SAndroid Build Coastguard Worker
3076*495ae853SAndroid Build Coastguard Worker flush_output(codec_obj, &s_app_ctx, ps_out_buf, pu1_bs_buf, &u4_op_frm_ts,
3077*495ae853SAndroid Build Coastguard Worker ps_op_file, ps_qp_file, ps_mb_type_file, pu1_qp_map_buf,
3078*495ae853SAndroid Build Coastguard Worker pu1_blk_type_map_buf, ps_op_chksum_file, u4_ip_frm_ts,
3079*495ae853SAndroid Build Coastguard Worker u4_bytes_remaining);
3080*495ae853SAndroid Build Coastguard Worker
3081*495ae853SAndroid Build Coastguard Worker s_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
3082*495ae853SAndroid Build Coastguard Worker s_ctl_ip.e_sub_cmd = IVD_CMD_CTL_RESET;
3083*495ae853SAndroid Build Coastguard Worker s_ctl_ip.u4_size = sizeof(ivd_ctl_reset_ip_t);
3084*495ae853SAndroid Build Coastguard Worker s_ctl_op.u4_size = sizeof(ivd_ctl_reset_op_t);
3085*495ae853SAndroid Build Coastguard Worker
3086*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_ctl_ip,
3087*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_op);
3088*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != ret)
3089*495ae853SAndroid Build Coastguard Worker {
3090*495ae853SAndroid Build Coastguard Worker sprintf(ac_error_str, "Error in Reset");
3091*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
3092*495ae853SAndroid Build Coastguard Worker }
3093*495ae853SAndroid Build Coastguard Worker
3094*495ae853SAndroid Build Coastguard Worker /*when reset all buffers are released by lib*/
3095*495ae853SAndroid Build Coastguard Worker u4_num_disp_bufs_with_dec = 0;
3096*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
3097*495ae853SAndroid Build Coastguard Worker /* set num of cores */
3098*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
3099*495ae853SAndroid Build Coastguard Worker {
3100*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_num_cores_ip_t s_ctl_set_cores_ip;
3101*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_num_cores_op_t s_ctl_set_cores_op;
3102*495ae853SAndroid Build Coastguard Worker
3103*495ae853SAndroid Build Coastguard Worker s_ctl_set_cores_ip.e_cmd = IVD_CMD_VIDEO_CTL;
3104*495ae853SAndroid Build Coastguard Worker s_ctl_set_cores_ip.e_sub_cmd =
3105*495ae853SAndroid Build Coastguard Worker (IVD_CONTROL_API_COMMAND_TYPE_T) IH264D_CMD_CTL_SET_NUM_CORES;
3106*495ae853SAndroid Build Coastguard Worker s_ctl_set_cores_ip.u4_num_cores = s_app_ctx.u4_num_cores;
3107*495ae853SAndroid Build Coastguard Worker s_ctl_set_cores_ip.u4_size = sizeof(isvcd_ctl_set_num_cores_ip_t);
3108*495ae853SAndroid Build Coastguard Worker s_ctl_set_cores_op.u4_size = sizeof(isvcd_ctl_set_num_cores_op_t);
3109*495ae853SAndroid Build Coastguard Worker
3110*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_ctl_set_cores_ip,
3111*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_set_cores_op);
3112*495ae853SAndroid Build Coastguard Worker if(ret != IV_SUCCESS)
3113*495ae853SAndroid Build Coastguard Worker {
3114*495ae853SAndroid Build Coastguard Worker sprintf(ac_error_str, "\nError in setting number of cores");
3115*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
3116*495ae853SAndroid Build Coastguard Worker }
3117*495ae853SAndroid Build Coastguard Worker }
3118*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
3119*495ae853SAndroid Build Coastguard Worker /* set processsor */
3120*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
3121*495ae853SAndroid Build Coastguard Worker
3122*495ae853SAndroid Build Coastguard Worker {
3123*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_processor_ip_t s_ctl_set_num_processor_ip;
3124*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_processor_op_t s_ctl_set_num_processor_op;
3125*495ae853SAndroid Build Coastguard Worker
3126*495ae853SAndroid Build Coastguard Worker s_ctl_set_num_processor_ip.e_cmd = IVD_CMD_VIDEO_CTL;
3127*495ae853SAndroid Build Coastguard Worker s_ctl_set_num_processor_ip.e_sub_cmd =
3128*495ae853SAndroid Build Coastguard Worker (IVD_CONTROL_API_COMMAND_TYPE_T) IH264D_CMD_CTL_SET_PROCESSOR;
3129*495ae853SAndroid Build Coastguard Worker s_ctl_set_num_processor_ip.u4_arch = s_app_ctx.e_arch;
3130*495ae853SAndroid Build Coastguard Worker s_ctl_set_num_processor_ip.u4_soc = s_app_ctx.e_soc;
3131*495ae853SAndroid Build Coastguard Worker s_ctl_set_num_processor_ip.u4_size = sizeof(isvcd_ctl_set_processor_ip_t);
3132*495ae853SAndroid Build Coastguard Worker s_ctl_set_num_processor_op.u4_size = sizeof(isvcd_ctl_set_processor_op_t);
3133*495ae853SAndroid Build Coastguard Worker
3134*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj,
3135*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_set_num_processor_ip,
3136*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_set_num_processor_op);
3137*495ae853SAndroid Build Coastguard Worker if(ret != IV_SUCCESS)
3138*495ae853SAndroid Build Coastguard Worker {
3139*495ae853SAndroid Build Coastguard Worker sprintf(ac_error_str, "\nError in setting Processor type");
3140*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
3141*495ae853SAndroid Build Coastguard Worker }
3142*495ae853SAndroid Build Coastguard Worker }
3143*495ae853SAndroid Build Coastguard Worker }
3144*495ae853SAndroid Build Coastguard Worker
3145*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
3146*495ae853SAndroid Build Coastguard Worker /* Get SEI MDCV parameters */
3147*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
3148*495ae853SAndroid Build Coastguard Worker if(1 == ps_video_decode_op->s_sei_decode_op.u1_sei_mdcv_params_present_flag)
3149*495ae853SAndroid Build Coastguard Worker {
3150*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_mdcv_params_ip_t s_ctl_get_sei_mdcv_params_ip;
3151*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_mdcv_params_op_t s_ctl_get_sei_mdcv_params_op;
3152*495ae853SAndroid Build Coastguard Worker
3153*495ae853SAndroid Build Coastguard Worker memset(&s_ctl_get_sei_mdcv_params_ip, 0,
3154*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_ctl_get_sei_mdcv_params_ip_t));
3155*495ae853SAndroid Build Coastguard Worker memset(&s_ctl_get_sei_mdcv_params_op, 0,
3156*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_ctl_get_sei_mdcv_params_op_t));
3157*495ae853SAndroid Build Coastguard Worker
3158*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_mdcv_params_ip.e_cmd = IVD_CMD_VIDEO_CTL;
3159*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_mdcv_params_ip.e_sub_cmd =
3160*495ae853SAndroid Build Coastguard Worker (IVD_CONTROL_API_COMMAND_TYPE_T) IH264D_CMD_CTL_GET_SEI_MDCV_PARAMS;
3161*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_mdcv_params_ip.u4_size = sizeof(isvcd_ctl_get_sei_mdcv_params_ip_t);
3162*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_mdcv_params_op.u4_size = sizeof(isvcd_ctl_get_sei_mdcv_params_op_t);
3163*495ae853SAndroid Build Coastguard Worker
3164*495ae853SAndroid Build Coastguard Worker ret =
3165*495ae853SAndroid Build Coastguard Worker ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_ctl_get_sei_mdcv_params_ip,
3166*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_get_sei_mdcv_params_op);
3167*495ae853SAndroid Build Coastguard Worker
3168*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != ret)
3169*495ae853SAndroid Build Coastguard Worker {
3170*495ae853SAndroid Build Coastguard Worker printf("MDCV SEI params not present : Error %x\n",
3171*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_mdcv_params_op.u4_error_code);
3172*495ae853SAndroid Build Coastguard Worker }
3173*495ae853SAndroid Build Coastguard Worker }
3174*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
3175*495ae853SAndroid Build Coastguard Worker /* Get SEI CLL parameters */
3176*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
3177*495ae853SAndroid Build Coastguard Worker if(1 == ps_video_decode_op->s_sei_decode_op.u1_sei_cll_params_present_flag)
3178*495ae853SAndroid Build Coastguard Worker {
3179*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_cll_params_ip_t s_ctl_get_sei_cll_params_ip;
3180*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_cll_params_op_t s_ctl_get_sei_cll_params_op;
3181*495ae853SAndroid Build Coastguard Worker
3182*495ae853SAndroid Build Coastguard Worker memset(&s_ctl_get_sei_cll_params_ip, 0, sizeof(isvcd_ctl_get_sei_cll_params_ip_t));
3183*495ae853SAndroid Build Coastguard Worker memset(&s_ctl_get_sei_cll_params_op, 0, sizeof(isvcd_ctl_get_sei_cll_params_op_t));
3184*495ae853SAndroid Build Coastguard Worker
3185*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_cll_params_ip.e_cmd = IVD_CMD_VIDEO_CTL;
3186*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_cll_params_ip.e_sub_cmd =
3187*495ae853SAndroid Build Coastguard Worker (IVD_CONTROL_API_COMMAND_TYPE_T) IH264D_CMD_CTL_GET_SEI_CLL_PARAMS;
3188*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_cll_params_ip.u4_size = sizeof(isvcd_ctl_get_sei_cll_params_ip_t);
3189*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_cll_params_op.u4_size = sizeof(isvcd_ctl_get_sei_cll_params_op_t);
3190*495ae853SAndroid Build Coastguard Worker
3191*495ae853SAndroid Build Coastguard Worker ret =
3192*495ae853SAndroid Build Coastguard Worker ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_ctl_get_sei_cll_params_ip,
3193*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_get_sei_cll_params_op);
3194*495ae853SAndroid Build Coastguard Worker
3195*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != ret)
3196*495ae853SAndroid Build Coastguard Worker {
3197*495ae853SAndroid Build Coastguard Worker printf("CLL SEI params not present : Error %x\n",
3198*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_cll_params_op.u4_error_code);
3199*495ae853SAndroid Build Coastguard Worker }
3200*495ae853SAndroid Build Coastguard Worker }
3201*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
3202*495ae853SAndroid Build Coastguard Worker /* Get SEI AVE parameters */
3203*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
3204*495ae853SAndroid Build Coastguard Worker if(1 == ps_video_decode_op->s_sei_decode_op.u1_sei_ave_params_present_flag)
3205*495ae853SAndroid Build Coastguard Worker {
3206*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_ave_params_ip_t s_ctl_get_sei_ave_params_ip;
3207*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_ave_params_op_t s_ctl_get_sei_ave_params_op;
3208*495ae853SAndroid Build Coastguard Worker
3209*495ae853SAndroid Build Coastguard Worker memset(&s_ctl_get_sei_ave_params_ip, 0, sizeof(isvcd_ctl_get_sei_ave_params_ip_t));
3210*495ae853SAndroid Build Coastguard Worker memset(&s_ctl_get_sei_ave_params_op, 0, sizeof(isvcd_ctl_get_sei_ave_params_op_t));
3211*495ae853SAndroid Build Coastguard Worker
3212*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_ave_params_ip.e_cmd = IVD_CMD_VIDEO_CTL;
3213*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_ave_params_ip.e_sub_cmd =
3214*495ae853SAndroid Build Coastguard Worker (IVD_CONTROL_API_COMMAND_TYPE_T) IH264D_CMD_CTL_GET_SEI_AVE_PARAMS;
3215*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_ave_params_ip.u4_size = sizeof(isvcd_ctl_get_sei_ave_params_ip_t);
3216*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_ave_params_op.u4_size = sizeof(isvcd_ctl_get_sei_ave_params_op_t);
3217*495ae853SAndroid Build Coastguard Worker
3218*495ae853SAndroid Build Coastguard Worker ret =
3219*495ae853SAndroid Build Coastguard Worker ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_ctl_get_sei_ave_params_ip,
3220*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_get_sei_ave_params_op);
3221*495ae853SAndroid Build Coastguard Worker
3222*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != ret)
3223*495ae853SAndroid Build Coastguard Worker {
3224*495ae853SAndroid Build Coastguard Worker printf("AVE SEI params not present : Error %x\n",
3225*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_ave_params_op.u4_error_code);
3226*495ae853SAndroid Build Coastguard Worker }
3227*495ae853SAndroid Build Coastguard Worker }
3228*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
3229*495ae853SAndroid Build Coastguard Worker /* Get SEI CCV parameters */
3230*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
3231*495ae853SAndroid Build Coastguard Worker if(1 == ps_video_decode_op->s_sei_decode_op.u1_sei_ccv_params_present_flag)
3232*495ae853SAndroid Build Coastguard Worker {
3233*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_ccv_params_ip_t s_ctl_get_sei_ccv_params_ip;
3234*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_ccv_params_op_t s_ctl_get_sei_ccv_params_op;
3235*495ae853SAndroid Build Coastguard Worker
3236*495ae853SAndroid Build Coastguard Worker memset(&s_ctl_get_sei_ccv_params_ip, 0, sizeof(isvcd_ctl_get_sei_ccv_params_ip_t));
3237*495ae853SAndroid Build Coastguard Worker memset(&s_ctl_get_sei_ccv_params_op, 0, sizeof(isvcd_ctl_get_sei_ccv_params_op_t));
3238*495ae853SAndroid Build Coastguard Worker
3239*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_ccv_params_ip.e_cmd = IVD_CMD_VIDEO_CTL;
3240*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_ccv_params_ip.e_sub_cmd =
3241*495ae853SAndroid Build Coastguard Worker (IVD_CONTROL_API_COMMAND_TYPE_T) IH264D_CMD_CTL_GET_SEI_CCV_PARAMS;
3242*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_ccv_params_ip.u4_size = sizeof(isvcd_ctl_get_sei_ccv_params_ip_t);
3243*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_ccv_params_op.u4_size = sizeof(isvcd_ctl_get_sei_ccv_params_op_t);
3244*495ae853SAndroid Build Coastguard Worker
3245*495ae853SAndroid Build Coastguard Worker ret =
3246*495ae853SAndroid Build Coastguard Worker ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_ctl_get_sei_ccv_params_ip,
3247*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_get_sei_ccv_params_op);
3248*495ae853SAndroid Build Coastguard Worker
3249*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != ret)
3250*495ae853SAndroid Build Coastguard Worker {
3251*495ae853SAndroid Build Coastguard Worker printf("CCV SEI params not present : Error %x\n",
3252*495ae853SAndroid Build Coastguard Worker s_ctl_get_sei_ccv_params_op.u4_error_code);
3253*495ae853SAndroid Build Coastguard Worker }
3254*495ae853SAndroid Build Coastguard Worker }
3255*495ae853SAndroid Build Coastguard Worker
3256*495ae853SAndroid Build Coastguard Worker if((1 == s_app_ctx.display) && (1 == ps_video_decode_op->u4_output_present))
3257*495ae853SAndroid Build Coastguard Worker {
3258*495ae853SAndroid Build Coastguard Worker dispq_producer_queue(&s_app_ctx);
3259*495ae853SAndroid Build Coastguard Worker }
3260*495ae853SAndroid Build Coastguard Worker
3261*495ae853SAndroid Build Coastguard Worker if(IV_B_FRAME == ps_video_decode_op->e_pic_type) s_app_ctx.b_pic_present |= 1;
3262*495ae853SAndroid Build Coastguard Worker
3263*495ae853SAndroid Build Coastguard Worker u4_num_bytes_dec = ps_video_decode_op->u4_num_bytes_consumed;
3264*495ae853SAndroid Build Coastguard Worker
3265*495ae853SAndroid Build Coastguard Worker file_pos += u4_num_bytes_dec;
3266*495ae853SAndroid Build Coastguard Worker total_bytes_comsumed += u4_num_bytes_dec;
3267*495ae853SAndroid Build Coastguard Worker u4_ip_frm_ts++;
3268*495ae853SAndroid Build Coastguard Worker
3269*495ae853SAndroid Build Coastguard Worker if(1 == ps_video_decode_op->u4_output_present)
3270*495ae853SAndroid Build Coastguard Worker {
3271*495ae853SAndroid Build Coastguard Worker CHAR cur_fname[1000];
3272*495ae853SAndroid Build Coastguard Worker CHAR *extn = NULL;
3273*495ae853SAndroid Build Coastguard Worker /* The objective is to dump the decoded frames into separate files instead
3274*495ae853SAndroid Build Coastguard Worker * of dumping all the frames in one common file. Also, the number of
3275*495ae853SAndroid Build Coastguard Worker * dumped frames at any given instance of time cannot exceed
3276*495ae853SAndroid Build Coastguard Worker * 'frame_memory'
3277*495ae853SAndroid Build Coastguard Worker */
3278*495ae853SAndroid Build Coastguard Worker if(s_app_ctx.u4_file_save_flag)
3279*495ae853SAndroid Build Coastguard Worker {
3280*495ae853SAndroid Build Coastguard Worker /* Locate the position of extension yuv */
3281*495ae853SAndroid Build Coastguard Worker extn = strstr(s_app_ctx.ac_op_fname, "%d");
3282*495ae853SAndroid Build Coastguard Worker if(extn != NULL)
3283*495ae853SAndroid Build Coastguard Worker {
3284*495ae853SAndroid Build Coastguard Worker output_write_stall(s_app_ctx.ac_op_fname, u4_op_frm_ts);
3285*495ae853SAndroid Build Coastguard Worker /* Generate output file names */
3286*495ae853SAndroid Build Coastguard Worker sprintf(cur_fname, s_app_ctx.ac_op_fname, u4_op_frm_ts);
3287*495ae853SAndroid Build Coastguard Worker /* Open Output file */
3288*495ae853SAndroid Build Coastguard Worker ps_op_file = fopen(cur_fname, "wb");
3289*495ae853SAndroid Build Coastguard Worker if(NULL == ps_op_file)
3290*495ae853SAndroid Build Coastguard Worker {
3291*495ae853SAndroid Build Coastguard Worker snprintf(ac_error_str, sizeof(ac_error_str),
3292*495ae853SAndroid Build Coastguard Worker "Could not open output file %s", cur_fname);
3293*495ae853SAndroid Build Coastguard Worker
3294*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
3295*495ae853SAndroid Build Coastguard Worker }
3296*495ae853SAndroid Build Coastguard Worker }
3297*495ae853SAndroid Build Coastguard Worker }
3298*495ae853SAndroid Build Coastguard Worker
3299*495ae853SAndroid Build Coastguard Worker #ifdef PROFILE_ENABLE
3300*495ae853SAndroid Build Coastguard Worker width = ps_video_decode_op->s_disp_frm_buf.u4_y_wd;
3301*495ae853SAndroid Build Coastguard Worker height = ps_video_decode_op->s_disp_frm_buf.u4_y_ht;
3302*495ae853SAndroid Build Coastguard Worker #endif
3303*495ae853SAndroid Build Coastguard Worker dump_output(&s_app_ctx, &(ps_video_decode_op->s_disp_frm_buf), &s_h264d_decode_op,
3304*495ae853SAndroid Build Coastguard Worker ps_video_decode_op->u4_disp_buf_id, ps_op_file, ps_qp_file,
3305*495ae853SAndroid Build Coastguard Worker ps_mb_type_file, ps_op_chksum_file, u4_op_frm_ts,
3306*495ae853SAndroid Build Coastguard Worker s_app_ctx.u4_file_save_flag, s_app_ctx.u4_chksum_save_flag,
3307*495ae853SAndroid Build Coastguard Worker s_app_ctx.u4_frame_info_enable);
3308*495ae853SAndroid Build Coastguard Worker
3309*495ae853SAndroid Build Coastguard Worker u4_op_frm_ts++;
3310*495ae853SAndroid Build Coastguard Worker if(extn != NULL) fclose(ps_op_file);
3311*495ae853SAndroid Build Coastguard Worker }
3312*495ae853SAndroid Build Coastguard Worker else
3313*495ae853SAndroid Build Coastguard Worker {
3314*495ae853SAndroid Build Coastguard Worker if((ps_video_decode_op->u4_error_code >> IVD_FATALERROR) & 1)
3315*495ae853SAndroid Build Coastguard Worker {
3316*495ae853SAndroid Build Coastguard Worker printf("Fatal error\n");
3317*495ae853SAndroid Build Coastguard Worker break;
3318*495ae853SAndroid Build Coastguard Worker }
3319*495ae853SAndroid Build Coastguard Worker }
3320*495ae853SAndroid Build Coastguard Worker }
3321*495ae853SAndroid Build Coastguard Worker }
3322*495ae853SAndroid Build Coastguard Worker
3323*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
3324*495ae853SAndroid Build Coastguard Worker /* To get the last decoded frames, call process with NULL input */
3325*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
3326*495ae853SAndroid Build Coastguard Worker flush_output(codec_obj, &s_app_ctx, ps_out_buf, pu1_bs_buf, &u4_op_frm_ts, ps_op_file,
3327*495ae853SAndroid Build Coastguard Worker ps_qp_file, ps_mb_type_file, pu1_qp_map_buf, pu1_blk_type_map_buf,
3328*495ae853SAndroid Build Coastguard Worker ps_op_chksum_file, u4_ip_frm_ts, u4_bytes_remaining);
3329*495ae853SAndroid Build Coastguard Worker
3330*495ae853SAndroid Build Coastguard Worker /* set disp_end u4_flag */
3331*495ae853SAndroid Build Coastguard Worker s_app_ctx.quit = 1;
3332*495ae853SAndroid Build Coastguard Worker
3333*495ae853SAndroid Build Coastguard Worker #ifdef PROFILE_ENABLE
3334*495ae853SAndroid Build Coastguard Worker printf("Summary\n");
3335*495ae853SAndroid Build Coastguard Worker printf("Input filename : %s\n", s_app_ctx.ac_ip_fname);
3336*495ae853SAndroid Build Coastguard Worker printf("Output Width : %-4d\n", width);
3337*495ae853SAndroid Build Coastguard Worker printf("Output Height : %-4d\n", height);
3338*495ae853SAndroid Build Coastguard Worker
3339*495ae853SAndroid Build Coastguard Worker if(frm_cnt)
3340*495ae853SAndroid Build Coastguard Worker {
3341*495ae853SAndroid Build Coastguard Worker double avg = u4_tot_cycles / frm_cnt;
3342*495ae853SAndroid Build Coastguard Worker double bytes_avg = total_bytes_comsumed / frm_cnt;
3343*495ae853SAndroid Build Coastguard Worker double bitrate = (bytes_avg * 8 * s_app_ctx.fps) / 1000000;
3344*495ae853SAndroid Build Coastguard Worker printf("Bitrate @ %2d fps(mbps) : %-6.2f\n", s_app_ctx.fps, bitrate);
3345*495ae853SAndroid Build Coastguard Worker printf("Average decode time(micro sec) : %-6d\n", (WORD32) avg);
3346*495ae853SAndroid Build Coastguard Worker printf("Avg Peak decode time(%2d frames) : %-6d\n", PEAK_WINDOW_SIZE,
3347*495ae853SAndroid Build Coastguard Worker (WORD32) peak_avg_max);
3348*495ae853SAndroid Build Coastguard Worker avg = (u4_tot_cycles + u4_tot_fmt_cycles) * 1.0 / frm_cnt;
3349*495ae853SAndroid Build Coastguard Worker
3350*495ae853SAndroid Build Coastguard Worker if(0 == s_app_ctx.u4_share_disp_buf)
3351*495ae853SAndroid Build Coastguard Worker printf("FPS achieved (with format conv) : %-3.2f\n", 1000000 / avg);
3352*495ae853SAndroid Build Coastguard Worker else
3353*495ae853SAndroid Build Coastguard Worker printf("FPS achieved : %-3.2f\n", 1000000 / avg);
3354*495ae853SAndroid Build Coastguard Worker }
3355*495ae853SAndroid Build Coastguard Worker #endif
3356*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
3357*495ae853SAndroid Build Coastguard Worker /* Clear the decoder, close all the files, free all the memory */
3358*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
3359*495ae853SAndroid Build Coastguard Worker if(1 == s_app_ctx.display)
3360*495ae853SAndroid Build Coastguard Worker {
3361*495ae853SAndroid Build Coastguard Worker s_app_ctx.display_deinit_flag = 1;
3362*495ae853SAndroid Build Coastguard Worker /* wait for display to finish */
3363*495ae853SAndroid Build Coastguard Worker if(s_app_ctx.display_thread_created)
3364*495ae853SAndroid Build Coastguard Worker {
3365*495ae853SAndroid Build Coastguard Worker ithread_join(s_app_ctx.display_thread_handle, NULL);
3366*495ae853SAndroid Build Coastguard Worker }
3367*495ae853SAndroid Build Coastguard Worker free(s_app_ctx.display_thread_handle);
3368*495ae853SAndroid Build Coastguard Worker }
3369*495ae853SAndroid Build Coastguard Worker
3370*495ae853SAndroid Build Coastguard Worker {
3371*495ae853SAndroid Build Coastguard Worker ivd_delete_ip_t s_delete_dec_ip;
3372*495ae853SAndroid Build Coastguard Worker ivd_delete_op_t s_delete_dec_op;
3373*495ae853SAndroid Build Coastguard Worker
3374*495ae853SAndroid Build Coastguard Worker s_delete_dec_ip.e_cmd = IVD_CMD_DELETE;
3375*495ae853SAndroid Build Coastguard Worker s_delete_dec_ip.u4_size = sizeof(ivd_delete_ip_t);
3376*495ae853SAndroid Build Coastguard Worker s_delete_dec_op.u4_size = sizeof(ivd_delete_op_t);
3377*495ae853SAndroid Build Coastguard Worker
3378*495ae853SAndroid Build Coastguard Worker ret = ivd_api_function((iv_obj_t *) codec_obj, (void *) &s_delete_dec_ip,
3379*495ae853SAndroid Build Coastguard Worker (void *) &s_delete_dec_op);
3380*495ae853SAndroid Build Coastguard Worker
3381*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != ret)
3382*495ae853SAndroid Build Coastguard Worker {
3383*495ae853SAndroid Build Coastguard Worker sprintf(ac_error_str, "Error in Codec delete");
3384*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error_str);
3385*495ae853SAndroid Build Coastguard Worker }
3386*495ae853SAndroid Build Coastguard Worker }
3387*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
3388*495ae853SAndroid Build Coastguard Worker /* Close all the files and free all the memory */
3389*495ae853SAndroid Build Coastguard Worker /***********************************************************************/
3390*495ae853SAndroid Build Coastguard Worker {
3391*495ae853SAndroid Build Coastguard Worker fclose(ps_ip_file);
3392*495ae853SAndroid Build Coastguard Worker
3393*495ae853SAndroid Build Coastguard Worker if((1 == s_app_ctx.u4_file_save_flag) && (strstr(s_app_ctx.ac_op_fname, "%d") == NULL))
3394*495ae853SAndroid Build Coastguard Worker {
3395*495ae853SAndroid Build Coastguard Worker fclose(ps_op_file);
3396*495ae853SAndroid Build Coastguard Worker }
3397*495ae853SAndroid Build Coastguard Worker if(1 == s_app_ctx.u4_chksum_save_flag)
3398*495ae853SAndroid Build Coastguard Worker {
3399*495ae853SAndroid Build Coastguard Worker fclose(ps_op_chksum_file);
3400*495ae853SAndroid Build Coastguard Worker }
3401*495ae853SAndroid Build Coastguard Worker if(1 == s_app_ctx.u4_frame_info_enable)
3402*495ae853SAndroid Build Coastguard Worker {
3403*495ae853SAndroid Build Coastguard Worker if(NULL != ps_qp_file)
3404*495ae853SAndroid Build Coastguard Worker {
3405*495ae853SAndroid Build Coastguard Worker fclose(ps_qp_file);
3406*495ae853SAndroid Build Coastguard Worker }
3407*495ae853SAndroid Build Coastguard Worker if(NULL != ps_mb_type_file)
3408*495ae853SAndroid Build Coastguard Worker {
3409*495ae853SAndroid Build Coastguard Worker fclose(ps_mb_type_file);
3410*495ae853SAndroid Build Coastguard Worker }
3411*495ae853SAndroid Build Coastguard Worker }
3412*495ae853SAndroid Build Coastguard Worker }
3413*495ae853SAndroid Build Coastguard Worker
3414*495ae853SAndroid Build Coastguard Worker if(0 == s_app_ctx.u4_share_disp_buf)
3415*495ae853SAndroid Build Coastguard Worker {
3416*495ae853SAndroid Build Coastguard Worker free(ps_out_buf->pu1_bufs[0]);
3417*495ae853SAndroid Build Coastguard Worker }
3418*495ae853SAndroid Build Coastguard Worker
3419*495ae853SAndroid Build Coastguard Worker for(i = 0; i < s_app_ctx.num_disp_buf; i++)
3420*495ae853SAndroid Build Coastguard Worker {
3421*495ae853SAndroid Build Coastguard Worker free(s_app_ctx.s_disp_buffers[i].pu1_bufs[0]);
3422*495ae853SAndroid Build Coastguard Worker }
3423*495ae853SAndroid Build Coastguard Worker
3424*495ae853SAndroid Build Coastguard Worker free(ps_out_buf);
3425*495ae853SAndroid Build Coastguard Worker free(pu1_bs_buf);
3426*495ae853SAndroid Build Coastguard Worker if(1 == s_app_ctx.u4_frame_info_enable)
3427*495ae853SAndroid Build Coastguard Worker {
3428*495ae853SAndroid Build Coastguard Worker if(pu1_qp_map_buf)
3429*495ae853SAndroid Build Coastguard Worker {
3430*495ae853SAndroid Build Coastguard Worker free(pu1_qp_map_buf);
3431*495ae853SAndroid Build Coastguard Worker }
3432*495ae853SAndroid Build Coastguard Worker if(pu1_blk_type_map_buf)
3433*495ae853SAndroid Build Coastguard Worker {
3434*495ae853SAndroid Build Coastguard Worker free(pu1_blk_type_map_buf);
3435*495ae853SAndroid Build Coastguard Worker }
3436*495ae853SAndroid Build Coastguard Worker }
3437*495ae853SAndroid Build Coastguard Worker
3438*495ae853SAndroid Build Coastguard Worker if(s_app_ctx.display_thread_handle) free(s_app_ctx.display_thread_handle);
3439*495ae853SAndroid Build Coastguard Worker
3440*495ae853SAndroid Build Coastguard Worker return (0);
3441*495ae853SAndroid Build Coastguard Worker }
3442