/* * Copyright (c) XMEDIA. All rights reserved. */ #include #include #include #include #include #include #include #include "xmedia_sys.h" #include "xmedia_isp.h" #include "xmedia_vi.h" #include "sample_comm_pq_bin.h" xmedia_s32 sample_pq_bin_module_init(xmedia_void) { xmedia_s32 ret; ret = xmedia_sys_init(NULL); if (ret != XMEDIA_SUCCESS) { SAMPLE_ERR("xmedia_sys_init err(%#x)!\n", ret); } ret = xmedia_vi_init(); if (ret != XMEDIA_SUCCESS) { SAMPLE_ERR("xmedia_vi_init err(%#x)!\n", ret); } return XMEDIA_SUCCESS; } xmedia_s32 sample_pq_bin_module_exit(xmedia_void) { xmedia_s32 ret; ret = xmedia_vi_exit(); if (ret != XMEDIA_SUCCESS) { SAMPLE_ERR("xmedia_vi_exit err(%#x)!\n", ret); } xmedia_sys_exit(); return XMEDIA_SUCCESS; } xmedia_void sample_pq_bin_create_file_name(xmedia_char *name, bin_module_info mod) { time_t now; struct tm *local; xmedia_s32 ret; xmedia_char date[80]; time(&now); local = localtime(&now); strftime(date, sizeof(date), "%Y%m%d%H%M%S", local); ret = sprintf(name, "PQBin_"); if (mod.vi.enable) ret += sprintf(name + ret, "isp_"); if (mod.vpss.enable) ret += sprintf(name + ret, "vpss_"); if (mod.mcf.enable) ret += sprintf(name + ret, "mcf_"); sprintf(name + ret, "%s.bin", date); return; } xmedia_void sample_pq_bin_usage(xmedia_char *args) { SAMPLE_ERR("\n" "****************************************************************************************\n" "Usage: %s pipe [-e] file\n" "pipe: vi pipe.\n" "[-e]: Whether to import or export the ex parameter, optional parameter.\n" "file: bin data file path.\n\n" "e.g:\n" "export: %s 0 -e\n" "import: %s 0 -e PQBin_xxx.bin\n" "***************************************************************************************\n" "\n", args, args, args); return; } xmedia_s32 sample_pq_bin_cmd_args_analysis(xmedia_s32 argc, xmedia_char **argv, bin_ops import, xmedia_u8 cmd_args[], bin_module_info *module) { xmedia_u32 offSet = 0; if (argc < 2 || argc > 4) { sample_pq_bin_usage(argv[0]); return XMEDIA_FAILURE; } module->vi.enable = XMEDIA_TRUE; module->vpss.enable = XMEDIA_FALSE; module->mcf.enable = XMEDIA_FALSE; if (import == PQ_BIN_EXPORT) { if (argv[2]) { module->ex.enable = XMEDIA_TRUE; } else { module->ex.enable = XMEDIA_FALSE; } } if (import == PQ_BIN_IMPORT) { if (argv[3]) { module->ex.enable = XMEDIA_TRUE; } else { module->ex.enable = XMEDIA_FALSE; } } module->vi.pipe = atoi(argv[1]); module->vpss.pipe = 0; module->mcf.pipe = 0; module->mcf.ichn = 0; module->ex.pipe = atoi(argv[1]); *(xmedia_s32 *)(cmd_args + offSet) = module->vi.pipe; offSet += sizeof(xmedia_s32); *(xmedia_s32 *)(cmd_args + offSet) = module->vpss.pipe; offSet += sizeof(xmedia_s32); *(xmedia_s32 *)(cmd_args + offSet) = module->mcf.pipe; offSet += sizeof(xmedia_s32); *(xmedia_s32 *)(cmd_args + offSet) = module->mcf.ichn; offSet += sizeof(xmedia_s32); *(xmedia_s32 *)(cmd_args + offSet) = module->ex.pipe; offSet += sizeof(xmedia_s32); *(xmedia_s32 *)(cmd_args + offSet) = module->vi.enable; offSet += sizeof(xmedia_s32); *(xmedia_s32 *)(cmd_args + offSet) = module->vpss.enable; offSet += sizeof(xmedia_s32); *(xmedia_s32 *)(cmd_args + offSet) = module->mcf.enable; offSet += sizeof(xmedia_s32); *(xmedia_s32 *)(cmd_args + offSet) = module->ex.enable; return XMEDIA_SUCCESS; } int main(int argc, char **argv) { xmedia_s32 ret, opt; xmedia_u32 total_length; xmedia_char file_name[200]; xmedia_u8 *buffer = XMEDIA_NULL; xmedia_u8 cmd_args[64]; bin_ops import; bin_module_info module = { 0 }; if (argv[2]) { import = PQ_BIN_IMPORT; } else { import = PQ_BIN_EXPORT; } while ((opt = getopt(argc, argv, "e")) != -1) { switch (opt) { case 'e': if (argv[3]) { import = PQ_BIN_IMPORT; } else { import = PQ_BIN_EXPORT; } break; default: break; } } ret = sample_pq_bin_cmd_args_analysis(argc, argv, import, cmd_args, &module); if (ret != XMEDIA_SUCCESS) { return ret; } (xmedia_void)sample_pq_bin_module_init(); if (import == PQ_BIN_IMPORT) { if (argv[3]) { ret = sample_comm_pq_bin_import(&module, argv[3]); } else { ret = sample_comm_pq_bin_import(&module, argv[2]); } if (ret != XMEDIA_SUCCESS) { goto err; } } else if(import == PQ_BIN_EXPORT) { total_length = get_pq_bin_length(cmd_args); if(total_length <= 0) { (xmedia_void)sample_pq_bin_module_exit(); SAMPLE_ERR("total length error, it might be due to inaccurate parameters.\n"); return XMEDIA_FAILURE; } buffer = (xmedia_u8 *)malloc(total_length); if (buffer == XMEDIA_NULL) { (xmedia_void)sample_pq_bin_module_exit(); SAMPLE_ERR("malloc err!\n"); return XMEDIA_FAILURE; } sample_pq_bin_create_file_name(&file_name[0], module); memset(buffer, 0, total_length); ret = sample_comm_pq_bin_export(&module, buffer, total_length, file_name); if (ret != XMEDIA_SUCCESS) { goto err; } } else { SAMPLE_ERR("Unsupported operation.\n"); } err: (xmedia_void)sample_pq_bin_module_exit(); if(import == PQ_BIN_EXPORT && buffer != XMEDIA_NULL) { free(buffer); buffer = XMEDIA_NULL; } return ret; }