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