diff options
author | Nanang Izzuddin <nanang@teluu.com> | 2008-06-27 16:18:13 +0000 |
---|---|---|
committer | Nanang Izzuddin <nanang@teluu.com> | 2008-06-27 16:18:13 +0000 |
commit | cc9f73832038bdab140af1818635f15a391f3398 (patch) | |
tree | c5e14fbff6d3c3f1c9f97fc25ba19d56da96123c /pjmedia | |
parent | 41171475ee587b18522664d5db1cdb2b7604d0f4 (diff) |
Ticket #543:
- Fixed bug of calculating clock interval which should include channel count
- Added L16 codecs including stereo
- Added WAV files for stereo tests
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2075 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia')
-rw-r--r-- | pjmedia/include/pjmedia/clock.h | 6 | ||||
-rw-r--r-- | pjmedia/src/pjmedia/clock_thread.c | 4 | ||||
-rw-r--r-- | pjmedia/src/pjmedia/master_port.c | 17 |
3 files changed, 19 insertions, 8 deletions
diff --git a/pjmedia/include/pjmedia/clock.h b/pjmedia/include/pjmedia/clock.h index 30d98f84..abe43144 100644 --- a/pjmedia/include/pjmedia/clock.h +++ b/pjmedia/include/pjmedia/clock.h @@ -121,9 +121,10 @@ typedef void pjmedia_clock_callback(const pj_timestamp *ts, * * @param pool Pool to allocate memory. * @param clock_rate Number of samples per second. + * @param channel_count Number of channel. * @param samples_per_frame Number of samples per frame. This argument - * along with clock_rate, specifies the interval - * of each clock run (or clock ticks). + * along with clock_rate and channel_count, specifies + * the interval of each clock run (or clock ticks). * @param options Bitmask of pjmedia_clock_options. * @param cb Callback to be called for each clock tick. * @param user_data User data, which will be passed to the callback. @@ -134,6 +135,7 @@ typedef void pjmedia_clock_callback(const pj_timestamp *ts, */ PJ_DECL(pj_status_t) pjmedia_clock_create( pj_pool_t *pool, unsigned clock_rate, + unsigned channel_count, unsigned samples_per_frame, unsigned options, pjmedia_clock_callback *cb, diff --git a/pjmedia/src/pjmedia/clock_thread.c b/pjmedia/src/pjmedia/clock_thread.c index 9329bc2b..457e58b0 100644 --- a/pjmedia/src/pjmedia/clock_thread.c +++ b/pjmedia/src/pjmedia/clock_thread.c @@ -55,6 +55,7 @@ static int clock_thread(void *arg); */ PJ_DEF(pj_status_t) pjmedia_clock_create( pj_pool_t *pool, unsigned clock_rate, + unsigned channel_count, unsigned samples_per_frame, unsigned options, pjmedia_clock_callback *cb, @@ -74,7 +75,8 @@ PJ_DEF(pj_status_t) pjmedia_clock_create( pj_pool_t *pool, if (status != PJ_SUCCESS) return status; - clock->interval.u64 = samples_per_frame * clock->freq.u64 / clock_rate; + clock->interval.u64 = samples_per_frame * clock->freq.u64 / + channel_count / clock_rate; clock->next_tick.u64 = 0; clock->timestamp.u64 = 0; clock->max_jump = MAX_JUMP_MSEC * clock->freq.u64 / 1000; diff --git a/pjmedia/src/pjmedia/master_port.c b/pjmedia/src/pjmedia/master_port.c index 6ab95215..b264dec9 100644 --- a/pjmedia/src/pjmedia/master_port.c +++ b/pjmedia/src/pjmedia/master_port.c @@ -52,6 +52,7 @@ PJ_DEF(pj_status_t) pjmedia_master_port_create( pj_pool_t *pool, { pjmedia_master_port *m; unsigned clock_rate; + unsigned channel_count; unsigned samples_per_frame; unsigned bytes_per_frame; pj_status_t status; @@ -64,15 +65,20 @@ PJ_DEF(pj_status_t) pjmedia_master_port_create( pj_pool_t *pool, PJ_ASSERT_RETURN(u_port->info.clock_rate == d_port->info.clock_rate, PJMEDIA_ENCCLOCKRATE); - /* Both ports MUST have equal ptime */ - PJ_ASSERT_RETURN(u_port->info.clock_rate/u_port->info.samples_per_frame== - d_port->info.clock_rate/d_port->info.samples_per_frame, + /* Both ports MUST have equal samples per frame */ + PJ_ASSERT_RETURN(u_port->info.samples_per_frame== + d_port->info.samples_per_frame, PJMEDIA_ENCSAMPLESPFRAME); + /* Both ports MUST have equal channel count */ + PJ_ASSERT_RETURN(u_port->info.channel_count == d_port->info.channel_count, + PJMEDIA_ENCCHANNEL); + /* Get clock_rate and samples_per_frame from one of the port. */ clock_rate = u_port->info.clock_rate; samples_per_frame = u_port->info.samples_per_frame; + channel_count = u_port->info.channel_count; /* Get the bytes_per_frame value, to determine the size of the @@ -102,8 +108,9 @@ PJ_DEF(pj_status_t) pjmedia_master_port_create( pj_pool_t *pool, return status; /* Create media clock */ - status = pjmedia_clock_create(pool, clock_rate, samples_per_frame, - options, &clock_callback, m, &m->clock); + status = pjmedia_clock_create(pool, clock_rate, channel_count, + samples_per_frame, options, &clock_callback, + m, &m->clock); if (status != PJ_SUCCESS) { pj_lock_destroy(m->lock); return status; |