⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 configure_app.c

📁 motion Jpeg 在SPI DSP平台优化好的代码
💻 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 + -