summaryrefslogtreecommitdiff
path: root/pjmedia/src
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2008-06-27 16:18:13 +0000
committerNanang Izzuddin <nanang@teluu.com>2008-06-27 16:18:13 +0000
commitcc9f73832038bdab140af1818635f15a391f3398 (patch)
treec5e14fbff6d3c3f1c9f97fc25ba19d56da96123c /pjmedia/src
parent41171475ee587b18522664d5db1cdb2b7604d0f4 (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/src')
-rw-r--r--pjmedia/src/pjmedia/clock_thread.c4
-rw-r--r--pjmedia/src/pjmedia/master_port.c17
2 files changed, 15 insertions, 6 deletions
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;