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

📄 util.h

📁 基于sip协议的网络电话源码
💻 H
字号:
#include <stdlib.h>	/* strtol() *//* Util to display the error message for the specified error code  */static int app_perror( const char *sender, const char *title, 		       pj_status_t status){    char errmsg[PJ_ERR_MSG_SIZE];    pj_strerror(status, errmsg, sizeof(errmsg));    PJ_LOG(3,(sender, "%s: %s [code=%d]", title, errmsg, status));    return 1;}/* Constants */#define CLOCK_RATE	44100#define NSAMPLES	(CLOCK_RATE * 20 / 1000)#define NCHANNELS	1#define NBITS		16/* * Common sound options. */#define SND_USAGE   \"  -d, --dev=NUM        Sound device use device id NUM (default=-1)	 \n"\"  -r, --rate=HZ        Set clock rate in samples per sec (default=44100)\n"\"  -c, --channel=NUM    Set # of channels (default=1 for mono).		 \n"\"  -f, --frame=NUM      Set # of samples per frame (default equival 20ms)\n"\"  -b, --bit=NUM        Set # of bits per sample (default=16)		 \n"/* * This utility function parses the command line and look for * common sound options. */pj_status_t get_snd_options(const char *app_name,			    int argc, 			    char *argv[],			    int *dev_id,			    int *clock_rate,			    int *channel_count,			    int *samples_per_frame,			    int *bits_per_sample){    struct pj_getopt_option long_options[] = {	{ "dev",	1, 0, 'd' },	{ "rate",	1, 0, 'r' },	{ "channel",	1, 0, 'c' },	{ "frame",	1, 0, 'f' },	{ "bit",	1, 0, 'b' },	{ NULL, 0, 0, 0 },    };    int c;    int option_index;    long val;    char *err;    *samples_per_frame = 0;    pj_optind = 0;    while((c=pj_getopt_long(argc,argv, "d:r:c:f:b:", 			    long_options, &option_index))!=-1)     {	switch (c) {	case 'd':	    /* device */	    val = strtol(pj_optarg, &err, 10);	    if (*err) {		PJ_LOG(3,(app_name, "Error: invalid value for device id"));		return PJ_EINVAL;	    }	    *dev_id = val;	    break;	case 'r':	    /* rate */	    val = strtol(pj_optarg, &err, 10);	    if (*err) {		PJ_LOG(3,(app_name, "Error: invalid value for clock rate"));		return PJ_EINVAL;	    }	    *clock_rate = val;	    break;	case 'c':	    /* channel count */	    val = strtol(pj_optarg, &err, 10);	    if (*err) {		PJ_LOG(3,(app_name, "Error: invalid channel count"));		return PJ_EINVAL;	    }	    *channel_count = val;	    break;	case 'f':	    /* frame count/samples per frame */	    val = strtol(pj_optarg, &err, 10);	    if (*err) {		PJ_LOG(3,(app_name, "Error: invalid samples per frame"));		return PJ_EINVAL;	    }	    *samples_per_frame = val;	    break;	case 'b':	    /* bit per sample */	    val = strtol(pj_optarg, &err, 10);	    if (*err) {		PJ_LOG(3,(app_name, "Error: invalid samples bits per sample"));		return PJ_EINVAL;	    }	    *bits_per_sample = val;	    break;	default:	    /* Unknown options */	    PJ_LOG(3,(app_name, "Error: unknown options '%c'", pj_optopt));	    return PJ_EINVAL;	}    }    if (*samples_per_frame == 0) {	*samples_per_frame = *clock_rate * *channel_count * 20 / 1000;    }    return 0;}/* Dump memory pool usage. */void dump_pool_usage( const char *app_name, pj_caching_pool *cp ){#if !defined(PJ_HAS_POOL_ALT_API) || PJ_HAS_POOL_ALT_API==0    pj_pool_t   *p;    unsigned     total_alloc = 0;    unsigned     total_used = 0;    /* Accumulate memory usage in active list. */    p = cp->used_list.next;    while (p != (pj_pool_t*) &cp->used_list) {	total_alloc += pj_pool_get_capacity(p);	total_used += pj_pool_get_used_size(p);	p = p->next;    }    PJ_LOG(3, (app_name, "Total pool memory allocated=%d KB, used=%d KB",	       total_alloc / 1000,	       total_used / 1000));#endif}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -