239 lines
6.0 KiB
C
Executable File
239 lines
6.0 KiB
C
Executable File
/*
|
|
* Copyright (c) XMEDIA. All rights reserved.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <unistd.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <dlfcn.h>
|
|
#include <limits.h>
|
|
#include <time.h>
|
|
|
|
#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;
|
|
}
|