From 1803d15673fed4c7a349f05712d272aeb7499891 Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Fri, 26 Aug 2011 04:19:04 +0000 Subject: Fixed #1352: - Updated maximum video tee ports in pjsua video preview to (PJSUA_MAX_CALLS+1). - Removed video tee maximum ports compile-time setting, MAX_DST_PORT_COUNT. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3725 74dad513-b988-da41-8d7b-12977e46ad98 --- pjmedia/src/pjmedia/vid_tee.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'pjmedia') diff --git a/pjmedia/src/pjmedia/vid_tee.c b/pjmedia/src/pjmedia/vid_tee.c index 4ba737a9..21d0cec5 100644 --- a/pjmedia/src/pjmedia/vid_tee.c +++ b/pjmedia/src/pjmedia/vid_tee.c @@ -29,7 +29,6 @@ #define TEE_PORT_NAME "vid_tee" #define TEE_PORT_SIGN PJMEDIA_SIG_PORT_VID_TEE -#define MAX_DST_PORT_COUNT 20 typedef struct vid_tee_dst_port @@ -51,6 +50,7 @@ typedef struct vid_tee_port unsigned dst_port_maxcnt; unsigned dst_port_cnt; vid_tee_dst_port *dst_ports; + pj_uint8_t *put_frm_flag; struct vid_tee_conv_t { pjmedia_converter *conv; @@ -79,7 +79,6 @@ PJ_DEF(pj_status_t) pjmedia_vid_tee_create( pj_pool_t *pool, PJ_ASSERT_RETURN(pool && fmt && p_vid_tee, PJ_EINVAL); PJ_ASSERT_RETURN(fmt->type == PJMEDIA_TYPE_VIDEO, PJ_EINVAL); - PJ_ASSERT_RETURN(max_dst_cnt <= MAX_DST_PORT_COUNT, PJ_ETOOMANY); /* Allocate video tee structure */ tee = PJ_POOL_ZALLOC_T(pool, vid_tee_port); @@ -94,6 +93,9 @@ PJ_DEF(pj_status_t) pjmedia_vid_tee_create( pj_pool_t *pool, tee->tee_conv = (struct vid_tee_conv_t *) pj_pool_calloc(pool, max_dst_cnt, sizeof(struct vid_tee_conv_t)); + tee->put_frm_flag = (pj_uint8_t*) + pj_pool_calloc(pool, max_dst_cnt, + sizeof(tee->put_frm_flag[0])); /* Initialize video tee buffer, its size is one frame */ vfi = pjmedia_get_video_format_info(NULL, fmt->id); @@ -295,14 +297,15 @@ static pj_status_t tee_put_frame(pjmedia_port *port, pjmedia_frame *frame) { vid_tee_port *tee = (vid_tee_port*)port; unsigned i, j; - pj_bool_t done[MAX_DST_PORT_COUNT]; - - pj_bzero(done, sizeof(done)); + const pj_uint8_t PUT_FRM_DONE = 1; + + pj_bzero(tee->put_frm_flag, tee->dst_port_cnt * + sizeof(tee->put_frm_flag[0])); for (i = 0; i < tee->dst_port_cnt; ++i) { pjmedia_frame frame_ = *frame; - if (done[i]) + if (tee->put_frm_flag[i]) continue; if (tee->tee_conv[i].conv) { @@ -327,7 +330,7 @@ static pj_status_t tee_put_frame(pjmedia_port *port, pjmedia_frame *frame) for (j = i; j < tee->dst_port_cnt; ++j) { pjmedia_frame framep; - if (done[j] || + if (tee->put_frm_flag[j] || (tee->dst_ports[j].dst->info.fmt.id != tee->dst_ports[i].dst->info.fmt.id) || (tee->dst_ports[j].dst->info.fmt.det.vid.size.w != @@ -352,7 +355,7 @@ static pj_status_t tee_put_frame(pjmedia_port *port, pjmedia_frame *frame) /* Deliver the data */ pjmedia_port_put_frame(tee->dst_ports[j].dst, &framep); - done[j] = PJ_TRUE; + tee->put_frm_flag[j] = PUT_FRM_DONE; if (!tee->tee_conv[i].conv) break; -- cgit v1.2.3