📄 configure_app.c
字号:
//////////////////////////////////////////////////////////////////////////////////////////////////////// configure_app.c //// Notice: COPYRIGHT (C) STREAM PROCESSORS, INC. 2005-2007// THIS PROGRAM IS PROVIDED UNDER THE TERMS OF THE SPI// END-USER LICENSE AGREEMENT (EULA). THE PROGRAM MAY ONLY// BE USED IN A MANNER EXPLICITLY SPECIFIED IN THE EULA,// WHICH INCLUDES LIMITATIONS ON COPYING, MODIFYING,// REDISTRIBUTION AND WARANTIES. UNAUTHORIZED USE OF THIS// PROGRAM IS STRICTLY PROHIBITED. YOU MAY OBTAIN A COPY OF// THE EULA FROM WWW.STREAMPROCESSORS.COM. // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #includes ////////////////////////////////////////////////////////////////////////////////#include <stdio.h>#include <string.h>#include <stdlib.h>#include "spi_macros.h"#include "app_config.h"// Example application that uses the SPI JPEG encoder library.static void print_usage(void);static void set_default_config(APP_CONFIG_T *p_app_config);static void print_app_config(APP_CONFIG_T *p_app_config);static int parse_arguments(int argc, char *argv[], APP_CONFIG_T *p_app_config);static int read_config_file(int argc, char *argv[], int *n_argc, char *n_argv[]);static char *get_word (char *s, char *d);#define USAGE_ERR() \{ \ print_usage(); \ return ERROR; \}#define USAGE_ERR_MESS(x) \{ \ printf ("%s\n",x); \ print_usage(); \ return ERROR; \}int configure_application (int argc, char *argv[], APP_CONFIG_T *p_app_config){ int err_code = SUCCESS; set_default_config(p_app_config); err_code = parse_arguments(argc, argv, p_app_config); if (err_code == SUCCESS) print_app_config(p_app_config); return err_code;}static void print_usage(void){ printf("\n"); printf("\n"); printf("\nArguments: \n"); printf(" -? or --help : print this help message\n"); printf(" -d or --default : print default settings\n"); printf("\n"); printf(" -m or --mipsb_file _string_ : spvejpeg.device.out : DSP MIPS application filename.\n"); printf(" -ea or --enable_avi _num_ : 1 : 1-Enable,0-Disable avi output.\n"); printf(" -ej or --enable_jpeg _num_ : 0 : 1-Enable,0-Disable jpeg output.\n"); printf(" -y or --yuv_file _string_ : inp.yuv : YUV (input) 420 planar file.\n"); printf(" -a or --avi_file _string_ : out.avi : AVI (output) bitstream filename\n"); printf(" -j or --jpeg_file _string_ : out : JPEG (output) bitstream filename\n"); printf(" -f or --avi_fps _num_ : 1 : fps at which the avi file should play\n"); printf(" -w or --width _num_ : 720 : Width of yuv frame \n"); printf(" -h or --height _num_ : 480 : Height of yuv frame \n"); printf(" -q or --quality _num_ : 75 : Quality factor for jpeg (1..100) 100 gives best quality. \n"); printf(" -s or --skip_count _num_ : 0 : Number of frames to be skipped from yuv file \n"); printf(" -n or --no_of_frames _num_ : 1 : Number of frames to be encoded. \n"); printf(" @ _string_ : : configuration file \n"); printf("\n"); printf(" Note: 1. If jpeg output is enabled, different output files are generated for each frame. \n"); printf(" 'nnn.jpg' is appended to 'jpeg_file', where 'nnn' is the frame number starting from 'skip_count'.\n"); printf(" 2. If avi output is enabled, output file size is limited to 1GB. \n"); printf(" The output file is overwritten if the size crosses 1GB.\n"); printf(" 3. If no_of_frames is set to 0, yuv_file is played till EOF. \n"); printf(" 4. If no_of_frames is set to -1, yuv_file is played in a loop. \n"); printf("\n"); printf("\n");}static void set_default_config(APP_CONFIG_T *p_app_config){ strcpy (p_app_config->dsp_mips_filename, "spvejpeg.device.out"); p_app_config->no_of_channels = 1; p_app_config->channel_config.channel_id = 0; p_app_config->channel_config.width = 720; p_app_config->channel_config.height = 480; p_app_config->channel_config.format = SPI_VISUAL_FMT_YUV420; p_app_config->channel_config.quality = 75; p_app_config->channel_config.skip_count = 0; p_app_config->channel_config.tot_frames = 1; p_app_config->channel_config.enable_avi = 1; p_app_config->channel_config.enable_jpeg = 0; p_app_config->channel_config.avi_fps = 1; strcpy (p_app_config->channel_config.yuv_filename, "inp.yuv"); strcpy (p_app_config->channel_config.avi_filename, "out.avi"); strcpy (p_app_config->channel_config.jpeg_filename, "out");}static int parse_arguments(int t_argc, char *t_argv[], APP_CONFIG_T *p_app_config){ int argc; char *argv[100]; int argnum = 1; if (t_argc < 2) return SUCCESS; if ((read_config_file(t_argc, t_argv, &argc, argv)) == ERROR) USAGE_ERR() while (argnum < argc) { if ( (strcmp(argv[argnum], "-?") == 0) || (strcmp(argv[argnum], "--help") == 0) ) USAGE_ERR() else if ( (strcmp(argv[argnum], "-d") == 0) || (strcmp(argv[argnum], "--default") == 0) ) { print_app_config(p_app_config); return ERROR; } else if ( (strcmp(argv[argnum], "-m") == 0) || (strcmp(argv[argnum], "--mipsb_file") == 0) ) { if(++argnum < argc) strcpy(p_app_config->dsp_mips_filename, argv[argnum]); else USAGE_ERR_MESS("\n Error: Wrong set of arguments ."); } else if ( (strcmp(argv[argnum], "-y") == 0) || (strcmp(argv[argnum], "--yuv_file") == 0) ) { if(++argnum < argc) strcpy(p_app_config->channel_config.yuv_filename, argv[argnum]); else USAGE_ERR_MESS("\n Error: Wrong set of arguments ."); } else if ( (strcmp(argv[argnum], "-j") == 0) || (strcmp(argv[argnum], "--jpeg_file") == 0) ) { if(++argnum < argc) strcpy(p_app_config->channel_config.jpeg_filename, argv[argnum]); else USAGE_ERR_MESS("\n Error: Wrong set of arguments ."); } else if ( (strcmp(argv[argnum], "-a") == 0) || (strcmp(argv[argnum], "--avi_file") == 0) ) { if(++argnum < argc) strcpy(p_app_config->channel_config.avi_filename, argv[argnum]); else USAGE_ERR_MESS("\n Error: Wrong set of arguments ."); } else if ( (strcmp(argv[argnum], "-ea") == 0) || (strcmp(argv[argnum], "--enable_avi") == 0) ) { if(++argnum < argc) p_app_config->channel_config.enable_avi = atoi(argv[argnum]); else USAGE_ERR_MESS("\n Error: Wrong set of arguments ."); } else if ( (strcmp(argv[argnum], "-ej") == 0) || (strcmp(argv[argnum], "--enable_jpeg") == 0) ) { if(++argnum < argc) p_app_config->channel_config.enable_jpeg = atoi(argv[argnum]); else USAGE_ERR_MESS("\n Error: Wrong set of arguments ."); } else if ( (strcmp(argv[argnum], "-f") == 0) || (strcmp(argv[argnum], "--avi_fps") == 0) ) { if(++argnum < argc) p_app_config->channel_config.avi_fps = atoi(argv[argnum]); else USAGE_ERR_MESS("\n Error: Wrong set of arguments ."); } else if ( (strcmp(argv[argnum], "-w") == 0) || (strcmp(argv[argnum], "--width") == 0) ) { if(++argnum < argc) p_app_config->channel_config.width = atoi(argv[argnum]); else USAGE_ERR_MESS("\n Error: Wrong set of arguments ."); } else if ( (strcmp(argv[argnum], "-h") == 0) || (strcmp(argv[argnum], "--height") == 0) ) { if(++argnum < argc) p_app_config->channel_config.height = atoi(argv[argnum]); else USAGE_ERR_MESS("\n Error: Wrong set of arguments ."); } else if ( (strcmp(argv[argnum], "-q") == 0) || (strcmp(argv[argnum], "--quality") == 0) ) { if(++argnum < argc) p_app_config->channel_config.quality = atoi(argv[argnum]); else USAGE_ERR_MESS("\n Error: Wrong set of arguments ."); } else if ( (strcmp(argv[argnum], "-s") == 0) || (strcmp(argv[argnum], "--skip_count") == 0) ) { if(++argnum < argc) p_app_config->channel_config.skip_count = atoi(argv[argnum]); else USAGE_ERR_MESS("\n Error: Wrong set of arguments ."); } else if ( (strcmp(argv[argnum], "-n") == 0) || (strcmp(argv[argnum], "--no_of-frames") == 0) ) { if(++argnum < argc) p_app_config->channel_config.tot_frames = atoi(argv[argnum]); else USAGE_ERR_MESS("\n Error: Wrong set of arguments ."); } else USAGE_ERR_MESS("\n Error: Wrong set of arguments ."); argnum++; } for (argnum=1; argnum<argc; argnum++) { free(argv[argnum]); } return SUCCESS;}static int read_config_file(int argc, char *argv[], int *n_argc, char *n_argv[]){ FILE *fp; char config_file_name[200]; char line[1024]; char *l; char arg[100]; int count = 1; char *ptr; int i; if (strcmp(argv[1], "@") == 0) { if(argc < 3) USAGE_ERR_MESS("\n Error: Wrong set of arguments ."); strcpy(config_file_name, argv[2]); fp = fopen(config_file_name,"r"); if (fp == NULL) { printf ("Not able to open the config file - '%s'\n",config_file_name); return ERROR; } while(1) { if ((fgets(line, sizeof(line), fp)) == NULL) { break; } l = line; while(1) { if((l = get_word(l, arg)) == NULL) break; ptr = (char *)malloc(strlen(arg)+1); if (ptr == NULL) { printf ("Error: Malloc for command line args failed.\n"); return ERROR; } strcpy(ptr, arg); n_argv[count] = ptr; count++; } } *n_argc = count; printf ("Read from config file - '%s'\n",config_file_name); fclose (fp); } else { for (i=1; i<argc; i++) { ptr = (char *)malloc(strlen(argv[i])+1); if (ptr == NULL) { printf ("Error: Malloc for command line args failed.\n"); return ERROR; } strcpy(ptr, argv[i]); n_argv[i] = ptr; } *n_argc = argc; } return SUCCESS;}static char *get_word (char *s, char *d){ char word_found = 0; char exit_flag = 0; while ((word_found == 0) && (exit_flag == 0)) { switch(*s) { case '\0': case '#': exit_flag = 1; break; case ' ': case '\n': case '\t': case '\r': case '\f': s++; break; default: word_found = 1; break; } } if(exit_flag == 1) return NULL; while (exit_flag == 0) { switch(*s) { case '\0': case '#': case ' ': case '\n': case '\t': case '\r': case '\f': exit_flag = 1; break; default: *d++ = *s++; break; } } *d = '\0'; return s;}static void print_app_config(APP_CONFIG_T *p_app_config){ int i; printf("\n DSP MIPS Application : %s", p_app_config->dsp_mips_filename); printf("\n Number of channels : %d", p_app_config->no_of_channels); for (i=0; i<p_app_config->no_of_channels; i++) { printf("\n"); printf("\n Channel Id : %d", p_app_config->channel_config.channel_id); printf("\n Image Width : %d", p_app_config->channel_config.width); printf("\n Image Height : %d", p_app_config->channel_config.height); printf("\n Image Format : %s", ((p_app_config->channel_config.format==SPI_VISUAL_FMT_YUV420)?"YUV Planar 420":"Unknown")); printf("\n Quality factor : %d (Range 1..100. 100 gives best quality)", p_app_config->channel_config.quality); printf("\n YUV Input File : %s", p_app_config->channel_config.yuv_filename); if ((p_app_config->channel_config.enable_avi == ON)) { printf("\n AVI output is enabled."); printf("\n AVI output File : %s", p_app_config->channel_config.avi_filename); printf("\n Frame rate for the AVI : %d fps", p_app_config->channel_config.avi_fps); } else { printf("\n AVI output is disabled."); } if ((p_app_config->channel_config.enable_jpeg == ON)) { printf("\n JPEG output is enabled."); printf("\n JPEG output File : %s_nnn.jpg", p_app_config->channel_config.jpeg_filename); } else { printf("\n JPEG output is disabled."); } printf("\n Frames skipped at start : %d", p_app_config->channel_config.skip_count); printf("\n Frames to encode : %d", p_app_config->channel_config.tot_frames); } printf("\n\n");}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -