1*437bfbebSnyanmisaka /* SPDX-License-Identifier: Apache-2.0 OR MIT */
2*437bfbebSnyanmisaka /*
3*437bfbebSnyanmisaka * Copyright (c) 2024 Rockchip Electronics Co., Ltd.
4*437bfbebSnyanmisaka */
5*437bfbebSnyanmisaka
6*437bfbebSnyanmisaka #define MODULE_TAG "hwpq_test"
7*437bfbebSnyanmisaka
8*437bfbebSnyanmisaka #include <getopt.h>
9*437bfbebSnyanmisaka #include <stdlib.h>
10*437bfbebSnyanmisaka #include <stdint.h>
11*437bfbebSnyanmisaka #include <string.h>
12*437bfbebSnyanmisaka #include <stdio.h>
13*437bfbebSnyanmisaka #include <pthread.h>
14*437bfbebSnyanmisaka #include <errno.h>
15*437bfbebSnyanmisaka
16*437bfbebSnyanmisaka #include "mpp_mem.h"
17*437bfbebSnyanmisaka #include "mpp_buffer.h"
18*437bfbebSnyanmisaka #include "mpp_log.h"
19*437bfbebSnyanmisaka
20*437bfbebSnyanmisaka #include "hwpq_vdpp_proc_api.h"
21*437bfbebSnyanmisaka
22*437bfbebSnyanmisaka typedef struct {
23*437bfbebSnyanmisaka char src_file_name[128];
24*437bfbebSnyanmisaka char dst_file_name_y[128];
25*437bfbebSnyanmisaka char dst_file_name_uv[128];
26*437bfbebSnyanmisaka char dst_file_name_hist[128];
27*437bfbebSnyanmisaka unsigned int img_w_i;
28*437bfbebSnyanmisaka unsigned int img_h_i;
29*437bfbebSnyanmisaka unsigned int img_w_i_vir;
30*437bfbebSnyanmisaka unsigned int img_h_i_vir;
31*437bfbebSnyanmisaka unsigned int img_w_o;
32*437bfbebSnyanmisaka unsigned int img_h_o;
33*437bfbebSnyanmisaka unsigned int img_w_o_vir;
34*437bfbebSnyanmisaka unsigned int img_h_o_vir;
35*437bfbebSnyanmisaka unsigned int uv_diff_flag;
36*437bfbebSnyanmisaka unsigned int img_w_o_c;
37*437bfbebSnyanmisaka unsigned int img_h_o_c;
38*437bfbebSnyanmisaka unsigned int img_w_o_c_vir;
39*437bfbebSnyanmisaka unsigned int img_h_o_c_vir;
40*437bfbebSnyanmisaka
41*437bfbebSnyanmisaka unsigned int work_mode;
42*437bfbebSnyanmisaka
43*437bfbebSnyanmisaka int32_t nthreads;
44*437bfbebSnyanmisaka int32_t frame_num;
45*437bfbebSnyanmisaka } VdppCmdCfg;
46*437bfbebSnyanmisaka
47*437bfbebSnyanmisaka typedef struct {
48*437bfbebSnyanmisaka int chn;
49*437bfbebSnyanmisaka
50*437bfbebSnyanmisaka FILE *fp_i;
51*437bfbebSnyanmisaka FILE *fp_o_y;
52*437bfbebSnyanmisaka FILE *fp_o_uv;
53*437bfbebSnyanmisaka FILE *fp_o_h;
54*437bfbebSnyanmisaka
55*437bfbebSnyanmisaka unsigned int frm_eos;
56*437bfbebSnyanmisaka unsigned int loop_times;
57*437bfbebSnyanmisaka } VdppTestMultiCtx;
58*437bfbebSnyanmisaka
59*437bfbebSnyanmisaka typedef struct {
60*437bfbebSnyanmisaka VdppCmdCfg *cmd;
61*437bfbebSnyanmisaka int chn;
62*437bfbebSnyanmisaka
63*437bfbebSnyanmisaka pthread_t thd; // thread for for each instance
64*437bfbebSnyanmisaka VdppTestMultiCtx ctx; // context of vdpp
65*437bfbebSnyanmisaka } VdppTestMultiCtxInfo;
66*437bfbebSnyanmisaka
67*437bfbebSnyanmisaka static void parse_cmd(char** argv, int argc, VdppCmdCfg* p_cmd_cfg);
68*437bfbebSnyanmisaka
69*437bfbebSnyanmisaka extern char *optarg;
70*437bfbebSnyanmisaka extern int opterr;
71*437bfbebSnyanmisaka
multi_vdpp(void * cmd_ctx)72*437bfbebSnyanmisaka static void *multi_vdpp(void *cmd_ctx)
73*437bfbebSnyanmisaka {
74*437bfbebSnyanmisaka VdppTestMultiCtxInfo *info = (VdppTestMultiCtxInfo *)cmd_ctx;
75*437bfbebSnyanmisaka VdppTestMultiCtx *ctx = &info->ctx;
76*437bfbebSnyanmisaka VdppCmdCfg *p_cmd_cfg = info->cmd;
77*437bfbebSnyanmisaka
78*437bfbebSnyanmisaka rk_vdpp_context vdpp_ctx;
79*437bfbebSnyanmisaka rk_vdpp_proc_params vdpp_proc_cfg;
80*437bfbebSnyanmisaka
81*437bfbebSnyanmisaka // cmd config params
82*437bfbebSnyanmisaka if (p_cmd_cfg->uv_diff_flag == 0) {
83*437bfbebSnyanmisaka p_cmd_cfg->img_w_o_c = p_cmd_cfg->img_w_o;
84*437bfbebSnyanmisaka p_cmd_cfg->img_h_o_c = p_cmd_cfg->img_h_o;
85*437bfbebSnyanmisaka p_cmd_cfg->img_w_o_c_vir = p_cmd_cfg->img_w_o_vir;
86*437bfbebSnyanmisaka p_cmd_cfg->img_h_o_c_vir = p_cmd_cfg->img_h_o_vir;
87*437bfbebSnyanmisaka }
88*437bfbebSnyanmisaka
89*437bfbebSnyanmisaka size_t srcfrmsize = p_cmd_cfg->img_w_i_vir * p_cmd_cfg->img_h_i_vir * 3 / 2;
90*437bfbebSnyanmisaka size_t dstfrmsize = p_cmd_cfg->img_w_o_vir * p_cmd_cfg->img_h_o_vir * 3;
91*437bfbebSnyanmisaka size_t dstfrmsize_c = p_cmd_cfg->img_w_o_c_vir * p_cmd_cfg->img_h_o_c_vir * 2;
92*437bfbebSnyanmisaka
93*437bfbebSnyanmisaka // malloc buffers
94*437bfbebSnyanmisaka MppBuffer srcbuf;
95*437bfbebSnyanmisaka MppBuffer dstbuf;
96*437bfbebSnyanmisaka MppBuffer dstbuf_c;
97*437bfbebSnyanmisaka MppBuffer histbuf;
98*437bfbebSnyanmisaka void *psrc = NULL;
99*437bfbebSnyanmisaka void *pdst = NULL;
100*437bfbebSnyanmisaka void *phist = NULL;
101*437bfbebSnyanmisaka RK_S32 fdsrc = -1;
102*437bfbebSnyanmisaka RK_S32 fddst = -1;
103*437bfbebSnyanmisaka RK_S32 fdhist = -1;
104*437bfbebSnyanmisaka int frame_idx = 0;
105*437bfbebSnyanmisaka MppBufferGroup memGroup;
106*437bfbebSnyanmisaka MPP_RET ret = mpp_buffer_group_get_internal(&memGroup, MPP_BUFFER_TYPE_DRM);
107*437bfbebSnyanmisaka if (MPP_OK != ret) {
108*437bfbebSnyanmisaka mpp_err("memGroup mpp_buffer_group_get failed\n");
109*437bfbebSnyanmisaka return NULL;
110*437bfbebSnyanmisaka }
111*437bfbebSnyanmisaka
112*437bfbebSnyanmisaka mpp_buffer_get(memGroup, &srcbuf, srcfrmsize);
113*437bfbebSnyanmisaka mpp_buffer_get(memGroup, &dstbuf, dstfrmsize);
114*437bfbebSnyanmisaka mpp_buffer_get(memGroup, &dstbuf_c, dstfrmsize_c);
115*437bfbebSnyanmisaka mpp_buffer_get(memGroup, &histbuf, VDPP_HIST_LENGTH);
116*437bfbebSnyanmisaka psrc = mpp_buffer_get_ptr(srcbuf);
117*437bfbebSnyanmisaka pdst = mpp_buffer_get_ptr(dstbuf);
118*437bfbebSnyanmisaka phist = mpp_buffer_get_ptr(histbuf);
119*437bfbebSnyanmisaka
120*437bfbebSnyanmisaka fdsrc = mpp_buffer_get_fd(srcbuf);
121*437bfbebSnyanmisaka fddst = mpp_buffer_get_fd(dstbuf);
122*437bfbebSnyanmisaka fdhist = mpp_buffer_get_fd(histbuf);
123*437bfbebSnyanmisaka
124*437bfbebSnyanmisaka hwpq_vdpp_init(&vdpp_ctx);
125*437bfbebSnyanmisaka
126*437bfbebSnyanmisaka ctx->chn = info->chn;
127*437bfbebSnyanmisaka
128*437bfbebSnyanmisaka ctx->fp_i = fopen(p_cmd_cfg->src_file_name, "rb");
129*437bfbebSnyanmisaka if (!ctx->fp_i) {
130*437bfbebSnyanmisaka mpp_err("failed to open file %s", p_cmd_cfg->src_file_name);
131*437bfbebSnyanmisaka goto __RET;
132*437bfbebSnyanmisaka }
133*437bfbebSnyanmisaka
134*437bfbebSnyanmisaka ctx->fp_o_y = fopen(p_cmd_cfg->dst_file_name_y, "wb");
135*437bfbebSnyanmisaka ctx->fp_o_uv = fopen(p_cmd_cfg->dst_file_name_uv, "wb");
136*437bfbebSnyanmisaka ctx->fp_o_h = fopen(p_cmd_cfg->dst_file_name_hist, "wb");
137*437bfbebSnyanmisaka
138*437bfbebSnyanmisaka while (1) {
139*437bfbebSnyanmisaka vdpp_proc_cfg.frame_idx = frame_idx;
140*437bfbebSnyanmisaka
141*437bfbebSnyanmisaka if ((srcfrmsize > fread(psrc, 1, srcfrmsize, ctx->fp_i)) || feof(ctx->fp_i)) {
142*437bfbebSnyanmisaka ctx->frm_eos = 1;
143*437bfbebSnyanmisaka
144*437bfbebSnyanmisaka if (p_cmd_cfg->frame_num < 0 || frame_idx < p_cmd_cfg->frame_num) {
145*437bfbebSnyanmisaka clearerr(ctx->fp_i);
146*437bfbebSnyanmisaka rewind(ctx->fp_i);
147*437bfbebSnyanmisaka ctx->frm_eos = 0;
148*437bfbebSnyanmisaka mpp_log("chn %d loop times %d\n", ctx->chn, ++ctx->loop_times);
149*437bfbebSnyanmisaka continue;
150*437bfbebSnyanmisaka }
151*437bfbebSnyanmisaka mpp_log("chn %d found last frame. feof %d\n", ctx->chn, feof(ctx->fp_i));
152*437bfbebSnyanmisaka } else if (ret == MPP_ERR_VALUE)
153*437bfbebSnyanmisaka break;
154*437bfbebSnyanmisaka
155*437bfbebSnyanmisaka vdpp_proc_cfg.src_img_info.img_fmt = VDPP_FMT_NV12;
156*437bfbebSnyanmisaka vdpp_proc_cfg.src_img_info.img_yrgb.fd = fdsrc;
157*437bfbebSnyanmisaka vdpp_proc_cfg.src_img_info.img_yrgb.addr = psrc;
158*437bfbebSnyanmisaka vdpp_proc_cfg.src_img_info.img_yrgb.offset = 0;
159*437bfbebSnyanmisaka vdpp_proc_cfg.src_img_info.img_yrgb.w_vld = p_cmd_cfg->img_w_i;
160*437bfbebSnyanmisaka vdpp_proc_cfg.src_img_info.img_yrgb.h_vld = p_cmd_cfg->img_h_i;
161*437bfbebSnyanmisaka vdpp_proc_cfg.src_img_info.img_yrgb.w_vir = p_cmd_cfg->img_w_i_vir;
162*437bfbebSnyanmisaka vdpp_proc_cfg.src_img_info.img_yrgb.h_vir = p_cmd_cfg->img_h_i_vir;
163*437bfbebSnyanmisaka
164*437bfbebSnyanmisaka vdpp_proc_cfg.src_img_info.img_cbcr.fd = fdsrc;
165*437bfbebSnyanmisaka vdpp_proc_cfg.src_img_info.img_cbcr.addr = psrc;
166*437bfbebSnyanmisaka vdpp_proc_cfg.src_img_info.img_cbcr.offset = p_cmd_cfg->img_w_i_vir * p_cmd_cfg->img_h_i_vir;
167*437bfbebSnyanmisaka vdpp_proc_cfg.src_img_info.img_cbcr.w_vld = p_cmd_cfg->img_w_i / 2;
168*437bfbebSnyanmisaka vdpp_proc_cfg.src_img_info.img_cbcr.h_vld = p_cmd_cfg->img_h_i / 2;
169*437bfbebSnyanmisaka vdpp_proc_cfg.src_img_info.img_cbcr.w_vir = p_cmd_cfg->img_w_i_vir;
170*437bfbebSnyanmisaka vdpp_proc_cfg.src_img_info.img_cbcr.h_vir = p_cmd_cfg->img_h_i_vir / 2;
171*437bfbebSnyanmisaka
172*437bfbebSnyanmisaka vdpp_proc_cfg.dst_img_info.img_fmt = VDPP_FMT_NV24;
173*437bfbebSnyanmisaka vdpp_proc_cfg.dst_img_info.img_yrgb.fd = fddst;
174*437bfbebSnyanmisaka vdpp_proc_cfg.dst_img_info.img_yrgb.addr = pdst;
175*437bfbebSnyanmisaka vdpp_proc_cfg.dst_img_info.img_yrgb.offset = 0;
176*437bfbebSnyanmisaka vdpp_proc_cfg.dst_img_info.img_yrgb.w_vld = p_cmd_cfg->img_w_o;
177*437bfbebSnyanmisaka vdpp_proc_cfg.dst_img_info.img_yrgb.h_vld = p_cmd_cfg->img_h_o;
178*437bfbebSnyanmisaka vdpp_proc_cfg.dst_img_info.img_yrgb.w_vir = p_cmd_cfg->img_w_o_vir;
179*437bfbebSnyanmisaka vdpp_proc_cfg.dst_img_info.img_yrgb.h_vir = p_cmd_cfg->img_h_o_vir;
180*437bfbebSnyanmisaka
181*437bfbebSnyanmisaka vdpp_proc_cfg.dst_img_info.img_cbcr.fd = fddst;
182*437bfbebSnyanmisaka vdpp_proc_cfg.dst_img_info.img_cbcr.addr = pdst;
183*437bfbebSnyanmisaka vdpp_proc_cfg.dst_img_info.img_cbcr.offset = p_cmd_cfg->img_w_o_vir * p_cmd_cfg->img_h_o_vir;
184*437bfbebSnyanmisaka vdpp_proc_cfg.dst_img_info.img_cbcr.w_vld = p_cmd_cfg->img_w_o_c;
185*437bfbebSnyanmisaka vdpp_proc_cfg.dst_img_info.img_cbcr.h_vld = p_cmd_cfg->img_h_o_c;
186*437bfbebSnyanmisaka vdpp_proc_cfg.dst_img_info.img_cbcr.w_vir = p_cmd_cfg->img_w_o_c_vir;
187*437bfbebSnyanmisaka vdpp_proc_cfg.dst_img_info.img_cbcr.h_vir = p_cmd_cfg->img_h_o_c_vir;
188*437bfbebSnyanmisaka
189*437bfbebSnyanmisaka {
190*437bfbebSnyanmisaka int work_mode_ref = hwpq_vdpp_check_work_mode(vdpp_ctx, &vdpp_proc_cfg);
191*437bfbebSnyanmisaka
192*437bfbebSnyanmisaka vdpp_proc_cfg.hist_mode_en = (VDPP_RUN_MODE_HIST == p_cmd_cfg->work_mode) ||
193*437bfbebSnyanmisaka (VDPP_RUN_MODE_HIST == work_mode_ref);
194*437bfbebSnyanmisaka }
195*437bfbebSnyanmisaka
196*437bfbebSnyanmisaka vdpp_proc_cfg.hist_buf_fd = fdhist;
197*437bfbebSnyanmisaka vdpp_proc_cfg.p_hist_buf = phist;
198*437bfbebSnyanmisaka
199*437bfbebSnyanmisaka vdpp_proc_cfg.yuv_diff_flag = 0;
200*437bfbebSnyanmisaka vdpp_proc_cfg.vdpp_config_update_flag = 0;
201*437bfbebSnyanmisaka
202*437bfbebSnyanmisaka hwpq_vdpp_proc(vdpp_ctx, &vdpp_proc_cfg);
203*437bfbebSnyanmisaka
204*437bfbebSnyanmisaka if (ctx->fp_o_y)
205*437bfbebSnyanmisaka fwrite(vdpp_proc_cfg.dst_img_info.img_yrgb.addr, 1, p_cmd_cfg->img_w_o_vir * p_cmd_cfg->img_h_o_vir * 1, ctx->fp_o_y);
206*437bfbebSnyanmisaka if (ctx->fp_o_uv)
207*437bfbebSnyanmisaka fwrite((unsigned char*)vdpp_proc_cfg.dst_img_info.img_cbcr.addr + p_cmd_cfg->img_w_o_vir * p_cmd_cfg->img_h_o_vir, 1, p_cmd_cfg->img_w_o_c_vir * p_cmd_cfg->img_h_o_c_vir * 2, ctx->fp_o_uv);
208*437bfbebSnyanmisaka if (ctx->fp_o_h)
209*437bfbebSnyanmisaka fwrite(vdpp_proc_cfg.p_hist_buf, 1, VDPP_HIST_LENGTH, ctx->fp_o_h);
210*437bfbebSnyanmisaka
211*437bfbebSnyanmisaka frame_idx++;
212*437bfbebSnyanmisaka
213*437bfbebSnyanmisaka if (p_cmd_cfg->frame_num > 0 && frame_idx >= p_cmd_cfg->frame_num) {
214*437bfbebSnyanmisaka ctx->frm_eos = 1;
215*437bfbebSnyanmisaka break;
216*437bfbebSnyanmisaka }
217*437bfbebSnyanmisaka
218*437bfbebSnyanmisaka if (ctx->frm_eos)
219*437bfbebSnyanmisaka break;
220*437bfbebSnyanmisaka }
221*437bfbebSnyanmisaka
222*437bfbebSnyanmisaka __RET:
223*437bfbebSnyanmisaka if (ctx->fp_i) {
224*437bfbebSnyanmisaka fclose(ctx->fp_i);
225*437bfbebSnyanmisaka ctx->fp_i = NULL;
226*437bfbebSnyanmisaka }
227*437bfbebSnyanmisaka if (ctx->fp_o_y) {
228*437bfbebSnyanmisaka fclose(ctx->fp_o_y);
229*437bfbebSnyanmisaka ctx->fp_o_y = NULL;
230*437bfbebSnyanmisaka }
231*437bfbebSnyanmisaka if (ctx->fp_o_uv) {
232*437bfbebSnyanmisaka fclose(ctx->fp_o_uv);
233*437bfbebSnyanmisaka ctx->fp_o_uv = NULL;
234*437bfbebSnyanmisaka }
235*437bfbebSnyanmisaka if (ctx->fp_o_h) {
236*437bfbebSnyanmisaka fclose(ctx->fp_o_h);
237*437bfbebSnyanmisaka ctx->fp_o_h = NULL;
238*437bfbebSnyanmisaka }
239*437bfbebSnyanmisaka
240*437bfbebSnyanmisaka mpp_buffer_put(srcbuf);
241*437bfbebSnyanmisaka mpp_buffer_put(dstbuf);
242*437bfbebSnyanmisaka mpp_buffer_put(histbuf);
243*437bfbebSnyanmisaka mpp_buffer_put(dstbuf_c);
244*437bfbebSnyanmisaka
245*437bfbebSnyanmisaka if (memGroup) {
246*437bfbebSnyanmisaka mpp_buffer_group_put(memGroup);
247*437bfbebSnyanmisaka memGroup = NULL;
248*437bfbebSnyanmisaka }
249*437bfbebSnyanmisaka
250*437bfbebSnyanmisaka hwpq_vdpp_deinit(vdpp_ctx);
251*437bfbebSnyanmisaka
252*437bfbebSnyanmisaka return NULL;
253*437bfbebSnyanmisaka }
254*437bfbebSnyanmisaka
main(int argc,char ** argv)255*437bfbebSnyanmisaka int32_t main(int argc, char **argv)
256*437bfbebSnyanmisaka {
257*437bfbebSnyanmisaka VdppCmdCfg vdpp_cmd_cfg;
258*437bfbebSnyanmisaka VdppCmdCfg *p_cmd_cfg = &vdpp_cmd_cfg;
259*437bfbebSnyanmisaka VdppTestMultiCtxInfo *ctxs = NULL;
260*437bfbebSnyanmisaka int i = 0;
261*437bfbebSnyanmisaka int ret = 0;
262*437bfbebSnyanmisaka
263*437bfbebSnyanmisaka parse_cmd(argv, argc, p_cmd_cfg);
264*437bfbebSnyanmisaka
265*437bfbebSnyanmisaka ctxs = mpp_calloc(VdppTestMultiCtxInfo, p_cmd_cfg->nthreads);
266*437bfbebSnyanmisaka if (NULL == ctxs) {
267*437bfbebSnyanmisaka mpp_err("failed to alloc context for instances\n");
268*437bfbebSnyanmisaka ret = MPP_ERR_MALLOC;
269*437bfbebSnyanmisaka goto __RET;
270*437bfbebSnyanmisaka }
271*437bfbebSnyanmisaka
272*437bfbebSnyanmisaka for (i = 0; i < p_cmd_cfg->nthreads; i++) {
273*437bfbebSnyanmisaka ctxs[i].cmd = p_cmd_cfg;
274*437bfbebSnyanmisaka ctxs[i].chn = i;
275*437bfbebSnyanmisaka
276*437bfbebSnyanmisaka ret = pthread_create(&ctxs[i].thd, NULL, multi_vdpp, &ctxs[i]);
277*437bfbebSnyanmisaka if (ret) {
278*437bfbebSnyanmisaka mpp_err("failed to create thread %d\n", i);
279*437bfbebSnyanmisaka ret = MPP_NOK;
280*437bfbebSnyanmisaka goto __RET;
281*437bfbebSnyanmisaka }
282*437bfbebSnyanmisaka }
283*437bfbebSnyanmisaka
284*437bfbebSnyanmisaka for (i = 0; i < p_cmd_cfg->nthreads; i++)
285*437bfbebSnyanmisaka pthread_join(ctxs[i].thd, NULL);
286*437bfbebSnyanmisaka
287*437bfbebSnyanmisaka __RET:
288*437bfbebSnyanmisaka MPP_FREE(ctxs);
289*437bfbebSnyanmisaka ctxs = NULL;
290*437bfbebSnyanmisaka
291*437bfbebSnyanmisaka return ret;
292*437bfbebSnyanmisaka }
293*437bfbebSnyanmisaka
parse_cmd(char ** argv,int argc,VdppCmdCfg * p_cmd_cfg)294*437bfbebSnyanmisaka static void parse_cmd(char** argv, int argc, VdppCmdCfg* p_cmd_cfg)
295*437bfbebSnyanmisaka {
296*437bfbebSnyanmisaka mpp_log("in parse 3\n");
297*437bfbebSnyanmisaka int32_t ch;
298*437bfbebSnyanmisaka int32_t option_index = 0;
299*437bfbebSnyanmisaka
300*437bfbebSnyanmisaka opterr = 0;
301*437bfbebSnyanmisaka static struct option long_options[] = {
302*437bfbebSnyanmisaka {"ip", required_argument, 0, 0 },
303*437bfbebSnyanmisaka {"oy", required_argument, 0, 0 },
304*437bfbebSnyanmisaka {"oc", required_argument, 0, 0 },
305*437bfbebSnyanmisaka {"oh", required_argument, 0, 0 },
306*437bfbebSnyanmisaka {"wi_vld", required_argument, 0, 0 },
307*437bfbebSnyanmisaka {"hi_vld", required_argument, 0, 0 },
308*437bfbebSnyanmisaka {"wi_vir", required_argument, 0, 0 },
309*437bfbebSnyanmisaka {"hi_vir", required_argument, 0, 0 },
310*437bfbebSnyanmisaka {"wo_vld", required_argument, 0, 0 },
311*437bfbebSnyanmisaka {"ho_vld", required_argument, 0, 0 },
312*437bfbebSnyanmisaka {"wo_vir", required_argument, 0, 0 },
313*437bfbebSnyanmisaka {"ho_vir", required_argument, 0, 0 },
314*437bfbebSnyanmisaka {"uv_diff", required_argument, 0, 0 },
315*437bfbebSnyanmisaka {"wo_uv", required_argument, 0, 0 },
316*437bfbebSnyanmisaka {"ho_uv", required_argument, 0, 0 },
317*437bfbebSnyanmisaka {"wo_uv_vir", required_argument, 0, 0 },
318*437bfbebSnyanmisaka {"ho_uv_vir", required_argument, 0, 0 },
319*437bfbebSnyanmisaka {"work_mode", required_argument, 0, 0 },
320*437bfbebSnyanmisaka {"nthread", required_argument, 0, 0 },
321*437bfbebSnyanmisaka {"frame_num", required_argument, 0, 0 },
322*437bfbebSnyanmisaka { 0, 0, 0, 0 },
323*437bfbebSnyanmisaka };
324*437bfbebSnyanmisaka
325*437bfbebSnyanmisaka p_cmd_cfg->nthreads = 1;
326*437bfbebSnyanmisaka
327*437bfbebSnyanmisaka while ((ch = getopt_long_only(argc, argv, "", long_options, &option_index)) != -1) {
328*437bfbebSnyanmisaka switch (ch) {
329*437bfbebSnyanmisaka case 0: {
330*437bfbebSnyanmisaka switch (option_index) {
331*437bfbebSnyanmisaka case 0 : {
332*437bfbebSnyanmisaka strncpy(p_cmd_cfg->src_file_name, optarg, sizeof(p_cmd_cfg->src_file_name) - 1);
333*437bfbebSnyanmisaka mpp_log("ssrc file name: %s\n", p_cmd_cfg->src_file_name);
334*437bfbebSnyanmisaka } break;
335*437bfbebSnyanmisaka case 1 : {
336*437bfbebSnyanmisaka strncpy(p_cmd_cfg->dst_file_name_y, optarg, sizeof(p_cmd_cfg->dst_file_name_y) - 1);
337*437bfbebSnyanmisaka mpp_log("ddst-Y file name: %s\n", p_cmd_cfg->dst_file_name_y);
338*437bfbebSnyanmisaka } break;
339*437bfbebSnyanmisaka case 2 : {
340*437bfbebSnyanmisaka strncpy(p_cmd_cfg->dst_file_name_uv, optarg, sizeof(p_cmd_cfg->dst_file_name_uv) - 1);
341*437bfbebSnyanmisaka mpp_log("ddst-UV file name: %s\n", p_cmd_cfg->dst_file_name_uv);
342*437bfbebSnyanmisaka } break;
343*437bfbebSnyanmisaka case 3 : {
344*437bfbebSnyanmisaka strncpy(p_cmd_cfg->dst_file_name_hist, optarg, sizeof(p_cmd_cfg->dst_file_name_hist) - 1);
345*437bfbebSnyanmisaka mpp_log("ddst-Hist file name: %s\n", p_cmd_cfg->dst_file_name_hist);
346*437bfbebSnyanmisaka } break;
347*437bfbebSnyanmisaka case 4 : {
348*437bfbebSnyanmisaka p_cmd_cfg->img_w_i = atoi(optarg);
349*437bfbebSnyanmisaka } break;
350*437bfbebSnyanmisaka case 5 : {
351*437bfbebSnyanmisaka p_cmd_cfg->img_h_i = atoi(optarg);
352*437bfbebSnyanmisaka } break;
353*437bfbebSnyanmisaka case 6 : {
354*437bfbebSnyanmisaka p_cmd_cfg->img_w_i_vir = atoi(optarg);
355*437bfbebSnyanmisaka } break;
356*437bfbebSnyanmisaka case 7 : {
357*437bfbebSnyanmisaka p_cmd_cfg->img_h_i_vir = atoi(optarg);
358*437bfbebSnyanmisaka } break;
359*437bfbebSnyanmisaka case 8 : {
360*437bfbebSnyanmisaka p_cmd_cfg->img_w_o = atoi(optarg);
361*437bfbebSnyanmisaka } break;
362*437bfbebSnyanmisaka case 9 : {
363*437bfbebSnyanmisaka p_cmd_cfg->img_h_o = atoi(optarg);
364*437bfbebSnyanmisaka } break;
365*437bfbebSnyanmisaka case 10 : {
366*437bfbebSnyanmisaka p_cmd_cfg->img_w_o_vir = atoi(optarg);
367*437bfbebSnyanmisaka } break;
368*437bfbebSnyanmisaka case 11 : {
369*437bfbebSnyanmisaka p_cmd_cfg->img_h_o_vir = atoi(optarg);
370*437bfbebSnyanmisaka } break;
371*437bfbebSnyanmisaka case 12 : {
372*437bfbebSnyanmisaka p_cmd_cfg->uv_diff_flag = atoi(optarg);
373*437bfbebSnyanmisaka } break;
374*437bfbebSnyanmisaka case 13 : {
375*437bfbebSnyanmisaka p_cmd_cfg->img_w_o_c = atoi(optarg);
376*437bfbebSnyanmisaka } break;
377*437bfbebSnyanmisaka case 14 : {
378*437bfbebSnyanmisaka p_cmd_cfg->img_h_o_c = atoi(optarg);
379*437bfbebSnyanmisaka } break;
380*437bfbebSnyanmisaka case 15 : {
381*437bfbebSnyanmisaka p_cmd_cfg->img_w_o_c_vir = atoi(optarg);
382*437bfbebSnyanmisaka } break;
383*437bfbebSnyanmisaka case 16 : {
384*437bfbebSnyanmisaka p_cmd_cfg->img_h_o_c_vir = atoi(optarg);
385*437bfbebSnyanmisaka } break;
386*437bfbebSnyanmisaka case 17 : {
387*437bfbebSnyanmisaka p_cmd_cfg->work_mode = atoi(optarg);
388*437bfbebSnyanmisaka } break;
389*437bfbebSnyanmisaka case 18 : {
390*437bfbebSnyanmisaka p_cmd_cfg->nthreads = atoi(optarg);
391*437bfbebSnyanmisaka if (p_cmd_cfg->nthreads < 1)
392*437bfbebSnyanmisaka p_cmd_cfg->nthreads = 1;
393*437bfbebSnyanmisaka } break;
394*437bfbebSnyanmisaka case 19: {
395*437bfbebSnyanmisaka p_cmd_cfg->frame_num = atoi(optarg);
396*437bfbebSnyanmisaka } break;
397*437bfbebSnyanmisaka default : {
398*437bfbebSnyanmisaka } break;
399*437bfbebSnyanmisaka }
400*437bfbebSnyanmisaka mpp_log("%s: %s", long_options[option_index].name, optarg);
401*437bfbebSnyanmisaka
402*437bfbebSnyanmisaka } break;
403*437bfbebSnyanmisaka default: {
404*437bfbebSnyanmisaka } break;
405*437bfbebSnyanmisaka }
406*437bfbebSnyanmisaka }
407*437bfbebSnyanmisaka }
408