summaryrefslogtreecommitdiff
path: root/pjmedia/src/pjmedia/master_port.c
diff options
context:
space:
mode:
Diffstat (limited to 'pjmedia/src/pjmedia/master_port.c')
-rw-r--r--pjmedia/src/pjmedia/master_port.c37
1 files changed, 23 insertions, 14 deletions
diff --git a/pjmedia/src/pjmedia/master_port.c b/pjmedia/src/pjmedia/master_port.c
index a59796b7..25a9e995 100644
--- a/pjmedia/src/pjmedia/master_port.c
+++ b/pjmedia/src/pjmedia/master_port.c
@@ -56,38 +56,41 @@ PJ_DEF(pj_status_t) pjmedia_master_port_create( pj_pool_t *pool,
unsigned channel_count;
unsigned samples_per_frame;
unsigned bytes_per_frame;
+ pjmedia_audio_format_detail *u_afd, *d_afd;
pj_status_t status;
/* Sanity check */
PJ_ASSERT_RETURN(pool && u_port && d_port && p_m, PJ_EINVAL);
+ u_afd = pjmedia_format_get_audio_format_detail(&u_port->info.fmt, PJ_TRUE);
+ d_afd = pjmedia_format_get_audio_format_detail(&d_port->info.fmt, PJ_TRUE);
/* Both ports MUST have equal clock rate */
- PJ_ASSERT_RETURN(u_port->info.clock_rate == d_port->info.clock_rate,
+ PJ_ASSERT_RETURN(u_afd->clock_rate == d_afd->clock_rate,
PJMEDIA_ENCCLOCKRATE);
/* Both ports MUST have equal samples per frame */
- PJ_ASSERT_RETURN(u_port->info.samples_per_frame==
- d_port->info.samples_per_frame,
+ PJ_ASSERT_RETURN(PJMEDIA_PIA_SPF(&u_port->info)==
+ PJMEDIA_PIA_SPF(&d_port->info),
PJMEDIA_ENCSAMPLESPFRAME);
/* Both ports MUST have equal channel count */
- PJ_ASSERT_RETURN(u_port->info.channel_count == d_port->info.channel_count,
+ PJ_ASSERT_RETURN(u_afd->channel_count == d_afd->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;
+ clock_rate = u_afd->clock_rate;
+ samples_per_frame = PJMEDIA_PIA_SPF(&u_port->info);
+ channel_count = u_afd->channel_count;
/* Get the bytes_per_frame value, to determine the size of the
* buffer. We take the larger size of the two ports.
*/
- bytes_per_frame = u_port->info.bytes_per_frame;
- if (d_port->info.bytes_per_frame > bytes_per_frame)
- bytes_per_frame = d_port->info.bytes_per_frame;
+ bytes_per_frame = PJMEDIA_AFD_AVG_FSZ(u_afd);
+ if (PJMEDIA_AFD_AVG_FSZ(d_afd) > bytes_per_frame)
+ bytes_per_frame = PJMEDIA_AFD_AVG_FSZ(d_afd);
/* Create the master port instance */
@@ -207,13 +210,16 @@ PJ_DEF(pj_status_t) pjmedia_master_port_set_uport(pjmedia_master_port *m,
{
PJ_ASSERT_RETURN(m && port, PJ_EINVAL);
+ /* Only supports audio for now */
+ PJ_ASSERT_RETURN(port->info.fmt.type==PJMEDIA_TYPE_AUDIO, PJ_ENOTSUP);
+
/* If we have downstream port, make sure they have matching samples per
* frame.
*/
if (m->d_port) {
PJ_ASSERT_RETURN(
- port->info.clock_rate/port->info.samples_per_frame==
- m->d_port->info.clock_rate/m->d_port->info.samples_per_frame,
+ PJMEDIA_PIA_PTIME(&port->info) ==
+ PJMEDIA_PIA_PTIME(&m->d_port->info),
PJMEDIA_ENCSAMPLESPFRAME
);
}
@@ -246,13 +252,16 @@ PJ_DEF(pj_status_t) pjmedia_master_port_set_dport(pjmedia_master_port *m,
{
PJ_ASSERT_RETURN(m && port, PJ_EINVAL);
+ /* Only supports audio for now */
+ PJ_ASSERT_RETURN(port->info.fmt.type==PJMEDIA_TYPE_AUDIO, PJ_ENOTSUP);
+
/* If we have upstream port, make sure they have matching samples per
* frame.
*/
if (m->u_port) {
PJ_ASSERT_RETURN(
- port->info.clock_rate/port->info.samples_per_frame==
- m->u_port->info.clock_rate/m->u_port->info.samples_per_frame,
+ PJMEDIA_PIA_PTIME(&port->info) ==
+ PJMEDIA_PIA_PTIME(&m->u_port->info),
PJMEDIA_ENCSAMPLESPFRAME
);
}