1*495ae853SAndroid Build Coastguard Worker /******************************************************************************
2*495ae853SAndroid Build Coastguard Worker *
3*495ae853SAndroid Build Coastguard Worker * Copyright (C) 2022 The Android Open Source Project
4*495ae853SAndroid Build Coastguard Worker *
5*495ae853SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
6*495ae853SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
7*495ae853SAndroid Build Coastguard Worker * You may obtain a copy of the License at:
8*495ae853SAndroid Build Coastguard Worker *
9*495ae853SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
10*495ae853SAndroid Build Coastguard Worker *
11*495ae853SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
12*495ae853SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
13*495ae853SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*495ae853SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
15*495ae853SAndroid Build Coastguard Worker * limitations under the License.
16*495ae853SAndroid Build Coastguard Worker *
17*495ae853SAndroid Build Coastguard Worker *****************************************************************************
18*495ae853SAndroid Build Coastguard Worker * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*495ae853SAndroid Build Coastguard Worker */
20*495ae853SAndroid Build Coastguard Worker
21*495ae853SAndroid Build Coastguard Worker #include <stdio.h>
22*495ae853SAndroid Build Coastguard Worker #include <stdlib.h>
23*495ae853SAndroid Build Coastguard Worker #include <stddef.h>
24*495ae853SAndroid Build Coastguard Worker #include <assert.h>
25*495ae853SAndroid Build Coastguard Worker #include <string.h>
26*495ae853SAndroid Build Coastguard Worker #include <sys/time.h>
27*495ae853SAndroid Build Coastguard Worker
28*495ae853SAndroid Build Coastguard Worker #include "ih264_typedefs.h"
29*495ae853SAndroid Build Coastguard Worker #include "iv2.h"
30*495ae853SAndroid Build Coastguard Worker #include "ive2.h"
31*495ae853SAndroid Build Coastguard Worker #include "isvce.h"
32*495ae853SAndroid Build Coastguard Worker #include "app.h"
33*495ae853SAndroid Build Coastguard Worker #include "psnr.h"
34*495ae853SAndroid Build Coastguard Worker
35*495ae853SAndroid Build Coastguard Worker #ifndef MD5_DISABLE
36*495ae853SAndroid Build Coastguard Worker void calc_md5_cksum(UWORD8 *pu1_inbuf, UWORD32 u4_stride, UWORD32 u4_width, UWORD32 u4_height,
37*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_cksum_p);
38*495ae853SAndroid Build Coastguard Worker #else
39*495ae853SAndroid Build Coastguard Worker #define calc_md5_cksum(a, b, c, d, e)
40*495ae853SAndroid Build Coastguard Worker #endif
41*495ae853SAndroid Build Coastguard Worker
42*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
43*495ae853SAndroid Build Coastguard Worker /* Enums */
44*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
45*495ae853SAndroid Build Coastguard Worker typedef enum
46*495ae853SAndroid Build Coastguard Worker {
47*495ae853SAndroid Build Coastguard Worker INVALID,
48*495ae853SAndroid Build Coastguard Worker HELP,
49*495ae853SAndroid Build Coastguard Worker INPUT_FILE,
50*495ae853SAndroid Build Coastguard Worker OUTPUT_FILE,
51*495ae853SAndroid Build Coastguard Worker RECON_FILE,
52*495ae853SAndroid Build Coastguard Worker RECON_ENABLE,
53*495ae853SAndroid Build Coastguard Worker NALU_INFO_EXPORT_ENABLE,
54*495ae853SAndroid Build Coastguard Worker NALU_INFO_CSV,
55*495ae853SAndroid Build Coastguard Worker CHKSUM_ENABLE,
56*495ae853SAndroid Build Coastguard Worker CHKSUM_FILE,
57*495ae853SAndroid Build Coastguard Worker INPUT_CHROMA_FORMAT,
58*495ae853SAndroid Build Coastguard Worker RECON_CHROMA_FORMAT,
59*495ae853SAndroid Build Coastguard Worker MAX_WD,
60*495ae853SAndroid Build Coastguard Worker MAX_HT,
61*495ae853SAndroid Build Coastguard Worker WD,
62*495ae853SAndroid Build Coastguard Worker HT,
63*495ae853SAndroid Build Coastguard Worker MAX_LEVEL,
64*495ae853SAndroid Build Coastguard Worker ENC_SPEED,
65*495ae853SAndroid Build Coastguard Worker ME_SPEED,
66*495ae853SAndroid Build Coastguard Worker START_FRM,
67*495ae853SAndroid Build Coastguard Worker NUM_FRMS,
68*495ae853SAndroid Build Coastguard Worker MAX_FRAMERATE,
69*495ae853SAndroid Build Coastguard Worker SRC_FRAMERATE,
70*495ae853SAndroid Build Coastguard Worker TGT_FRAMERATE,
71*495ae853SAndroid Build Coastguard Worker RC,
72*495ae853SAndroid Build Coastguard Worker MAX_BITRATE,
73*495ae853SAndroid Build Coastguard Worker BITRATE,
74*495ae853SAndroid Build Coastguard Worker I_QP,
75*495ae853SAndroid Build Coastguard Worker P_QP,
76*495ae853SAndroid Build Coastguard Worker B_QP,
77*495ae853SAndroid Build Coastguard Worker I_QP_MAX,
78*495ae853SAndroid Build Coastguard Worker P_QP_MAX,
79*495ae853SAndroid Build Coastguard Worker B_QP_MAX,
80*495ae853SAndroid Build Coastguard Worker I_QP_MIN,
81*495ae853SAndroid Build Coastguard Worker P_QP_MIN,
82*495ae853SAndroid Build Coastguard Worker B_QP_MIN,
83*495ae853SAndroid Build Coastguard Worker ENTROPY,
84*495ae853SAndroid Build Coastguard Worker AIR,
85*495ae853SAndroid Build Coastguard Worker AIR_REFRESH_PERIOD,
86*495ae853SAndroid Build Coastguard Worker ARCH,
87*495ae853SAndroid Build Coastguard Worker SOC,
88*495ae853SAndroid Build Coastguard Worker NUMCORES,
89*495ae853SAndroid Build Coastguard Worker PRE_ENC_ME,
90*495ae853SAndroid Build Coastguard Worker PRE_ENC_IPE,
91*495ae853SAndroid Build Coastguard Worker HPEL,
92*495ae853SAndroid Build Coastguard Worker QPEL,
93*495ae853SAndroid Build Coastguard Worker SRCH_RNG_X,
94*495ae853SAndroid Build Coastguard Worker SRCH_RNG_Y,
95*495ae853SAndroid Build Coastguard Worker I_INTERVAL,
96*495ae853SAndroid Build Coastguard Worker IDR_INTERVAL,
97*495ae853SAndroid Build Coastguard Worker B_FRMS,
98*495ae853SAndroid Build Coastguard Worker NUM_B_FRMS,
99*495ae853SAndroid Build Coastguard Worker DISABLE_DBLK,
100*495ae853SAndroid Build Coastguard Worker PROFILE,
101*495ae853SAndroid Build Coastguard Worker FAST_SAD,
102*495ae853SAndroid Build Coastguard Worker ALT_REF,
103*495ae853SAndroid Build Coastguard Worker DISABLE_DEBLOCK_LEVEL,
104*495ae853SAndroid Build Coastguard Worker PSNR,
105*495ae853SAndroid Build Coastguard Worker SLICE_MODE,
106*495ae853SAndroid Build Coastguard Worker SLICE_PARAM,
107*495ae853SAndroid Build Coastguard Worker CONFIG,
108*495ae853SAndroid Build Coastguard Worker LOOPBACK,
109*495ae853SAndroid Build Coastguard Worker VBV_DELAY,
110*495ae853SAndroid Build Coastguard Worker INTRA_4x4_ENABLE,
111*495ae853SAndroid Build Coastguard Worker MB_INFO_FILE,
112*495ae853SAndroid Build Coastguard Worker MB_INFO_TYPE,
113*495ae853SAndroid Build Coastguard Worker PIC_INFO_FILE,
114*495ae853SAndroid Build Coastguard Worker PIC_INFO_TYPE,
115*495ae853SAndroid Build Coastguard Worker DISABLE_VUI,
116*495ae853SAndroid Build Coastguard Worker NUM_TEMPORAL_LAYERS,
117*495ae853SAndroid Build Coastguard Worker NUM_SPATIAL_LAYERS,
118*495ae853SAndroid Build Coastguard Worker SPATIAL_RES_RATIO,
119*495ae853SAndroid Build Coastguard Worker } ARGUMENT_T;
120*495ae853SAndroid Build Coastguard Worker
121*495ae853SAndroid Build Coastguard Worker typedef struct
122*495ae853SAndroid Build Coastguard Worker {
123*495ae853SAndroid Build Coastguard Worker CHAR argument_shortname[8];
124*495ae853SAndroid Build Coastguard Worker CHAR argument_name[128];
125*495ae853SAndroid Build Coastguard Worker ARGUMENT_T argument;
126*495ae853SAndroid Build Coastguard Worker CHAR description[512];
127*495ae853SAndroid Build Coastguard Worker } argument_t;
128*495ae853SAndroid Build Coastguard Worker
129*495ae853SAndroid Build Coastguard Worker static const argument_t argument_mapping[] = {
130*495ae853SAndroid Build Coastguard Worker {"--", "--help", HELP, "Print this help\n"},
131*495ae853SAndroid Build Coastguard Worker {"-i", "--input", INPUT_FILE, "Input file\n"},
132*495ae853SAndroid Build Coastguard Worker {"-o", "--output", OUTPUT_FILE, "Output file\n"},
133*495ae853SAndroid Build Coastguard Worker {"--", "--recon_enable", RECON_ENABLE, "Recon enable flag\n"},
134*495ae853SAndroid Build Coastguard Worker {"--", "--nalu_info_export", NALU_INFO_EXPORT_ENABLE, "Enable NALU Info export\n"},
135*495ae853SAndroid Build Coastguard Worker {"--", "--nalu_info_csv", NALU_INFO_CSV, "Path to NALU Info CSV File\n"},
136*495ae853SAndroid Build Coastguard Worker {"-r", "--recon", RECON_FILE, "Recon file \n"},
137*495ae853SAndroid Build Coastguard Worker {"--", "--input_chroma_format", INPUT_CHROMA_FORMAT,
138*495ae853SAndroid Build Coastguard Worker "Input Chroma format Supported values YUV_420P, YUV_420SP_UV, "
139*495ae853SAndroid Build Coastguard Worker "YUV_420SP_VU\n"},
140*495ae853SAndroid Build Coastguard Worker {"--", "--recon_chroma_format", RECON_CHROMA_FORMAT,
141*495ae853SAndroid Build Coastguard Worker "Recon Chroma format Supported values YUV_420P, YUV_420SP_UV, "
142*495ae853SAndroid Build Coastguard Worker "YUV_420SP_VU\n"},
143*495ae853SAndroid Build Coastguard Worker {"-w", "--width", WD, "Width of input file\n"},
144*495ae853SAndroid Build Coastguard Worker {"-h", "--height", HT, "Height file\n"},
145*495ae853SAndroid Build Coastguard Worker {"--", "--start_frame", START_FRM, "Starting frame number\n"},
146*495ae853SAndroid Build Coastguard Worker {"-f", "--num_frames", NUM_FRMS, "Number of frames to be encoded\n"},
147*495ae853SAndroid Build Coastguard Worker {"--", "--rc", RC,
148*495ae853SAndroid Build Coastguard Worker "Rate control mode 0: Constant Qp, 1: Storage, 2: CBR non low delay, 3: "
149*495ae853SAndroid Build Coastguard Worker "CBR low delay \n"},
150*495ae853SAndroid Build Coastguard Worker {"--", "--max_framerate", MAX_FRAMERATE, "Maximum frame rate \n"},
151*495ae853SAndroid Build Coastguard Worker {"--", "--tgt_framerate", TGT_FRAMERATE, "Target frame rate \n"},
152*495ae853SAndroid Build Coastguard Worker {"--", "--src_framerate", SRC_FRAMERATE, "Source frame rate \n"},
153*495ae853SAndroid Build Coastguard Worker {"--", "--i_interval", I_INTERVAL, "Intra frame interval \n"},
154*495ae853SAndroid Build Coastguard Worker {"--", "--idr_interval", IDR_INTERVAL, "IDR frame interval \n"},
155*495ae853SAndroid Build Coastguard Worker {"--", "--bframes", NUM_B_FRMS, "Maximum number of consecutive B frames \n"},
156*495ae853SAndroid Build Coastguard Worker {"--", "--speed", ENC_SPEED, "Encoder speed preset 0 (slowest) and 100 (fastest)\n"},
157*495ae853SAndroid Build Coastguard Worker {"--", "--me_speed", ME_SPEED, "Encoder speed preset 0 (slowest) and 100 (fastest)\n"},
158*495ae853SAndroid Build Coastguard Worker {"--", "--fast_sad", FAST_SAD, " Flag for faster sad execution\n"},
159*495ae853SAndroid Build Coastguard Worker {"--", "--alt_ref", ALT_REF, "Flag to enable alternate refernce frames\n"},
160*495ae853SAndroid Build Coastguard Worker {"--", "--hpel", HPEL, "Flag to enable/disable Quarter pel estimation \n"},
161*495ae853SAndroid Build Coastguard Worker {"--", "--qpel", QPEL, "Flag to enable/disable Quarter pel estimation \n"},
162*495ae853SAndroid Build Coastguard Worker {"--", "--disable_deblock_level", DISABLE_DEBLOCK_LEVEL,
163*495ae853SAndroid Build Coastguard Worker "Disable deblock level - 0 : Enables deblock completely, 1: enables for I "
164*495ae853SAndroid Build Coastguard Worker "and 8th frame , 2: Enables for I only, 3 : disables completely\n"},
165*495ae853SAndroid Build Coastguard Worker {"--", "--search_range_x", SRCH_RNG_X, "Search range for X \n"},
166*495ae853SAndroid Build Coastguard Worker {"--", "--search_range_y", SRCH_RNG_Y, "Search range for Y \n"},
167*495ae853SAndroid Build Coastguard Worker {"--", "--psnr", PSNR, "Enable PSNR computation (Disable while benchmarking performance) \n"},
168*495ae853SAndroid Build Coastguard Worker {"--", "--pre_enc_me", PRE_ENC_ME, "Flag to enable/disable Pre Enc Motion Estimation\n"},
169*495ae853SAndroid Build Coastguard Worker {"--", "--pre_enc_ipe", PRE_ENC_IPE,
170*495ae853SAndroid Build Coastguard Worker "Flag to enable/disable Pre Enc Intra prediction Estimation\n"},
171*495ae853SAndroid Build Coastguard Worker {"-n", "--num_cores", NUMCORES, "Number of cores to be used\n"},
172*495ae853SAndroid Build Coastguard Worker {"--", "--adaptive_intra_refresh", AIR, "Adaptive Intra Refresh enable/disable\n"},
173*495ae853SAndroid Build Coastguard Worker {"--", "--air_refresh_period", AIR_REFRESH_PERIOD, "adaptive intra refresh period\n"},
174*495ae853SAndroid Build Coastguard Worker {"--", "--slice", SLICE_MODE,
175*495ae853SAndroid Build Coastguard Worker "Slice mode- 0 :No slice, 1: Bytes per slice, 2: MB/CTB per slice \n"},
176*495ae853SAndroid Build Coastguard Worker {"--", "--slice_param", SLICE_PARAM,
177*495ae853SAndroid Build Coastguard Worker "Slice param value based on slice mode. Slice mode of 1 implies number of "
178*495ae853SAndroid Build Coastguard Worker "bytes per slice, 2 implies number of MBs/CTBs, for 0 value is neglected "
179*495ae853SAndroid Build Coastguard Worker "\n"},
180*495ae853SAndroid Build Coastguard Worker {"--", "--max_wd", MAX_WD, "Maximum width (Default: 1920) \n"},
181*495ae853SAndroid Build Coastguard Worker {"--", "--max_ht", MAX_HT, "Maximum height (Default: 1088)\n"},
182*495ae853SAndroid Build Coastguard Worker {"--", "--max_level", MAX_LEVEL, "Maximum Level (Default: 50)\n"},
183*495ae853SAndroid Build Coastguard Worker {"--", "--arch", ARCH,
184*495ae853SAndroid Build Coastguard Worker "Set Architecture. Supported values ARCH_GENERIC, ARM_A9Q, ARM_A7, "
185*495ae853SAndroid Build Coastguard Worker "ARM_A5, "
186*495ae853SAndroid Build Coastguard Worker "ARM_NEONINTR, X86_SSSE3, X86_SSE42 \n"},
187*495ae853SAndroid Build Coastguard Worker {"--", "--soc", SOC, "Set SOC. Supported values GENERIC, HISI_37X \n"},
188*495ae853SAndroid Build Coastguard Worker {"--", "--chksum", CHKSUM_FILE, "Save Check sum file for recon data\n"},
189*495ae853SAndroid Build Coastguard Worker {"--", "--chksum_enable", CHKSUM_ENABLE, "Recon MD5 Checksum file\n"},
190*495ae853SAndroid Build Coastguard Worker {"-c", "--config", CONFIG, "config file (Default: enc.cfg)\n"},
191*495ae853SAndroid Build Coastguard Worker {"--", "--loopback", LOOPBACK, "Enable encoding in a loop\n"},
192*495ae853SAndroid Build Coastguard Worker {"--", "--profile", PROFILE, "Profile mode: Supported values BASE, MAIN, HIGH\n"},
193*495ae853SAndroid Build Coastguard Worker {"--", "--max_bitrate", MAX_BITRATE, "Max bitrate\n"},
194*495ae853SAndroid Build Coastguard Worker {"--", "--bitrate", BITRATE, "Target bitrate\n"},
195*495ae853SAndroid Build Coastguard Worker {"--", "--qp_i", I_QP, "QP for I frames\n"},
196*495ae853SAndroid Build Coastguard Worker {"--", "--qp_p", P_QP, "QP for P frames\n"},
197*495ae853SAndroid Build Coastguard Worker {"--", "--qp_b", B_QP, "QP for B frames\n"},
198*495ae853SAndroid Build Coastguard Worker {"--", "--qp_i_max", I_QP_MAX, "Max QP for I frames\n"},
199*495ae853SAndroid Build Coastguard Worker {"--", "--qp_p_max", P_QP_MAX, "Max QP for P frames\n"},
200*495ae853SAndroid Build Coastguard Worker {"--", "--qp_b_max", B_QP_MAX, "Max QP for B frames\n"},
201*495ae853SAndroid Build Coastguard Worker {"--", "--qp_i_min", I_QP_MIN, "Min QP for I frames\n"},
202*495ae853SAndroid Build Coastguard Worker {"--", "--qp_p_min", P_QP_MIN, "Min QP for P frames\n"},
203*495ae853SAndroid Build Coastguard Worker {"--", "--qp_b_min", B_QP_MIN, "Min QP for B frames\n"},
204*495ae853SAndroid Build Coastguard Worker {"--", "--entropy", ENTROPY, "Entropy coding mode(0: CAVLC or 1: CABAC)\n"},
205*495ae853SAndroid Build Coastguard Worker {"--", "--vbv_delay", VBV_DELAY, "VBV buffer delay\n"},
206*495ae853SAndroid Build Coastguard Worker {"-i4", "--intra_4x4_enable", INTRA_4x4_ENABLE, "Intra 4x4 enable \n"},
207*495ae853SAndroid Build Coastguard Worker {"--", "--mb_info_file", MB_INFO_FILE, "MB info file\n"},
208*495ae853SAndroid Build Coastguard Worker {"--", "--mb_info_type", MB_INFO_TYPE, "MB info type\n"},
209*495ae853SAndroid Build Coastguard Worker {"--", "--pic_info_file", PIC_INFO_FILE, "Pic info file\n"},
210*495ae853SAndroid Build Coastguard Worker {"--", "--pic_info_type", PIC_INFO_TYPE, "Pic info type\n"},
211*495ae853SAndroid Build Coastguard Worker {"--", "--num_temporal_layers", NUM_TEMPORAL_LAYERS, "SVC Parameter : Num temporal layers\n"},
212*495ae853SAndroid Build Coastguard Worker {"--", "--num_spatial_layers", NUM_SPATIAL_LAYERS, "SVC Parameter : Num spatial layers\n"},
213*495ae853SAndroid Build Coastguard Worker {"--", "--spatial_res_ratio", SPATIAL_RES_RATIO,
214*495ae853SAndroid Build Coastguard Worker "SVC Parameter : Resolution ratio between successive spatial layers\n"},
215*495ae853SAndroid Build Coastguard Worker {"--", "--disable_vui", DISABLE_VUI, "disable vui\n"},
216*495ae853SAndroid Build Coastguard Worker };
217*495ae853SAndroid Build Coastguard Worker
isvca_aligned_malloc(WORD32 alignment,WORD32 size)218*495ae853SAndroid Build Coastguard Worker void *isvca_aligned_malloc(WORD32 alignment, WORD32 size)
219*495ae853SAndroid Build Coastguard Worker {
220*495ae853SAndroid Build Coastguard Worker void *buf = NULL;
221*495ae853SAndroid Build Coastguard Worker
222*495ae853SAndroid Build Coastguard Worker if(0 != posix_memalign(&buf, alignment, size))
223*495ae853SAndroid Build Coastguard Worker {
224*495ae853SAndroid Build Coastguard Worker return NULL;
225*495ae853SAndroid Build Coastguard Worker }
226*495ae853SAndroid Build Coastguard Worker return buf;
227*495ae853SAndroid Build Coastguard Worker }
228*495ae853SAndroid Build Coastguard Worker
isvca_aligned_free(void * pv_buf)229*495ae853SAndroid Build Coastguard Worker void isvca_aligned_free(void *pv_buf) { free(pv_buf); }
230*495ae853SAndroid Build Coastguard Worker
231*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
232*495ae853SAndroid Build Coastguard Worker /* */
233*495ae853SAndroid Build Coastguard Worker /* Function Name : codec_exit */
234*495ae853SAndroid Build Coastguard Worker /* */
235*495ae853SAndroid Build Coastguard Worker /* Description : handles unrecoverable errors */
236*495ae853SAndroid Build Coastguard Worker /* Inputs : Error message */
237*495ae853SAndroid Build Coastguard Worker /* Globals : None */
238*495ae853SAndroid Build Coastguard Worker /* Processing : Prints error message to console and exits. */
239*495ae853SAndroid Build Coastguard Worker /* Outputs : Error message to the console */
240*495ae853SAndroid Build Coastguard Worker /* Returns : None */
241*495ae853SAndroid Build Coastguard Worker /* */
242*495ae853SAndroid Build Coastguard Worker /* Issues : */
243*495ae853SAndroid Build Coastguard Worker /* */
244*495ae853SAndroid Build Coastguard Worker /* Revision History: */
245*495ae853SAndroid Build Coastguard Worker /* */
246*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
247*495ae853SAndroid Build Coastguard Worker /* 07 06 2006 Sankar Creation */
248*495ae853SAndroid Build Coastguard Worker /* */
249*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
codec_exit(CHAR * pc_err_message)250*495ae853SAndroid Build Coastguard Worker void codec_exit(CHAR *pc_err_message)
251*495ae853SAndroid Build Coastguard Worker {
252*495ae853SAndroid Build Coastguard Worker printf("%s\n", pc_err_message);
253*495ae853SAndroid Build Coastguard Worker exit(-1);
254*495ae853SAndroid Build Coastguard Worker }
255*495ae853SAndroid Build Coastguard Worker
256*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
257*495ae853SAndroid Build Coastguard Worker /* */
258*495ae853SAndroid Build Coastguard Worker /* Function Name : codec_exit */
259*495ae853SAndroid Build Coastguard Worker /* */
260*495ae853SAndroid Build Coastguard Worker /* Description : handles unrecoverable errors */
261*495ae853SAndroid Build Coastguard Worker /* Inputs : Error message */
262*495ae853SAndroid Build Coastguard Worker /* Globals : None */
263*495ae853SAndroid Build Coastguard Worker /* Processing : Prints error message to console and exits. */
264*495ae853SAndroid Build Coastguard Worker /* Outputs : Error mesage to the console */
265*495ae853SAndroid Build Coastguard Worker /* Returns : None */
266*495ae853SAndroid Build Coastguard Worker /* */
267*495ae853SAndroid Build Coastguard Worker /* Issues : */
268*495ae853SAndroid Build Coastguard Worker /* */
269*495ae853SAndroid Build Coastguard Worker /* Revision History: */
270*495ae853SAndroid Build Coastguard Worker /* */
271*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
272*495ae853SAndroid Build Coastguard Worker /* 07 06 2006 Sankar Creation */
273*495ae853SAndroid Build Coastguard Worker /* */
274*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
get_chroma_fmt(CHAR * value)275*495ae853SAndroid Build Coastguard Worker IV_COLOR_FORMAT_T get_chroma_fmt(CHAR *value)
276*495ae853SAndroid Build Coastguard Worker {
277*495ae853SAndroid Build Coastguard Worker IV_COLOR_FORMAT_T e_chroma_format;
278*495ae853SAndroid Build Coastguard Worker if((strcmp(value, "YUV_420P")) == 0)
279*495ae853SAndroid Build Coastguard Worker e_chroma_format = IV_YUV_420P;
280*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "YUV_422ILE")) == 0)
281*495ae853SAndroid Build Coastguard Worker e_chroma_format = IV_YUV_422ILE;
282*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "RGB_565")) == 0)
283*495ae853SAndroid Build Coastguard Worker e_chroma_format = IV_RGB_565;
284*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "RGBA_8888")) == 0)
285*495ae853SAndroid Build Coastguard Worker e_chroma_format = IV_RGBA_8888;
286*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "YUV_420SP_UV")) == 0)
287*495ae853SAndroid Build Coastguard Worker e_chroma_format = IV_YUV_420SP_UV;
288*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "YUV_420SP_VU")) == 0)
289*495ae853SAndroid Build Coastguard Worker e_chroma_format = IV_YUV_420SP_VU;
290*495ae853SAndroid Build Coastguard Worker else
291*495ae853SAndroid Build Coastguard Worker {
292*495ae853SAndroid Build Coastguard Worker printf("\nInvalid colour format setting it to IV_YUV_420P\n");
293*495ae853SAndroid Build Coastguard Worker e_chroma_format = IV_YUV_420P;
294*495ae853SAndroid Build Coastguard Worker }
295*495ae853SAndroid Build Coastguard Worker return e_chroma_format;
296*495ae853SAndroid Build Coastguard Worker }
297*495ae853SAndroid Build Coastguard Worker
298*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
299*495ae853SAndroid Build Coastguard Worker /* */
300*495ae853SAndroid Build Coastguard Worker /* Function Name : codec_exit */
301*495ae853SAndroid Build Coastguard Worker /* */
302*495ae853SAndroid Build Coastguard Worker /* Description : handles unrecoverable errors */
303*495ae853SAndroid Build Coastguard Worker /* Inputs : Error message */
304*495ae853SAndroid Build Coastguard Worker /* Globals : None */
305*495ae853SAndroid Build Coastguard Worker /* Processing : Prints error message to console and exits. */
306*495ae853SAndroid Build Coastguard Worker /* Outputs : Error mesage to the console */
307*495ae853SAndroid Build Coastguard Worker /* Returns : None */
308*495ae853SAndroid Build Coastguard Worker /* */
309*495ae853SAndroid Build Coastguard Worker /* Issues : */
310*495ae853SAndroid Build Coastguard Worker /* */
311*495ae853SAndroid Build Coastguard Worker /* Revision History: */
312*495ae853SAndroid Build Coastguard Worker /* */
313*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
314*495ae853SAndroid Build Coastguard Worker /* 07 06 2006 Sankar Creation */
315*495ae853SAndroid Build Coastguard Worker /* */
316*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
get_speed_preset(CHAR * value)317*495ae853SAndroid Build Coastguard Worker IVE_SPEED_CONFIG get_speed_preset(CHAR *value)
318*495ae853SAndroid Build Coastguard Worker {
319*495ae853SAndroid Build Coastguard Worker IVE_SPEED_CONFIG e_enc_speed_preset;
320*495ae853SAndroid Build Coastguard Worker if((strcmp(value, "CONFIG")) == 0)
321*495ae853SAndroid Build Coastguard Worker e_enc_speed_preset = IVE_CONFIG;
322*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "SLOWEST")) == 0)
323*495ae853SAndroid Build Coastguard Worker e_enc_speed_preset = IVE_SLOWEST;
324*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "NORMAL")) == 0)
325*495ae853SAndroid Build Coastguard Worker e_enc_speed_preset = IVE_NORMAL;
326*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "FAST")) == 0)
327*495ae853SAndroid Build Coastguard Worker e_enc_speed_preset = IVE_FAST;
328*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "HIGH_SPEED")) == 0)
329*495ae853SAndroid Build Coastguard Worker e_enc_speed_preset = IVE_HIGH_SPEED;
330*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "FASTEST")) == 0)
331*495ae853SAndroid Build Coastguard Worker e_enc_speed_preset = IVE_FASTEST;
332*495ae853SAndroid Build Coastguard Worker else
333*495ae853SAndroid Build Coastguard Worker {
334*495ae853SAndroid Build Coastguard Worker printf("\nInvalid speed preset, setting it to IVE_FASTEST\n");
335*495ae853SAndroid Build Coastguard Worker e_enc_speed_preset = IVE_FASTEST;
336*495ae853SAndroid Build Coastguard Worker }
337*495ae853SAndroid Build Coastguard Worker return e_enc_speed_preset;
338*495ae853SAndroid Build Coastguard Worker }
339*495ae853SAndroid Build Coastguard Worker
340*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
341*495ae853SAndroid Build Coastguard Worker /* */
342*495ae853SAndroid Build Coastguard Worker /* Function Name : print_usage */
343*495ae853SAndroid Build Coastguard Worker /* */
344*495ae853SAndroid Build Coastguard Worker /* Description : Prints argument format */
345*495ae853SAndroid Build Coastguard Worker /* */
346*495ae853SAndroid Build Coastguard Worker /* */
347*495ae853SAndroid Build Coastguard Worker /* Inputs : */
348*495ae853SAndroid Build Coastguard Worker /* Globals : */
349*495ae853SAndroid Build Coastguard Worker /* Processing : Prints argument format */
350*495ae853SAndroid Build Coastguard Worker /* */
351*495ae853SAndroid Build Coastguard Worker /* Outputs : */
352*495ae853SAndroid Build Coastguard Worker /* Returns : */
353*495ae853SAndroid Build Coastguard Worker /* */
354*495ae853SAndroid Build Coastguard Worker /* Issues : */
355*495ae853SAndroid Build Coastguard Worker /* */
356*495ae853SAndroid Build Coastguard Worker /* Revision History: */
357*495ae853SAndroid Build Coastguard Worker /* */
358*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
359*495ae853SAndroid Build Coastguard Worker /* 07 09 2012 100189 Initial Version */
360*495ae853SAndroid Build Coastguard Worker /* */
361*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
362*495ae853SAndroid Build Coastguard Worker
print_usage(void)363*495ae853SAndroid Build Coastguard Worker void print_usage(void)
364*495ae853SAndroid Build Coastguard Worker {
365*495ae853SAndroid Build Coastguard Worker WORD32 i = 0;
366*495ae853SAndroid Build Coastguard Worker WORD32 num_entries = sizeof(argument_mapping) / sizeof(argument_t);
367*495ae853SAndroid Build Coastguard Worker printf("\nUsage:\n");
368*495ae853SAndroid Build Coastguard Worker while(i < num_entries)
369*495ae853SAndroid Build Coastguard Worker {
370*495ae853SAndroid Build Coastguard Worker printf("%-32s\t %s", argument_mapping[i].argument_name, argument_mapping[i].description);
371*495ae853SAndroid Build Coastguard Worker i++;
372*495ae853SAndroid Build Coastguard Worker }
373*495ae853SAndroid Build Coastguard Worker }
374*495ae853SAndroid Build Coastguard Worker
375*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
376*495ae853SAndroid Build Coastguard Worker /* */
377*495ae853SAndroid Build Coastguard Worker /* Function Name : get_argument */
378*495ae853SAndroid Build Coastguard Worker /* */
379*495ae853SAndroid Build Coastguard Worker /* Description : Gets argument for a given string */
380*495ae853SAndroid Build Coastguard Worker /* */
381*495ae853SAndroid Build Coastguard Worker /* */
382*495ae853SAndroid Build Coastguard Worker /* Inputs : name */
383*495ae853SAndroid Build Coastguard Worker /* Globals : */
384*495ae853SAndroid Build Coastguard Worker /* Processing : Searches the given string in the array and returns */
385*495ae853SAndroid Build Coastguard Worker /* appropriate argument ID */
386*495ae853SAndroid Build Coastguard Worker /* */
387*495ae853SAndroid Build Coastguard Worker /* Outputs : Argument ID */
388*495ae853SAndroid Build Coastguard Worker /* Returns : Argument ID */
389*495ae853SAndroid Build Coastguard Worker /* */
390*495ae853SAndroid Build Coastguard Worker /* Issues : */
391*495ae853SAndroid Build Coastguard Worker /* */
392*495ae853SAndroid Build Coastguard Worker /* Revision History: */
393*495ae853SAndroid Build Coastguard Worker /* */
394*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
395*495ae853SAndroid Build Coastguard Worker /* 07 09 2012 100189 Initial Version */
396*495ae853SAndroid Build Coastguard Worker /* */
397*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
get_argument(CHAR * name)398*495ae853SAndroid Build Coastguard Worker ARGUMENT_T get_argument(CHAR *name)
399*495ae853SAndroid Build Coastguard Worker {
400*495ae853SAndroid Build Coastguard Worker WORD32 i = 0;
401*495ae853SAndroid Build Coastguard Worker WORD32 num_entries = sizeof(argument_mapping) / sizeof(argument_t);
402*495ae853SAndroid Build Coastguard Worker while(i < num_entries)
403*495ae853SAndroid Build Coastguard Worker {
404*495ae853SAndroid Build Coastguard Worker if((0 == strcmp(argument_mapping[i].argument_name, name)) ||
405*495ae853SAndroid Build Coastguard Worker ((0 == strcmp(argument_mapping[i].argument_shortname, name)) &&
406*495ae853SAndroid Build Coastguard Worker (0 != strcmp(argument_mapping[i].argument_shortname, "--"))))
407*495ae853SAndroid Build Coastguard Worker {
408*495ae853SAndroid Build Coastguard Worker return argument_mapping[i].argument;
409*495ae853SAndroid Build Coastguard Worker }
410*495ae853SAndroid Build Coastguard Worker i++;
411*495ae853SAndroid Build Coastguard Worker }
412*495ae853SAndroid Build Coastguard Worker return INVALID;
413*495ae853SAndroid Build Coastguard Worker }
414*495ae853SAndroid Build Coastguard Worker
415*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
416*495ae853SAndroid Build Coastguard Worker /* */
417*495ae853SAndroid Build Coastguard Worker /* Function Name : get_argument */
418*495ae853SAndroid Build Coastguard Worker /* */
419*495ae853SAndroid Build Coastguard Worker /* Description : Gets argument for a given string */
420*495ae853SAndroid Build Coastguard Worker /* */
421*495ae853SAndroid Build Coastguard Worker /* */
422*495ae853SAndroid Build Coastguard Worker /* Inputs : name */
423*495ae853SAndroid Build Coastguard Worker /* Globals : */
424*495ae853SAndroid Build Coastguard Worker /* Processing : Searches the given string in the array and returns */
425*495ae853SAndroid Build Coastguard Worker /* appropriate argument ID */
426*495ae853SAndroid Build Coastguard Worker /* */
427*495ae853SAndroid Build Coastguard Worker /* Outputs : Argument ID */
428*495ae853SAndroid Build Coastguard Worker /* Returns : Argument ID */
429*495ae853SAndroid Build Coastguard Worker /* */
430*495ae853SAndroid Build Coastguard Worker /* Issues : */
431*495ae853SAndroid Build Coastguard Worker /* */
432*495ae853SAndroid Build Coastguard Worker /* Revision History: */
433*495ae853SAndroid Build Coastguard Worker /* */
434*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
435*495ae853SAndroid Build Coastguard Worker /* 07 09 2012 100189 Initial Version */
436*495ae853SAndroid Build Coastguard Worker /* */
437*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
parse_argument(app_ctxt_t * ps_app_ctxt,CHAR * argument,CHAR * value)438*495ae853SAndroid Build Coastguard Worker void parse_argument(app_ctxt_t *ps_app_ctxt, CHAR *argument, CHAR *value)
439*495ae853SAndroid Build Coastguard Worker {
440*495ae853SAndroid Build Coastguard Worker ARGUMENT_T arg = get_argument(argument);
441*495ae853SAndroid Build Coastguard Worker
442*495ae853SAndroid Build Coastguard Worker switch(arg)
443*495ae853SAndroid Build Coastguard Worker {
444*495ae853SAndroid Build Coastguard Worker case HELP:
445*495ae853SAndroid Build Coastguard Worker print_usage();
446*495ae853SAndroid Build Coastguard Worker exit(-1);
447*495ae853SAndroid Build Coastguard Worker break;
448*495ae853SAndroid Build Coastguard Worker case SLICE_MODE:
449*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_slice_mode);
450*495ae853SAndroid Build Coastguard Worker break;
451*495ae853SAndroid Build Coastguard Worker case SLICE_PARAM:
452*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_slice_param);
453*495ae853SAndroid Build Coastguard Worker break;
454*495ae853SAndroid Build Coastguard Worker case INPUT_FILE:
455*495ae853SAndroid Build Coastguard Worker sscanf(value, "%s", ps_app_ctxt->ac_ip_fname);
456*495ae853SAndroid Build Coastguard Worker break;
457*495ae853SAndroid Build Coastguard Worker
458*495ae853SAndroid Build Coastguard Worker case OUTPUT_FILE:
459*495ae853SAndroid Build Coastguard Worker sscanf(value, "%s", ps_app_ctxt->ac_op_fname);
460*495ae853SAndroid Build Coastguard Worker break;
461*495ae853SAndroid Build Coastguard Worker
462*495ae853SAndroid Build Coastguard Worker case RECON_FILE:
463*495ae853SAndroid Build Coastguard Worker sscanf(value, "%s", ps_app_ctxt->ac_recon_fname);
464*495ae853SAndroid Build Coastguard Worker break;
465*495ae853SAndroid Build Coastguard Worker
466*495ae853SAndroid Build Coastguard Worker case RECON_ENABLE:
467*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_recon_enable);
468*495ae853SAndroid Build Coastguard Worker break;
469*495ae853SAndroid Build Coastguard Worker
470*495ae853SAndroid Build Coastguard Worker case NALU_INFO_EXPORT_ENABLE:
471*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_nalu_info_export_enable);
472*495ae853SAndroid Build Coastguard Worker break;
473*495ae853SAndroid Build Coastguard Worker
474*495ae853SAndroid Build Coastguard Worker case NALU_INFO_CSV:
475*495ae853SAndroid Build Coastguard Worker sscanf(value, "%s", ps_app_ctxt->ac_nalu_info_csv_fname);
476*495ae853SAndroid Build Coastguard Worker break;
477*495ae853SAndroid Build Coastguard Worker
478*495ae853SAndroid Build Coastguard Worker case CHKSUM_FILE:
479*495ae853SAndroid Build Coastguard Worker sscanf(value, "%s", ps_app_ctxt->ac_chksum_fname);
480*495ae853SAndroid Build Coastguard Worker break;
481*495ae853SAndroid Build Coastguard Worker
482*495ae853SAndroid Build Coastguard Worker case CHKSUM_ENABLE:
483*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_chksum_enable);
484*495ae853SAndroid Build Coastguard Worker break;
485*495ae853SAndroid Build Coastguard Worker
486*495ae853SAndroid Build Coastguard Worker case MB_INFO_FILE:
487*495ae853SAndroid Build Coastguard Worker sscanf(value, "%s", ps_app_ctxt->ac_mb_info_fname);
488*495ae853SAndroid Build Coastguard Worker break;
489*495ae853SAndroid Build Coastguard Worker
490*495ae853SAndroid Build Coastguard Worker case MB_INFO_TYPE:
491*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_mb_info_type);
492*495ae853SAndroid Build Coastguard Worker break;
493*495ae853SAndroid Build Coastguard Worker
494*495ae853SAndroid Build Coastguard Worker case PIC_INFO_FILE:
495*495ae853SAndroid Build Coastguard Worker sscanf(value, "%s", ps_app_ctxt->ac_pic_info_fname);
496*495ae853SAndroid Build Coastguard Worker break;
497*495ae853SAndroid Build Coastguard Worker
498*495ae853SAndroid Build Coastguard Worker case PIC_INFO_TYPE:
499*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_pic_info_type);
500*495ae853SAndroid Build Coastguard Worker break;
501*495ae853SAndroid Build Coastguard Worker
502*495ae853SAndroid Build Coastguard Worker case INPUT_CHROMA_FORMAT:
503*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_inp_color_fmt = get_chroma_fmt(value);
504*495ae853SAndroid Build Coastguard Worker break;
505*495ae853SAndroid Build Coastguard Worker
506*495ae853SAndroid Build Coastguard Worker case RECON_CHROMA_FORMAT:
507*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_recon_color_fmt = get_chroma_fmt(value);
508*495ae853SAndroid Build Coastguard Worker break;
509*495ae853SAndroid Build Coastguard Worker
510*495ae853SAndroid Build Coastguard Worker case MAX_WD:
511*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_max_wd);
512*495ae853SAndroid Build Coastguard Worker break;
513*495ae853SAndroid Build Coastguard Worker
514*495ae853SAndroid Build Coastguard Worker case MAX_HT:
515*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_max_ht);
516*495ae853SAndroid Build Coastguard Worker break;
517*495ae853SAndroid Build Coastguard Worker
518*495ae853SAndroid Build Coastguard Worker case WD:
519*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_wd);
520*495ae853SAndroid Build Coastguard Worker break;
521*495ae853SAndroid Build Coastguard Worker
522*495ae853SAndroid Build Coastguard Worker case HT:
523*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_ht);
524*495ae853SAndroid Build Coastguard Worker break;
525*495ae853SAndroid Build Coastguard Worker
526*495ae853SAndroid Build Coastguard Worker case MAX_LEVEL:
527*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_max_level);
528*495ae853SAndroid Build Coastguard Worker break;
529*495ae853SAndroid Build Coastguard Worker
530*495ae853SAndroid Build Coastguard Worker case ENC_SPEED:
531*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_enc_speed = get_speed_preset(value);
532*495ae853SAndroid Build Coastguard Worker break;
533*495ae853SAndroid Build Coastguard Worker
534*495ae853SAndroid Build Coastguard Worker case ME_SPEED:
535*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_me_speed);
536*495ae853SAndroid Build Coastguard Worker break;
537*495ae853SAndroid Build Coastguard Worker
538*495ae853SAndroid Build Coastguard Worker case START_FRM:
539*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_start_frm);
540*495ae853SAndroid Build Coastguard Worker break;
541*495ae853SAndroid Build Coastguard Worker
542*495ae853SAndroid Build Coastguard Worker case NUM_FRMS:
543*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_max_num_frms);
544*495ae853SAndroid Build Coastguard Worker break;
545*495ae853SAndroid Build Coastguard Worker
546*495ae853SAndroid Build Coastguard Worker case MAX_FRAMERATE:
547*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_max_frame_rate);
548*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->u4_max_frame_rate <= 0)
549*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_max_frame_rate = DEFAULT_MAX_FRAMERATE;
550*495ae853SAndroid Build Coastguard Worker break;
551*495ae853SAndroid Build Coastguard Worker
552*495ae853SAndroid Build Coastguard Worker case SRC_FRAMERATE:
553*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_src_frame_rate);
554*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->u4_src_frame_rate <= 0)
555*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_src_frame_rate = DEFAULT_SRC_FRAME_RATE;
556*495ae853SAndroid Build Coastguard Worker break;
557*495ae853SAndroid Build Coastguard Worker
558*495ae853SAndroid Build Coastguard Worker case TGT_FRAMERATE:
559*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_tgt_frame_rate);
560*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->u4_tgt_frame_rate <= 0)
561*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_tgt_frame_rate = DEFAULT_TGT_FRAME_RATE;
562*495ae853SAndroid Build Coastguard Worker break;
563*495ae853SAndroid Build Coastguard Worker
564*495ae853SAndroid Build Coastguard Worker case RC:
565*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_rc);
566*495ae853SAndroid Build Coastguard Worker break;
567*495ae853SAndroid Build Coastguard Worker
568*495ae853SAndroid Build Coastguard Worker case ENTROPY:
569*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_entropy_coding_mode);
570*495ae853SAndroid Build Coastguard Worker break;
571*495ae853SAndroid Build Coastguard Worker
572*495ae853SAndroid Build Coastguard Worker case AIR:
573*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_air);
574*495ae853SAndroid Build Coastguard Worker break;
575*495ae853SAndroid Build Coastguard Worker
576*495ae853SAndroid Build Coastguard Worker case ARCH:
577*495ae853SAndroid Build Coastguard Worker if((strcmp(value, "ARCH_GENERIC")) == 0)
578*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_arch = ARCH_X86_GENERIC;
579*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "ARM_A9Q")) == 0)
580*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_arch = ARCH_ARM_A9Q;
581*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "ARM_A7")) == 0)
582*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_arch = ARCH_ARM_A7;
583*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "ARM_A5")) == 0)
584*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_arch = ARCH_ARM_A5;
585*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "ARM_NEONINTR")) == 0)
586*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_arch = ARCH_ARM_NEONINTR;
587*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "X86_SSSE3")) == 0)
588*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_arch = ARCH_X86_SSSE3;
589*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "X86_SSE42")) == 0)
590*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_arch = ARCH_X86_SSE42;
591*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "ARM_A53")) == 0)
592*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_arch = ARCH_ARM_A53;
593*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "ARM_A57")) == 0)
594*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_arch = ARCH_ARM_A57;
595*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "ARM_V8_NEON")) == 0)
596*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_arch = ARCH_ARM_V8_NEON;
597*495ae853SAndroid Build Coastguard Worker else
598*495ae853SAndroid Build Coastguard Worker {
599*495ae853SAndroid Build Coastguard Worker printf("\nInvalid Arch. Setting it to ARM_A9Q\n");
600*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_arch = ARCH_ARM_A9Q;
601*495ae853SAndroid Build Coastguard Worker }
602*495ae853SAndroid Build Coastguard Worker
603*495ae853SAndroid Build Coastguard Worker break;
604*495ae853SAndroid Build Coastguard Worker case SOC:
605*495ae853SAndroid Build Coastguard Worker if((strcmp(value, "GENERIC")) == 0)
606*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_soc = SOC_GENERIC;
607*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "HISI_37X")) == 0)
608*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_soc = SOC_HISI_37X;
609*495ae853SAndroid Build Coastguard Worker else
610*495ae853SAndroid Build Coastguard Worker {
611*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_soc = SOC_GENERIC;
612*495ae853SAndroid Build Coastguard Worker }
613*495ae853SAndroid Build Coastguard Worker break;
614*495ae853SAndroid Build Coastguard Worker
615*495ae853SAndroid Build Coastguard Worker case NUMCORES:
616*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_num_cores);
617*495ae853SAndroid Build Coastguard Worker break;
618*495ae853SAndroid Build Coastguard Worker
619*495ae853SAndroid Build Coastguard Worker case LOOPBACK:
620*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_loopback);
621*495ae853SAndroid Build Coastguard Worker break;
622*495ae853SAndroid Build Coastguard Worker
623*495ae853SAndroid Build Coastguard Worker case PRE_ENC_ME:
624*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_pre_enc_me);
625*495ae853SAndroid Build Coastguard Worker break;
626*495ae853SAndroid Build Coastguard Worker
627*495ae853SAndroid Build Coastguard Worker case PRE_ENC_IPE:
628*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_pre_enc_ipe);
629*495ae853SAndroid Build Coastguard Worker break;
630*495ae853SAndroid Build Coastguard Worker
631*495ae853SAndroid Build Coastguard Worker case HPEL:
632*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_hpel);
633*495ae853SAndroid Build Coastguard Worker break;
634*495ae853SAndroid Build Coastguard Worker
635*495ae853SAndroid Build Coastguard Worker case QPEL:
636*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_qpel);
637*495ae853SAndroid Build Coastguard Worker break;
638*495ae853SAndroid Build Coastguard Worker
639*495ae853SAndroid Build Coastguard Worker case SRCH_RNG_X:
640*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_srch_rng_x);
641*495ae853SAndroid Build Coastguard Worker break;
642*495ae853SAndroid Build Coastguard Worker
643*495ae853SAndroid Build Coastguard Worker case SRCH_RNG_Y:
644*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_srch_rng_y);
645*495ae853SAndroid Build Coastguard Worker break;
646*495ae853SAndroid Build Coastguard Worker
647*495ae853SAndroid Build Coastguard Worker case I_INTERVAL:
648*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_i_interval);
649*495ae853SAndroid Build Coastguard Worker break;
650*495ae853SAndroid Build Coastguard Worker
651*495ae853SAndroid Build Coastguard Worker case IDR_INTERVAL:
652*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_idr_interval);
653*495ae853SAndroid Build Coastguard Worker break;
654*495ae853SAndroid Build Coastguard Worker
655*495ae853SAndroid Build Coastguard Worker case NUM_B_FRMS:
656*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_num_bframes);
657*495ae853SAndroid Build Coastguard Worker break;
658*495ae853SAndroid Build Coastguard Worker
659*495ae853SAndroid Build Coastguard Worker case DISABLE_DEBLOCK_LEVEL:
660*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_disable_deblock_level);
661*495ae853SAndroid Build Coastguard Worker break;
662*495ae853SAndroid Build Coastguard Worker
663*495ae853SAndroid Build Coastguard Worker case FAST_SAD:
664*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_enable_fast_sad);
665*495ae853SAndroid Build Coastguard Worker break;
666*495ae853SAndroid Build Coastguard Worker
667*495ae853SAndroid Build Coastguard Worker case ALT_REF:
668*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_enable_alt_ref);
669*495ae853SAndroid Build Coastguard Worker break;
670*495ae853SAndroid Build Coastguard Worker
671*495ae853SAndroid Build Coastguard Worker case AIR_REFRESH_PERIOD:
672*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_air_refresh_period);
673*495ae853SAndroid Build Coastguard Worker break;
674*495ae853SAndroid Build Coastguard Worker
675*495ae853SAndroid Build Coastguard Worker case PROFILE:
676*495ae853SAndroid Build Coastguard Worker if((strcmp(value, "BASE")) == 0)
677*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_profile = IV_PROFILE_BASE;
678*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "MAIN")) == 0)
679*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_profile = IV_PROFILE_MAIN;
680*495ae853SAndroid Build Coastguard Worker else if((strcmp(value, "HIGH")) == 0)
681*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_profile = IV_PROFILE_HIGH;
682*495ae853SAndroid Build Coastguard Worker else
683*495ae853SAndroid Build Coastguard Worker {
684*495ae853SAndroid Build Coastguard Worker printf("\nInvalid profile. Setting it to BASE\n");
685*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_profile = IV_PROFILE_BASE;
686*495ae853SAndroid Build Coastguard Worker }
687*495ae853SAndroid Build Coastguard Worker break;
688*495ae853SAndroid Build Coastguard Worker
689*495ae853SAndroid Build Coastguard Worker case PSNR:
690*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_psnr_enable);
691*495ae853SAndroid Build Coastguard Worker break;
692*495ae853SAndroid Build Coastguard Worker
693*495ae853SAndroid Build Coastguard Worker case INTRA_4x4_ENABLE:
694*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_enable_intra_4x4);
695*495ae853SAndroid Build Coastguard Worker break;
696*495ae853SAndroid Build Coastguard Worker
697*495ae853SAndroid Build Coastguard Worker case DISABLE_VUI:
698*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->u4_use_default_vui);
699*495ae853SAndroid Build Coastguard Worker break;
700*495ae853SAndroid Build Coastguard Worker
701*495ae853SAndroid Build Coastguard Worker case NUM_TEMPORAL_LAYERS:
702*495ae853SAndroid Build Coastguard Worker {
703*495ae853SAndroid Build Coastguard Worker sscanf(value, "%hhu", &ps_app_ctxt->u1_num_temporal_layers);
704*495ae853SAndroid Build Coastguard Worker break;
705*495ae853SAndroid Build Coastguard Worker }
706*495ae853SAndroid Build Coastguard Worker
707*495ae853SAndroid Build Coastguard Worker case NUM_SPATIAL_LAYERS:
708*495ae853SAndroid Build Coastguard Worker {
709*495ae853SAndroid Build Coastguard Worker sscanf(value, "%hhu", &ps_app_ctxt->u1_num_spatial_layers);
710*495ae853SAndroid Build Coastguard Worker break;
711*495ae853SAndroid Build Coastguard Worker }
712*495ae853SAndroid Build Coastguard Worker
713*495ae853SAndroid Build Coastguard Worker case SPATIAL_RES_RATIO:
714*495ae853SAndroid Build Coastguard Worker {
715*495ae853SAndroid Build Coastguard Worker sscanf(value, "%lf", &ps_app_ctxt->d_spatial_res_ratio);
716*495ae853SAndroid Build Coastguard Worker break;
717*495ae853SAndroid Build Coastguard Worker }
718*495ae853SAndroid Build Coastguard Worker
719*495ae853SAndroid Build Coastguard Worker case MAX_BITRATE:
720*495ae853SAndroid Build Coastguard Worker case BITRATE:
721*495ae853SAndroid Build Coastguard Worker case I_QP:
722*495ae853SAndroid Build Coastguard Worker case I_QP_MAX:
723*495ae853SAndroid Build Coastguard Worker case I_QP_MIN:
724*495ae853SAndroid Build Coastguard Worker case P_QP:
725*495ae853SAndroid Build Coastguard Worker case P_QP_MAX:
726*495ae853SAndroid Build Coastguard Worker case P_QP_MIN:
727*495ae853SAndroid Build Coastguard Worker case B_QP:
728*495ae853SAndroid Build Coastguard Worker case B_QP_MAX:
729*495ae853SAndroid Build Coastguard Worker case B_QP_MIN:
730*495ae853SAndroid Build Coastguard Worker case VBV_DELAY:
731*495ae853SAndroid Build Coastguard Worker break;
732*495ae853SAndroid Build Coastguard Worker
733*495ae853SAndroid Build Coastguard Worker case INVALID:
734*495ae853SAndroid Build Coastguard Worker default:
735*495ae853SAndroid Build Coastguard Worker printf("Ignoring argument : %s\n", argument);
736*495ae853SAndroid Build Coastguard Worker break;
737*495ae853SAndroid Build Coastguard Worker }
738*495ae853SAndroid Build Coastguard Worker }
739*495ae853SAndroid Build Coastguard Worker
parse_rc_argument(app_ctxt_t * ps_app_ctxt,CHAR * argument,CHAR * value)740*495ae853SAndroid Build Coastguard Worker void parse_rc_argument(app_ctxt_t *ps_app_ctxt, CHAR *argument, CHAR *value)
741*495ae853SAndroid Build Coastguard Worker {
742*495ae853SAndroid Build Coastguard Worker #define ITERATE_TO_NEXT_ARG() \
743*495ae853SAndroid Build Coastguard Worker while(*value != ',' && *value != '-' && *value != '\0') \
744*495ae853SAndroid Build Coastguard Worker { \
745*495ae853SAndroid Build Coastguard Worker value++; \
746*495ae853SAndroid Build Coastguard Worker } \
747*495ae853SAndroid Build Coastguard Worker if((*value == '-' || *value == '\0') && i + 1 < u1_num_spatial_layers) break; \
748*495ae853SAndroid Build Coastguard Worker value++;
749*495ae853SAndroid Build Coastguard Worker
750*495ae853SAndroid Build Coastguard Worker ARGUMENT_T arg;
751*495ae853SAndroid Build Coastguard Worker int i = 0;
752*495ae853SAndroid Build Coastguard Worker UWORD8 u1_num_spatial_layers = ps_app_ctxt->u1_num_spatial_layers;
753*495ae853SAndroid Build Coastguard Worker
754*495ae853SAndroid Build Coastguard Worker arg = get_argument(argument);
755*495ae853SAndroid Build Coastguard Worker switch(arg)
756*495ae853SAndroid Build Coastguard Worker {
757*495ae853SAndroid Build Coastguard Worker case MAX_BITRATE:
758*495ae853SAndroid Build Coastguard Worker for(i = 0; i < u1_num_spatial_layers; i++)
759*495ae853SAndroid Build Coastguard Worker {
760*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->pu4_max_bitrate[i]);
761*495ae853SAndroid Build Coastguard Worker ITERATE_TO_NEXT_ARG();
762*495ae853SAndroid Build Coastguard Worker }
763*495ae853SAndroid Build Coastguard Worker break;
764*495ae853SAndroid Build Coastguard Worker
765*495ae853SAndroid Build Coastguard Worker case BITRATE:
766*495ae853SAndroid Build Coastguard Worker for(i = 0; i < u1_num_spatial_layers; i++)
767*495ae853SAndroid Build Coastguard Worker {
768*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->pu4_bitrate[i]);
769*495ae853SAndroid Build Coastguard Worker ITERATE_TO_NEXT_ARG();
770*495ae853SAndroid Build Coastguard Worker }
771*495ae853SAndroid Build Coastguard Worker break;
772*495ae853SAndroid Build Coastguard Worker
773*495ae853SAndroid Build Coastguard Worker case I_QP:
774*495ae853SAndroid Build Coastguard Worker for(i = 0; i < u1_num_spatial_layers; i++)
775*495ae853SAndroid Build Coastguard Worker {
776*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->pu4_i_qp[i]);
777*495ae853SAndroid Build Coastguard Worker ITERATE_TO_NEXT_ARG();
778*495ae853SAndroid Build Coastguard Worker }
779*495ae853SAndroid Build Coastguard Worker break;
780*495ae853SAndroid Build Coastguard Worker
781*495ae853SAndroid Build Coastguard Worker case I_QP_MAX:
782*495ae853SAndroid Build Coastguard Worker for(i = 0; i < u1_num_spatial_layers; i++)
783*495ae853SAndroid Build Coastguard Worker {
784*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->pu4_i_qp_max[i]);
785*495ae853SAndroid Build Coastguard Worker ITERATE_TO_NEXT_ARG();
786*495ae853SAndroid Build Coastguard Worker }
787*495ae853SAndroid Build Coastguard Worker break;
788*495ae853SAndroid Build Coastguard Worker
789*495ae853SAndroid Build Coastguard Worker case I_QP_MIN:
790*495ae853SAndroid Build Coastguard Worker for(i = 0; i < u1_num_spatial_layers; i++)
791*495ae853SAndroid Build Coastguard Worker {
792*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->pu4_i_qp_min[i]);
793*495ae853SAndroid Build Coastguard Worker ITERATE_TO_NEXT_ARG();
794*495ae853SAndroid Build Coastguard Worker }
795*495ae853SAndroid Build Coastguard Worker break;
796*495ae853SAndroid Build Coastguard Worker
797*495ae853SAndroid Build Coastguard Worker case P_QP:
798*495ae853SAndroid Build Coastguard Worker for(i = 0; i < u1_num_spatial_layers; i++)
799*495ae853SAndroid Build Coastguard Worker {
800*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->pu4_p_qp[i]);
801*495ae853SAndroid Build Coastguard Worker ITERATE_TO_NEXT_ARG();
802*495ae853SAndroid Build Coastguard Worker }
803*495ae853SAndroid Build Coastguard Worker break;
804*495ae853SAndroid Build Coastguard Worker
805*495ae853SAndroid Build Coastguard Worker case P_QP_MAX:
806*495ae853SAndroid Build Coastguard Worker for(i = 0; i < u1_num_spatial_layers; i++)
807*495ae853SAndroid Build Coastguard Worker {
808*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->pu4_p_qp_max[i]);
809*495ae853SAndroid Build Coastguard Worker ITERATE_TO_NEXT_ARG();
810*495ae853SAndroid Build Coastguard Worker }
811*495ae853SAndroid Build Coastguard Worker break;
812*495ae853SAndroid Build Coastguard Worker
813*495ae853SAndroid Build Coastguard Worker case P_QP_MIN:
814*495ae853SAndroid Build Coastguard Worker for(i = 0; i < u1_num_spatial_layers; i++)
815*495ae853SAndroid Build Coastguard Worker {
816*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->pu4_p_qp_min[i]);
817*495ae853SAndroid Build Coastguard Worker ITERATE_TO_NEXT_ARG();
818*495ae853SAndroid Build Coastguard Worker }
819*495ae853SAndroid Build Coastguard Worker break;
820*495ae853SAndroid Build Coastguard Worker
821*495ae853SAndroid Build Coastguard Worker case B_QP:
822*495ae853SAndroid Build Coastguard Worker for(i = 0; i < u1_num_spatial_layers; i++)
823*495ae853SAndroid Build Coastguard Worker {
824*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->pu4_b_qp[i]);
825*495ae853SAndroid Build Coastguard Worker ITERATE_TO_NEXT_ARG();
826*495ae853SAndroid Build Coastguard Worker }
827*495ae853SAndroid Build Coastguard Worker break;
828*495ae853SAndroid Build Coastguard Worker
829*495ae853SAndroid Build Coastguard Worker case B_QP_MAX:
830*495ae853SAndroid Build Coastguard Worker for(i = 0; i < u1_num_spatial_layers; i++)
831*495ae853SAndroid Build Coastguard Worker {
832*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->pu4_b_qp_max[i]);
833*495ae853SAndroid Build Coastguard Worker ITERATE_TO_NEXT_ARG();
834*495ae853SAndroid Build Coastguard Worker }
835*495ae853SAndroid Build Coastguard Worker break;
836*495ae853SAndroid Build Coastguard Worker
837*495ae853SAndroid Build Coastguard Worker case B_QP_MIN:
838*495ae853SAndroid Build Coastguard Worker for(i = 0; i < u1_num_spatial_layers; i++)
839*495ae853SAndroid Build Coastguard Worker {
840*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->pu4_b_qp_min[i]);
841*495ae853SAndroid Build Coastguard Worker ITERATE_TO_NEXT_ARG();
842*495ae853SAndroid Build Coastguard Worker }
843*495ae853SAndroid Build Coastguard Worker break;
844*495ae853SAndroid Build Coastguard Worker
845*495ae853SAndroid Build Coastguard Worker case VBV_DELAY:
846*495ae853SAndroid Build Coastguard Worker for(i = 0; i < u1_num_spatial_layers; i++)
847*495ae853SAndroid Build Coastguard Worker {
848*495ae853SAndroid Build Coastguard Worker sscanf(value, "%d", &ps_app_ctxt->pu4_vbv_buffer_delay[i]);
849*495ae853SAndroid Build Coastguard Worker ITERATE_TO_NEXT_ARG();
850*495ae853SAndroid Build Coastguard Worker }
851*495ae853SAndroid Build Coastguard Worker break;
852*495ae853SAndroid Build Coastguard Worker
853*495ae853SAndroid Build Coastguard Worker default:
854*495ae853SAndroid Build Coastguard Worker break;
855*495ae853SAndroid Build Coastguard Worker }
856*495ae853SAndroid Build Coastguard Worker }
857*495ae853SAndroid Build Coastguard Worker
858*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
859*495ae853SAndroid Build Coastguard Worker /* */
860*495ae853SAndroid Build Coastguard Worker /* Function Name : read_cfg_file */
861*495ae853SAndroid Build Coastguard Worker /* */
862*495ae853SAndroid Build Coastguard Worker /* Description : Reads arguments from a configuration file */
863*495ae853SAndroid Build Coastguard Worker /* */
864*495ae853SAndroid Build Coastguard Worker /* */
865*495ae853SAndroid Build Coastguard Worker /* Inputs : ps_app_ctxt : Application context */
866*495ae853SAndroid Build Coastguard Worker /* fp_cfg_file : Configuration file handle */
867*495ae853SAndroid Build Coastguard Worker /* Globals : */
868*495ae853SAndroid Build Coastguard Worker /* Processing : Parses the arguments and fills in the application context*/
869*495ae853SAndroid Build Coastguard Worker /* */
870*495ae853SAndroid Build Coastguard Worker /* Outputs : Arguments parsed */
871*495ae853SAndroid Build Coastguard Worker /* Returns : None */
872*495ae853SAndroid Build Coastguard Worker /* */
873*495ae853SAndroid Build Coastguard Worker /* Issues : */
874*495ae853SAndroid Build Coastguard Worker /* */
875*495ae853SAndroid Build Coastguard Worker /* Revision History: */
876*495ae853SAndroid Build Coastguard Worker /* */
877*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
878*495ae853SAndroid Build Coastguard Worker /* 07 09 2012 100189 Initial Version */
879*495ae853SAndroid Build Coastguard Worker /* */
880*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
read_cfg_file(app_ctxt_t * ps_app_ctxt,FILE * fp_cfg)881*495ae853SAndroid Build Coastguard Worker void read_cfg_file(app_ctxt_t *ps_app_ctxt, FILE *fp_cfg)
882*495ae853SAndroid Build Coastguard Worker {
883*495ae853SAndroid Build Coastguard Worker CHAR line[STRLENGTH];
884*495ae853SAndroid Build Coastguard Worker CHAR description[STRLENGTH];
885*495ae853SAndroid Build Coastguard Worker CHAR value[STRLENGTH];
886*495ae853SAndroid Build Coastguard Worker CHAR argument[STRLENGTH];
887*495ae853SAndroid Build Coastguard Worker
888*495ae853SAndroid Build Coastguard Worker while(0 == (feof(fp_cfg)))
889*495ae853SAndroid Build Coastguard Worker {
890*495ae853SAndroid Build Coastguard Worker int ret;
891*495ae853SAndroid Build Coastguard Worker line[0] = '\0';
892*495ae853SAndroid Build Coastguard Worker if(NULL == fgets(line, sizeof(line), fp_cfg)) break;
893*495ae853SAndroid Build Coastguard Worker argument[0] = '\0';
894*495ae853SAndroid Build Coastguard Worker /* Reading Input File Name */
895*495ae853SAndroid Build Coastguard Worker ret = sscanf(line, "%s %s %s", argument, value, description);
896*495ae853SAndroid Build Coastguard Worker if(ret < 2) continue;
897*495ae853SAndroid Build Coastguard Worker
898*495ae853SAndroid Build Coastguard Worker parse_argument(ps_app_ctxt, argument, value);
899*495ae853SAndroid Build Coastguard Worker }
900*495ae853SAndroid Build Coastguard Worker }
901*495ae853SAndroid Build Coastguard Worker
902*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
903*495ae853SAndroid Build Coastguard Worker /* */
904*495ae853SAndroid Build Coastguard Worker /* Function Name : read_cfg_file_rc_params */
905*495ae853SAndroid Build Coastguard Worker /* */
906*495ae853SAndroid Build Coastguard Worker /* Description : Reads RC specific arguments from a configuration file */
907*495ae853SAndroid Build Coastguard Worker /* */
908*495ae853SAndroid Build Coastguard Worker /* */
909*495ae853SAndroid Build Coastguard Worker /* Inputs : ps_app_ctxt : Application context */
910*495ae853SAndroid Build Coastguard Worker /* fp_cfg_file : Configuration file handle */
911*495ae853SAndroid Build Coastguard Worker /* Globals : */
912*495ae853SAndroid Build Coastguard Worker /* Processing : Parses the arguments and fills in the application context*/
913*495ae853SAndroid Build Coastguard Worker /* */
914*495ae853SAndroid Build Coastguard Worker /* Outputs : Arguments parsed */
915*495ae853SAndroid Build Coastguard Worker /* Returns : None */
916*495ae853SAndroid Build Coastguard Worker /* */
917*495ae853SAndroid Build Coastguard Worker /* Issues : */
918*495ae853SAndroid Build Coastguard Worker /* */
919*495ae853SAndroid Build Coastguard Worker /* Revision History: */
920*495ae853SAndroid Build Coastguard Worker /* */
921*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
922*495ae853SAndroid Build Coastguard Worker /* 07 09 2012 100189 Initial Version */
923*495ae853SAndroid Build Coastguard Worker /* */
924*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
read_cfg_file_rc_params(app_ctxt_t * ps_app_ctxt,FILE * fp_cfg)925*495ae853SAndroid Build Coastguard Worker void read_cfg_file_rc_params(app_ctxt_t *ps_app_ctxt, FILE *fp_cfg)
926*495ae853SAndroid Build Coastguard Worker {
927*495ae853SAndroid Build Coastguard Worker CHAR line[STRLENGTH];
928*495ae853SAndroid Build Coastguard Worker CHAR description[STRLENGTH];
929*495ae853SAndroid Build Coastguard Worker CHAR value[STRLENGTH];
930*495ae853SAndroid Build Coastguard Worker CHAR argument[STRLENGTH];
931*495ae853SAndroid Build Coastguard Worker
932*495ae853SAndroid Build Coastguard Worker while(0 == (feof(fp_cfg)))
933*495ae853SAndroid Build Coastguard Worker {
934*495ae853SAndroid Build Coastguard Worker int ret;
935*495ae853SAndroid Build Coastguard Worker line[0] = '\0';
936*495ae853SAndroid Build Coastguard Worker if(NULL == fgets(line, sizeof(line), fp_cfg)) break;
937*495ae853SAndroid Build Coastguard Worker argument[0] = '\0';
938*495ae853SAndroid Build Coastguard Worker /* Reading Input File Name */
939*495ae853SAndroid Build Coastguard Worker ret = sscanf(line, "%s %s %s", argument, value, description);
940*495ae853SAndroid Build Coastguard Worker if(ret < 2) continue;
941*495ae853SAndroid Build Coastguard Worker
942*495ae853SAndroid Build Coastguard Worker parse_rc_argument(ps_app_ctxt, argument, value);
943*495ae853SAndroid Build Coastguard Worker }
944*495ae853SAndroid Build Coastguard Worker }
945*495ae853SAndroid Build Coastguard Worker
invalid_argument_exit(CHAR * pc_err_message)946*495ae853SAndroid Build Coastguard Worker void invalid_argument_exit(CHAR *pc_err_message)
947*495ae853SAndroid Build Coastguard Worker {
948*495ae853SAndroid Build Coastguard Worker print_usage();
949*495ae853SAndroid Build Coastguard Worker codec_exit(pc_err_message);
950*495ae853SAndroid Build Coastguard Worker }
951*495ae853SAndroid Build Coastguard Worker
validate_params(app_ctxt_t * ps_app_ctxt)952*495ae853SAndroid Build Coastguard Worker void validate_params(app_ctxt_t *ps_app_ctxt)
953*495ae853SAndroid Build Coastguard Worker {
954*495ae853SAndroid Build Coastguard Worker CHAR ac_error[STRLENGTH];
955*495ae853SAndroid Build Coastguard Worker
956*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->ac_ip_fname[0] == '\0')
957*495ae853SAndroid Build Coastguard Worker {
958*495ae853SAndroid Build Coastguard Worker invalid_argument_exit("Specify input file");
959*495ae853SAndroid Build Coastguard Worker }
960*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->ac_op_fname[0] == '\0')
961*495ae853SAndroid Build Coastguard Worker {
962*495ae853SAndroid Build Coastguard Worker invalid_argument_exit("Specify output file");
963*495ae853SAndroid Build Coastguard Worker }
964*495ae853SAndroid Build Coastguard Worker if((1 == ps_app_ctxt->u4_recon_enable) && (ps_app_ctxt->ac_recon_fname[0] == '\0'))
965*495ae853SAndroid Build Coastguard Worker {
966*495ae853SAndroid Build Coastguard Worker invalid_argument_exit("Specify recon file");
967*495ae853SAndroid Build Coastguard Worker }
968*495ae853SAndroid Build Coastguard Worker if((1 == ps_app_ctxt->u4_nalu_info_export_enable) &&
969*495ae853SAndroid Build Coastguard Worker (ps_app_ctxt->ac_nalu_info_csv_fname[0] == '\0'))
970*495ae853SAndroid Build Coastguard Worker {
971*495ae853SAndroid Build Coastguard Worker invalid_argument_exit("Specify NALU Info CSV File");
972*495ae853SAndroid Build Coastguard Worker }
973*495ae853SAndroid Build Coastguard Worker if((1 == ps_app_ctxt->u4_chksum_enable) && (ps_app_ctxt->ac_chksum_fname[0] == '\0'))
974*495ae853SAndroid Build Coastguard Worker {
975*495ae853SAndroid Build Coastguard Worker invalid_argument_exit("Specify checksum file");
976*495ae853SAndroid Build Coastguard Worker }
977*495ae853SAndroid Build Coastguard Worker if(0 >= (WORD32) ps_app_ctxt->u4_wd)
978*495ae853SAndroid Build Coastguard Worker {
979*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Invalid width: %d", ps_app_ctxt->u4_wd);
980*495ae853SAndroid Build Coastguard Worker invalid_argument_exit(ac_error);
981*495ae853SAndroid Build Coastguard Worker }
982*495ae853SAndroid Build Coastguard Worker if(0 >= (WORD32) ps_app_ctxt->u4_ht)
983*495ae853SAndroid Build Coastguard Worker {
984*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Invalid height: %d", ps_app_ctxt->u4_ht);
985*495ae853SAndroid Build Coastguard Worker invalid_argument_exit(ac_error);
986*495ae853SAndroid Build Coastguard Worker }
987*495ae853SAndroid Build Coastguard Worker
988*495ae853SAndroid Build Coastguard Worker if(0 == (WORD32) ps_app_ctxt->u4_max_num_frms)
989*495ae853SAndroid Build Coastguard Worker {
990*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Invalid number of frames to be encoded: %d",
991*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_max_num_frms);
992*495ae853SAndroid Build Coastguard Worker invalid_argument_exit(ac_error);
993*495ae853SAndroid Build Coastguard Worker }
994*495ae853SAndroid Build Coastguard Worker if((0 != (WORD32) ps_app_ctxt->u4_entropy_coding_mode) &&
995*495ae853SAndroid Build Coastguard Worker (1 != (WORD32) ps_app_ctxt->u4_entropy_coding_mode))
996*495ae853SAndroid Build Coastguard Worker {
997*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Invalid entropy codeing mode: %d",
998*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_entropy_coding_mode);
999*495ae853SAndroid Build Coastguard Worker invalid_argument_exit(ac_error);
1000*495ae853SAndroid Build Coastguard Worker }
1001*495ae853SAndroid Build Coastguard Worker }
1002*495ae853SAndroid Build Coastguard Worker
init_default_params(app_ctxt_t * ps_app_ctxt)1003*495ae853SAndroid Build Coastguard Worker void init_default_params(app_ctxt_t *ps_app_ctxt)
1004*495ae853SAndroid Build Coastguard Worker {
1005*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->ps_enc = NULL;
1006*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->ps_mem_rec = NULL;
1007*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_num_mem_rec = DEFAULT_MEM_REC_CNT;
1008*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_recon_enable = DEFAULT_RECON_ENABLE;
1009*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_nalu_info_export_enable = DEFAULT_NALU_INFO_EXPORT_ENABLE;
1010*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_chksum_enable = DEFAULT_CHKSUM_ENABLE;
1011*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_mb_info_type = 0;
1012*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_pic_info_type = 0;
1013*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_mb_info_size = 0;
1014*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_pic_info_size = 0;
1015*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_start_frm = DEFAULT_START_FRM;
1016*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_max_num_frms = DEFAULT_NUM_FRMS;
1017*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->avg_time = 0;
1018*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_pics_cnt = 0;
1019*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_inp_color_fmt = DEFAULT_INP_COLOR_FMT;
1020*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_recon_color_fmt = DEFAULT_RECON_COLOR_FMT;
1021*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_arch = ARCH_X86_SSE42;
1022*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_soc = SOC_GENERIC;
1023*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->header_generated = 0;
1024*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pv_codec_obj = NULL;
1025*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_num_cores = DEFAULT_NUM_CORES;
1026*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_pre_enc_me = 0;
1027*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_pre_enc_ipe = 0;
1028*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->ac_ip_fname[0] = '\0';
1029*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->ac_op_fname[0] = '\0';
1030*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->ac_recon_fname[0] = '\0';
1031*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->ac_nalu_info_csv_fname[0] = '\0';
1032*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->ac_chksum_fname[0] = '\0';
1033*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->ac_mb_info_fname[0] = '\0';
1034*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->fp_ip = NULL;
1035*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->fp_op = NULL;
1036*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->fp_recon = NULL;
1037*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->fp_nalu_info = NULL;
1038*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->fp_chksum = NULL;
1039*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->fp_psnr_ip = NULL;
1040*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->fp_mb_info = NULL;
1041*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->fp_pic_info = NULL;
1042*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_loopback = DEFAULT_LOOPBACK;
1043*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_max_frame_rate = DEFAULT_MAX_FRAMERATE;
1044*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_src_frame_rate = DEFAULT_SRC_FRAME_RATE;
1045*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_tgt_frame_rate = DEFAULT_TGT_FRAME_RATE;
1046*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_max_wd = DEFAULT_MAX_WD;
1047*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_max_ht = DEFAULT_MAX_HT;
1048*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_max_level = DEFAULT_MAX_LEVEL;
1049*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_strd = DEFAULT_STRIDE;
1050*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_wd = DEFAULT_WD;
1051*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_ht = DEFAULT_HT;
1052*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_psnr_enable = DEFAULT_PSNR_ENABLE;
1053*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_enc_speed = IVE_SLOWEST;
1054*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_me_speed = DEFAULT_ME_SPEED;
1055*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_enable_fast_sad = DEFAULT_ENABLE_FAST_SAD;
1056*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_enable_alt_ref = DEFAULT_ENABLE_ALT_REF;
1057*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_rc = DEFAULT_RC;
1058*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_num_bframes = DEFAULT_NUM_BFRAMES;
1059*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_air = DEFAULT_AIR;
1060*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_air_refresh_period = DEFAULT_AIR_REFRESH_PERIOD;
1061*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_srch_rng_x = DEFAULT_SRCH_RNG_X;
1062*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_srch_rng_y = DEFAULT_SRCH_RNG_Y;
1063*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_i_interval = DEFAULT_I_INTERVAL;
1064*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_idr_interval = DEFAULT_IDR_INTERVAL;
1065*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_disable_deblock_level = DEFAULT_DISABLE_DEBLK_LEVEL;
1066*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_hpel = DEFAULT_HPEL;
1067*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_qpel = DEFAULT_QPEL;
1068*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_enable_intra_4x4 = DEFAULT_I4;
1069*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_profile = DEFAULT_EPROFILE;
1070*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_slice_mode = DEFAULT_SLICE_MODE;
1071*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_slice_param = DEFAULT_SLICE_PARAM;
1072*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pv_input_thread_handle = NULL;
1073*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pv_output_thread_handle = NULL;
1074*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pv_recon_thread_handle = NULL;
1075*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->adbl_psnr[0] = 0.0;
1076*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->adbl_psnr[1] = 0.0;
1077*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->adbl_psnr[2] = 0.0;
1078*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_psnr_cnt = 0;
1079*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu1_psnr_buf = NULL;
1080*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_psnr_buf_size = 0;
1081*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_entropy_coding_mode = DEFAULT_ENTROPY_CODING_MODE;
1082*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u1_num_temporal_layers = DEFAULT_NUM_TEMPORAL_LAYERS;
1083*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u1_num_spatial_layers = DEFAULT_NUM_SPATIAL_LAYERS;
1084*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->d_spatial_res_ratio = DEFAULT_SPATIAL_RES_RATIO;
1085*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_use_default_vui = 1;
1086*495ae853SAndroid Build Coastguard Worker }
1087*495ae853SAndroid Build Coastguard Worker
set_dimensions(app_ctxt_t * ps_app_ctxt,UWORD32 u4_timestamp_low,UWORD32 u4_timestamp_high)1088*495ae853SAndroid Build Coastguard Worker static void set_dimensions(app_ctxt_t *ps_app_ctxt, UWORD32 u4_timestamp_low,
1089*495ae853SAndroid Build Coastguard Worker UWORD32 u4_timestamp_high)
1090*495ae853SAndroid Build Coastguard Worker {
1091*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_dimensions_ip_t s_frame_dimensions_ip;
1092*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_dimensions_op_t s_frame_dimensions_op;
1093*495ae853SAndroid Build Coastguard Worker
1094*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status;
1095*495ae853SAndroid Build Coastguard Worker
1096*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_SET_DIMENSIONS};
1097*495ae853SAndroid Build Coastguard Worker
1098*495ae853SAndroid Build Coastguard Worker s_frame_dimensions_ip.s_ive_ip.u4_ht = ps_app_ctxt->u4_ht;
1099*495ae853SAndroid Build Coastguard Worker s_frame_dimensions_ip.s_ive_ip.u4_wd = ps_app_ctxt->u4_wd;
1100*495ae853SAndroid Build Coastguard Worker
1101*495ae853SAndroid Build Coastguard Worker s_frame_dimensions_ip.s_ive_ip.u4_timestamp_high = u4_timestamp_high;
1102*495ae853SAndroid Build Coastguard Worker s_frame_dimensions_ip.s_ive_ip.u4_timestamp_low = u4_timestamp_low;
1103*495ae853SAndroid Build Coastguard Worker
1104*495ae853SAndroid Build Coastguard Worker s_frame_dimensions_ip.s_ive_ip.u4_size = sizeof(isvce_ctl_set_dimensions_ip_t);
1105*495ae853SAndroid Build Coastguard Worker s_frame_dimensions_op.s_ive_op.u4_size = sizeof(isvce_ctl_set_dimensions_op_t);
1106*495ae853SAndroid Build Coastguard Worker
1107*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(ps_app_ctxt->ps_enc, &s_frame_dimensions_ip, &s_frame_dimensions_op,
1108*495ae853SAndroid Build Coastguard Worker &s_api_cmds);
1109*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
1110*495ae853SAndroid Build Coastguard Worker {
1111*495ae853SAndroid Build Coastguard Worker CHAR ac_error[STRLENGTH];
1112*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to set frame dimensions = 0x%x\n",
1113*495ae853SAndroid Build Coastguard Worker s_frame_dimensions_op.s_ive_op.u4_error_code);
1114*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
1115*495ae853SAndroid Build Coastguard Worker }
1116*495ae853SAndroid Build Coastguard Worker }
1117*495ae853SAndroid Build Coastguard Worker
get_enc_dimensions(app_ctxt_t * ps_app_ctxt)1118*495ae853SAndroid Build Coastguard Worker static void get_enc_dimensions(app_ctxt_t *ps_app_ctxt)
1119*495ae853SAndroid Build Coastguard Worker {
1120*495ae853SAndroid Build Coastguard Worker isvce_ctl_get_enc_dimensions_ip_t s_ip;
1121*495ae853SAndroid Build Coastguard Worker isvce_ctl_get_enc_dimensions_op_t s_op;
1122*495ae853SAndroid Build Coastguard Worker
1123*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status;
1124*495ae853SAndroid Build Coastguard Worker
1125*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_GET_ENC_FRAME_DIMENSIONS};
1126*495ae853SAndroid Build Coastguard Worker
1127*495ae853SAndroid Build Coastguard Worker s_ip.u4_inp_frame_wd = ps_app_ctxt->u4_wd;
1128*495ae853SAndroid Build Coastguard Worker s_ip.u4_inp_frame_ht = ps_app_ctxt->u4_ht;
1129*495ae853SAndroid Build Coastguard Worker
1130*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(ps_app_ctxt->ps_enc, &s_ip, &s_op, &s_api_cmds);
1131*495ae853SAndroid Build Coastguard Worker
1132*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
1133*495ae853SAndroid Build Coastguard Worker {
1134*495ae853SAndroid Build Coastguard Worker CHAR ac_error[STRLENGTH];
1135*495ae853SAndroid Build Coastguard Worker
1136*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to get enc frame dimensions = 0x%x\n",
1137*495ae853SAndroid Build Coastguard Worker s_op.u4_error_code);
1138*495ae853SAndroid Build Coastguard Worker
1139*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
1140*495ae853SAndroid Build Coastguard Worker }
1141*495ae853SAndroid Build Coastguard Worker
1142*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_enc_wd = s_op.u4_enc_frame_wd;
1143*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_enc_ht = s_op.u4_enc_frame_ht;
1144*495ae853SAndroid Build Coastguard Worker }
1145*495ae853SAndroid Build Coastguard Worker
set_frame_rate(app_ctxt_t * ps_app_ctxt,UWORD32 u4_timestamp_low,UWORD32 u4_timestamp_high)1146*495ae853SAndroid Build Coastguard Worker void set_frame_rate(app_ctxt_t *ps_app_ctxt, UWORD32 u4_timestamp_low, UWORD32 u4_timestamp_high)
1147*495ae853SAndroid Build Coastguard Worker {
1148*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_frame_rate_ip_t s_frame_rate_ip;
1149*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_frame_rate_op_t s_frame_rate_op;
1150*495ae853SAndroid Build Coastguard Worker
1151*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status;
1152*495ae853SAndroid Build Coastguard Worker
1153*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_SET_FRAMERATE};
1154*495ae853SAndroid Build Coastguard Worker
1155*495ae853SAndroid Build Coastguard Worker s_frame_rate_ip.s_ive_ip.u4_src_frame_rate = ps_app_ctxt->u4_src_frame_rate;
1156*495ae853SAndroid Build Coastguard Worker s_frame_rate_ip.s_ive_ip.u4_tgt_frame_rate = ps_app_ctxt->u4_tgt_frame_rate;
1157*495ae853SAndroid Build Coastguard Worker
1158*495ae853SAndroid Build Coastguard Worker s_frame_rate_ip.s_ive_ip.u4_timestamp_high = u4_timestamp_high;
1159*495ae853SAndroid Build Coastguard Worker s_frame_rate_ip.s_ive_ip.u4_timestamp_low = u4_timestamp_low;
1160*495ae853SAndroid Build Coastguard Worker
1161*495ae853SAndroid Build Coastguard Worker s_frame_rate_ip.s_ive_ip.u4_size = sizeof(isvce_ctl_set_frame_rate_ip_t);
1162*495ae853SAndroid Build Coastguard Worker s_frame_rate_op.s_ive_op.u4_size = sizeof(isvce_ctl_set_frame_rate_op_t);
1163*495ae853SAndroid Build Coastguard Worker
1164*495ae853SAndroid Build Coastguard Worker status =
1165*495ae853SAndroid Build Coastguard Worker isvce_api_function(ps_app_ctxt->ps_enc, &s_frame_rate_ip, &s_frame_rate_op, &s_api_cmds);
1166*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
1167*495ae853SAndroid Build Coastguard Worker {
1168*495ae853SAndroid Build Coastguard Worker CHAR ac_error[STRLENGTH];
1169*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to set frame rate = 0x%x\n",
1170*495ae853SAndroid Build Coastguard Worker s_frame_rate_op.s_ive_op.u4_error_code);
1171*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
1172*495ae853SAndroid Build Coastguard Worker }
1173*495ae853SAndroid Build Coastguard Worker }
1174*495ae853SAndroid Build Coastguard Worker
set_ipe_params(app_ctxt_t * ps_app_ctxt,UWORD32 u4_timestamp_low,UWORD32 u4_timestamp_high)1175*495ae853SAndroid Build Coastguard Worker void set_ipe_params(app_ctxt_t *ps_app_ctxt, UWORD32 u4_timestamp_low, UWORD32 u4_timestamp_high)
1176*495ae853SAndroid Build Coastguard Worker {
1177*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_ipe_params_ip_t s_ipe_params_ip;
1178*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_ipe_params_op_t s_ipe_params_op;
1179*495ae853SAndroid Build Coastguard Worker
1180*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status;
1181*495ae853SAndroid Build Coastguard Worker
1182*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_SET_IPE_PARAMS};
1183*495ae853SAndroid Build Coastguard Worker
1184*495ae853SAndroid Build Coastguard Worker s_ipe_params_ip.s_ive_ip.u4_enable_intra_4x4 = ps_app_ctxt->u4_enable_intra_4x4;
1185*495ae853SAndroid Build Coastguard Worker s_ipe_params_ip.s_ive_ip.u4_enc_speed_preset = ps_app_ctxt->u4_enc_speed;
1186*495ae853SAndroid Build Coastguard Worker
1187*495ae853SAndroid Build Coastguard Worker s_ipe_params_ip.s_ive_ip.u4_timestamp_high = u4_timestamp_high;
1188*495ae853SAndroid Build Coastguard Worker s_ipe_params_ip.s_ive_ip.u4_timestamp_low = u4_timestamp_low;
1189*495ae853SAndroid Build Coastguard Worker
1190*495ae853SAndroid Build Coastguard Worker s_ipe_params_ip.s_ive_ip.u4_size = sizeof(isvce_ctl_set_ipe_params_ip_t);
1191*495ae853SAndroid Build Coastguard Worker s_ipe_params_op.s_ive_op.u4_size = sizeof(isvce_ctl_set_ipe_params_op_t);
1192*495ae853SAndroid Build Coastguard Worker
1193*495ae853SAndroid Build Coastguard Worker status =
1194*495ae853SAndroid Build Coastguard Worker isvce_api_function(ps_app_ctxt->ps_enc, &s_ipe_params_ip, &s_ipe_params_op, &s_api_cmds);
1195*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
1196*495ae853SAndroid Build Coastguard Worker {
1197*495ae853SAndroid Build Coastguard Worker CHAR ac_error[STRLENGTH];
1198*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to set ipe params = 0x%x\n",
1199*495ae853SAndroid Build Coastguard Worker s_ipe_params_op.s_ive_op.u4_error_code);
1200*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
1201*495ae853SAndroid Build Coastguard Worker }
1202*495ae853SAndroid Build Coastguard Worker }
1203*495ae853SAndroid Build Coastguard Worker
set_bit_rate(app_ctxt_t * ps_app_ctxt,UWORD32 u4_timestamp_low,UWORD32 u4_timestamp_high)1204*495ae853SAndroid Build Coastguard Worker void set_bit_rate(app_ctxt_t *ps_app_ctxt, UWORD32 u4_timestamp_low, UWORD32 u4_timestamp_high)
1205*495ae853SAndroid Build Coastguard Worker {
1206*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_bitrate_ip_t s_bitrate_ip;
1207*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_bitrate_op_t s_bitrate_op;
1208*495ae853SAndroid Build Coastguard Worker
1209*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status;
1210*495ae853SAndroid Build Coastguard Worker WORD8 i;
1211*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_SET_BITRATE};
1212*495ae853SAndroid Build Coastguard Worker
1213*495ae853SAndroid Build Coastguard Worker s_bitrate_ip.pu4_target_bitrate =
1214*495ae853SAndroid Build Coastguard Worker isvca_aligned_malloc(16, sizeof(UWORD32) * ps_app_ctxt->u1_num_spatial_layers);
1215*495ae853SAndroid Build Coastguard Worker
1216*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_app_ctxt->u1_num_spatial_layers; i++)
1217*495ae853SAndroid Build Coastguard Worker {
1218*495ae853SAndroid Build Coastguard Worker s_bitrate_ip.pu4_target_bitrate[i] = ps_app_ctxt->pu4_bitrate[i];
1219*495ae853SAndroid Build Coastguard Worker }
1220*495ae853SAndroid Build Coastguard Worker
1221*495ae853SAndroid Build Coastguard Worker s_bitrate_ip.s_ive_ip.u4_timestamp_high = u4_timestamp_high;
1222*495ae853SAndroid Build Coastguard Worker s_bitrate_ip.s_ive_ip.u4_timestamp_low = u4_timestamp_low;
1223*495ae853SAndroid Build Coastguard Worker
1224*495ae853SAndroid Build Coastguard Worker s_bitrate_ip.s_ive_ip.u4_size = sizeof(isvce_ctl_set_bitrate_ip_t);
1225*495ae853SAndroid Build Coastguard Worker s_bitrate_op.s_ive_op.u4_size = sizeof(isvce_ctl_set_bitrate_op_t);
1226*495ae853SAndroid Build Coastguard Worker
1227*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(ps_app_ctxt->ps_enc, &s_bitrate_ip, &s_bitrate_op, &s_api_cmds);
1228*495ae853SAndroid Build Coastguard Worker
1229*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(s_bitrate_ip.pu4_target_bitrate);
1230*495ae853SAndroid Build Coastguard Worker
1231*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
1232*495ae853SAndroid Build Coastguard Worker {
1233*495ae853SAndroid Build Coastguard Worker CHAR ac_error[STRLENGTH];
1234*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to set bit rate = 0x%x\n",
1235*495ae853SAndroid Build Coastguard Worker s_bitrate_op.s_ive_op.u4_error_code);
1236*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
1237*495ae853SAndroid Build Coastguard Worker }
1238*495ae853SAndroid Build Coastguard Worker }
1239*495ae853SAndroid Build Coastguard Worker
set_frame_type(app_ctxt_t * ps_app_ctxt,UWORD32 u4_timestamp_low,UWORD32 u4_timestamp_high,IV_PICTURE_CODING_TYPE_T e_frame_type)1240*495ae853SAndroid Build Coastguard Worker void set_frame_type(app_ctxt_t *ps_app_ctxt, UWORD32 u4_timestamp_low, UWORD32 u4_timestamp_high,
1241*495ae853SAndroid Build Coastguard Worker IV_PICTURE_CODING_TYPE_T e_frame_type)
1242*495ae853SAndroid Build Coastguard Worker {
1243*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_frame_type_ip_t s_frame_type_ip;
1244*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_frame_type_op_t s_frame_type_op;
1245*495ae853SAndroid Build Coastguard Worker
1246*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status;
1247*495ae853SAndroid Build Coastguard Worker
1248*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_SET_FRAMETYPE};
1249*495ae853SAndroid Build Coastguard Worker
1250*495ae853SAndroid Build Coastguard Worker s_frame_type_ip.s_ive_ip.e_frame_type = e_frame_type;
1251*495ae853SAndroid Build Coastguard Worker
1252*495ae853SAndroid Build Coastguard Worker s_frame_type_ip.s_ive_ip.u4_timestamp_high = u4_timestamp_high;
1253*495ae853SAndroid Build Coastguard Worker s_frame_type_ip.s_ive_ip.u4_timestamp_low = u4_timestamp_low;
1254*495ae853SAndroid Build Coastguard Worker
1255*495ae853SAndroid Build Coastguard Worker s_frame_type_ip.s_ive_ip.u4_size = sizeof(isvce_ctl_set_frame_type_ip_t);
1256*495ae853SAndroid Build Coastguard Worker s_frame_type_op.s_ive_op.u4_size = sizeof(isvce_ctl_set_frame_type_op_t);
1257*495ae853SAndroid Build Coastguard Worker
1258*495ae853SAndroid Build Coastguard Worker status =
1259*495ae853SAndroid Build Coastguard Worker isvce_api_function(ps_app_ctxt->ps_enc, &s_frame_type_ip, &s_frame_type_op, &s_api_cmds);
1260*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
1261*495ae853SAndroid Build Coastguard Worker {
1262*495ae853SAndroid Build Coastguard Worker CHAR ac_error[STRLENGTH];
1263*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to set frame type = 0x%x\n",
1264*495ae853SAndroid Build Coastguard Worker s_frame_type_op.s_ive_op.u4_error_code);
1265*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
1266*495ae853SAndroid Build Coastguard Worker }
1267*495ae853SAndroid Build Coastguard Worker }
1268*495ae853SAndroid Build Coastguard Worker
set_qp(app_ctxt_t * ps_app_ctxt,UWORD32 u4_timestamp_low,UWORD32 u4_timestamp_high)1269*495ae853SAndroid Build Coastguard Worker void set_qp(app_ctxt_t *ps_app_ctxt, UWORD32 u4_timestamp_low, UWORD32 u4_timestamp_high)
1270*495ae853SAndroid Build Coastguard Worker {
1271*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_qp_ip_t s_qp_ip;
1272*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_qp_op_t s_qp_op;
1273*495ae853SAndroid Build Coastguard Worker
1274*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status;
1275*495ae853SAndroid Build Coastguard Worker WORD8 i;
1276*495ae853SAndroid Build Coastguard Worker
1277*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_SET_QP};
1278*495ae853SAndroid Build Coastguard Worker
1279*495ae853SAndroid Build Coastguard Worker s_qp_ip.pu4_i_qp =
1280*495ae853SAndroid Build Coastguard Worker isvca_aligned_malloc(16, sizeof(UWORD32) * ps_app_ctxt->u1_num_spatial_layers);
1281*495ae853SAndroid Build Coastguard Worker s_qp_ip.pu4_i_qp_max =
1282*495ae853SAndroid Build Coastguard Worker isvca_aligned_malloc(16, sizeof(UWORD32) * ps_app_ctxt->u1_num_spatial_layers);
1283*495ae853SAndroid Build Coastguard Worker s_qp_ip.pu4_i_qp_min =
1284*495ae853SAndroid Build Coastguard Worker isvca_aligned_malloc(16, sizeof(UWORD32) * ps_app_ctxt->u1_num_spatial_layers);
1285*495ae853SAndroid Build Coastguard Worker
1286*495ae853SAndroid Build Coastguard Worker s_qp_ip.pu4_p_qp =
1287*495ae853SAndroid Build Coastguard Worker isvca_aligned_malloc(16, sizeof(UWORD32) * ps_app_ctxt->u1_num_spatial_layers);
1288*495ae853SAndroid Build Coastguard Worker s_qp_ip.pu4_p_qp_max =
1289*495ae853SAndroid Build Coastguard Worker isvca_aligned_malloc(16, sizeof(UWORD32) * ps_app_ctxt->u1_num_spatial_layers);
1290*495ae853SAndroid Build Coastguard Worker s_qp_ip.pu4_p_qp_min =
1291*495ae853SAndroid Build Coastguard Worker isvca_aligned_malloc(16, sizeof(UWORD32) * ps_app_ctxt->u1_num_spatial_layers);
1292*495ae853SAndroid Build Coastguard Worker
1293*495ae853SAndroid Build Coastguard Worker s_qp_ip.pu4_b_qp =
1294*495ae853SAndroid Build Coastguard Worker isvca_aligned_malloc(16, sizeof(UWORD32) * ps_app_ctxt->u1_num_spatial_layers);
1295*495ae853SAndroid Build Coastguard Worker s_qp_ip.pu4_b_qp_max =
1296*495ae853SAndroid Build Coastguard Worker isvca_aligned_malloc(16, sizeof(UWORD32) * ps_app_ctxt->u1_num_spatial_layers);
1297*495ae853SAndroid Build Coastguard Worker s_qp_ip.pu4_b_qp_min =
1298*495ae853SAndroid Build Coastguard Worker isvca_aligned_malloc(16, sizeof(UWORD32) * ps_app_ctxt->u1_num_spatial_layers);
1299*495ae853SAndroid Build Coastguard Worker
1300*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_app_ctxt->u1_num_spatial_layers; i++)
1301*495ae853SAndroid Build Coastguard Worker {
1302*495ae853SAndroid Build Coastguard Worker s_qp_ip.pu4_i_qp[i] = ps_app_ctxt->pu4_i_qp[i];
1303*495ae853SAndroid Build Coastguard Worker s_qp_ip.pu4_i_qp_max[i] = ps_app_ctxt->pu4_i_qp_max[i];
1304*495ae853SAndroid Build Coastguard Worker s_qp_ip.pu4_i_qp_min[i] = ps_app_ctxt->pu4_i_qp_min[i];
1305*495ae853SAndroid Build Coastguard Worker
1306*495ae853SAndroid Build Coastguard Worker s_qp_ip.pu4_p_qp[i] = ps_app_ctxt->pu4_p_qp[i];
1307*495ae853SAndroid Build Coastguard Worker s_qp_ip.pu4_p_qp_max[i] = ps_app_ctxt->pu4_p_qp_max[i];
1308*495ae853SAndroid Build Coastguard Worker s_qp_ip.pu4_p_qp_min[i] = ps_app_ctxt->pu4_p_qp_min[i];
1309*495ae853SAndroid Build Coastguard Worker
1310*495ae853SAndroid Build Coastguard Worker s_qp_ip.pu4_b_qp[i] = ps_app_ctxt->pu4_b_qp[i];
1311*495ae853SAndroid Build Coastguard Worker s_qp_ip.pu4_b_qp_max[i] = ps_app_ctxt->pu4_b_qp_max[i];
1312*495ae853SAndroid Build Coastguard Worker s_qp_ip.pu4_b_qp_min[i] = ps_app_ctxt->pu4_b_qp_min[i];
1313*495ae853SAndroid Build Coastguard Worker }
1314*495ae853SAndroid Build Coastguard Worker
1315*495ae853SAndroid Build Coastguard Worker s_qp_ip.s_ive_ip.u4_timestamp_high = u4_timestamp_high;
1316*495ae853SAndroid Build Coastguard Worker s_qp_ip.s_ive_ip.u4_timestamp_low = u4_timestamp_low;
1317*495ae853SAndroid Build Coastguard Worker
1318*495ae853SAndroid Build Coastguard Worker s_qp_ip.s_ive_ip.u4_size = sizeof(isvce_ctl_set_qp_ip_t);
1319*495ae853SAndroid Build Coastguard Worker s_qp_op.s_ive_op.u4_size = sizeof(isvce_ctl_set_qp_op_t);
1320*495ae853SAndroid Build Coastguard Worker
1321*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(ps_app_ctxt->ps_enc, &s_qp_ip, &s_qp_op, &s_api_cmds);
1322*495ae853SAndroid Build Coastguard Worker
1323*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(s_qp_ip.pu4_i_qp);
1324*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(s_qp_ip.pu4_i_qp_min);
1325*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(s_qp_ip.pu4_i_qp_max);
1326*495ae853SAndroid Build Coastguard Worker
1327*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(s_qp_ip.pu4_p_qp);
1328*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(s_qp_ip.pu4_p_qp_min);
1329*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(s_qp_ip.pu4_p_qp_max);
1330*495ae853SAndroid Build Coastguard Worker
1331*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(s_qp_ip.pu4_b_qp);
1332*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(s_qp_ip.pu4_b_qp_min);
1333*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(s_qp_ip.pu4_b_qp_max);
1334*495ae853SAndroid Build Coastguard Worker
1335*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
1336*495ae853SAndroid Build Coastguard Worker {
1337*495ae853SAndroid Build Coastguard Worker CHAR ac_error[STRLENGTH];
1338*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to set qp 0x%x\n",
1339*495ae853SAndroid Build Coastguard Worker s_qp_op.s_ive_op.u4_error_code);
1340*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
1341*495ae853SAndroid Build Coastguard Worker }
1342*495ae853SAndroid Build Coastguard Worker }
1343*495ae853SAndroid Build Coastguard Worker
set_enc_mode(app_ctxt_t * ps_app_ctxt,UWORD32 u4_timestamp_low,UWORD32 u4_timestamp_high,IVE_ENC_MODE_T e_enc_mode)1344*495ae853SAndroid Build Coastguard Worker void set_enc_mode(app_ctxt_t *ps_app_ctxt, UWORD32 u4_timestamp_low, UWORD32 u4_timestamp_high,
1345*495ae853SAndroid Build Coastguard Worker IVE_ENC_MODE_T e_enc_mode)
1346*495ae853SAndroid Build Coastguard Worker {
1347*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status;
1348*495ae853SAndroid Build Coastguard Worker
1349*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_enc_mode_ip_t s_enc_mode_ip;
1350*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_enc_mode_op_t s_enc_mode_op;
1351*495ae853SAndroid Build Coastguard Worker
1352*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_SET_ENC_MODE};
1353*495ae853SAndroid Build Coastguard Worker
1354*495ae853SAndroid Build Coastguard Worker s_enc_mode_ip.s_ive_ip.e_enc_mode = e_enc_mode;
1355*495ae853SAndroid Build Coastguard Worker
1356*495ae853SAndroid Build Coastguard Worker s_enc_mode_ip.s_ive_ip.u4_timestamp_high = u4_timestamp_high;
1357*495ae853SAndroid Build Coastguard Worker s_enc_mode_ip.s_ive_ip.u4_timestamp_low = u4_timestamp_low;
1358*495ae853SAndroid Build Coastguard Worker
1359*495ae853SAndroid Build Coastguard Worker s_enc_mode_ip.s_ive_ip.u4_size = sizeof(isvce_ctl_set_enc_mode_ip_t);
1360*495ae853SAndroid Build Coastguard Worker s_enc_mode_op.s_ive_op.u4_size = sizeof(isvce_ctl_set_enc_mode_op_t);
1361*495ae853SAndroid Build Coastguard Worker
1362*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(ps_app_ctxt->ps_enc, &s_enc_mode_ip, &s_enc_mode_op, &s_api_cmds);
1363*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
1364*495ae853SAndroid Build Coastguard Worker {
1365*495ae853SAndroid Build Coastguard Worker CHAR ac_error[STRLENGTH];
1366*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to set in header encode mode = 0x%x\n",
1367*495ae853SAndroid Build Coastguard Worker s_enc_mode_op.s_ive_op.u4_error_code);
1368*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
1369*495ae853SAndroid Build Coastguard Worker }
1370*495ae853SAndroid Build Coastguard Worker }
1371*495ae853SAndroid Build Coastguard Worker
set_vbv_params(app_ctxt_t * ps_app_ctxt,UWORD32 u4_timestamp_low,UWORD32 u4_timestamp_high)1372*495ae853SAndroid Build Coastguard Worker void set_vbv_params(app_ctxt_t *ps_app_ctxt, UWORD32 u4_timestamp_low, UWORD32 u4_timestamp_high)
1373*495ae853SAndroid Build Coastguard Worker {
1374*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_vbv_params_ip_t s_vbv_ip;
1375*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_vbv_params_op_t s_vbv_op;
1376*495ae853SAndroid Build Coastguard Worker
1377*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status;
1378*495ae853SAndroid Build Coastguard Worker int i;
1379*495ae853SAndroid Build Coastguard Worker
1380*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_SET_VBV_PARAMS};
1381*495ae853SAndroid Build Coastguard Worker
1382*495ae853SAndroid Build Coastguard Worker s_vbv_ip.pu4_vbv_buffer_delay =
1383*495ae853SAndroid Build Coastguard Worker isvca_aligned_malloc(16, sizeof(UWORD32) * ps_app_ctxt->u1_num_spatial_layers);
1384*495ae853SAndroid Build Coastguard Worker
1385*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_app_ctxt->u1_num_spatial_layers; i++)
1386*495ae853SAndroid Build Coastguard Worker {
1387*495ae853SAndroid Build Coastguard Worker s_vbv_ip.pu4_vbv_buffer_delay[i] = ps_app_ctxt->pu4_vbv_buffer_delay[i];
1388*495ae853SAndroid Build Coastguard Worker }
1389*495ae853SAndroid Build Coastguard Worker
1390*495ae853SAndroid Build Coastguard Worker s_vbv_ip.s_ive_ip.u4_timestamp_high = u4_timestamp_high;
1391*495ae853SAndroid Build Coastguard Worker s_vbv_ip.s_ive_ip.u4_timestamp_low = u4_timestamp_low;
1392*495ae853SAndroid Build Coastguard Worker
1393*495ae853SAndroid Build Coastguard Worker s_vbv_ip.s_ive_ip.u4_size = sizeof(isvce_ctl_set_vbv_params_ip_t);
1394*495ae853SAndroid Build Coastguard Worker s_vbv_op.s_ive_op.u4_size = sizeof(isvce_ctl_set_vbv_params_op_t);
1395*495ae853SAndroid Build Coastguard Worker
1396*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(ps_app_ctxt->ps_enc, &s_vbv_ip, &s_vbv_op, &s_api_cmds);
1397*495ae853SAndroid Build Coastguard Worker
1398*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(s_vbv_ip.pu4_vbv_buffer_delay);
1399*495ae853SAndroid Build Coastguard Worker
1400*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
1401*495ae853SAndroid Build Coastguard Worker {
1402*495ae853SAndroid Build Coastguard Worker CHAR ac_error[STRLENGTH];
1403*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to set VBC params = 0x%x\n",
1404*495ae853SAndroid Build Coastguard Worker s_vbv_op.s_ive_op.u4_error_code);
1405*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
1406*495ae853SAndroid Build Coastguard Worker }
1407*495ae853SAndroid Build Coastguard Worker }
1408*495ae853SAndroid Build Coastguard Worker
set_air_params(app_ctxt_t * ps_app_ctxt,UWORD32 u4_timestamp_low,UWORD32 u4_timestamp_high)1409*495ae853SAndroid Build Coastguard Worker void set_air_params(app_ctxt_t *ps_app_ctxt, UWORD32 u4_timestamp_low, UWORD32 u4_timestamp_high)
1410*495ae853SAndroid Build Coastguard Worker {
1411*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_air_params_ip_t s_air_ip;
1412*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_air_params_op_t s_air_op;
1413*495ae853SAndroid Build Coastguard Worker
1414*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status;
1415*495ae853SAndroid Build Coastguard Worker
1416*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_SET_AIR_PARAMS};
1417*495ae853SAndroid Build Coastguard Worker
1418*495ae853SAndroid Build Coastguard Worker s_air_ip.s_ive_ip.e_air_mode = ps_app_ctxt->u4_air;
1419*495ae853SAndroid Build Coastguard Worker s_air_ip.s_ive_ip.u4_air_refresh_period = ps_app_ctxt->u4_air_refresh_period;
1420*495ae853SAndroid Build Coastguard Worker
1421*495ae853SAndroid Build Coastguard Worker s_air_ip.s_ive_ip.u4_timestamp_high = u4_timestamp_high;
1422*495ae853SAndroid Build Coastguard Worker s_air_ip.s_ive_ip.u4_timestamp_low = u4_timestamp_low;
1423*495ae853SAndroid Build Coastguard Worker
1424*495ae853SAndroid Build Coastguard Worker s_air_ip.s_ive_ip.u4_size = sizeof(isvce_ctl_set_air_params_ip_t);
1425*495ae853SAndroid Build Coastguard Worker s_air_op.s_ive_op.u4_size = sizeof(isvce_ctl_set_air_params_op_t);
1426*495ae853SAndroid Build Coastguard Worker
1427*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(ps_app_ctxt->ps_enc, &s_air_ip, &s_air_op, &s_api_cmds);
1428*495ae853SAndroid Build Coastguard Worker
1429*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
1430*495ae853SAndroid Build Coastguard Worker {
1431*495ae853SAndroid Build Coastguard Worker CHAR ac_error[STRLENGTH];
1432*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to set air params = 0x%x\n",
1433*495ae853SAndroid Build Coastguard Worker s_air_op.s_ive_op.u4_error_code);
1434*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
1435*495ae853SAndroid Build Coastguard Worker }
1436*495ae853SAndroid Build Coastguard Worker }
1437*495ae853SAndroid Build Coastguard Worker
set_me_params(app_ctxt_t * ps_app_ctxt,UWORD32 u4_timestamp_low,UWORD32 u4_timestamp_high)1438*495ae853SAndroid Build Coastguard Worker void set_me_params(app_ctxt_t *ps_app_ctxt, UWORD32 u4_timestamp_low, UWORD32 u4_timestamp_high)
1439*495ae853SAndroid Build Coastguard Worker {
1440*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status;
1441*495ae853SAndroid Build Coastguard Worker
1442*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_me_params_ip_t s_me_params_ip;
1443*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_me_params_op_t s_me_params_op;
1444*495ae853SAndroid Build Coastguard Worker
1445*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_SET_ME_PARAMS};
1446*495ae853SAndroid Build Coastguard Worker
1447*495ae853SAndroid Build Coastguard Worker s_me_params_ip.s_ive_ip.u4_enable_fast_sad = ps_app_ctxt->u4_enable_fast_sad;
1448*495ae853SAndroid Build Coastguard Worker s_me_params_ip.s_ive_ip.u4_enable_alt_ref = ps_app_ctxt->u4_enable_alt_ref;
1449*495ae853SAndroid Build Coastguard Worker
1450*495ae853SAndroid Build Coastguard Worker s_me_params_ip.s_ive_ip.u4_enable_hpel = ps_app_ctxt->u4_hpel;
1451*495ae853SAndroid Build Coastguard Worker s_me_params_ip.s_ive_ip.u4_enable_qpel = ps_app_ctxt->u4_qpel;
1452*495ae853SAndroid Build Coastguard Worker s_me_params_ip.s_ive_ip.u4_me_speed_preset = ps_app_ctxt->u4_me_speed;
1453*495ae853SAndroid Build Coastguard Worker s_me_params_ip.s_ive_ip.u4_srch_rng_x = ps_app_ctxt->u4_srch_rng_x;
1454*495ae853SAndroid Build Coastguard Worker s_me_params_ip.s_ive_ip.u4_srch_rng_y = ps_app_ctxt->u4_srch_rng_y;
1455*495ae853SAndroid Build Coastguard Worker
1456*495ae853SAndroid Build Coastguard Worker s_me_params_ip.s_ive_ip.u4_timestamp_high = u4_timestamp_high;
1457*495ae853SAndroid Build Coastguard Worker s_me_params_ip.s_ive_ip.u4_timestamp_low = u4_timestamp_low;
1458*495ae853SAndroid Build Coastguard Worker
1459*495ae853SAndroid Build Coastguard Worker s_me_params_ip.s_ive_ip.u4_size = sizeof(isvce_ctl_set_me_params_ip_t);
1460*495ae853SAndroid Build Coastguard Worker s_me_params_op.s_ive_op.u4_size = sizeof(isvce_ctl_set_me_params_op_t);
1461*495ae853SAndroid Build Coastguard Worker
1462*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(ps_app_ctxt->ps_enc, &s_me_params_ip, &s_me_params_op, &s_api_cmds);
1463*495ae853SAndroid Build Coastguard Worker
1464*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
1465*495ae853SAndroid Build Coastguard Worker {
1466*495ae853SAndroid Build Coastguard Worker CHAR ac_error[STRLENGTH];
1467*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to set me params = 0x%x\n",
1468*495ae853SAndroid Build Coastguard Worker s_me_params_op.s_ive_op.u4_error_code);
1469*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
1470*495ae853SAndroid Build Coastguard Worker }
1471*495ae853SAndroid Build Coastguard Worker }
1472*495ae853SAndroid Build Coastguard Worker
set_gop_params(app_ctxt_t * ps_app_ctxt,UWORD32 u4_timestamp_low,UWORD32 u4_timestamp_high)1473*495ae853SAndroid Build Coastguard Worker void set_gop_params(app_ctxt_t *ps_app_ctxt, UWORD32 u4_timestamp_low, UWORD32 u4_timestamp_high)
1474*495ae853SAndroid Build Coastguard Worker {
1475*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status;
1476*495ae853SAndroid Build Coastguard Worker
1477*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_gop_params_ip_t s_gop_params_ip;
1478*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_gop_params_op_t s_gop_params_op;
1479*495ae853SAndroid Build Coastguard Worker
1480*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_SET_GOP_PARAMS};
1481*495ae853SAndroid Build Coastguard Worker
1482*495ae853SAndroid Build Coastguard Worker s_gop_params_ip.s_ive_ip.u4_i_frm_interval = ps_app_ctxt->u4_i_interval;
1483*495ae853SAndroid Build Coastguard Worker s_gop_params_ip.s_ive_ip.u4_idr_frm_interval = ps_app_ctxt->u4_idr_interval;
1484*495ae853SAndroid Build Coastguard Worker
1485*495ae853SAndroid Build Coastguard Worker s_gop_params_ip.s_ive_ip.u4_timestamp_high = u4_timestamp_high;
1486*495ae853SAndroid Build Coastguard Worker s_gop_params_ip.s_ive_ip.u4_timestamp_low = u4_timestamp_low;
1487*495ae853SAndroid Build Coastguard Worker
1488*495ae853SAndroid Build Coastguard Worker s_gop_params_ip.s_ive_ip.u4_size = sizeof(isvce_ctl_set_gop_params_ip_t);
1489*495ae853SAndroid Build Coastguard Worker s_gop_params_op.s_ive_op.u4_size = sizeof(isvce_ctl_set_gop_params_op_t);
1490*495ae853SAndroid Build Coastguard Worker
1491*495ae853SAndroid Build Coastguard Worker status =
1492*495ae853SAndroid Build Coastguard Worker isvce_api_function(ps_app_ctxt->ps_enc, &s_gop_params_ip, &s_gop_params_op, &s_api_cmds);
1493*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
1494*495ae853SAndroid Build Coastguard Worker {
1495*495ae853SAndroid Build Coastguard Worker CHAR ac_error[STRLENGTH];
1496*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to set ME params = 0x%x\n",
1497*495ae853SAndroid Build Coastguard Worker s_gop_params_op.s_ive_op.u4_error_code);
1498*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
1499*495ae853SAndroid Build Coastguard Worker }
1500*495ae853SAndroid Build Coastguard Worker }
1501*495ae853SAndroid Build Coastguard Worker
set_profile_params(app_ctxt_t * ps_app_ctxt,UWORD32 u4_timestamp_low,UWORD32 u4_timestamp_high)1502*495ae853SAndroid Build Coastguard Worker void set_profile_params(app_ctxt_t *ps_app_ctxt, UWORD32 u4_timestamp_low,
1503*495ae853SAndroid Build Coastguard Worker UWORD32 u4_timestamp_high)
1504*495ae853SAndroid Build Coastguard Worker {
1505*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status;
1506*495ae853SAndroid Build Coastguard Worker
1507*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_profile_params_ip_t s_profile_params_ip;
1508*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_profile_params_op_t s_profile_params_op;
1509*495ae853SAndroid Build Coastguard Worker
1510*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_SET_PROFILE_PARAMS};
1511*495ae853SAndroid Build Coastguard Worker
1512*495ae853SAndroid Build Coastguard Worker s_profile_params_ip.s_ive_ip.e_profile = ps_app_ctxt->e_profile;
1513*495ae853SAndroid Build Coastguard Worker
1514*495ae853SAndroid Build Coastguard Worker s_profile_params_ip.s_ive_ip.u4_entropy_coding_mode = ps_app_ctxt->u4_entropy_coding_mode;
1515*495ae853SAndroid Build Coastguard Worker
1516*495ae853SAndroid Build Coastguard Worker s_profile_params_ip.s_ive_ip.u4_timestamp_high = u4_timestamp_high;
1517*495ae853SAndroid Build Coastguard Worker s_profile_params_ip.s_ive_ip.u4_timestamp_low = u4_timestamp_low;
1518*495ae853SAndroid Build Coastguard Worker
1519*495ae853SAndroid Build Coastguard Worker s_profile_params_ip.s_ive_ip.u4_size = sizeof(isvce_ctl_set_profile_params_ip_t);
1520*495ae853SAndroid Build Coastguard Worker s_profile_params_op.s_ive_op.u4_size = sizeof(isvce_ctl_set_profile_params_op_t);
1521*495ae853SAndroid Build Coastguard Worker
1522*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(ps_app_ctxt->ps_enc, &s_profile_params_ip, &s_profile_params_op,
1523*495ae853SAndroid Build Coastguard Worker &s_api_cmds);
1524*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
1525*495ae853SAndroid Build Coastguard Worker {
1526*495ae853SAndroid Build Coastguard Worker CHAR ac_error[STRLENGTH];
1527*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to set profile params = 0x%x\n",
1528*495ae853SAndroid Build Coastguard Worker s_profile_params_op.s_ive_op.u4_error_code);
1529*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
1530*495ae853SAndroid Build Coastguard Worker }
1531*495ae853SAndroid Build Coastguard Worker }
1532*495ae853SAndroid Build Coastguard Worker
set_deblock_params(app_ctxt_t * ps_app_ctxt,UWORD32 u4_timestamp_low,UWORD32 u4_timestamp_high)1533*495ae853SAndroid Build Coastguard Worker void set_deblock_params(app_ctxt_t *ps_app_ctxt, UWORD32 u4_timestamp_low,
1534*495ae853SAndroid Build Coastguard Worker UWORD32 u4_timestamp_high)
1535*495ae853SAndroid Build Coastguard Worker {
1536*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status;
1537*495ae853SAndroid Build Coastguard Worker
1538*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_deblock_params_ip_t s_deblock_params_ip;
1539*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_deblock_params_op_t s_deblock_params_op;
1540*495ae853SAndroid Build Coastguard Worker
1541*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_SET_DEBLOCK_PARAMS};
1542*495ae853SAndroid Build Coastguard Worker
1543*495ae853SAndroid Build Coastguard Worker s_deblock_params_ip.s_ive_ip.u4_disable_deblock_level = ps_app_ctxt->u4_disable_deblock_level;
1544*495ae853SAndroid Build Coastguard Worker
1545*495ae853SAndroid Build Coastguard Worker s_deblock_params_ip.s_ive_ip.u4_timestamp_high = u4_timestamp_high;
1546*495ae853SAndroid Build Coastguard Worker s_deblock_params_ip.s_ive_ip.u4_timestamp_low = u4_timestamp_low;
1547*495ae853SAndroid Build Coastguard Worker
1548*495ae853SAndroid Build Coastguard Worker s_deblock_params_ip.s_ive_ip.u4_size = sizeof(isvce_ctl_set_deblock_params_ip_t);
1549*495ae853SAndroid Build Coastguard Worker s_deblock_params_op.s_ive_op.u4_size = sizeof(isvce_ctl_set_deblock_params_op_t);
1550*495ae853SAndroid Build Coastguard Worker
1551*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(ps_app_ctxt->ps_enc, &s_deblock_params_ip, &s_deblock_params_op,
1552*495ae853SAndroid Build Coastguard Worker &s_api_cmds);
1553*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
1554*495ae853SAndroid Build Coastguard Worker {
1555*495ae853SAndroid Build Coastguard Worker CHAR ac_error[STRLENGTH];
1556*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to enable/disable deblock params = 0x%x\n",
1557*495ae853SAndroid Build Coastguard Worker s_deblock_params_op.s_ive_op.u4_error_code);
1558*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
1559*495ae853SAndroid Build Coastguard Worker }
1560*495ae853SAndroid Build Coastguard Worker }
1561*495ae853SAndroid Build Coastguard Worker
set_vui_params(app_ctxt_t * ps_app_ctxt)1562*495ae853SAndroid Build Coastguard Worker void set_vui_params(app_ctxt_t *ps_app_ctxt)
1563*495ae853SAndroid Build Coastguard Worker {
1564*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status;
1565*495ae853SAndroid Build Coastguard Worker
1566*495ae853SAndroid Build Coastguard Worker isvce_vui_ip_t s_vui_params_ip;
1567*495ae853SAndroid Build Coastguard Worker isvce_vui_op_t s_vui_params_op;
1568*495ae853SAndroid Build Coastguard Worker
1569*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_SET_VUI_PARAMS};
1570*495ae853SAndroid Build Coastguard Worker
1571*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_aspect_ratio_info_present_flag = 0;
1572*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_aspect_ratio_idc = 0;
1573*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u2_sar_width = 0;
1574*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u2_sar_height = 0;
1575*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_overscan_info_present_flag = 0;
1576*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_overscan_appropriate_flag = 0;
1577*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_video_signal_type_present_flag = 1;
1578*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_video_format = 0;
1579*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_video_full_range_flag = 0;
1580*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_colour_description_present_flag = 0;
1581*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_colour_primaries = 0;
1582*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_transfer_characteristics = 0;
1583*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_matrix_coefficients = 0;
1584*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_chroma_loc_info_present_flag = 0;
1585*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_chroma_sample_loc_type_top_field = 0;
1586*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_chroma_sample_loc_type_bottom_field = 0;
1587*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_vui_timing_info_present_flag = 0;
1588*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u4_vui_num_units_in_tick = 0;
1589*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u4_vui_time_scale = 0;
1590*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_fixed_frame_rate_flag = 0;
1591*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_nal_hrd_parameters_present_flag = 0;
1592*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_vcl_hrd_parameters_present_flag = 0;
1593*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_low_delay_hrd_flag = 0;
1594*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_pic_struct_present_flag = 0;
1595*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_bitstream_restriction_flag = 0;
1596*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_motion_vectors_over_pic_boundaries_flag = 0;
1597*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_max_bytes_per_pic_denom = 0;
1598*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_max_bits_per_mb_denom = 0;
1599*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_log2_max_mv_length_horizontal = 0;
1600*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_log2_max_mv_length_vertical = 0;
1601*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_num_reorder_frames = 0;
1602*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u1_max_dec_frame_buffering = 0;
1603*495ae853SAndroid Build Coastguard Worker
1604*495ae853SAndroid Build Coastguard Worker s_vui_params_ip.u4_size = sizeof(isvce_vui_ip_t);
1605*495ae853SAndroid Build Coastguard Worker s_vui_params_op.u4_size = sizeof(isvce_vui_op_t);
1606*495ae853SAndroid Build Coastguard Worker
1607*495ae853SAndroid Build Coastguard Worker status =
1608*495ae853SAndroid Build Coastguard Worker isvce_api_function(ps_app_ctxt->ps_enc, &s_vui_params_ip, &s_vui_params_op, &s_api_cmds);
1609*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
1610*495ae853SAndroid Build Coastguard Worker {
1611*495ae853SAndroid Build Coastguard Worker CHAR ac_error[STRLENGTH];
1612*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to set vui params = 0x%x\n",
1613*495ae853SAndroid Build Coastguard Worker s_vui_params_op.u4_error_code);
1614*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
1615*495ae853SAndroid Build Coastguard Worker }
1616*495ae853SAndroid Build Coastguard Worker }
1617*495ae853SAndroid Build Coastguard Worker
set_sei_mdcv_params(app_ctxt_t * ps_app_ctxt,UWORD32 u4_timestamp_low,UWORD32 u4_timestamp_high)1618*495ae853SAndroid Build Coastguard Worker void set_sei_mdcv_params(app_ctxt_t *ps_app_ctxt, UWORD32 u4_timestamp_low,
1619*495ae853SAndroid Build Coastguard Worker UWORD32 u4_timestamp_high)
1620*495ae853SAndroid Build Coastguard Worker {
1621*495ae853SAndroid Build Coastguard Worker WORD32 i4_count;
1622*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status;
1623*495ae853SAndroid Build Coastguard Worker
1624*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_mdcv_params_ip_t s_sei_mdcv_params_ip;
1625*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_mdcv_params_op_t s_sei_mdcv_params_op;
1626*495ae853SAndroid Build Coastguard Worker
1627*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_SET_SEI_MDCV_PARAMS};
1628*495ae853SAndroid Build Coastguard Worker
1629*495ae853SAndroid Build Coastguard Worker s_sei_mdcv_params_ip.u1_sei_mdcv_params_present_flag =
1630*495ae853SAndroid Build Coastguard Worker (UWORD8) ps_app_ctxt->u4_sei_mdcv_params_present_flag;
1631*495ae853SAndroid Build Coastguard Worker
1632*495ae853SAndroid Build Coastguard Worker for(i4_count = 0; i4_count < NUM_SEI_MDCV_PRIMARIES; i4_count++)
1633*495ae853SAndroid Build Coastguard Worker {
1634*495ae853SAndroid Build Coastguard Worker s_sei_mdcv_params_ip.au2_display_primaries_x[i4_count] =
1635*495ae853SAndroid Build Coastguard Worker (UWORD16) ps_app_ctxt->au4_display_primaries_x[i4_count];
1636*495ae853SAndroid Build Coastguard Worker s_sei_mdcv_params_ip.au2_display_primaries_y[i4_count] =
1637*495ae853SAndroid Build Coastguard Worker (UWORD16) ps_app_ctxt->au4_display_primaries_y[i4_count];
1638*495ae853SAndroid Build Coastguard Worker }
1639*495ae853SAndroid Build Coastguard Worker
1640*495ae853SAndroid Build Coastguard Worker s_sei_mdcv_params_ip.u2_white_point_x = (UWORD16) ps_app_ctxt->u4_white_point_x;
1641*495ae853SAndroid Build Coastguard Worker s_sei_mdcv_params_ip.u2_white_point_y = (UWORD16) ps_app_ctxt->u4_white_point_y;
1642*495ae853SAndroid Build Coastguard Worker s_sei_mdcv_params_ip.u4_max_display_mastering_luminance =
1643*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_max_display_mastering_luminance;
1644*495ae853SAndroid Build Coastguard Worker s_sei_mdcv_params_ip.u4_min_display_mastering_luminance =
1645*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_min_display_mastering_luminance;
1646*495ae853SAndroid Build Coastguard Worker
1647*495ae853SAndroid Build Coastguard Worker s_sei_mdcv_params_ip.u4_timestamp_high = u4_timestamp_high;
1648*495ae853SAndroid Build Coastguard Worker s_sei_mdcv_params_ip.u4_timestamp_low = u4_timestamp_low;
1649*495ae853SAndroid Build Coastguard Worker
1650*495ae853SAndroid Build Coastguard Worker s_sei_mdcv_params_ip.u4_size = sizeof(isvce_ctl_set_sei_mdcv_params_ip_t);
1651*495ae853SAndroid Build Coastguard Worker s_sei_mdcv_params_op.u4_size = sizeof(isvce_ctl_set_sei_mdcv_params_op_t);
1652*495ae853SAndroid Build Coastguard Worker
1653*495ae853SAndroid Build Coastguard Worker if((ps_app_ctxt->s_sei_mdcv_params.au2_display_primaries_x[0] !=
1654*495ae853SAndroid Build Coastguard Worker s_sei_mdcv_params_ip.au2_display_primaries_x[0]) ||
1655*495ae853SAndroid Build Coastguard Worker (ps_app_ctxt->s_sei_mdcv_params.au2_display_primaries_x[1] !=
1656*495ae853SAndroid Build Coastguard Worker s_sei_mdcv_params_ip.au2_display_primaries_x[1]) ||
1657*495ae853SAndroid Build Coastguard Worker (ps_app_ctxt->s_sei_mdcv_params.au2_display_primaries_x[2] !=
1658*495ae853SAndroid Build Coastguard Worker s_sei_mdcv_params_ip.au2_display_primaries_x[2]) ||
1659*495ae853SAndroid Build Coastguard Worker (ps_app_ctxt->s_sei_mdcv_params.au2_display_primaries_y[0] !=
1660*495ae853SAndroid Build Coastguard Worker s_sei_mdcv_params_ip.au2_display_primaries_y[0]) ||
1661*495ae853SAndroid Build Coastguard Worker (ps_app_ctxt->s_sei_mdcv_params.au2_display_primaries_y[1] !=
1662*495ae853SAndroid Build Coastguard Worker s_sei_mdcv_params_ip.au2_display_primaries_y[1]) ||
1663*495ae853SAndroid Build Coastguard Worker (ps_app_ctxt->s_sei_mdcv_params.au2_display_primaries_y[2] !=
1664*495ae853SAndroid Build Coastguard Worker s_sei_mdcv_params_ip.au2_display_primaries_y[2]) ||
1665*495ae853SAndroid Build Coastguard Worker (ps_app_ctxt->s_sei_mdcv_params.u2_white_point_x != s_sei_mdcv_params_ip.u2_white_point_x) ||
1666*495ae853SAndroid Build Coastguard Worker (ps_app_ctxt->s_sei_mdcv_params.u2_white_point_y != s_sei_mdcv_params_ip.u2_white_point_x) ||
1667*495ae853SAndroid Build Coastguard Worker (ps_app_ctxt->s_sei_mdcv_params.u4_max_display_mastering_luminance !=
1668*495ae853SAndroid Build Coastguard Worker s_sei_mdcv_params_ip.u4_max_display_mastering_luminance) ||
1669*495ae853SAndroid Build Coastguard Worker (ps_app_ctxt->s_sei_mdcv_params.u4_min_display_mastering_luminance !=
1670*495ae853SAndroid Build Coastguard Worker s_sei_mdcv_params_ip.u4_min_display_mastering_luminance))
1671*495ae853SAndroid Build Coastguard Worker {
1672*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(ps_app_ctxt->ps_enc, &s_sei_mdcv_params_ip,
1673*495ae853SAndroid Build Coastguard Worker &s_sei_mdcv_params_op, &s_api_cmds);
1674*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
1675*495ae853SAndroid Build Coastguard Worker {
1676*495ae853SAndroid Build Coastguard Worker printf("Unable to set sei mdcv params = 0x%x\n", s_sei_mdcv_params_op.u4_error_code);
1677*495ae853SAndroid Build Coastguard Worker }
1678*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->s_sei_mdcv_params = s_sei_mdcv_params_ip;
1679*495ae853SAndroid Build Coastguard Worker }
1680*495ae853SAndroid Build Coastguard Worker }
1681*495ae853SAndroid Build Coastguard Worker
set_sei_cll_params(app_ctxt_t * ps_app_ctxt,UWORD32 u4_timestamp_low,UWORD32 u4_timestamp_high)1682*495ae853SAndroid Build Coastguard Worker void set_sei_cll_params(app_ctxt_t *ps_app_ctxt, UWORD32 u4_timestamp_low,
1683*495ae853SAndroid Build Coastguard Worker UWORD32 u4_timestamp_high)
1684*495ae853SAndroid Build Coastguard Worker {
1685*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status;
1686*495ae853SAndroid Build Coastguard Worker
1687*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_cll_params_ip_t s_sei_cll_params_ip;
1688*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_cll_params_op_t s_sei_cll_params_op;
1689*495ae853SAndroid Build Coastguard Worker
1690*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_SET_SEI_CLL_PARAMS};
1691*495ae853SAndroid Build Coastguard Worker
1692*495ae853SAndroid Build Coastguard Worker s_sei_cll_params_ip.u1_sei_cll_params_present_flag =
1693*495ae853SAndroid Build Coastguard Worker (UWORD8) ps_app_ctxt->u4_sei_cll_params_present_flag;
1694*495ae853SAndroid Build Coastguard Worker
1695*495ae853SAndroid Build Coastguard Worker s_sei_cll_params_ip.u2_max_content_light_level =
1696*495ae853SAndroid Build Coastguard Worker (UWORD16) ps_app_ctxt->u4_max_content_light_level;
1697*495ae853SAndroid Build Coastguard Worker s_sei_cll_params_ip.u2_max_pic_average_light_level =
1698*495ae853SAndroid Build Coastguard Worker (UWORD16) ps_app_ctxt->u4_max_pic_average_light_level;
1699*495ae853SAndroid Build Coastguard Worker
1700*495ae853SAndroid Build Coastguard Worker s_sei_cll_params_ip.u4_timestamp_high = u4_timestamp_high;
1701*495ae853SAndroid Build Coastguard Worker s_sei_cll_params_ip.u4_timestamp_low = u4_timestamp_low;
1702*495ae853SAndroid Build Coastguard Worker
1703*495ae853SAndroid Build Coastguard Worker s_sei_cll_params_ip.u4_size = sizeof(isvce_ctl_set_sei_cll_params_ip_t);
1704*495ae853SAndroid Build Coastguard Worker s_sei_cll_params_op.u4_size = sizeof(isvce_ctl_set_sei_cll_params_op_t);
1705*495ae853SAndroid Build Coastguard Worker
1706*495ae853SAndroid Build Coastguard Worker if((ps_app_ctxt->s_sei_cll_params.u2_max_content_light_level !=
1707*495ae853SAndroid Build Coastguard Worker s_sei_cll_params_ip.u2_max_content_light_level) ||
1708*495ae853SAndroid Build Coastguard Worker (ps_app_ctxt->s_sei_cll_params.u2_max_pic_average_light_level !=
1709*495ae853SAndroid Build Coastguard Worker s_sei_cll_params_ip.u2_max_pic_average_light_level))
1710*495ae853SAndroid Build Coastguard Worker {
1711*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(ps_app_ctxt->ps_enc, &s_sei_cll_params_ip, &s_sei_cll_params_op,
1712*495ae853SAndroid Build Coastguard Worker &s_api_cmds);
1713*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
1714*495ae853SAndroid Build Coastguard Worker {
1715*495ae853SAndroid Build Coastguard Worker printf("Unable to set sei cll params = 0x%x\n", s_sei_cll_params_op.u4_error_code);
1716*495ae853SAndroid Build Coastguard Worker }
1717*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->s_sei_cll_params = s_sei_cll_params_ip;
1718*495ae853SAndroid Build Coastguard Worker }
1719*495ae853SAndroid Build Coastguard Worker }
1720*495ae853SAndroid Build Coastguard Worker
set_sei_ave_params(app_ctxt_t * ps_app_ctxt,UWORD32 u4_timestamp_low,UWORD32 u4_timestamp_high)1721*495ae853SAndroid Build Coastguard Worker void set_sei_ave_params(app_ctxt_t *ps_app_ctxt, UWORD32 u4_timestamp_low,
1722*495ae853SAndroid Build Coastguard Worker UWORD32 u4_timestamp_high)
1723*495ae853SAndroid Build Coastguard Worker {
1724*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status;
1725*495ae853SAndroid Build Coastguard Worker
1726*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_ave_params_ip_t s_sei_ave_params_ip;
1727*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_ave_params_op_t s_sei_ave_params_op;
1728*495ae853SAndroid Build Coastguard Worker
1729*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_SET_SEI_AVE_PARAMS};
1730*495ae853SAndroid Build Coastguard Worker
1731*495ae853SAndroid Build Coastguard Worker s_sei_ave_params_ip.u1_sei_ave_params_present_flag =
1732*495ae853SAndroid Build Coastguard Worker (UWORD8) ps_app_ctxt->u4_sei_ave_params_present_flag;
1733*495ae853SAndroid Build Coastguard Worker
1734*495ae853SAndroid Build Coastguard Worker s_sei_ave_params_ip.u4_ambient_illuminance = ps_app_ctxt->u4_ambient_illuminance;
1735*495ae853SAndroid Build Coastguard Worker s_sei_ave_params_ip.u2_ambient_light_x = (UWORD16) ps_app_ctxt->u4_ambient_light_x;
1736*495ae853SAndroid Build Coastguard Worker s_sei_ave_params_ip.u2_ambient_light_y = (UWORD16) ps_app_ctxt->u4_ambient_light_y;
1737*495ae853SAndroid Build Coastguard Worker
1738*495ae853SAndroid Build Coastguard Worker s_sei_ave_params_ip.u4_timestamp_high = u4_timestamp_high;
1739*495ae853SAndroid Build Coastguard Worker s_sei_ave_params_ip.u4_timestamp_low = u4_timestamp_low;
1740*495ae853SAndroid Build Coastguard Worker
1741*495ae853SAndroid Build Coastguard Worker s_sei_ave_params_ip.u4_size = sizeof(isvce_ctl_set_sei_ave_params_ip_t);
1742*495ae853SAndroid Build Coastguard Worker s_sei_ave_params_op.u4_size = sizeof(isvce_ctl_set_sei_ave_params_op_t);
1743*495ae853SAndroid Build Coastguard Worker
1744*495ae853SAndroid Build Coastguard Worker if((ps_app_ctxt->s_sei_ave_params.u4_ambient_illuminance !=
1745*495ae853SAndroid Build Coastguard Worker s_sei_ave_params_ip.u4_ambient_illuminance) ||
1746*495ae853SAndroid Build Coastguard Worker (ps_app_ctxt->s_sei_ave_params.u2_ambient_light_x !=
1747*495ae853SAndroid Build Coastguard Worker s_sei_ave_params_ip.u2_ambient_light_x) ||
1748*495ae853SAndroid Build Coastguard Worker (ps_app_ctxt->s_sei_ave_params.u2_ambient_light_y != s_sei_ave_params_ip.u2_ambient_light_y))
1749*495ae853SAndroid Build Coastguard Worker {
1750*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(ps_app_ctxt->ps_enc, &s_sei_ave_params_ip, &s_sei_ave_params_op,
1751*495ae853SAndroid Build Coastguard Worker &s_api_cmds);
1752*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
1753*495ae853SAndroid Build Coastguard Worker {
1754*495ae853SAndroid Build Coastguard Worker printf("Unable to set sei ave params = 0x%x\n", s_sei_ave_params_op.u4_error_code);
1755*495ae853SAndroid Build Coastguard Worker }
1756*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->s_sei_ave_params = s_sei_ave_params_ip;
1757*495ae853SAndroid Build Coastguard Worker }
1758*495ae853SAndroid Build Coastguard Worker }
1759*495ae853SAndroid Build Coastguard Worker
set_sei_ccv_params(app_ctxt_t * ps_app_ctxt,UWORD32 u4_timestamp_low,UWORD32 u4_timestamp_high)1760*495ae853SAndroid Build Coastguard Worker void set_sei_ccv_params(app_ctxt_t *ps_app_ctxt, UWORD32 u4_timestamp_low,
1761*495ae853SAndroid Build Coastguard Worker UWORD32 u4_timestamp_high)
1762*495ae853SAndroid Build Coastguard Worker {
1763*495ae853SAndroid Build Coastguard Worker WORD32 i4_count;
1764*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status;
1765*495ae853SAndroid Build Coastguard Worker
1766*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_ccv_params_ip_t s_sei_ccv_params_ip;
1767*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_sei_ccv_params_op_t s_sei_ccv_params_op;
1768*495ae853SAndroid Build Coastguard Worker
1769*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_SET_SEI_CCV_PARAMS};
1770*495ae853SAndroid Build Coastguard Worker
1771*495ae853SAndroid Build Coastguard Worker s_sei_ccv_params_ip.u1_sei_ccv_params_present_flag =
1772*495ae853SAndroid Build Coastguard Worker (UWORD8) ps_app_ctxt->u4_sei_ccv_params_present_flag;
1773*495ae853SAndroid Build Coastguard Worker
1774*495ae853SAndroid Build Coastguard Worker s_sei_ccv_params_ip.u1_ccv_cancel_flag = (UWORD8) ps_app_ctxt->u4_ccv_cancel_flag;
1775*495ae853SAndroid Build Coastguard Worker s_sei_ccv_params_ip.u1_ccv_persistence_flag = (UWORD8) ps_app_ctxt->u4_ccv_persistence_flag;
1776*495ae853SAndroid Build Coastguard Worker s_sei_ccv_params_ip.u1_ccv_primaries_present_flag =
1777*495ae853SAndroid Build Coastguard Worker (UWORD8) ps_app_ctxt->u4_ccv_primaries_present_flag;
1778*495ae853SAndroid Build Coastguard Worker s_sei_ccv_params_ip.u1_ccv_min_luminance_value_present_flag =
1779*495ae853SAndroid Build Coastguard Worker (UWORD8) ps_app_ctxt->u4_ccv_min_luminance_value_present_flag;
1780*495ae853SAndroid Build Coastguard Worker s_sei_ccv_params_ip.u1_ccv_max_luminance_value_present_flag =
1781*495ae853SAndroid Build Coastguard Worker (UWORD8) ps_app_ctxt->u4_ccv_max_luminance_value_present_flag;
1782*495ae853SAndroid Build Coastguard Worker s_sei_ccv_params_ip.u1_ccv_avg_luminance_value_present_flag =
1783*495ae853SAndroid Build Coastguard Worker (UWORD8) ps_app_ctxt->u4_ccv_avg_luminance_value_present_flag;
1784*495ae853SAndroid Build Coastguard Worker s_sei_ccv_params_ip.u1_ccv_reserved_zero_2bits =
1785*495ae853SAndroid Build Coastguard Worker (UWORD8) ps_app_ctxt->u4_ccv_reserved_zero_2bits;
1786*495ae853SAndroid Build Coastguard Worker
1787*495ae853SAndroid Build Coastguard Worker for(i4_count = 0; i4_count < NUM_SEI_CCV_PRIMARIES; i4_count++)
1788*495ae853SAndroid Build Coastguard Worker {
1789*495ae853SAndroid Build Coastguard Worker s_sei_ccv_params_ip.ai4_ccv_primaries_x[i4_count] =
1790*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->ai4_ccv_primaries_x[i4_count];
1791*495ae853SAndroid Build Coastguard Worker s_sei_ccv_params_ip.ai4_ccv_primaries_y[i4_count] =
1792*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->ai4_ccv_primaries_y[i4_count];
1793*495ae853SAndroid Build Coastguard Worker }
1794*495ae853SAndroid Build Coastguard Worker
1795*495ae853SAndroid Build Coastguard Worker s_sei_ccv_params_ip.u4_ccv_min_luminance_value = ps_app_ctxt->u4_ccv_min_luminance_value;
1796*495ae853SAndroid Build Coastguard Worker s_sei_ccv_params_ip.u4_ccv_max_luminance_value = ps_app_ctxt->u4_ccv_max_luminance_value;
1797*495ae853SAndroid Build Coastguard Worker s_sei_ccv_params_ip.u4_ccv_avg_luminance_value = ps_app_ctxt->u4_ccv_avg_luminance_value;
1798*495ae853SAndroid Build Coastguard Worker
1799*495ae853SAndroid Build Coastguard Worker s_sei_ccv_params_ip.u4_timestamp_high = u4_timestamp_high;
1800*495ae853SAndroid Build Coastguard Worker s_sei_ccv_params_ip.u4_timestamp_low = u4_timestamp_low;
1801*495ae853SAndroid Build Coastguard Worker
1802*495ae853SAndroid Build Coastguard Worker s_sei_ccv_params_ip.u4_size = sizeof(isvce_ctl_set_sei_ccv_params_ip_t);
1803*495ae853SAndroid Build Coastguard Worker s_sei_ccv_params_op.u4_size = sizeof(isvce_ctl_set_sei_ccv_params_op_t);
1804*495ae853SAndroid Build Coastguard Worker
1805*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(ps_app_ctxt->ps_enc, &s_sei_ccv_params_ip, &s_sei_ccv_params_op,
1806*495ae853SAndroid Build Coastguard Worker &s_api_cmds);
1807*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
1808*495ae853SAndroid Build Coastguard Worker {
1809*495ae853SAndroid Build Coastguard Worker printf("Unable to set sei ccv params = 0x%x\n", s_sei_ccv_params_op.u4_error_code);
1810*495ae853SAndroid Build Coastguard Worker }
1811*495ae853SAndroid Build Coastguard Worker }
1812*495ae853SAndroid Build Coastguard Worker
allocate_nalu_info_bufs(app_ctxt_t * ps_app_ctxt)1813*495ae853SAndroid Build Coastguard Worker static void allocate_nalu_info_bufs(app_ctxt_t *ps_app_ctxt)
1814*495ae853SAndroid Build Coastguard Worker {
1815*495ae853SAndroid Build Coastguard Worker UWORD32 i;
1816*495ae853SAndroid Build Coastguard Worker
1817*495ae853SAndroid Build Coastguard Worker UWORD32 u4_num_bufs =
1818*495ae853SAndroid Build Coastguard Worker sizeof(ps_app_ctxt->as_nalu_info_bufs) / sizeof(ps_app_ctxt->as_nalu_info_bufs[0]);
1819*495ae853SAndroid Build Coastguard Worker
1820*495ae853SAndroid Build Coastguard Worker for(i = 0; i < u4_num_bufs; i++)
1821*495ae853SAndroid Build Coastguard Worker {
1822*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->as_nalu_info_bufs[i].u4_buf_size =
1823*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->s_get_buf_info_op.u4_min_nalu_info_buf_size;
1824*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->as_nalu_info_bufs[i].b_is_free = true;
1825*495ae853SAndroid Build Coastguard Worker
1826*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->as_nalu_info_bufs[i].pu1_buf =
1827*495ae853SAndroid Build Coastguard Worker (UWORD8 *) isvca_aligned_malloc(16, ps_app_ctxt->as_nalu_info_bufs[i].u4_buf_size);
1828*495ae853SAndroid Build Coastguard Worker }
1829*495ae853SAndroid Build Coastguard Worker }
1830*495ae853SAndroid Build Coastguard Worker
free_nalu_info_bufs(app_ctxt_t * ps_app_ctxt)1831*495ae853SAndroid Build Coastguard Worker static void free_nalu_info_bufs(app_ctxt_t *ps_app_ctxt)
1832*495ae853SAndroid Build Coastguard Worker {
1833*495ae853SAndroid Build Coastguard Worker UWORD32 i;
1834*495ae853SAndroid Build Coastguard Worker
1835*495ae853SAndroid Build Coastguard Worker UWORD32 u4_num_bufs =
1836*495ae853SAndroid Build Coastguard Worker sizeof(ps_app_ctxt->as_nalu_info_bufs) / sizeof(ps_app_ctxt->as_nalu_info_bufs[0]);
1837*495ae853SAndroid Build Coastguard Worker
1838*495ae853SAndroid Build Coastguard Worker for(i = 0; i < u4_num_bufs; i++)
1839*495ae853SAndroid Build Coastguard Worker {
1840*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(ps_app_ctxt->as_nalu_info_bufs[i].pu1_buf);
1841*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->as_nalu_info_bufs[i].b_is_free = false;
1842*495ae853SAndroid Build Coastguard Worker }
1843*495ae853SAndroid Build Coastguard Worker }
1844*495ae853SAndroid Build Coastguard Worker
1845*495ae853SAndroid Build Coastguard Worker #define PEAK_WINDOW_SIZE 8
1846*495ae853SAndroid Build Coastguard Worker
synchronous_encode(iv_obj_t * ps_enc,app_ctxt_t * ps_app_ctxt)1847*495ae853SAndroid Build Coastguard Worker void synchronous_encode(iv_obj_t *ps_enc, app_ctxt_t *ps_app_ctxt)
1848*495ae853SAndroid Build Coastguard Worker {
1849*495ae853SAndroid Build Coastguard Worker isvce_video_encode_ip_t s_video_encode_ip;
1850*495ae853SAndroid Build Coastguard Worker isvce_video_encode_op_t s_video_encode_op;
1851*495ae853SAndroid Build Coastguard Worker
1852*495ae853SAndroid Build Coastguard Worker ive_video_encode_ip_t *ps_video_encode_ip = &s_video_encode_ip.s_ive_ip;
1853*495ae853SAndroid Build Coastguard Worker ive_video_encode_op_t *ps_video_encode_op = &s_video_encode_op.s_ive_op;
1854*495ae853SAndroid Build Coastguard Worker
1855*495ae853SAndroid Build Coastguard Worker iv_raw_buf_t *ps_inp_raw_buf = &ps_video_encode_ip->s_inp_buf;
1856*495ae853SAndroid Build Coastguard Worker
1857*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status = IV_SUCCESS;
1858*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_ENCODE, ISVCE_CMD_CT_NA};
1859*495ae853SAndroid Build Coastguard Worker
1860*495ae853SAndroid Build Coastguard Worker WORD32 i, is_last = 0, num_bytes = 0;
1861*495ae853SAndroid Build Coastguard Worker UWORD32 u4_total_time = 0;
1862*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf = NULL;
1863*495ae853SAndroid Build Coastguard Worker UWORD32 u4_timestamp_low, u4_timestamp_high;
1864*495ae853SAndroid Build Coastguard Worker void *pv_mb_info = NULL, *pv_pic_info = NULL;
1865*495ae853SAndroid Build Coastguard Worker WORD32 *pi4_nalu_info_buf_ids = isvca_aligned_malloc(
1866*495ae853SAndroid Build Coastguard Worker 16, ps_app_ctxt->u1_num_spatial_layers * sizeof(pi4_nalu_info_buf_ids[0]));
1867*495ae853SAndroid Build Coastguard Worker
1868*495ae853SAndroid Build Coastguard Worker #ifdef PROFILE_ENABLE
1869*495ae853SAndroid Build Coastguard Worker TIMER curtime;
1870*495ae853SAndroid Build Coastguard Worker WORD32 peak_window[PEAK_WINDOW_SIZE] = {0};
1871*495ae853SAndroid Build Coastguard Worker WORD32 peak_window_idx = 0;
1872*495ae853SAndroid Build Coastguard Worker #endif
1873*495ae853SAndroid Build Coastguard Worker WORD32 peak_avg_max = 0, timetaken = 0;
1874*495ae853SAndroid Build Coastguard Worker iv_raw_buf_t s_inp_buf, s_recon_buf;
1875*495ae853SAndroid Build Coastguard Worker CHAR ac_error[2 * STRLENGTH];
1876*495ae853SAndroid Build Coastguard Worker
1877*495ae853SAndroid Build Coastguard Worker u4_timestamp_low = 0;
1878*495ae853SAndroid Build Coastguard Worker u4_timestamp_high = 0;
1879*495ae853SAndroid Build Coastguard Worker
1880*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
1881*495ae853SAndroid Build Coastguard Worker /* Allocate I/O Buffers */
1882*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
1883*495ae853SAndroid Build Coastguard Worker allocate_input(ps_app_ctxt);
1884*495ae853SAndroid Build Coastguard Worker allocate_output(ps_app_ctxt);
1885*495ae853SAndroid Build Coastguard Worker allocate_recon(ps_app_ctxt);
1886*495ae853SAndroid Build Coastguard Worker allocate_nalu_info_bufs(ps_app_ctxt);
1887*495ae853SAndroid Build Coastguard Worker
1888*495ae853SAndroid Build Coastguard Worker s_video_encode_ip.ps_nalu_info_buf = isvca_aligned_malloc(
1889*495ae853SAndroid Build Coastguard Worker 16, sizeof(isvce_nalu_info_buf_t) * ps_app_ctxt->u1_num_spatial_layers);
1890*495ae853SAndroid Build Coastguard Worker s_video_encode_op.ps_nalu_info_buf = isvca_aligned_malloc(
1891*495ae853SAndroid Build Coastguard Worker 16, sizeof(isvce_nalu_info_buf_t) * ps_app_ctxt->u1_num_spatial_layers);
1892*495ae853SAndroid Build Coastguard Worker
1893*495ae853SAndroid Build Coastguard Worker /* init psnr */
1894*495ae853SAndroid Build Coastguard Worker init_psnr(ps_app_ctxt);
1895*495ae853SAndroid Build Coastguard Worker
1896*495ae853SAndroid Build Coastguard Worker /* open file pointers */
1897*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->fp_ip = fopen(ps_app_ctxt->ac_ip_fname, "rb");
1898*495ae853SAndroid Build Coastguard Worker if(NULL == ps_app_ctxt->fp_ip)
1899*495ae853SAndroid Build Coastguard Worker {
1900*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to open input file for reading: %s",
1901*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->ac_ip_fname);
1902*495ae853SAndroid Build Coastguard Worker invalid_argument_exit(ac_error);
1903*495ae853SAndroid Build Coastguard Worker }
1904*495ae853SAndroid Build Coastguard Worker
1905*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->fp_op = fopen(ps_app_ctxt->ac_op_fname, "wb");
1906*495ae853SAndroid Build Coastguard Worker if(NULL == ps_app_ctxt->fp_op)
1907*495ae853SAndroid Build Coastguard Worker {
1908*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to open output file for writing: %s",
1909*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->ac_op_fname);
1910*495ae853SAndroid Build Coastguard Worker invalid_argument_exit(ac_error);
1911*495ae853SAndroid Build Coastguard Worker }
1912*495ae853SAndroid Build Coastguard Worker
1913*495ae853SAndroid Build Coastguard Worker if(1 == ps_app_ctxt->u4_recon_enable)
1914*495ae853SAndroid Build Coastguard Worker {
1915*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->fp_recon = fopen(ps_app_ctxt->ac_recon_fname, "wb");
1916*495ae853SAndroid Build Coastguard Worker if(NULL == ps_app_ctxt->fp_recon)
1917*495ae853SAndroid Build Coastguard Worker {
1918*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to open recon file for writing: %s",
1919*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->ac_recon_fname);
1920*495ae853SAndroid Build Coastguard Worker invalid_argument_exit(ac_error);
1921*495ae853SAndroid Build Coastguard Worker }
1922*495ae853SAndroid Build Coastguard Worker }
1923*495ae853SAndroid Build Coastguard Worker
1924*495ae853SAndroid Build Coastguard Worker if(1 == ps_app_ctxt->u4_nalu_info_export_enable)
1925*495ae853SAndroid Build Coastguard Worker {
1926*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->fp_nalu_info = fopen(ps_app_ctxt->ac_nalu_info_csv_fname, "w");
1927*495ae853SAndroid Build Coastguard Worker
1928*495ae853SAndroid Build Coastguard Worker if(NULL == ps_app_ctxt->fp_nalu_info)
1929*495ae853SAndroid Build Coastguard Worker {
1930*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1,
1931*495ae853SAndroid Build Coastguard Worker "Unable to open NALU Info CSV file for writing: %s",
1932*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->ac_nalu_info_csv_fname);
1933*495ae853SAndroid Build Coastguard Worker invalid_argument_exit(ac_error);
1934*495ae853SAndroid Build Coastguard Worker }
1935*495ae853SAndroid Build Coastguard Worker
1936*495ae853SAndroid Build Coastguard Worker fprintf(ps_app_ctxt->fp_nalu_info,
1937*495ae853SAndroid Build Coastguard Worker "type,length,SId,TID,isIDR,isFirstSliceInLayer,isLastSliceInLayer\n");
1938*495ae853SAndroid Build Coastguard Worker }
1939*495ae853SAndroid Build Coastguard Worker
1940*495ae853SAndroid Build Coastguard Worker if(1 == ps_app_ctxt->u4_chksum_enable)
1941*495ae853SAndroid Build Coastguard Worker {
1942*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->fp_chksum = fopen(ps_app_ctxt->ac_chksum_fname, "wb");
1943*495ae853SAndroid Build Coastguard Worker if(NULL == ps_app_ctxt->fp_chksum)
1944*495ae853SAndroid Build Coastguard Worker {
1945*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to open checksum file for writing: %s",
1946*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->ac_chksum_fname);
1947*495ae853SAndroid Build Coastguard Worker invalid_argument_exit(ac_error);
1948*495ae853SAndroid Build Coastguard Worker }
1949*495ae853SAndroid Build Coastguard Worker }
1950*495ae853SAndroid Build Coastguard Worker
1951*495ae853SAndroid Build Coastguard Worker /* If PSNR is enabled, open input file again and hold a different file pointer
1952*495ae853SAndroid Build Coastguard Worker * This makes it easy to compute PSNR without adding dependency between input
1953*495ae853SAndroid Build Coastguard Worker * and recon threads
1954*495ae853SAndroid Build Coastguard Worker */
1955*495ae853SAndroid Build Coastguard Worker if(1 == ps_app_ctxt->u4_psnr_enable)
1956*495ae853SAndroid Build Coastguard Worker {
1957*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->fp_psnr_ip = fopen(ps_app_ctxt->ac_ip_fname, "rb");
1958*495ae853SAndroid Build Coastguard Worker if(NULL == ps_app_ctxt->fp_psnr_ip)
1959*495ae853SAndroid Build Coastguard Worker {
1960*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to open input file for reading: %s",
1961*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->ac_ip_fname);
1962*495ae853SAndroid Build Coastguard Worker invalid_argument_exit(ac_error);
1963*495ae853SAndroid Build Coastguard Worker }
1964*495ae853SAndroid Build Coastguard Worker }
1965*495ae853SAndroid Build Coastguard Worker
1966*495ae853SAndroid Build Coastguard Worker if(0 != ps_app_ctxt->u4_mb_info_type)
1967*495ae853SAndroid Build Coastguard Worker {
1968*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->fp_mb_info = fopen(ps_app_ctxt->ac_mb_info_fname, "rb");
1969*495ae853SAndroid Build Coastguard Worker if(NULL == ps_app_ctxt->fp_mb_info)
1970*495ae853SAndroid Build Coastguard Worker {
1971*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to open MB info file for reading: %s",
1972*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->ac_mb_info_fname);
1973*495ae853SAndroid Build Coastguard Worker invalid_argument_exit(ac_error);
1974*495ae853SAndroid Build Coastguard Worker }
1975*495ae853SAndroid Build Coastguard Worker }
1976*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->u4_pic_info_type)
1977*495ae853SAndroid Build Coastguard Worker {
1978*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->fp_pic_info = fopen(ps_app_ctxt->ac_pic_info_fname, "rb");
1979*495ae853SAndroid Build Coastguard Worker if(NULL == ps_app_ctxt->fp_pic_info)
1980*495ae853SAndroid Build Coastguard Worker {
1981*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to open Pic info file for reading: %s",
1982*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->ac_pic_info_fname);
1983*495ae853SAndroid Build Coastguard Worker invalid_argument_exit(ac_error);
1984*495ae853SAndroid Build Coastguard Worker }
1985*495ae853SAndroid Build Coastguard Worker }
1986*495ae853SAndroid Build Coastguard Worker
1987*495ae853SAndroid Build Coastguard Worker GETTIME(&ps_app_ctxt->enc_start_time);
1988*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->enc_last_time = ps_app_ctxt->enc_start_time;
1989*495ae853SAndroid Build Coastguard Worker
1990*495ae853SAndroid Build Coastguard Worker while(1)
1991*495ae853SAndroid Build Coastguard Worker {
1992*495ae853SAndroid Build Coastguard Worker WORD32 i4_count;
1993*495ae853SAndroid Build Coastguard Worker
1994*495ae853SAndroid Build Coastguard Worker /* Default sei params values*/
1995*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_sei_mdcv_params_present_flag = 0;
1996*495ae853SAndroid Build Coastguard Worker if(1 == ps_app_ctxt->u4_sei_mdcv_params_present_flag)
1997*495ae853SAndroid Build Coastguard Worker {
1998*495ae853SAndroid Build Coastguard Worker for(i4_count = 0; i4_count < NUM_SEI_MDCV_PRIMARIES; i4_count++)
1999*495ae853SAndroid Build Coastguard Worker {
2000*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->au4_display_primaries_x[i4_count] = 0;
2001*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->au4_display_primaries_y[i4_count] = 0;
2002*495ae853SAndroid Build Coastguard Worker }
2003*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_white_point_x = 0;
2004*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_white_point_y = 0;
2005*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_max_display_mastering_luminance =
2006*495ae853SAndroid Build Coastguard Worker DEFAULT_MAX_DISPLAY_MASTERING_LUMINANCE;
2007*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_min_display_mastering_luminance =
2008*495ae853SAndroid Build Coastguard Worker DEFAULT_MIN_DISPLAY_MASTERING_LUMINANCE;
2009*495ae853SAndroid Build Coastguard Worker set_sei_mdcv_params(ps_app_ctxt, u4_timestamp_low, u4_timestamp_high);
2010*495ae853SAndroid Build Coastguard Worker }
2011*495ae853SAndroid Build Coastguard Worker
2012*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_sei_cll_params_present_flag = 0;
2013*495ae853SAndroid Build Coastguard Worker if(1 == ps_app_ctxt->u4_sei_cll_params_present_flag)
2014*495ae853SAndroid Build Coastguard Worker {
2015*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_max_content_light_level = 0;
2016*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_max_pic_average_light_level = 0;
2017*495ae853SAndroid Build Coastguard Worker set_sei_cll_params(ps_app_ctxt, u4_timestamp_low, u4_timestamp_high);
2018*495ae853SAndroid Build Coastguard Worker }
2019*495ae853SAndroid Build Coastguard Worker
2020*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_sei_ave_params_present_flag = 0;
2021*495ae853SAndroid Build Coastguard Worker if(1 == ps_app_ctxt->u4_sei_ave_params_present_flag)
2022*495ae853SAndroid Build Coastguard Worker {
2023*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_ambient_illuminance = 1;
2024*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_ambient_light_x = 0;
2025*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_ambient_light_y = 0;
2026*495ae853SAndroid Build Coastguard Worker set_sei_ave_params(ps_app_ctxt, u4_timestamp_low, u4_timestamp_high);
2027*495ae853SAndroid Build Coastguard Worker }
2028*495ae853SAndroid Build Coastguard Worker
2029*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_sei_ccv_params_present_flag = 0;
2030*495ae853SAndroid Build Coastguard Worker if(1 == ps_app_ctxt->u4_sei_ccv_params_present_flag)
2031*495ae853SAndroid Build Coastguard Worker {
2032*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_ccv_cancel_flag = 0;
2033*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_ccv_persistence_flag = 1;
2034*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_ccv_primaries_present_flag = 1;
2035*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_ccv_min_luminance_value_present_flag = 1;
2036*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_ccv_max_luminance_value_present_flag = 1;
2037*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_ccv_avg_luminance_value_present_flag = 1;
2038*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_ccv_reserved_zero_2bits = 0;
2039*495ae853SAndroid Build Coastguard Worker for(i4_count = 0; i4_count < NUM_SEI_CCV_PRIMARIES; i4_count++)
2040*495ae853SAndroid Build Coastguard Worker {
2041*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->ai4_ccv_primaries_x[i4_count] = 1;
2042*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->ai4_ccv_primaries_y[i4_count] = 1;
2043*495ae853SAndroid Build Coastguard Worker }
2044*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_ccv_min_luminance_value = 1;
2045*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_ccv_max_luminance_value = 1;
2046*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_ccv_avg_luminance_value = 1;
2047*495ae853SAndroid Build Coastguard Worker set_sei_ccv_params(ps_app_ctxt, u4_timestamp_low, u4_timestamp_high);
2048*495ae853SAndroid Build Coastguard Worker }
2049*495ae853SAndroid Build Coastguard Worker
2050*495ae853SAndroid Build Coastguard Worker /******************************************************************************/
2051*495ae853SAndroid Build Coastguard Worker /****************** Input Initialization
2052*495ae853SAndroid Build Coastguard Worker * **************************************/
2053*495ae853SAndroid Build Coastguard Worker /******************************************************************************/
2054*495ae853SAndroid Build Coastguard Worker
2055*495ae853SAndroid Build Coastguard Worker for(i = 0; i < DEFAULT_MAX_INPUT_BUFS; i++)
2056*495ae853SAndroid Build Coastguard Worker {
2057*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->as_input_buf[i].u4_is_free)
2058*495ae853SAndroid Build Coastguard Worker {
2059*495ae853SAndroid Build Coastguard Worker pu1_buf = ps_app_ctxt->as_input_buf[i].pu1_buf;
2060*495ae853SAndroid Build Coastguard Worker pv_mb_info = ps_app_ctxt->as_input_buf[i].pv_mb_info;
2061*495ae853SAndroid Build Coastguard Worker pv_pic_info = ps_app_ctxt->as_input_buf[i].pv_pic_info;
2062*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->as_input_buf[i].u4_is_free = 0;
2063*495ae853SAndroid Build Coastguard Worker break;
2064*495ae853SAndroid Build Coastguard Worker }
2065*495ae853SAndroid Build Coastguard Worker }
2066*495ae853SAndroid Build Coastguard Worker
2067*495ae853SAndroid Build Coastguard Worker if(i == DEFAULT_MAX_INPUT_BUFS)
2068*495ae853SAndroid Build Coastguard Worker {
2069*495ae853SAndroid Build Coastguard Worker printf("\n Unable to find a free input buffer!!");
2070*495ae853SAndroid Build Coastguard Worker exit(0);
2071*495ae853SAndroid Build Coastguard Worker }
2072*495ae853SAndroid Build Coastguard Worker
2073*495ae853SAndroid Build Coastguard Worker ps_video_encode_ip->u4_size = sizeof(isvce_video_encode_ip_t);
2074*495ae853SAndroid Build Coastguard Worker ps_video_encode_op->u4_size = sizeof(isvce_video_encode_op_t);
2075*495ae853SAndroid Build Coastguard Worker
2076*495ae853SAndroid Build Coastguard Worker ps_video_encode_ip->pv_bufs = pu1_buf;
2077*495ae853SAndroid Build Coastguard Worker ps_video_encode_ip->pv_mb_info = pv_mb_info;
2078*495ae853SAndroid Build Coastguard Worker ps_video_encode_ip->pv_pic_info = pv_pic_info;
2079*495ae853SAndroid Build Coastguard Worker ps_video_encode_ip->u4_pic_info_type = ps_app_ctxt->u4_pic_info_type;
2080*495ae853SAndroid Build Coastguard Worker /*
2081*495ae853SAndroid Build Coastguard Worker * Since the buffers are used for reading,
2082*495ae853SAndroid Build Coastguard Worker * And after each row we have a stride we nned to calculate
2083*495ae853SAndroid Build Coastguard Worker * the luma size according to the stride
2084*495ae853SAndroid Build Coastguard Worker */
2085*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->e_color_fmt = ps_app_ctxt->e_inp_color_fmt;
2086*495ae853SAndroid Build Coastguard Worker
2087*495ae853SAndroid Build Coastguard Worker /* Initialize for 420SP */
2088*495ae853SAndroid Build Coastguard Worker if(IV_YUV_420SP_UV == ps_app_ctxt->e_inp_color_fmt ||
2089*495ae853SAndroid Build Coastguard Worker IV_YUV_420SP_VU == ps_app_ctxt->e_inp_color_fmt)
2090*495ae853SAndroid Build Coastguard Worker {
2091*495ae853SAndroid Build Coastguard Worker /*init luma buffer*/
2092*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->apv_bufs[0] = pu1_buf;
2093*495ae853SAndroid Build Coastguard Worker
2094*495ae853SAndroid Build Coastguard Worker /*Init chroma buffer*/
2095*495ae853SAndroid Build Coastguard Worker pu1_buf += ps_app_ctxt->u4_strd * ps_app_ctxt->u4_ht;
2096*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->apv_bufs[1] = pu1_buf;
2097*495ae853SAndroid Build Coastguard Worker
2098*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->au4_wd[0] = ps_app_ctxt->u4_wd;
2099*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->au4_wd[1] = ps_app_ctxt->u4_wd;
2100*495ae853SAndroid Build Coastguard Worker
2101*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->au4_ht[0] = ps_app_ctxt->u4_ht;
2102*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->au4_ht[1] = ps_app_ctxt->u4_ht / 2;
2103*495ae853SAndroid Build Coastguard Worker
2104*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->au4_strd[0] = ps_app_ctxt->u4_strd;
2105*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->au4_strd[1] = ps_app_ctxt->u4_strd;
2106*495ae853SAndroid Build Coastguard Worker }
2107*495ae853SAndroid Build Coastguard Worker else if(IV_YUV_420P == ps_app_ctxt->e_inp_color_fmt)
2108*495ae853SAndroid Build Coastguard Worker {
2109*495ae853SAndroid Build Coastguard Worker /* init buffers */
2110*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->apv_bufs[0] = pu1_buf;
2111*495ae853SAndroid Build Coastguard Worker pu1_buf += (ps_app_ctxt->u4_wd) * ps_app_ctxt->u4_ht;
2112*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->apv_bufs[1] = pu1_buf;
2113*495ae853SAndroid Build Coastguard Worker pu1_buf += (ps_app_ctxt->u4_wd >> 1) * (ps_app_ctxt->u4_ht >> 1);
2114*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->apv_bufs[2] = pu1_buf;
2115*495ae853SAndroid Build Coastguard Worker
2116*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->au4_wd[0] = ps_app_ctxt->u4_wd;
2117*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->au4_wd[1] = ps_app_ctxt->u4_wd / 2;
2118*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->au4_wd[2] = ps_app_ctxt->u4_wd / 2;
2119*495ae853SAndroid Build Coastguard Worker
2120*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->au4_ht[0] = ps_app_ctxt->u4_ht;
2121*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->au4_ht[1] = ps_app_ctxt->u4_ht / 2;
2122*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->au4_ht[2] = ps_app_ctxt->u4_ht / 2;
2123*495ae853SAndroid Build Coastguard Worker
2124*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->au4_strd[0] = ps_app_ctxt->u4_strd;
2125*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->au4_strd[1] = ps_app_ctxt->u4_strd / 2;
2126*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->au4_strd[2] = ps_app_ctxt->u4_strd / 2;
2127*495ae853SAndroid Build Coastguard Worker }
2128*495ae853SAndroid Build Coastguard Worker else if(IV_YUV_422ILE == ps_app_ctxt->e_inp_color_fmt)
2129*495ae853SAndroid Build Coastguard Worker {
2130*495ae853SAndroid Build Coastguard Worker /*init luma buffer*/
2131*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->apv_bufs[0] = pu1_buf;
2132*495ae853SAndroid Build Coastguard Worker
2133*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->au4_wd[0] = ps_app_ctxt->u4_wd * 2;
2134*495ae853SAndroid Build Coastguard Worker
2135*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->au4_ht[0] = ps_app_ctxt->u4_ht;
2136*495ae853SAndroid Build Coastguard Worker
2137*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->au4_strd[0] = ps_app_ctxt->u4_strd * 2;
2138*495ae853SAndroid Build Coastguard Worker }
2139*495ae853SAndroid Build Coastguard Worker
2140*495ae853SAndroid Build Coastguard Worker /*
2141*495ae853SAndroid Build Coastguard Worker * Here we read input and other associated buffers. Regardless of success
2142*495ae853SAndroid Build Coastguard Worker * we will proceed from here as we will need extra calls to flush out
2143*495ae853SAndroid Build Coastguard Worker * input queue in encoder. Note that this is not necessary. You can just
2144*495ae853SAndroid Build Coastguard Worker * send encode calls till with valid output and recon buffers till the
2145*495ae853SAndroid Build Coastguard Worker * queue is flushed.
2146*495ae853SAndroid Build Coastguard Worker */
2147*495ae853SAndroid Build Coastguard Worker while(1)
2148*495ae853SAndroid Build Coastguard Worker {
2149*495ae853SAndroid Build Coastguard Worker IV_STATUS_T mb_info_status = IV_SUCCESS, pic_info_status = IV_SUCCESS;
2150*495ae853SAndroid Build Coastguard Worker
2151*495ae853SAndroid Build Coastguard Worker status = read_input(ps_app_ctxt->fp_ip, ps_inp_raw_buf);
2152*495ae853SAndroid Build Coastguard Worker
2153*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->u4_mb_info_type != 0)
2154*495ae853SAndroid Build Coastguard Worker {
2155*495ae853SAndroid Build Coastguard Worker mb_info_status = read_mb_info(ps_app_ctxt, pv_mb_info);
2156*495ae853SAndroid Build Coastguard Worker }
2157*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->u4_pic_info_type != 0)
2158*495ae853SAndroid Build Coastguard Worker {
2159*495ae853SAndroid Build Coastguard Worker pic_info_status = read_pic_info(ps_app_ctxt, pv_pic_info);
2160*495ae853SAndroid Build Coastguard Worker }
2161*495ae853SAndroid Build Coastguard Worker if((IV_SUCCESS != status) || (IV_SUCCESS != mb_info_status) ||
2162*495ae853SAndroid Build Coastguard Worker (IV_SUCCESS != pic_info_status))
2163*495ae853SAndroid Build Coastguard Worker {
2164*495ae853SAndroid Build Coastguard Worker if(0 == ps_app_ctxt->u4_loopback)
2165*495ae853SAndroid Build Coastguard Worker {
2166*495ae853SAndroid Build Coastguard Worker is_last = 1;
2167*495ae853SAndroid Build Coastguard Worker break;
2168*495ae853SAndroid Build Coastguard Worker }
2169*495ae853SAndroid Build Coastguard Worker else
2170*495ae853SAndroid Build Coastguard Worker fseek(ps_app_ctxt->fp_ip, 0, SEEK_SET);
2171*495ae853SAndroid Build Coastguard Worker }
2172*495ae853SAndroid Build Coastguard Worker break;
2173*495ae853SAndroid Build Coastguard Worker }
2174*495ae853SAndroid Build Coastguard Worker
2175*495ae853SAndroid Build Coastguard Worker /******************************************************************************/
2176*495ae853SAndroid Build Coastguard Worker /****************** Output Initialization
2177*495ae853SAndroid Build Coastguard Worker * *************************************/
2178*495ae853SAndroid Build Coastguard Worker /******************************************************************************/
2179*495ae853SAndroid Build Coastguard Worker for(i = 0; i < DEFAULT_MAX_OUTPUT_BUFS; i++)
2180*495ae853SAndroid Build Coastguard Worker {
2181*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->as_output_buf[i].u4_is_free)
2182*495ae853SAndroid Build Coastguard Worker {
2183*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->as_output_buf[i].u4_is_free = 0;
2184*495ae853SAndroid Build Coastguard Worker
2185*495ae853SAndroid Build Coastguard Worker ps_video_encode_ip->s_out_buf.pv_buf = ps_app_ctxt->as_output_buf[i].pu1_buf;
2186*495ae853SAndroid Build Coastguard Worker ps_video_encode_ip->s_out_buf.u4_bytes = 0;
2187*495ae853SAndroid Build Coastguard Worker ps_video_encode_ip->s_out_buf.u4_bufsize =
2188*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->as_output_buf[i].u4_buf_size;
2189*495ae853SAndroid Build Coastguard Worker }
2190*495ae853SAndroid Build Coastguard Worker }
2191*495ae853SAndroid Build Coastguard Worker
2192*495ae853SAndroid Build Coastguard Worker /******************************************************************************/
2193*495ae853SAndroid Build Coastguard Worker /****************** Recon Initialization
2194*495ae853SAndroid Build Coastguard Worker * **************************************/
2195*495ae853SAndroid Build Coastguard Worker /******************************************************************************/
2196*495ae853SAndroid Build Coastguard Worker init_raw_buf_descr(ps_app_ctxt, &s_recon_buf, ps_app_ctxt->as_recon_buf[0].pu1_buf,
2197*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_recon_color_fmt);
2198*495ae853SAndroid Build Coastguard Worker
2199*495ae853SAndroid Build Coastguard Worker /******************************************************************************/
2200*495ae853SAndroid Build Coastguard Worker /****************** Output Initialization
2201*495ae853SAndroid Build Coastguard Worker * *************************************/
2202*495ae853SAndroid Build Coastguard Worker /******************************************************************************/
2203*495ae853SAndroid Build Coastguard Worker {
2204*495ae853SAndroid Build Coastguard Worker UWORD8 u1_num_layer_bufs_assigned = 0;
2205*495ae853SAndroid Build Coastguard Worker
2206*495ae853SAndroid Build Coastguard Worker for(i = 0; i < DEFAULT_MAX_NALU_INFO_BUFS; i++)
2207*495ae853SAndroid Build Coastguard Worker {
2208*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->as_nalu_info_bufs[i].b_is_free)
2209*495ae853SAndroid Build Coastguard Worker {
2210*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->as_nalu_info_bufs[i].b_is_free = false;
2211*495ae853SAndroid Build Coastguard Worker pi4_nalu_info_buf_ids[u1_num_layer_bufs_assigned] = i;
2212*495ae853SAndroid Build Coastguard Worker
2213*495ae853SAndroid Build Coastguard Worker s_video_encode_ip.ps_nalu_info_buf[u1_num_layer_bufs_assigned].pu1_buf =
2214*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->as_nalu_info_bufs[i].pu1_buf;
2215*495ae853SAndroid Build Coastguard Worker s_video_encode_ip.ps_nalu_info_buf[u1_num_layer_bufs_assigned].u4_num_bytes = 0;
2216*495ae853SAndroid Build Coastguard Worker s_video_encode_ip.ps_nalu_info_buf[u1_num_layer_bufs_assigned].u4_buf_size =
2217*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->as_nalu_info_bufs[i].u4_buf_size;
2218*495ae853SAndroid Build Coastguard Worker
2219*495ae853SAndroid Build Coastguard Worker u1_num_layer_bufs_assigned++;
2220*495ae853SAndroid Build Coastguard Worker
2221*495ae853SAndroid Build Coastguard Worker if(u1_num_layer_bufs_assigned >= ps_app_ctxt->u1_num_spatial_layers)
2222*495ae853SAndroid Build Coastguard Worker {
2223*495ae853SAndroid Build Coastguard Worker break;
2224*495ae853SAndroid Build Coastguard Worker }
2225*495ae853SAndroid Build Coastguard Worker }
2226*495ae853SAndroid Build Coastguard Worker }
2227*495ae853SAndroid Build Coastguard Worker }
2228*495ae853SAndroid Build Coastguard Worker
2229*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->u4_psnr_enable)
2230*495ae853SAndroid Build Coastguard Worker init_raw_buf_descr(ps_app_ctxt, &s_inp_buf, ps_app_ctxt->pu1_psnr_buf,
2231*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->e_inp_color_fmt);
2232*495ae853SAndroid Build Coastguard Worker
2233*495ae853SAndroid Build Coastguard Worker ps_video_encode_ip->s_recon_buf = s_recon_buf;
2234*495ae853SAndroid Build Coastguard Worker
2235*495ae853SAndroid Build Coastguard Worker /******************************************************************************/
2236*495ae853SAndroid Build Coastguard Worker /************************* Un Initialized
2237*495ae853SAndroid Build Coastguard Worker * *************************************/
2238*495ae853SAndroid Build Coastguard Worker /******************************************************************************/
2239*495ae853SAndroid Build Coastguard Worker if(0 == ps_app_ctxt->u4_loopback)
2240*495ae853SAndroid Build Coastguard Worker {
2241*495ae853SAndroid Build Coastguard Worker /* If input file is read completely and loopback is not enabled,
2242*495ae853SAndroid Build Coastguard Worker * then exit the loop */
2243*495ae853SAndroid Build Coastguard Worker if(feof(ps_app_ctxt->fp_ip))
2244*495ae853SAndroid Build Coastguard Worker {
2245*495ae853SAndroid Build Coastguard Worker is_last = 1;
2246*495ae853SAndroid Build Coastguard Worker }
2247*495ae853SAndroid Build Coastguard Worker }
2248*495ae853SAndroid Build Coastguard Worker
2249*495ae853SAndroid Build Coastguard Worker /* If last frame, send input null to get back encoded frames */
2250*495ae853SAndroid Build Coastguard Worker if(is_last == 1 || ((ps_app_ctxt->u4_max_num_frms) <= u4_timestamp_low))
2251*495ae853SAndroid Build Coastguard Worker {
2252*495ae853SAndroid Build Coastguard Worker is_last = 1;
2253*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->apv_bufs[0] = NULL;
2254*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->apv_bufs[1] = NULL;
2255*495ae853SAndroid Build Coastguard Worker ps_inp_raw_buf->apv_bufs[2] = NULL;
2256*495ae853SAndroid Build Coastguard Worker }
2257*495ae853SAndroid Build Coastguard Worker
2258*495ae853SAndroid Build Coastguard Worker ps_video_encode_ip->u4_is_last = is_last;
2259*495ae853SAndroid Build Coastguard Worker ps_video_encode_ip->u4_mb_info_type = ps_app_ctxt->u4_mb_info_type;
2260*495ae853SAndroid Build Coastguard Worker ps_video_encode_ip->u4_pic_info_type = ps_app_ctxt->u4_pic_info_type;
2261*495ae853SAndroid Build Coastguard Worker
2262*495ae853SAndroid Build Coastguard Worker ps_video_encode_op->s_out_buf.pv_buf = NULL;
2263*495ae853SAndroid Build Coastguard Worker
2264*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_app_ctxt->u1_num_spatial_layers; i++)
2265*495ae853SAndroid Build Coastguard Worker {
2266*495ae853SAndroid Build Coastguard Worker s_video_encode_op.ps_nalu_info_buf[i].pu1_buf = NULL;
2267*495ae853SAndroid Build Coastguard Worker }
2268*495ae853SAndroid Build Coastguard Worker
2269*495ae853SAndroid Build Coastguard Worker ps_video_encode_ip->u4_timestamp_high = u4_timestamp_high;
2270*495ae853SAndroid Build Coastguard Worker ps_video_encode_ip->u4_timestamp_low = u4_timestamp_low;
2271*495ae853SAndroid Build Coastguard Worker
2272*495ae853SAndroid Build Coastguard Worker GETTIME(&ps_app_ctxt->enc_last_time);
2273*495ae853SAndroid Build Coastguard Worker
2274*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(ps_enc, &s_video_encode_ip, &s_video_encode_op, &s_api_cmds);
2275*495ae853SAndroid Build Coastguard Worker
2276*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != status)
2277*495ae853SAndroid Build Coastguard Worker {
2278*495ae853SAndroid Build Coastguard Worker printf("Encode Frame failed = 0x%x\n", s_video_encode_op.s_ive_op.u4_error_code);
2279*495ae853SAndroid Build Coastguard Worker break;
2280*495ae853SAndroid Build Coastguard Worker }
2281*495ae853SAndroid Build Coastguard Worker
2282*495ae853SAndroid Build Coastguard Worker #ifdef PROFILE_ENABLE
2283*495ae853SAndroid Build Coastguard Worker GETTIME(&curtime);
2284*495ae853SAndroid Build Coastguard Worker ELAPSEDTIME(ps_app_ctxt->enc_last_time, curtime, timetaken, frequency);
2285*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->enc_last_time = curtime;
2286*495ae853SAndroid Build Coastguard Worker
2287*495ae853SAndroid Build Coastguard Worker {
2288*495ae853SAndroid Build Coastguard Worker WORD32 peak_avg, id;
2289*495ae853SAndroid Build Coastguard Worker u4_total_time += timetaken;
2290*495ae853SAndroid Build Coastguard Worker peak_window[peak_window_idx++] = timetaken;
2291*495ae853SAndroid Build Coastguard Worker if(peak_window_idx == PEAK_WINDOW_SIZE) peak_window_idx = 0;
2292*495ae853SAndroid Build Coastguard Worker peak_avg = 0;
2293*495ae853SAndroid Build Coastguard Worker for(id = 0; id < PEAK_WINDOW_SIZE; id++)
2294*495ae853SAndroid Build Coastguard Worker {
2295*495ae853SAndroid Build Coastguard Worker peak_avg += peak_window[id];
2296*495ae853SAndroid Build Coastguard Worker }
2297*495ae853SAndroid Build Coastguard Worker peak_avg /= PEAK_WINDOW_SIZE;
2298*495ae853SAndroid Build Coastguard Worker if(peak_avg > peak_avg_max) peak_avg_max = peak_avg;
2299*495ae853SAndroid Build Coastguard Worker }
2300*495ae853SAndroid Build Coastguard Worker #endif
2301*495ae853SAndroid Build Coastguard Worker
2302*495ae853SAndroid Build Coastguard Worker /******************************************************************************/
2303*495ae853SAndroid Build Coastguard Worker /****************** Writing Output
2304*495ae853SAndroid Build Coastguard Worker * ********************************************/
2305*495ae853SAndroid Build Coastguard Worker /******************************************************************************/
2306*495ae853SAndroid Build Coastguard Worker num_bytes = 0;
2307*495ae853SAndroid Build Coastguard Worker
2308*495ae853SAndroid Build Coastguard Worker if(ps_video_encode_op->output_present)
2309*495ae853SAndroid Build Coastguard Worker {
2310*495ae853SAndroid Build Coastguard Worker num_bytes = ps_video_encode_op->s_out_buf.u4_bytes;
2311*495ae853SAndroid Build Coastguard Worker pu1_buf = (UWORD8 *) ps_video_encode_op->s_out_buf.pv_buf;
2312*495ae853SAndroid Build Coastguard Worker
2313*495ae853SAndroid Build Coastguard Worker status = write_output(ps_app_ctxt->fp_op, pu1_buf, num_bytes);
2314*495ae853SAndroid Build Coastguard Worker
2315*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != status)
2316*495ae853SAndroid Build Coastguard Worker {
2317*495ae853SAndroid Build Coastguard Worker printf("Error: Unable to write to output file\n");
2318*495ae853SAndroid Build Coastguard Worker break;
2319*495ae853SAndroid Build Coastguard Worker }
2320*495ae853SAndroid Build Coastguard Worker }
2321*495ae853SAndroid Build Coastguard Worker
2322*495ae853SAndroid Build Coastguard Worker for(i = 0; i < DEFAULT_MAX_OUTPUT_BUFS; i++)
2323*495ae853SAndroid Build Coastguard Worker {
2324*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->as_output_buf[i].pu1_buf == ps_video_encode_op->s_out_buf.pv_buf)
2325*495ae853SAndroid Build Coastguard Worker {
2326*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->as_output_buf[i].u4_is_free = 1;
2327*495ae853SAndroid Build Coastguard Worker
2328*495ae853SAndroid Build Coastguard Worker break;
2329*495ae853SAndroid Build Coastguard Worker }
2330*495ae853SAndroid Build Coastguard Worker }
2331*495ae853SAndroid Build Coastguard Worker
2332*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->u4_nalu_info_export_enable && s_video_encode_op.b_is_nalu_info_present)
2333*495ae853SAndroid Build Coastguard Worker {
2334*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_app_ctxt->u1_num_spatial_layers; i++)
2335*495ae853SAndroid Build Coastguard Worker {
2336*495ae853SAndroid Build Coastguard Worker fprintf(ps_app_ctxt->fp_nalu_info, "%s",
2337*495ae853SAndroid Build Coastguard Worker s_video_encode_op.ps_nalu_info_buf[i].pu1_buf);
2338*495ae853SAndroid Build Coastguard Worker }
2339*495ae853SAndroid Build Coastguard Worker }
2340*495ae853SAndroid Build Coastguard Worker
2341*495ae853SAndroid Build Coastguard Worker if(ps_video_encode_op->s_inp_buf.apv_bufs[0])
2342*495ae853SAndroid Build Coastguard Worker {
2343*495ae853SAndroid Build Coastguard Worker for(i = 0; i < DEFAULT_MAX_INPUT_BUFS; i++)
2344*495ae853SAndroid Build Coastguard Worker {
2345*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->as_input_buf[i].pu1_buf ==
2346*495ae853SAndroid Build Coastguard Worker ps_video_encode_op->s_inp_buf.apv_bufs[0])
2347*495ae853SAndroid Build Coastguard Worker {
2348*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->as_input_buf[i].u4_is_free = 1;
2349*495ae853SAndroid Build Coastguard Worker break;
2350*495ae853SAndroid Build Coastguard Worker }
2351*495ae853SAndroid Build Coastguard Worker }
2352*495ae853SAndroid Build Coastguard Worker }
2353*495ae853SAndroid Build Coastguard Worker
2354*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_app_ctxt->u1_num_spatial_layers; i++)
2355*495ae853SAndroid Build Coastguard Worker {
2356*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->as_nalu_info_bufs[pi4_nalu_info_buf_ids[i]].b_is_free = true;
2357*495ae853SAndroid Build Coastguard Worker }
2358*495ae853SAndroid Build Coastguard Worker
2359*495ae853SAndroid Build Coastguard Worker /**********************************************************************
2360*495ae853SAndroid Build Coastguard Worker * Print stats
2361*495ae853SAndroid Build Coastguard Worker **********************************************************************/
2362*495ae853SAndroid Build Coastguard Worker {
2363*495ae853SAndroid Build Coastguard Worker UWORD8 u1_pic_type[][5] = {"IDR", "I", "P", "B", "NA"};
2364*495ae853SAndroid Build Coastguard Worker WORD32 lookup_idx = 0;
2365*495ae853SAndroid Build Coastguard Worker
2366*495ae853SAndroid Build Coastguard Worker if(s_video_encode_op.s_ive_op.u4_encoded_frame_type == IV_IDR_FRAME)
2367*495ae853SAndroid Build Coastguard Worker {
2368*495ae853SAndroid Build Coastguard Worker lookup_idx = 0;
2369*495ae853SAndroid Build Coastguard Worker }
2370*495ae853SAndroid Build Coastguard Worker else if(s_video_encode_op.s_ive_op.u4_encoded_frame_type == IV_I_FRAME)
2371*495ae853SAndroid Build Coastguard Worker {
2372*495ae853SAndroid Build Coastguard Worker lookup_idx = 1;
2373*495ae853SAndroid Build Coastguard Worker }
2374*495ae853SAndroid Build Coastguard Worker else if(s_video_encode_op.s_ive_op.u4_encoded_frame_type == IV_P_FRAME)
2375*495ae853SAndroid Build Coastguard Worker {
2376*495ae853SAndroid Build Coastguard Worker lookup_idx = 2;
2377*495ae853SAndroid Build Coastguard Worker }
2378*495ae853SAndroid Build Coastguard Worker else if(s_video_encode_op.s_ive_op.u4_encoded_frame_type == IV_B_FRAME)
2379*495ae853SAndroid Build Coastguard Worker {
2380*495ae853SAndroid Build Coastguard Worker lookup_idx = 3;
2381*495ae853SAndroid Build Coastguard Worker }
2382*495ae853SAndroid Build Coastguard Worker else if(s_video_encode_op.s_ive_op.u4_encoded_frame_type == IV_NA_FRAME)
2383*495ae853SAndroid Build Coastguard Worker {
2384*495ae853SAndroid Build Coastguard Worker lookup_idx = 4;
2385*495ae853SAndroid Build Coastguard Worker }
2386*495ae853SAndroid Build Coastguard Worker
2387*495ae853SAndroid Build Coastguard Worker if(s_video_encode_op.s_ive_op.u4_encoded_frame_type != IV_NA_FRAME)
2388*495ae853SAndroid Build Coastguard Worker {
2389*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_pics_cnt++;
2390*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->avg_time = u4_total_time / ps_app_ctxt->u4_pics_cnt;
2391*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_total_bytes = ps_video_encode_op->s_out_buf.u4_bytes;
2392*495ae853SAndroid Build Coastguard Worker }
2393*495ae853SAndroid Build Coastguard Worker
2394*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->u4_psnr_enable == 0)
2395*495ae853SAndroid Build Coastguard Worker {
2396*495ae853SAndroid Build Coastguard Worker printf("[%s] PicNum %4d ", u1_pic_type[lookup_idx], ps_app_ctxt->u4_pics_cnt);
2397*495ae853SAndroid Build Coastguard Worker printf(" Bytes : %6d \t", ps_app_ctxt->u4_total_bytes);
2398*495ae853SAndroid Build Coastguard Worker printf(
2399*495ae853SAndroid Build Coastguard Worker "TimeTaken(microsec): %6d "
2400*495ae853SAndroid Build Coastguard Worker "AvgTime: %6d PeakAvgTimeMax: %6d\n",
2401*495ae853SAndroid Build Coastguard Worker timetaken, ps_app_ctxt->avg_time, peak_avg_max);
2402*495ae853SAndroid Build Coastguard Worker }
2403*495ae853SAndroid Build Coastguard Worker }
2404*495ae853SAndroid Build Coastguard Worker
2405*495ae853SAndroid Build Coastguard Worker /* For psnr computation, we need to read the correct input frame and
2406*495ae853SAndroid Build Coastguard Worker * compare with recon. The difficulty with doing it is that we only know
2407*495ae853SAndroid Build Coastguard Worker * that the frame number of recon is monotonically increasing. There
2408*495ae853SAndroid Build Coastguard Worker * may be gaps in the recon if any pre or post enc skip happens. There are
2409*495ae853SAndroid Build Coastguard Worker * 3 senarios
2410*495ae853SAndroid Build Coastguard Worker * 1) A frame is encoded -> returns the pic type
2411*495ae853SAndroid Build Coastguard Worker * 2) A frame is not encoded -> Encoder is waiting, the frame may get
2412*495ae853SAndroid Build Coastguard Worker * encoded later
2413*495ae853SAndroid Build Coastguard Worker * 3) A frame is not encoded -> A post enc or pre enc skip happend. The
2414*495ae853SAndroid Build Coastguard Worker * frame is not going to be encoded
2415*495ae853SAndroid Build Coastguard Worker *
2416*495ae853SAndroid Build Coastguard Worker * The 1st and 2nd scenarios are easy, since we just needs to increment
2417*495ae853SAndroid Build Coastguard Worker * recon cnt whenever we get a valid recon. This cnt can we used to
2418*495ae853SAndroid Build Coastguard Worker * sync the recon and input
2419*495ae853SAndroid Build Coastguard Worker * 3rd scenario in conjuction with 2nd will pose problems. Even if
2420*495ae853SAndroid Build Coastguard Worker * the returning frame is NA, we donot know we should increment the
2421*495ae853SAndroid Build Coastguard Worker * recon cnt or not becasue it can be case 2 or case 3.
2422*495ae853SAndroid Build Coastguard Worker *
2423*495ae853SAndroid Build Coastguard Worker * Solutions:
2424*495ae853SAndroid Build Coastguard Worker * -------------------------
2425*495ae853SAndroid Build Coastguard Worker * One way to over come this will be to return more information as of
2426*495ae853SAndroid Build Coastguard Worker * the frame type. We can send if a frame was skipped as a part of the
2427*495ae853SAndroid Build Coastguard Worker * return frame type.
2428*495ae853SAndroid Build Coastguard Worker * This will not work. Since the output and recon are not in sync, we
2429*495ae853SAndroid Build Coastguard Worker * cannot use the current output frame type to determine if a recon
2430*495ae853SAndroid Build Coastguard Worker * is present currently or not. We need some other way to acheive this.
2431*495ae853SAndroid Build Coastguard Worker *
2432*495ae853SAndroid Build Coastguard Worker * Other way to do this which is cleaner and maintains the seperation
2433*495ae853SAndroid Build Coastguard Worker * between recon and the ouptut is to set the width [& height] of output
2434*495ae853SAndroid Build Coastguard Worker * recon buffer to be zero. Hence we will in effect be saying :"look there
2435*495ae853SAndroid Build Coastguard Worker * is a recon, but due to frame not being encoded it is having a width 0".
2436*495ae853SAndroid Build Coastguard Worker * To be more clear we need to make height also to be zero.
2437*495ae853SAndroid Build Coastguard Worker *
2438*495ae853SAndroid Build Coastguard Worker * But are we using these variables for allocating and deallocating
2439*495ae853SAndroid Build Coastguard Worker * the buffers some where ? No we are not. The buffer gets re-init
2440*495ae853SAndroid Build Coastguard Worker * at every encode call
2441*495ae853SAndroid Build Coastguard Worker *
2442*495ae853SAndroid Build Coastguard Worker * Fixes
2443*495ae853SAndroid Build Coastguard Worker * ------------------------
2444*495ae853SAndroid Build Coastguard Worker * Currently the recon buff width and height are set in the encoder.
2445*495ae853SAndroid Build Coastguard Worker * This will not work now because since recon and input are not
2446*495ae853SAndroid Build Coastguard Worker * in sync. Hence a recon buff sent at time stamp x will get used to
2447*495ae853SAndroid Build Coastguard Worker * fill recon of input at time stamp y (x > y). If we reduced the
2448*495ae853SAndroid Build Coastguard Worker * frame dimensions in between, the recon buffer will not have enough
2449*495ae853SAndroid Build Coastguard Worker * space. Hence we need to set the with and height appropriatley inside
2450*495ae853SAndroid Build Coastguard Worker * lib itself.
2451*495ae853SAndroid Build Coastguard Worker */
2452*495ae853SAndroid Build Coastguard Worker
2453*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->u4_recon_enable || ps_app_ctxt->u4_chksum_enable ||
2454*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_psnr_enable)
2455*495ae853SAndroid Build Coastguard Worker {
2456*495ae853SAndroid Build Coastguard Worker if(ps_video_encode_op->dump_recon)
2457*495ae853SAndroid Build Coastguard Worker {
2458*495ae853SAndroid Build Coastguard Worker s_recon_buf = ps_video_encode_op->s_recon_buf;
2459*495ae853SAndroid Build Coastguard Worker
2460*495ae853SAndroid Build Coastguard Worker /* Read input for psnr computuation */
2461*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->u4_psnr_enable) read_input(ps_app_ctxt->fp_psnr_ip, &s_inp_buf);
2462*495ae853SAndroid Build Coastguard Worker
2463*495ae853SAndroid Build Coastguard Worker /* if we have a valid recon buffer do the assocated tasks */
2464*495ae853SAndroid Build Coastguard Worker if(s_recon_buf.au4_wd[0])
2465*495ae853SAndroid Build Coastguard Worker {
2466*495ae853SAndroid Build Coastguard Worker /* Dump recon when enabled, and output bytes != 0 */
2467*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->u4_recon_enable)
2468*495ae853SAndroid Build Coastguard Worker {
2469*495ae853SAndroid Build Coastguard Worker status = write_recon(ps_app_ctxt->fp_recon, &s_recon_buf);
2470*495ae853SAndroid Build Coastguard Worker if(IV_SUCCESS != status)
2471*495ae853SAndroid Build Coastguard Worker {
2472*495ae853SAndroid Build Coastguard Worker printf("Error: Unable to write to recon file\n");
2473*495ae853SAndroid Build Coastguard Worker break;
2474*495ae853SAndroid Build Coastguard Worker }
2475*495ae853SAndroid Build Coastguard Worker }
2476*495ae853SAndroid Build Coastguard Worker
2477*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->u4_psnr_enable)
2478*495ae853SAndroid Build Coastguard Worker {
2479*495ae853SAndroid Build Coastguard Worker compute_psnr(ps_app_ctxt, &s_recon_buf, &s_inp_buf);
2480*495ae853SAndroid Build Coastguard Worker }
2481*495ae853SAndroid Build Coastguard Worker
2482*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->u4_chksum_enable)
2483*495ae853SAndroid Build Coastguard Worker {
2484*495ae853SAndroid Build Coastguard Worker WORD32 comp, num_comp = 2;
2485*495ae853SAndroid Build Coastguard Worker
2486*495ae853SAndroid Build Coastguard Worker if(IV_YUV_420P == s_recon_buf.e_color_fmt) num_comp = 3;
2487*495ae853SAndroid Build Coastguard Worker
2488*495ae853SAndroid Build Coastguard Worker for(comp = 0; comp < num_comp; comp++)
2489*495ae853SAndroid Build Coastguard Worker {
2490*495ae853SAndroid Build Coastguard Worker UWORD8 au1_chksum[16];
2491*495ae853SAndroid Build Coastguard Worker calc_md5_cksum((UWORD8 *) s_recon_buf.apv_bufs[comp],
2492*495ae853SAndroid Build Coastguard Worker s_recon_buf.au4_strd[comp], s_recon_buf.au4_wd[comp],
2493*495ae853SAndroid Build Coastguard Worker s_recon_buf.au4_ht[comp], au1_chksum);
2494*495ae853SAndroid Build Coastguard Worker fwrite(au1_chksum, sizeof(UWORD8), 16, ps_app_ctxt->fp_chksum);
2495*495ae853SAndroid Build Coastguard Worker }
2496*495ae853SAndroid Build Coastguard Worker }
2497*495ae853SAndroid Build Coastguard Worker }
2498*495ae853SAndroid Build Coastguard Worker }
2499*495ae853SAndroid Build Coastguard Worker }
2500*495ae853SAndroid Build Coastguard Worker
2501*495ae853SAndroid Build Coastguard Worker u4_timestamp_low++;
2502*495ae853SAndroid Build Coastguard Worker
2503*495ae853SAndroid Build Coastguard Worker /* Break if all the encoded frames are taken from encoder */
2504*495ae853SAndroid Build Coastguard Worker if(1 == ps_video_encode_op->u4_is_last)
2505*495ae853SAndroid Build Coastguard Worker {
2506*495ae853SAndroid Build Coastguard Worker break;
2507*495ae853SAndroid Build Coastguard Worker }
2508*495ae853SAndroid Build Coastguard Worker }
2509*495ae853SAndroid Build Coastguard Worker
2510*495ae853SAndroid Build Coastguard Worker /* Pic count is 1 more than actual num frames encoded, because last call is to
2511*495ae853SAndroid Build Coastguard Worker * just get the output */
2512*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_pics_cnt--;
2513*495ae853SAndroid Build Coastguard Worker
2514*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->u4_psnr_enable)
2515*495ae853SAndroid Build Coastguard Worker {
2516*495ae853SAndroid Build Coastguard Worker print_average_psnr(ps_app_ctxt);
2517*495ae853SAndroid Build Coastguard Worker }
2518*495ae853SAndroid Build Coastguard Worker
2519*495ae853SAndroid Build Coastguard Worker /* house keeping operations */
2520*495ae853SAndroid Build Coastguard Worker fclose(ps_app_ctxt->fp_ip);
2521*495ae853SAndroid Build Coastguard Worker fclose(ps_app_ctxt->fp_op);
2522*495ae853SAndroid Build Coastguard Worker if(1 == ps_app_ctxt->u4_recon_enable)
2523*495ae853SAndroid Build Coastguard Worker {
2524*495ae853SAndroid Build Coastguard Worker fclose(ps_app_ctxt->fp_recon);
2525*495ae853SAndroid Build Coastguard Worker }
2526*495ae853SAndroid Build Coastguard Worker if(1 == ps_app_ctxt->u4_nalu_info_export_enable)
2527*495ae853SAndroid Build Coastguard Worker {
2528*495ae853SAndroid Build Coastguard Worker fclose(ps_app_ctxt->fp_nalu_info);
2529*495ae853SAndroid Build Coastguard Worker }
2530*495ae853SAndroid Build Coastguard Worker if(1 == ps_app_ctxt->u4_chksum_enable)
2531*495ae853SAndroid Build Coastguard Worker {
2532*495ae853SAndroid Build Coastguard Worker fclose(ps_app_ctxt->fp_chksum);
2533*495ae853SAndroid Build Coastguard Worker }
2534*495ae853SAndroid Build Coastguard Worker if(1 == ps_app_ctxt->u4_psnr_enable)
2535*495ae853SAndroid Build Coastguard Worker {
2536*495ae853SAndroid Build Coastguard Worker fclose(ps_app_ctxt->fp_psnr_ip);
2537*495ae853SAndroid Build Coastguard Worker }
2538*495ae853SAndroid Build Coastguard Worker
2539*495ae853SAndroid Build Coastguard Worker if(0 != ps_app_ctxt->u4_mb_info_type)
2540*495ae853SAndroid Build Coastguard Worker {
2541*495ae853SAndroid Build Coastguard Worker fclose(ps_app_ctxt->fp_mb_info);
2542*495ae853SAndroid Build Coastguard Worker }
2543*495ae853SAndroid Build Coastguard Worker if(ps_app_ctxt->u4_pic_info_type)
2544*495ae853SAndroid Build Coastguard Worker {
2545*495ae853SAndroid Build Coastguard Worker fclose(ps_app_ctxt->fp_pic_info);
2546*495ae853SAndroid Build Coastguard Worker }
2547*495ae853SAndroid Build Coastguard Worker
2548*495ae853SAndroid Build Coastguard Worker free_input(ps_app_ctxt);
2549*495ae853SAndroid Build Coastguard Worker free_output(ps_app_ctxt);
2550*495ae853SAndroid Build Coastguard Worker free_recon(ps_app_ctxt);
2551*495ae853SAndroid Build Coastguard Worker free_nalu_info_bufs(ps_app_ctxt);
2552*495ae853SAndroid Build Coastguard Worker
2553*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(s_video_encode_ip.ps_nalu_info_buf);
2554*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(s_video_encode_op.ps_nalu_info_buf);
2555*495ae853SAndroid Build Coastguard Worker
2556*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(pi4_nalu_info_buf_ids);
2557*495ae853SAndroid Build Coastguard Worker }
2558*495ae853SAndroid Build Coastguard Worker
init_default_rc_params(app_ctxt_t * ps_app_ctxt)2559*495ae853SAndroid Build Coastguard Worker void init_default_rc_params(app_ctxt_t *ps_app_ctxt)
2560*495ae853SAndroid Build Coastguard Worker {
2561*495ae853SAndroid Build Coastguard Worker UWORD8 i;
2562*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_app_ctxt->u1_num_spatial_layers; i++)
2563*495ae853SAndroid Build Coastguard Worker {
2564*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_max_bitrate[i] = DEFAULT_MAX_BITRATE;
2565*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_bitrate[i] = DEFAULT_BITRATE;
2566*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_i_qp[i] = DEFAULT_I_QP;
2567*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_p_qp[i] = DEFAULT_P_QP;
2568*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_b_qp[i] = DEFAULT_B_QP;
2569*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_i_qp_min[i] = DEFAULT_QP_MIN;
2570*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_i_qp_max[i] = DEFAULT_QP_MAX;
2571*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_p_qp_min[i] = DEFAULT_QP_MIN;
2572*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_p_qp_max[i] = DEFAULT_QP_MAX;
2573*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_b_qp_min[i] = DEFAULT_QP_MIN;
2574*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_b_qp_max[i] = DEFAULT_QP_MAX;
2575*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_vbv_buffer_delay[i] = 1000;
2576*495ae853SAndroid Build Coastguard Worker }
2577*495ae853SAndroid Build Coastguard Worker
2578*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->u4_total_bytes = 0;
2579*495ae853SAndroid Build Coastguard Worker }
2580*495ae853SAndroid Build Coastguard Worker
2581*495ae853SAndroid Build Coastguard Worker /* Allocate memory to dynamic arrays holding RC information */
alloc_rc_params(app_ctxt_t * ps_app_ctxt)2582*495ae853SAndroid Build Coastguard Worker void alloc_rc_params(app_ctxt_t *ps_app_ctxt)
2583*495ae853SAndroid Build Coastguard Worker {
2584*495ae853SAndroid Build Coastguard Worker UWORD8 u1_num_spatial_layers = ps_app_ctxt->u1_num_spatial_layers;
2585*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_max_bitrate =
2586*495ae853SAndroid Build Coastguard Worker (UWORD32 *) isvca_aligned_malloc(16, sizeof(UWORD32) * u1_num_spatial_layers);
2587*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_bitrate =
2588*495ae853SAndroid Build Coastguard Worker (UWORD32 *) isvca_aligned_malloc(16, sizeof(UWORD32) * u1_num_spatial_layers);
2589*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_i_qp =
2590*495ae853SAndroid Build Coastguard Worker (UWORD32 *) isvca_aligned_malloc(16, sizeof(UWORD32) * u1_num_spatial_layers);
2591*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_p_qp =
2592*495ae853SAndroid Build Coastguard Worker (UWORD32 *) isvca_aligned_malloc(16, sizeof(UWORD32) * u1_num_spatial_layers);
2593*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_b_qp =
2594*495ae853SAndroid Build Coastguard Worker (UWORD32 *) isvca_aligned_malloc(16, sizeof(UWORD32) * u1_num_spatial_layers);
2595*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_i_qp_min =
2596*495ae853SAndroid Build Coastguard Worker (UWORD32 *) isvca_aligned_malloc(16, sizeof(UWORD32) * u1_num_spatial_layers);
2597*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_i_qp_max =
2598*495ae853SAndroid Build Coastguard Worker (UWORD32 *) isvca_aligned_malloc(16, sizeof(UWORD32) * u1_num_spatial_layers);
2599*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_p_qp_min =
2600*495ae853SAndroid Build Coastguard Worker (UWORD32 *) isvca_aligned_malloc(16, sizeof(UWORD32) * u1_num_spatial_layers);
2601*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_p_qp_max =
2602*495ae853SAndroid Build Coastguard Worker (UWORD32 *) isvca_aligned_malloc(16, sizeof(UWORD32) * u1_num_spatial_layers);
2603*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_b_qp_min =
2604*495ae853SAndroid Build Coastguard Worker (UWORD32 *) isvca_aligned_malloc(16, sizeof(UWORD32) * u1_num_spatial_layers);
2605*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_b_qp_max =
2606*495ae853SAndroid Build Coastguard Worker (UWORD32 *) isvca_aligned_malloc(16, sizeof(UWORD32) * u1_num_spatial_layers);
2607*495ae853SAndroid Build Coastguard Worker ps_app_ctxt->pu4_vbv_buffer_delay =
2608*495ae853SAndroid Build Coastguard Worker (UWORD32 *) isvca_aligned_malloc(16, sizeof(UWORD32) * u1_num_spatial_layers);
2609*495ae853SAndroid Build Coastguard Worker }
2610*495ae853SAndroid Build Coastguard Worker
2611*495ae853SAndroid Build Coastguard Worker /* Free memory allocated to dynamic arrays holding RC information */
free_rc_params(app_ctxt_t * ps_app_ctxt)2612*495ae853SAndroid Build Coastguard Worker void free_rc_params(app_ctxt_t *ps_app_ctxt)
2613*495ae853SAndroid Build Coastguard Worker {
2614*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(ps_app_ctxt->pu4_max_bitrate);
2615*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(ps_app_ctxt->pu4_bitrate);
2616*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(ps_app_ctxt->pu4_i_qp);
2617*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(ps_app_ctxt->pu4_p_qp);
2618*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(ps_app_ctxt->pu4_b_qp);
2619*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(ps_app_ctxt->pu4_i_qp_min);
2620*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(ps_app_ctxt->pu4_i_qp_max);
2621*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(ps_app_ctxt->pu4_p_qp_min);
2622*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(ps_app_ctxt->pu4_p_qp_max);
2623*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(ps_app_ctxt->pu4_b_qp_min);
2624*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(ps_app_ctxt->pu4_b_qp_max);
2625*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(ps_app_ctxt->pu4_vbv_buffer_delay);
2626*495ae853SAndroid Build Coastguard Worker }
2627*495ae853SAndroid Build Coastguard Worker
2628*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2629*495ae853SAndroid Build Coastguard Worker /* */
2630*495ae853SAndroid Build Coastguard Worker /* Function Name : main */
2631*495ae853SAndroid Build Coastguard Worker /* */
2632*495ae853SAndroid Build Coastguard Worker /* Description : Application to demonstrate codec API */
2633*495ae853SAndroid Build Coastguard Worker /* */
2634*495ae853SAndroid Build Coastguard Worker /* */
2635*495ae853SAndroid Build Coastguard Worker /* Inputs : argc - Number of arguments */
2636*495ae853SAndroid Build Coastguard Worker /* argv[] - Arguments */
2637*495ae853SAndroid Build Coastguard Worker /* Globals : */
2638*495ae853SAndroid Build Coastguard Worker /* Processing : Shows how to use create, process, control and delete */
2639*495ae853SAndroid Build Coastguard Worker /* */
2640*495ae853SAndroid Build Coastguard Worker /* Outputs : Codec output in a file */
2641*495ae853SAndroid Build Coastguard Worker /* Returns : */
2642*495ae853SAndroid Build Coastguard Worker /* */
2643*495ae853SAndroid Build Coastguard Worker /* Issues : Assumes both PROFILE_ENABLE to be */
2644*495ae853SAndroid Build Coastguard Worker /* defined for multithread decode-display working */
2645*495ae853SAndroid Build Coastguard Worker /* */
2646*495ae853SAndroid Build Coastguard Worker /* Revision History: */
2647*495ae853SAndroid Build Coastguard Worker /* */
2648*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
2649*495ae853SAndroid Build Coastguard Worker /* 20 11 2013 100189 Initial Version */
2650*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2651*495ae853SAndroid Build Coastguard Worker #ifdef IOS
h264enc_main(char * homedir,char * documentdir,int screen_wd,int screen_ht)2652*495ae853SAndroid Build Coastguard Worker int h264enc_main(char *homedir, char *documentdir, int screen_wd, int screen_ht)
2653*495ae853SAndroid Build Coastguard Worker #else
2654*495ae853SAndroid Build Coastguard Worker int main(int argc, char *argv[])
2655*495ae853SAndroid Build Coastguard Worker #endif
2656*495ae853SAndroid Build Coastguard Worker {
2657*495ae853SAndroid Build Coastguard Worker /* Config Parameters for Encoding */
2658*495ae853SAndroid Build Coastguard Worker app_ctxt_t s_app_ctxt;
2659*495ae853SAndroid Build Coastguard Worker
2660*495ae853SAndroid Build Coastguard Worker /* error string */
2661*495ae853SAndroid Build Coastguard Worker CHAR ac_error[2 * STRLENGTH];
2662*495ae853SAndroid Build Coastguard Worker
2663*495ae853SAndroid Build Coastguard Worker /* config file name */
2664*495ae853SAndroid Build Coastguard Worker CHAR ac_cfg_fname[STRLENGTH];
2665*495ae853SAndroid Build Coastguard Worker
2666*495ae853SAndroid Build Coastguard Worker /* error status */
2667*495ae853SAndroid Build Coastguard Worker IV_STATUS_T status = IV_SUCCESS;
2668*495ae853SAndroid Build Coastguard Worker #ifdef IOS
2669*495ae853SAndroid Build Coastguard Worker /* temp var */
2670*495ae853SAndroid Build Coastguard Worker CHAR filename_with_path[STRLENGTH];
2671*495ae853SAndroid Build Coastguard Worker #endif
2672*495ae853SAndroid Build Coastguard Worker WORD32 num_mem_recs;
2673*495ae853SAndroid Build Coastguard Worker iv_obj_t *ps_enc;
2674*495ae853SAndroid Build Coastguard Worker WORD32 i;
2675*495ae853SAndroid Build Coastguard Worker FILE *fp_cfg = NULL;
2676*495ae853SAndroid Build Coastguard Worker
2677*495ae853SAndroid Build Coastguard Worker #ifdef X86_MINGW
2678*495ae853SAndroid Build Coastguard Worker
2679*495ae853SAndroid Build Coastguard Worker /* For getting printfs without any delay in eclipse */
2680*495ae853SAndroid Build Coastguard Worker setvbuf(stdout, NULL, _IONBF, 0);
2681*495ae853SAndroid Build Coastguard Worker setvbuf(stderr, NULL, _IONBF, 0);
2682*495ae853SAndroid Build Coastguard Worker
2683*495ae853SAndroid Build Coastguard Worker #endif
2684*495ae853SAndroid Build Coastguard Worker
2685*495ae853SAndroid Build Coastguard Worker init_default_params(&s_app_ctxt);
2686*495ae853SAndroid Build Coastguard Worker
2687*495ae853SAndroid Build Coastguard Worker #ifndef IOS
2688*495ae853SAndroid Build Coastguard Worker
2689*495ae853SAndroid Build Coastguard Worker /* Usage */
2690*495ae853SAndroid Build Coastguard Worker if(argc < 2)
2691*495ae853SAndroid Build Coastguard Worker {
2692*495ae853SAndroid Build Coastguard Worker printf("Using enc.cfg as configuration file \n");
2693*495ae853SAndroid Build Coastguard Worker strcpy(ac_cfg_fname, "enc.cfg");
2694*495ae853SAndroid Build Coastguard Worker }
2695*495ae853SAndroid Build Coastguard Worker else if(argc == 2)
2696*495ae853SAndroid Build Coastguard Worker {
2697*495ae853SAndroid Build Coastguard Worker if(!strcmp(argv[1], "--help"))
2698*495ae853SAndroid Build Coastguard Worker {
2699*495ae853SAndroid Build Coastguard Worker print_usage();
2700*495ae853SAndroid Build Coastguard Worker exit(-1);
2701*495ae853SAndroid Build Coastguard Worker }
2702*495ae853SAndroid Build Coastguard Worker strcpy(ac_cfg_fname, argv[1]);
2703*495ae853SAndroid Build Coastguard Worker }
2704*495ae853SAndroid Build Coastguard Worker
2705*495ae853SAndroid Build Coastguard Worker #else
2706*495ae853SAndroid Build Coastguard Worker strcpy(ac_cfg_fname, "test.cfg");
2707*495ae853SAndroid Build Coastguard Worker
2708*495ae853SAndroid Build Coastguard Worker #endif
2709*495ae853SAndroid Build Coastguard Worker
2710*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2711*495ae853SAndroid Build Coastguard Worker /* Parse arguments */
2712*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2713*495ae853SAndroid Build Coastguard Worker
2714*495ae853SAndroid Build Coastguard Worker #ifndef IOS
2715*495ae853SAndroid Build Coastguard Worker
2716*495ae853SAndroid Build Coastguard Worker /* Read command line arguments */
2717*495ae853SAndroid Build Coastguard Worker if(argc > 2)
2718*495ae853SAndroid Build Coastguard Worker {
2719*495ae853SAndroid Build Coastguard Worker for(i = 1; i + 1 < argc; i += 2)
2720*495ae853SAndroid Build Coastguard Worker {
2721*495ae853SAndroid Build Coastguard Worker if(CONFIG == get_argument(argv[i]))
2722*495ae853SAndroid Build Coastguard Worker {
2723*495ae853SAndroid Build Coastguard Worker strcpy(ac_cfg_fname, argv[i + 1]);
2724*495ae853SAndroid Build Coastguard Worker if((fp_cfg = fopen(ac_cfg_fname, "r")) == NULL)
2725*495ae853SAndroid Build Coastguard Worker {
2726*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Could not open Configuration file %s",
2727*495ae853SAndroid Build Coastguard Worker ac_cfg_fname);
2728*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
2729*495ae853SAndroid Build Coastguard Worker }
2730*495ae853SAndroid Build Coastguard Worker read_cfg_file(&s_app_ctxt, fp_cfg);
2731*495ae853SAndroid Build Coastguard Worker fclose(fp_cfg);
2732*495ae853SAndroid Build Coastguard Worker }
2733*495ae853SAndroid Build Coastguard Worker else
2734*495ae853SAndroid Build Coastguard Worker {
2735*495ae853SAndroid Build Coastguard Worker parse_argument(&s_app_ctxt, argv[i], argv[i + 1]);
2736*495ae853SAndroid Build Coastguard Worker }
2737*495ae853SAndroid Build Coastguard Worker }
2738*495ae853SAndroid Build Coastguard Worker }
2739*495ae853SAndroid Build Coastguard Worker else
2740*495ae853SAndroid Build Coastguard Worker {
2741*495ae853SAndroid Build Coastguard Worker if((fp_cfg = fopen(ac_cfg_fname, "r")) == NULL)
2742*495ae853SAndroid Build Coastguard Worker {
2743*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Could not open Configuration file %s",
2744*495ae853SAndroid Build Coastguard Worker ac_cfg_fname);
2745*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
2746*495ae853SAndroid Build Coastguard Worker }
2747*495ae853SAndroid Build Coastguard Worker read_cfg_file(&s_app_ctxt, fp_cfg);
2748*495ae853SAndroid Build Coastguard Worker fclose(fp_cfg);
2749*495ae853SAndroid Build Coastguard Worker }
2750*495ae853SAndroid Build Coastguard Worker
2751*495ae853SAndroid Build Coastguard Worker alloc_rc_params(&s_app_ctxt);
2752*495ae853SAndroid Build Coastguard Worker init_default_rc_params(&s_app_ctxt);
2753*495ae853SAndroid Build Coastguard Worker
2754*495ae853SAndroid Build Coastguard Worker if(argc > 2)
2755*495ae853SAndroid Build Coastguard Worker {
2756*495ae853SAndroid Build Coastguard Worker for(i = 1; i + 1 < argc; i += 2)
2757*495ae853SAndroid Build Coastguard Worker {
2758*495ae853SAndroid Build Coastguard Worker if(CONFIG == get_argument(argv[i]))
2759*495ae853SAndroid Build Coastguard Worker {
2760*495ae853SAndroid Build Coastguard Worker strcpy(ac_cfg_fname, argv[i + 1]);
2761*495ae853SAndroid Build Coastguard Worker if((fp_cfg = fopen(ac_cfg_fname, "r")) == NULL)
2762*495ae853SAndroid Build Coastguard Worker {
2763*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Could not open Configuration file %s",
2764*495ae853SAndroid Build Coastguard Worker ac_cfg_fname);
2765*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
2766*495ae853SAndroid Build Coastguard Worker }
2767*495ae853SAndroid Build Coastguard Worker read_cfg_file_rc_params(&s_app_ctxt, fp_cfg);
2768*495ae853SAndroid Build Coastguard Worker fclose(fp_cfg);
2769*495ae853SAndroid Build Coastguard Worker }
2770*495ae853SAndroid Build Coastguard Worker else
2771*495ae853SAndroid Build Coastguard Worker {
2772*495ae853SAndroid Build Coastguard Worker parse_rc_argument(&s_app_ctxt, argv[i], argv[i + 1]);
2773*495ae853SAndroid Build Coastguard Worker }
2774*495ae853SAndroid Build Coastguard Worker }
2775*495ae853SAndroid Build Coastguard Worker }
2776*495ae853SAndroid Build Coastguard Worker else
2777*495ae853SAndroid Build Coastguard Worker {
2778*495ae853SAndroid Build Coastguard Worker if((fp_cfg = fopen(ac_cfg_fname, "r")) == NULL)
2779*495ae853SAndroid Build Coastguard Worker {
2780*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Could not open Configuration file %s",
2781*495ae853SAndroid Build Coastguard Worker ac_cfg_fname);
2782*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
2783*495ae853SAndroid Build Coastguard Worker }
2784*495ae853SAndroid Build Coastguard Worker read_cfg_file_rc_params(&s_app_ctxt, fp_cfg);
2785*495ae853SAndroid Build Coastguard Worker fclose(fp_cfg);
2786*495ae853SAndroid Build Coastguard Worker }
2787*495ae853SAndroid Build Coastguard Worker
2788*495ae853SAndroid Build Coastguard Worker #else
2789*495ae853SAndroid Build Coastguard Worker
2790*495ae853SAndroid Build Coastguard Worker sprintf(filename_with_path, "%s/%s", homedir, "enc.cfg");
2791*495ae853SAndroid Build Coastguard Worker if((fp_cfg = fopen(filename_with_path, "r")) == NULL)
2792*495ae853SAndroid Build Coastguard Worker {
2793*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Could not open Configuration file %s",
2794*495ae853SAndroid Build Coastguard Worker ac_cfg_fname);
2795*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
2796*495ae853SAndroid Build Coastguard Worker }
2797*495ae853SAndroid Build Coastguard Worker read_cfg_file(&s_app_ctxt, fp_cfg);
2798*495ae853SAndroid Build Coastguard Worker fclose(fp_cfg);
2799*495ae853SAndroid Build Coastguard Worker
2800*495ae853SAndroid Build Coastguard Worker #endif
2801*495ae853SAndroid Build Coastguard Worker
2802*495ae853SAndroid Build Coastguard Worker validate_params(&s_app_ctxt);
2803*495ae853SAndroid Build Coastguard Worker
2804*495ae853SAndroid Build Coastguard Worker s_app_ctxt.u4_max_wd = MAX(s_app_ctxt.u4_max_wd, s_app_ctxt.u4_wd);
2805*495ae853SAndroid Build Coastguard Worker s_app_ctxt.u4_max_ht = MAX(s_app_ctxt.u4_max_ht, s_app_ctxt.u4_ht);
2806*495ae853SAndroid Build Coastguard Worker
2807*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2808*495ae853SAndroid Build Coastguard Worker /* Getting Number of MemRecords */
2809*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2810*495ae853SAndroid Build Coastguard Worker {
2811*495ae853SAndroid Build Coastguard Worker isvce_num_mem_rec_ip_t s_num_mem_rec_ip;
2812*495ae853SAndroid Build Coastguard Worker isvce_num_mem_rec_op_t s_num_mem_rec_op;
2813*495ae853SAndroid Build Coastguard Worker
2814*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_GET_NUM_MEM_REC, ISVCE_CMD_CT_NA};
2815*495ae853SAndroid Build Coastguard Worker
2816*495ae853SAndroid Build Coastguard Worker s_num_mem_rec_ip.s_ive_ip.u4_size = sizeof(isvce_num_mem_rec_ip_t);
2817*495ae853SAndroid Build Coastguard Worker s_num_mem_rec_op.s_ive_op.u4_size = sizeof(isvce_num_mem_rec_op_t);
2818*495ae853SAndroid Build Coastguard Worker
2819*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(0, &s_num_mem_rec_ip, &s_num_mem_rec_op, &s_api_cmds);
2820*495ae853SAndroid Build Coastguard Worker
2821*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
2822*495ae853SAndroid Build Coastguard Worker {
2823*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Get number of memory records failed = 0x%x\n",
2824*495ae853SAndroid Build Coastguard Worker s_num_mem_rec_op.s_ive_op.u4_error_code);
2825*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
2826*495ae853SAndroid Build Coastguard Worker }
2827*495ae853SAndroid Build Coastguard Worker
2828*495ae853SAndroid Build Coastguard Worker s_app_ctxt.u4_num_mem_rec = num_mem_recs = s_num_mem_rec_op.s_ive_op.u4_num_mem_rec;
2829*495ae853SAndroid Build Coastguard Worker }
2830*495ae853SAndroid Build Coastguard Worker
2831*495ae853SAndroid Build Coastguard Worker /* Allocate array to hold memory records */
2832*495ae853SAndroid Build Coastguard Worker s_app_ctxt.ps_mem_rec = (iv_mem_rec_t *) malloc(num_mem_recs * sizeof(iv_mem_rec_t));
2833*495ae853SAndroid Build Coastguard Worker if(NULL == s_app_ctxt.ps_mem_rec)
2834*495ae853SAndroid Build Coastguard Worker {
2835*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1,
2836*495ae853SAndroid Build Coastguard Worker "Unable to allocate memory for hold memory records: Size %d",
2837*495ae853SAndroid Build Coastguard Worker (WORD32) (num_mem_recs * sizeof(iv_mem_rec_t)));
2838*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
2839*495ae853SAndroid Build Coastguard Worker }
2840*495ae853SAndroid Build Coastguard Worker
2841*495ae853SAndroid Build Coastguard Worker {
2842*495ae853SAndroid Build Coastguard Worker iv_mem_rec_t *ps_mem_rec;
2843*495ae853SAndroid Build Coastguard Worker ps_mem_rec = s_app_ctxt.ps_mem_rec;
2844*495ae853SAndroid Build Coastguard Worker for(i = 0; i < num_mem_recs; i++)
2845*495ae853SAndroid Build Coastguard Worker {
2846*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_size = sizeof(iv_mem_rec_t);
2847*495ae853SAndroid Build Coastguard Worker ps_mem_rec->pv_base = NULL;
2848*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size = 0;
2849*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_alignment = 0;
2850*495ae853SAndroid Build Coastguard Worker ps_mem_rec->e_mem_type = IV_NA_MEM_TYPE;
2851*495ae853SAndroid Build Coastguard Worker
2852*495ae853SAndroid Build Coastguard Worker ps_mem_rec++;
2853*495ae853SAndroid Build Coastguard Worker }
2854*495ae853SAndroid Build Coastguard Worker }
2855*495ae853SAndroid Build Coastguard Worker
2856*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2857*495ae853SAndroid Build Coastguard Worker /* Getting MemRecords Attributes */
2858*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2859*495ae853SAndroid Build Coastguard Worker {
2860*495ae853SAndroid Build Coastguard Worker isvce_fill_mem_rec_ip_t s_fill_mem_rec_ip;
2861*495ae853SAndroid Build Coastguard Worker isvce_fill_mem_rec_op_t s_fill_mem_rec_op;
2862*495ae853SAndroid Build Coastguard Worker
2863*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_FILL_NUM_MEM_REC, ISVCE_CMD_CT_NA};
2864*495ae853SAndroid Build Coastguard Worker
2865*495ae853SAndroid Build Coastguard Worker s_fill_mem_rec_ip.s_ive_ip.u4_size = sizeof(isvce_fill_mem_rec_ip_t);
2866*495ae853SAndroid Build Coastguard Worker s_fill_mem_rec_op.s_ive_op.u4_size = sizeof(isvce_fill_mem_rec_op_t);
2867*495ae853SAndroid Build Coastguard Worker
2868*495ae853SAndroid Build Coastguard Worker s_fill_mem_rec_ip.s_ive_ip.ps_mem_rec = s_app_ctxt.ps_mem_rec;
2869*495ae853SAndroid Build Coastguard Worker s_fill_mem_rec_ip.s_ive_ip.u4_num_mem_rec = s_app_ctxt.u4_num_mem_rec;
2870*495ae853SAndroid Build Coastguard Worker s_fill_mem_rec_ip.s_ive_ip.u4_max_wd = s_app_ctxt.u4_max_wd;
2871*495ae853SAndroid Build Coastguard Worker s_fill_mem_rec_ip.s_ive_ip.u4_max_ht = s_app_ctxt.u4_max_ht;
2872*495ae853SAndroid Build Coastguard Worker s_fill_mem_rec_ip.u4_wd = s_app_ctxt.u4_wd;
2873*495ae853SAndroid Build Coastguard Worker s_fill_mem_rec_ip.u4_ht = s_app_ctxt.u4_ht;
2874*495ae853SAndroid Build Coastguard Worker s_fill_mem_rec_ip.s_ive_ip.u4_max_level = s_app_ctxt.u4_max_level;
2875*495ae853SAndroid Build Coastguard Worker s_fill_mem_rec_ip.s_ive_ip.e_color_format = DEFAULT_INP_COLOR_FMT;
2876*495ae853SAndroid Build Coastguard Worker s_fill_mem_rec_ip.s_ive_ip.u4_max_ref_cnt = DEFAULT_MAX_REF_FRM;
2877*495ae853SAndroid Build Coastguard Worker s_fill_mem_rec_ip.s_ive_ip.u4_max_reorder_cnt = DEFAULT_MAX_REORDER_FRM;
2878*495ae853SAndroid Build Coastguard Worker s_fill_mem_rec_ip.s_ive_ip.u4_max_srch_rng_x = DEFAULT_MAX_SRCH_RANGE_X;
2879*495ae853SAndroid Build Coastguard Worker s_fill_mem_rec_ip.s_ive_ip.u4_max_srch_rng_y = DEFAULT_MAX_SRCH_RANGE_Y;
2880*495ae853SAndroid Build Coastguard Worker s_fill_mem_rec_ip.s_svc_inp_params.u1_num_temporal_layers =
2881*495ae853SAndroid Build Coastguard Worker s_app_ctxt.u1_num_temporal_layers;
2882*495ae853SAndroid Build Coastguard Worker s_fill_mem_rec_ip.s_svc_inp_params.u1_num_spatial_layers = s_app_ctxt.u1_num_spatial_layers;
2883*495ae853SAndroid Build Coastguard Worker s_fill_mem_rec_ip.s_svc_inp_params.d_spatial_res_ratio = s_app_ctxt.d_spatial_res_ratio;
2884*495ae853SAndroid Build Coastguard Worker
2885*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(0, &s_fill_mem_rec_ip, &s_fill_mem_rec_op, &s_api_cmds);
2886*495ae853SAndroid Build Coastguard Worker
2887*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
2888*495ae853SAndroid Build Coastguard Worker {
2889*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Fill memory records failed = 0x%x\n",
2890*495ae853SAndroid Build Coastguard Worker s_fill_mem_rec_op.s_ive_op.u4_error_code);
2891*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
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 /* Allocating Memory for Mem Records */
2897*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2898*495ae853SAndroid Build Coastguard Worker {
2899*495ae853SAndroid Build Coastguard Worker WORD32 total_size;
2900*495ae853SAndroid Build Coastguard Worker iv_mem_rec_t *ps_mem_rec;
2901*495ae853SAndroid Build Coastguard Worker total_size = 0;
2902*495ae853SAndroid Build Coastguard Worker
2903*495ae853SAndroid Build Coastguard Worker ps_mem_rec = s_app_ctxt.ps_mem_rec;
2904*495ae853SAndroid Build Coastguard Worker for(i = 0; i < num_mem_recs; i++)
2905*495ae853SAndroid Build Coastguard Worker {
2906*495ae853SAndroid Build Coastguard Worker ps_mem_rec->pv_base =
2907*495ae853SAndroid Build Coastguard Worker isvca_aligned_malloc(ps_mem_rec->u4_mem_alignment, ps_mem_rec->u4_mem_size);
2908*495ae853SAndroid Build Coastguard Worker if(ps_mem_rec->pv_base == NULL)
2909*495ae853SAndroid Build Coastguard Worker {
2910*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1,
2911*495ae853SAndroid Build Coastguard Worker "Allocation failure for mem record id %d size %d\n", i,
2912*495ae853SAndroid Build Coastguard Worker ps_mem_rec->u4_mem_size);
2913*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
2914*495ae853SAndroid Build Coastguard Worker }
2915*495ae853SAndroid Build Coastguard Worker total_size += ps_mem_rec->u4_mem_size;
2916*495ae853SAndroid Build Coastguard Worker
2917*495ae853SAndroid Build Coastguard Worker ps_mem_rec++;
2918*495ae853SAndroid Build Coastguard Worker }
2919*495ae853SAndroid Build Coastguard Worker printf("\nTotal memory for codec %d\n", total_size);
2920*495ae853SAndroid Build Coastguard Worker }
2921*495ae853SAndroid Build Coastguard Worker
2922*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2923*495ae853SAndroid Build Coastguard Worker /* Codec Instance Creation */
2924*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2925*495ae853SAndroid Build Coastguard Worker {
2926*495ae853SAndroid Build Coastguard Worker isvce_init_ip_t s_init_ip;
2927*495ae853SAndroid Build Coastguard Worker isvce_init_op_t s_init_op;
2928*495ae853SAndroid Build Coastguard Worker
2929*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_INIT, ISVCE_CMD_CT_NA};
2930*495ae853SAndroid Build Coastguard Worker
2931*495ae853SAndroid Build Coastguard Worker ps_enc = s_app_ctxt.ps_mem_rec[0].pv_base;
2932*495ae853SAndroid Build Coastguard Worker ps_enc->u4_size = sizeof(iv_obj_t);
2933*495ae853SAndroid Build Coastguard Worker ps_enc->pv_fxns = isvce_api_function;
2934*495ae853SAndroid Build Coastguard Worker s_app_ctxt.ps_enc = ps_enc;
2935*495ae853SAndroid Build Coastguard Worker
2936*495ae853SAndroid Build Coastguard Worker s_init_ip.pu4_max_bitrate =
2937*495ae853SAndroid Build Coastguard Worker isvca_aligned_malloc(16, sizeof(UWORD32) * s_app_ctxt.u1_num_spatial_layers);
2938*495ae853SAndroid Build Coastguard Worker
2939*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.u4_size = sizeof(isvce_init_ip_t);
2940*495ae853SAndroid Build Coastguard Worker s_init_op.s_ive_op.u4_size = sizeof(isvce_init_op_t);
2941*495ae853SAndroid Build Coastguard Worker
2942*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.u4_num_mem_rec = s_app_ctxt.u4_num_mem_rec;
2943*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.ps_mem_rec = s_app_ctxt.ps_mem_rec;
2944*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.u4_max_wd = s_app_ctxt.u4_max_wd;
2945*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.u4_max_ht = s_app_ctxt.u4_max_ht;
2946*495ae853SAndroid Build Coastguard Worker s_init_ip.u4_wd = s_app_ctxt.u4_wd;
2947*495ae853SAndroid Build Coastguard Worker s_init_ip.u4_ht = s_app_ctxt.u4_ht;
2948*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.u4_max_ref_cnt = DEFAULT_MAX_REF_FRM;
2949*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.u4_max_reorder_cnt = DEFAULT_MAX_REORDER_FRM;
2950*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.u4_max_level = s_app_ctxt.u4_max_level;
2951*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.e_inp_color_fmt = s_app_ctxt.e_inp_color_fmt;
2952*495ae853SAndroid Build Coastguard Worker
2953*495ae853SAndroid Build Coastguard Worker if(s_app_ctxt.u4_recon_enable || s_app_ctxt.u4_psnr_enable || s_app_ctxt.u4_chksum_enable)
2954*495ae853SAndroid Build Coastguard Worker {
2955*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.u4_enable_recon = 1;
2956*495ae853SAndroid Build Coastguard Worker }
2957*495ae853SAndroid Build Coastguard Worker else
2958*495ae853SAndroid Build Coastguard Worker {
2959*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.u4_enable_recon = 0;
2960*495ae853SAndroid Build Coastguard Worker }
2961*495ae853SAndroid Build Coastguard Worker
2962*495ae853SAndroid Build Coastguard Worker s_init_ip.b_nalu_info_export_enable = !!s_app_ctxt.u4_nalu_info_export_enable;
2963*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.e_recon_color_fmt = s_app_ctxt.e_recon_color_fmt;
2964*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.e_rc_mode = s_app_ctxt.u4_rc;
2965*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.u4_max_framerate = s_app_ctxt.u4_max_frame_rate;
2966*495ae853SAndroid Build Coastguard Worker for(i = 0; i < s_app_ctxt.u1_num_spatial_layers; i++)
2967*495ae853SAndroid Build Coastguard Worker {
2968*495ae853SAndroid Build Coastguard Worker s_init_ip.pu4_max_bitrate[i] = s_app_ctxt.pu4_max_bitrate[i];
2969*495ae853SAndroid Build Coastguard Worker }
2970*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.u4_num_bframes = s_app_ctxt.u4_num_bframes;
2971*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.e_content_type = IV_PROGRESSIVE;
2972*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.u4_max_srch_rng_x = DEFAULT_MAX_SRCH_RANGE_X;
2973*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.u4_max_srch_rng_y = DEFAULT_MAX_SRCH_RANGE_Y;
2974*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.e_slice_mode = s_app_ctxt.u4_slice_mode;
2975*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.u4_slice_param = s_app_ctxt.u4_slice_param;
2976*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.e_arch = s_app_ctxt.e_arch;
2977*495ae853SAndroid Build Coastguard Worker s_init_ip.s_ive_ip.e_soc = s_app_ctxt.e_soc;
2978*495ae853SAndroid Build Coastguard Worker s_init_ip.b_use_default_vui = s_app_ctxt.u4_use_default_vui;
2979*495ae853SAndroid Build Coastguard Worker
2980*495ae853SAndroid Build Coastguard Worker s_init_ip.s_svc_inp_params.u1_num_temporal_layers = s_app_ctxt.u1_num_temporal_layers;
2981*495ae853SAndroid Build Coastguard Worker s_init_ip.s_svc_inp_params.u1_num_spatial_layers = s_app_ctxt.u1_num_spatial_layers;
2982*495ae853SAndroid Build Coastguard Worker s_init_ip.s_svc_inp_params.d_spatial_res_ratio = s_app_ctxt.d_spatial_res_ratio;
2983*495ae853SAndroid Build Coastguard Worker
2984*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(ps_enc, &s_init_ip, &s_init_op, &s_api_cmds);
2985*495ae853SAndroid Build Coastguard Worker
2986*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(s_init_ip.pu4_max_bitrate);
2987*495ae853SAndroid Build Coastguard Worker
2988*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
2989*495ae853SAndroid Build Coastguard Worker {
2990*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Init memory records failed = 0x%x\n",
2991*495ae853SAndroid Build Coastguard Worker s_init_op.s_ive_op.u4_error_code);
2992*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
2993*495ae853SAndroid Build Coastguard Worker }
2994*495ae853SAndroid Build Coastguard Worker }
2995*495ae853SAndroid Build Coastguard Worker
2996*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2997*495ae853SAndroid Build Coastguard Worker /* set processor details */
2998*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
2999*495ae853SAndroid Build Coastguard Worker {
3000*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_num_cores_ip_t s_ctl_set_num_cores_ip;
3001*495ae853SAndroid Build Coastguard Worker isvce_ctl_set_num_cores_op_t s_ctl_set_num_cores_op;
3002*495ae853SAndroid Build Coastguard Worker
3003*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_SET_NUM_CORES};
3004*495ae853SAndroid Build Coastguard Worker
3005*495ae853SAndroid Build Coastguard Worker s_ctl_set_num_cores_ip.s_ive_ip.u4_num_cores = s_app_ctxt.u4_num_cores;
3006*495ae853SAndroid Build Coastguard Worker s_ctl_set_num_cores_ip.s_ive_ip.u4_timestamp_high = 0;
3007*495ae853SAndroid Build Coastguard Worker s_ctl_set_num_cores_ip.s_ive_ip.u4_timestamp_low = 0;
3008*495ae853SAndroid Build Coastguard Worker s_ctl_set_num_cores_ip.s_ive_ip.u4_size = sizeof(isvce_ctl_set_num_cores_ip_t);
3009*495ae853SAndroid Build Coastguard Worker
3010*495ae853SAndroid Build Coastguard Worker s_ctl_set_num_cores_op.s_ive_op.u4_size = sizeof(isvce_ctl_set_num_cores_op_t);
3011*495ae853SAndroid Build Coastguard Worker
3012*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(ps_enc, (void *) &s_ctl_set_num_cores_ip,
3013*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_set_num_cores_op, &s_api_cmds);
3014*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
3015*495ae853SAndroid Build Coastguard Worker {
3016*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to set processor params = 0x%x\n",
3017*495ae853SAndroid Build Coastguard Worker s_ctl_set_num_cores_op.s_ive_op.u4_error_code);
3018*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
3019*495ae853SAndroid Build Coastguard Worker }
3020*495ae853SAndroid Build Coastguard Worker }
3021*495ae853SAndroid Build Coastguard Worker
3022*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
3023*495ae853SAndroid Build Coastguard Worker /* Get Codec Version */
3024*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
3025*495ae853SAndroid Build Coastguard Worker {
3026*495ae853SAndroid Build Coastguard Worker isvce_ctl_getversioninfo_ip_t s_ctl_set_getversioninfo_ip;
3027*495ae853SAndroid Build Coastguard Worker isvce_ctl_getversioninfo_op_t s_ctl_set_getversioninfo_op;
3028*495ae853SAndroid Build Coastguard Worker
3029*495ae853SAndroid Build Coastguard Worker CHAR ac_version_string[STRLENGTH];
3030*495ae853SAndroid Build Coastguard Worker
3031*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_GETVERSION};
3032*495ae853SAndroid Build Coastguard Worker
3033*495ae853SAndroid Build Coastguard Worker s_ctl_set_getversioninfo_ip.s_ive_ip.pu1_version = (UWORD8 *) ac_version_string;
3034*495ae853SAndroid Build Coastguard Worker s_ctl_set_getversioninfo_ip.s_ive_ip.u4_version_bufsize = sizeof(ac_version_string);
3035*495ae853SAndroid Build Coastguard Worker s_ctl_set_getversioninfo_ip.s_ive_ip.u4_size = sizeof(isvce_ctl_getversioninfo_ip_t);
3036*495ae853SAndroid Build Coastguard Worker s_ctl_set_getversioninfo_op.s_ive_op.u4_size = sizeof(isvce_ctl_getversioninfo_op_t);
3037*495ae853SAndroid Build Coastguard Worker
3038*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(ps_enc, (void *) &s_ctl_set_getversioninfo_ip,
3039*495ae853SAndroid Build Coastguard Worker (void *) &s_ctl_set_getversioninfo_op, &s_api_cmds);
3040*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
3041*495ae853SAndroid Build Coastguard Worker {
3042*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to get codec version = 0x%x\n",
3043*495ae853SAndroid Build Coastguard Worker s_ctl_set_getversioninfo_op.s_ive_op.u4_error_code);
3044*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
3045*495ae853SAndroid Build Coastguard Worker }
3046*495ae853SAndroid Build Coastguard Worker printf("CODEC VERSION %s\n", ac_version_string);
3047*495ae853SAndroid Build Coastguard Worker }
3048*495ae853SAndroid Build Coastguard Worker
3049*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
3050*495ae853SAndroid Build Coastguard Worker /* Get I/O Buffer Requirement */
3051*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
3052*495ae853SAndroid Build Coastguard Worker {
3053*495ae853SAndroid Build Coastguard Worker isvce_ctl_getbufinfo_ip_t s_get_buf_info_ip;
3054*495ae853SAndroid Build Coastguard Worker isvce_ctl_getbufinfo_op_t s_get_buf_info_op;
3055*495ae853SAndroid Build Coastguard Worker
3056*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_VIDEO_CTL, ISVCE_CMD_CTL_GETBUFINFO};
3057*495ae853SAndroid Build Coastguard Worker
3058*495ae853SAndroid Build Coastguard Worker s_get_buf_info_ip.s_ive_ip.u4_size = sizeof(isvce_ctl_getbufinfo_ip_t);
3059*495ae853SAndroid Build Coastguard Worker s_get_buf_info_op.s_ive_op.u4_size = sizeof(isvce_ctl_getbufinfo_op_t);
3060*495ae853SAndroid Build Coastguard Worker
3061*495ae853SAndroid Build Coastguard Worker s_get_buf_info_ip.s_ive_ip.u4_max_ht = s_app_ctxt.u4_max_ht;
3062*495ae853SAndroid Build Coastguard Worker s_get_buf_info_ip.s_ive_ip.u4_max_wd = s_app_ctxt.u4_max_wd;
3063*495ae853SAndroid Build Coastguard Worker s_get_buf_info_ip.s_ive_ip.e_inp_color_fmt = s_app_ctxt.e_inp_color_fmt;
3064*495ae853SAndroid Build Coastguard Worker
3065*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(ps_enc, &s_get_buf_info_ip, &s_get_buf_info_op, &s_api_cmds);
3066*495ae853SAndroid Build Coastguard Worker
3067*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
3068*495ae853SAndroid Build Coastguard Worker {
3069*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1,
3070*495ae853SAndroid Build Coastguard Worker "Unable to get I/O buffer requirements = 0x%x\n",
3071*495ae853SAndroid Build Coastguard Worker s_get_buf_info_op.s_ive_op.u4_error_code);
3072*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
3073*495ae853SAndroid Build Coastguard Worker }
3074*495ae853SAndroid Build Coastguard Worker s_app_ctxt.s_get_buf_info_op = s_get_buf_info_op;
3075*495ae853SAndroid Build Coastguard Worker }
3076*495ae853SAndroid Build Coastguard Worker
3077*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3078*495ae853SAndroid Build Coastguard Worker /* Add the following initializations based on the parameters in context */
3079*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3080*495ae853SAndroid Build Coastguard Worker
3081*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3082*495ae853SAndroid Build Coastguard Worker /* Video control Set Frame dimensions */
3083*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3084*495ae853SAndroid Build Coastguard Worker set_dimensions(&s_app_ctxt, 0, 0);
3085*495ae853SAndroid Build Coastguard Worker s_app_ctxt.u4_strd = s_app_ctxt.u4_wd;
3086*495ae853SAndroid Build Coastguard Worker
3087*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3088*495ae853SAndroid Build Coastguard Worker /* Video control Set Frame rates */
3089*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3090*495ae853SAndroid Build Coastguard Worker set_frame_rate(&s_app_ctxt, 0, 0);
3091*495ae853SAndroid Build Coastguard Worker
3092*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3093*495ae853SAndroid Build Coastguard Worker /* Video control Set IPE Params */
3094*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3095*495ae853SAndroid Build Coastguard Worker set_ipe_params(&s_app_ctxt, 0, 0);
3096*495ae853SAndroid Build Coastguard Worker
3097*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3098*495ae853SAndroid Build Coastguard Worker /* Video control Set Bitrate */
3099*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3100*495ae853SAndroid Build Coastguard Worker set_bit_rate(&s_app_ctxt, 0, 0);
3101*495ae853SAndroid Build Coastguard Worker
3102*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3103*495ae853SAndroid Build Coastguard Worker /* Video control Set QP */
3104*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3105*495ae853SAndroid Build Coastguard Worker set_qp(&s_app_ctxt, 0, 0);
3106*495ae853SAndroid Build Coastguard Worker
3107*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3108*495ae853SAndroid Build Coastguard Worker /* Video control Set AIR params */
3109*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3110*495ae853SAndroid Build Coastguard Worker set_air_params(&s_app_ctxt, 0, 0);
3111*495ae853SAndroid Build Coastguard Worker
3112*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3113*495ae853SAndroid Build Coastguard Worker /* Video control Set VBV params */
3114*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3115*495ae853SAndroid Build Coastguard Worker set_vbv_params(&s_app_ctxt, 0, 0);
3116*495ae853SAndroid Build Coastguard Worker
3117*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3118*495ae853SAndroid Build Coastguard Worker /* Video control Set Motion estimation params */
3119*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3120*495ae853SAndroid Build Coastguard Worker set_me_params(&s_app_ctxt, 0, 0);
3121*495ae853SAndroid Build Coastguard Worker
3122*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3123*495ae853SAndroid Build Coastguard Worker /* Video control Set GOP params */
3124*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3125*495ae853SAndroid Build Coastguard Worker set_gop_params(&s_app_ctxt, 0, 0);
3126*495ae853SAndroid Build Coastguard Worker
3127*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3128*495ae853SAndroid Build Coastguard Worker /* Video control Set Deblock params */
3129*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3130*495ae853SAndroid Build Coastguard Worker set_deblock_params(&s_app_ctxt, 0, 0);
3131*495ae853SAndroid Build Coastguard Worker
3132*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3133*495ae853SAndroid Build Coastguard Worker /* Video control Set Profile params */
3134*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3135*495ae853SAndroid Build Coastguard Worker set_profile_params(&s_app_ctxt, 0, 0);
3136*495ae853SAndroid Build Coastguard Worker
3137*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3138*495ae853SAndroid Build Coastguard Worker /* Video control Set in Encode header mode */
3139*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3140*495ae853SAndroid Build Coastguard Worker set_enc_mode(&s_app_ctxt, 0, 0, IVE_ENC_MODE_PICTURE);
3141*495ae853SAndroid Build Coastguard Worker
3142*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3143*495ae853SAndroid Build Coastguard Worker /* Video usability information */
3144*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3145*495ae853SAndroid Build Coastguard Worker set_vui_params(&s_app_ctxt);
3146*495ae853SAndroid Build Coastguard Worker
3147*495ae853SAndroid Build Coastguard Worker #ifdef IOS
3148*495ae853SAndroid Build Coastguard Worker /* Correct file paths */
3149*495ae853SAndroid Build Coastguard Worker sprintf(filename_with_path, "%s/%s", documentdir, s_app_ctxt.ac_ip_fname);
3150*495ae853SAndroid Build Coastguard Worker strcpy(s_app_ctxt.ac_ip_fname, filename_with_path);
3151*495ae853SAndroid Build Coastguard Worker
3152*495ae853SAndroid Build Coastguard Worker sprintf(filename_with_path, "%s/%s", documentdir, s_app_ctxt.ac_op_fname);
3153*495ae853SAndroid Build Coastguard Worker strcpy(s_app_ctxt.ac_op_fname, filename_with_path);
3154*495ae853SAndroid Build Coastguard Worker
3155*495ae853SAndroid Build Coastguard Worker sprintf(filename_with_path, "%s/%s", documentdir, s_app_ctxt.ac_recon_fname);
3156*495ae853SAndroid Build Coastguard Worker strcpy(s_app_ctxt.ac_recon_fname, filename_with_path);
3157*495ae853SAndroid Build Coastguard Worker
3158*495ae853SAndroid Build Coastguard Worker sprintf(filename_with_path, "%s/%s", documentdir, s_app_ctxt.ac_chksum_fname);
3159*495ae853SAndroid Build Coastguard Worker strcpy(s_app_ctxt.ac_chksum_fname, filename_with_path);
3160*495ae853SAndroid Build Coastguard Worker
3161*495ae853SAndroid Build Coastguard Worker sprintf(filename_with_path, "%s/%s", documentdir, s_app_ctxt.ac_mb_info_fname);
3162*495ae853SAndroid Build Coastguard Worker strcpy(s_app_ctxt.ac_mb_info_fname, filename_with_path);
3163*495ae853SAndroid Build Coastguard Worker
3164*495ae853SAndroid Build Coastguard Worker sprintf(filename_with_path, "%s/%s", documentdir, s_app_ctxt.ac_pic_info_fname);
3165*495ae853SAndroid Build Coastguard Worker strcpy(s_app_ctxt.ac_pic_info_fname, filename_with_path);
3166*495ae853SAndroid Build Coastguard Worker #endif
3167*495ae853SAndroid Build Coastguard Worker
3168*495ae853SAndroid Build Coastguard Worker get_enc_dimensions(&s_app_ctxt);
3169*495ae853SAndroid Build Coastguard Worker
3170*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
3171*495ae853SAndroid Build Coastguard Worker /* begin encoding */
3172*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
3173*495ae853SAndroid Build Coastguard Worker
3174*495ae853SAndroid Build Coastguard Worker synchronous_encode(ps_enc, &s_app_ctxt);
3175*495ae853SAndroid Build Coastguard Worker
3176*495ae853SAndroid Build Coastguard Worker {
3177*495ae853SAndroid Build Coastguard Worker printf("\nEncoding Completed\n");
3178*495ae853SAndroid Build Coastguard Worker printf("Summary\n");
3179*495ae853SAndroid Build Coastguard Worker printf("Input filename : %s\n", s_app_ctxt.ac_ip_fname);
3180*495ae853SAndroid Build Coastguard Worker printf("Output filename : %s\n", s_app_ctxt.ac_op_fname);
3181*495ae853SAndroid Build Coastguard Worker printf("Output Width : %-4d\n", s_app_ctxt.u4_wd);
3182*495ae853SAndroid Build Coastguard Worker printf("Output Height : %-4d\n", s_app_ctxt.u4_ht);
3183*495ae853SAndroid Build Coastguard Worker
3184*495ae853SAndroid Build Coastguard Worker {
3185*495ae853SAndroid Build Coastguard Worker DOUBLE bytes_per_frame;
3186*495ae853SAndroid Build Coastguard Worker DOUBLE bytes_per_second;
3187*495ae853SAndroid Build Coastguard Worker WORD32 achieved_bitrate;
3188*495ae853SAndroid Build Coastguard Worker if(s_app_ctxt.u4_pics_cnt != 0)
3189*495ae853SAndroid Build Coastguard Worker {
3190*495ae853SAndroid Build Coastguard Worker bytes_per_frame = (s_app_ctxt.u4_total_bytes) / (s_app_ctxt.u4_pics_cnt);
3191*495ae853SAndroid Build Coastguard Worker }
3192*495ae853SAndroid Build Coastguard Worker else
3193*495ae853SAndroid Build Coastguard Worker {
3194*495ae853SAndroid Build Coastguard Worker bytes_per_frame = 0;
3195*495ae853SAndroid Build Coastguard Worker }
3196*495ae853SAndroid Build Coastguard Worker bytes_per_second = (bytes_per_frame * s_app_ctxt.u4_tgt_frame_rate);
3197*495ae853SAndroid Build Coastguard Worker achieved_bitrate = (WORD32) (bytes_per_second * 8);
3198*495ae853SAndroid Build Coastguard Worker printf("Target Bitrate (bps) : %-4d\n", s_app_ctxt.pu4_bitrate[0]);
3199*495ae853SAndroid Build Coastguard Worker printf("Achieved Bitrate (bps) : %-4d\n", achieved_bitrate);
3200*495ae853SAndroid Build Coastguard Worker }
3201*495ae853SAndroid Build Coastguard Worker
3202*495ae853SAndroid Build Coastguard Worker printf("Average Time per Frame : %-4d\n", s_app_ctxt.avg_time);
3203*495ae853SAndroid Build Coastguard Worker printf("Achieved FPS : %-4.2f\n", 1000000.0 / s_app_ctxt.avg_time);
3204*495ae853SAndroid Build Coastguard Worker }
3205*495ae853SAndroid Build Coastguard Worker
3206*495ae853SAndroid Build Coastguard Worker free_rc_params(&s_app_ctxt);
3207*495ae853SAndroid Build Coastguard Worker
3208*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
3209*495ae853SAndroid Build Coastguard Worker /* Close Codec Instance */
3210*495ae853SAndroid Build Coastguard Worker /*************************************************************************/
3211*495ae853SAndroid Build Coastguard Worker {
3212*495ae853SAndroid Build Coastguard Worker isvce_retrieve_mem_rec_ip_t s_retrieve_mem_ip;
3213*495ae853SAndroid Build Coastguard Worker isvce_retrieve_mem_rec_op_t s_retrieve_mem_op;
3214*495ae853SAndroid Build Coastguard Worker iv_mem_rec_t *ps_mem_rec;
3215*495ae853SAndroid Build Coastguard Worker
3216*495ae853SAndroid Build Coastguard Worker isvce_api_cmds_t s_api_cmds = {ISVCE_CMD_RETRIEVE_MEMREC, ISVCE_CMD_CT_NA};
3217*495ae853SAndroid Build Coastguard Worker
3218*495ae853SAndroid Build Coastguard Worker s_retrieve_mem_ip.s_ive_ip.u4_size = sizeof(isvce_retrieve_mem_rec_ip_t);
3219*495ae853SAndroid Build Coastguard Worker s_retrieve_mem_op.s_ive_op.u4_size = sizeof(isvce_retrieve_mem_rec_op_t);
3220*495ae853SAndroid Build Coastguard Worker
3221*495ae853SAndroid Build Coastguard Worker s_retrieve_mem_ip.s_ive_ip.ps_mem_rec = s_app_ctxt.ps_mem_rec;
3222*495ae853SAndroid Build Coastguard Worker
3223*495ae853SAndroid Build Coastguard Worker status = isvce_api_function(ps_enc, &s_retrieve_mem_ip, &s_retrieve_mem_op, &s_api_cmds);
3224*495ae853SAndroid Build Coastguard Worker
3225*495ae853SAndroid Build Coastguard Worker if(status != IV_SUCCESS)
3226*495ae853SAndroid Build Coastguard Worker {
3227*495ae853SAndroid Build Coastguard Worker snprintf(ac_error, sizeof(ac_error) - 1, "Unable to retrieve memory records = 0x%x\n",
3228*495ae853SAndroid Build Coastguard Worker s_retrieve_mem_op.s_ive_op.u4_error_code);
3229*495ae853SAndroid Build Coastguard Worker codec_exit(ac_error);
3230*495ae853SAndroid Build Coastguard Worker }
3231*495ae853SAndroid Build Coastguard Worker
3232*495ae853SAndroid Build Coastguard Worker /* Free memory records */
3233*495ae853SAndroid Build Coastguard Worker ps_mem_rec = s_app_ctxt.ps_mem_rec;
3234*495ae853SAndroid Build Coastguard Worker for(i = 0; i < num_mem_recs; i++)
3235*495ae853SAndroid Build Coastguard Worker {
3236*495ae853SAndroid Build Coastguard Worker isvca_aligned_free(ps_mem_rec->pv_base);
3237*495ae853SAndroid Build Coastguard Worker ps_mem_rec++;
3238*495ae853SAndroid Build Coastguard Worker }
3239*495ae853SAndroid Build Coastguard Worker
3240*495ae853SAndroid Build Coastguard Worker free(s_app_ctxt.ps_mem_rec);
3241*495ae853SAndroid Build Coastguard Worker }
3242*495ae853SAndroid Build Coastguard Worker
3243*495ae853SAndroid Build Coastguard Worker return 0;
3244*495ae853SAndroid Build Coastguard Worker }
3245*495ae853SAndroid Build Coastguard Worker
3246*495ae853SAndroid Build Coastguard Worker #ifdef ANDROID_NDK
raise(int a)3247*495ae853SAndroid Build Coastguard Worker int raise(int a)
3248*495ae853SAndroid Build Coastguard Worker {
3249*495ae853SAndroid Build Coastguard Worker printf("Divide by zero\n");
3250*495ae853SAndroid Build Coastguard Worker return 0;
3251*495ae853SAndroid Build Coastguard Worker }
__aeabi_assert(const char * assertion,const char * file,unsigned int line)3252*495ae853SAndroid Build Coastguard Worker void __aeabi_assert(const char *assertion, const char *file, unsigned int line) {}
3253*495ae853SAndroid Build Coastguard Worker #endif
3254