|
Home --> Documentations --> PJMEDIA Reference
This example demonstrates how to use Monochannel and multichannel audio frame converter to change the channel count of the media streams.
This file is pjsip-apps/src/samples/stereotest.c
32#include <pjlib-util.h>
40#define REC_CLOCK_RATE 16000
48#define THIS_FILE "stereotest.c"
51static const char *desc =
58" Demonstrate how use stereo port to play a WAV file to sound \n"
59" device or record to a WAV file from sound device with different \n"
64" stereotest [options] WAV \n"
67" -m, --mode=N Operation mode: 1 = playing, 2 = recording.\n"
68" -C, --rec-ch-cnt=N Number of channel for recording file. \n"
69" -c, --snd-ch-cnt=N Number of channel for opening sound device.\n"
72int main( int argc, char *argv[])
86 char *wav_file = NULL;
88 unsigned rec_ch_cnt = 1;
89 unsigned snd_ch_cnt = 2;
93 OPT_REC_CHANNEL = 'C',
94 OPT_SND_CHANNEL = 'c',
98 { "mode", 1, 0, OPT_MODE },
99 { "rec-ch-cnt", 1, 0, OPT_REC_CHANNEL },
100 { "snd-ch-cnt", 1, 0, OPT_SND_CHANNEL },
113 while((c=pj_getopt_long(argc,argv, "m:C:c:", long_options, &option_index))!=-1) {
118 app_perror(THIS_FILE, "Cannot record and play at once!",
122 mode = atoi(pj_optarg);
125 case OPT_REC_CHANNEL:
126 rec_ch_cnt = atoi(pj_optarg);
129 case OPT_SND_CHANNEL:
130 snd_ch_cnt = atoi(pj_optarg);
134 printf( "Invalid options %s\n", argv[pj_optind]);
141 wav_file = argv[pj_optind];
145 app_perror(THIS_FILE, "WAV file not specified!", PJ_EINVAL);
149 if (!snd_ch_cnt || !rec_ch_cnt || rec_ch_cnt > 6) {
150 app_perror(THIS_FILE, "Invalid or too many channel count!", PJ_EINVAL);
154 if (mode != MODE_RECORD && mode != MODE_PLAY) {
155 app_perror(THIS_FILE, "Invalid operation mode!", PJ_EINVAL);
178 if (mode == MODE_PLAY) {
183 app_perror(THIS_FILE, "Unable to open file", status);
200 app_perror(THIS_FILE, "Unable to open sound device", status);
211 app_perror(THIS_FILE, "Unable to create stereo port", status);
221 app_perror(THIS_FILE, "Unable to connect sound port", status);
231 REC_CLOCK_RATE / 1000,
236 app_perror(THIS_FILE, "Unable to open file", status);
247 REC_CLOCK_RATE / 1000,
253 app_perror(THIS_FILE, "Unable to open sound device", status);
257 if (rec_ch_cnt != snd_ch_cnt) {
264 app_perror(THIS_FILE, "Unable to create stereo port", status);
274 app_perror(THIS_FILE, "Unable to connect sound port", status);
280 dump_pool_usage(THIS_FILE, &cp);
290 printf( "Mode = %s\n", (mode == MODE_PLAY? "playing" : "recording") );
292 printf( "Sound port channel count = %d\n",
295 puts( "Press <ENTER> to stop and quit");
297 if (fgets(tmp, sizeof(tmp), stdin) == NULL) {
298 puts( "EOF while reading stdin, will quit now..");
pj_status_t pjmedia_endpt_create(pj_pool_factory *pf, pj_ioqueue_t *ioqueue, unsigned worker_cnt, pjmedia_endpt **p_endpt) Definition: endpoint.h:127
pj_status_t pjmedia_endpt_destroy(pjmedia_endpt *endpt) Definition: endpoint.h:168
pj_status_t pjmedia_snd_port_connect(pjmedia_snd_port *snd_port, pjmedia_port *port)
pjmedia_port * pjmedia_snd_port_get_port(pjmedia_snd_port *snd_port)
pj_status_t pjmedia_snd_port_create_player(pj_pool_t *pool, int index, unsigned clock_rate, unsigned channel_count, unsigned samples_per_frame, unsigned bits_per_sample, unsigned options, pjmedia_snd_port **p_port)
pj_status_t pjmedia_snd_port_destroy(pjmedia_snd_port *snd_port)
pj_status_t pjmedia_snd_port_create_rec(pj_pool_t *pool, int index, unsigned clock_rate, unsigned channel_count, unsigned samples_per_frame, unsigned bits_per_sample, unsigned options, pjmedia_snd_port **p_port)
struct pjmedia_snd_port pjmedia_snd_port Definition: sound_port.h:145
pj_status_t pj_init(void)
void pj_caching_pool_destroy(pj_caching_pool *ch_pool)
void pj_caching_pool_init(pj_caching_pool *ch_pool, const pj_pool_factory_policy *policy, pj_size_t max_capacity)
pj_pool_factory_policy pj_pool_factory_default_policy
pj_pool_t * pj_pool_create(pj_pool_factory *factory, const char *name, pj_size_t initial_size, pj_size_t increment_size, pj_pool_callback *callback)
void pj_pool_release(pj_pool_t *pool)
pj_status_t pj_thread_sleep(unsigned msec)
#define PJ_ASSERT_RETURN(expr, retval)
PJMEDIA small footprint Open Source media stack
Copyright (C) 2006-2008 Teluu Inc.
|