summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2010-08-24 10:45:01 +0000
committerNanang Izzuddin <nanang@teluu.com>2010-08-24 10:45:01 +0000
commit5d4c8098b1eab32df4f5e0fcdc6b539e79419987 (patch)
tree44cff8419bd9de28c748f04e4a30e2aad03ee3f1
parent69849ceb5944172abcc0cef976fc21ebe07ab5e1 (diff)
Fix #1114:
- Fixed bytes_per_frame calculation in stream port. - Fixed sample streamutil.c to use codec info/param for codec bandwidth calculation (was using bytes_per_frame info of stream port). - Doc fix for bytes_per_frame field in pjmedia_port_info. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3292 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjmedia/include/pjmedia/port.h2
-rw-r--r--pjmedia/src/pjmedia/stream.c25
-rw-r--r--pjsip-apps/src/samples/streamutil.c25
3 files changed, 34 insertions, 18 deletions
diff --git a/pjmedia/include/pjmedia/port.h b/pjmedia/include/pjmedia/port.h
index 447c429d..ccfff18d 100644
--- a/pjmedia/include/pjmedia/port.h
+++ b/pjmedia/include/pjmedia/port.h
@@ -218,7 +218,7 @@ typedef struct pjmedia_port_info
unsigned channel_count; /**< Number of channels. */
unsigned bits_per_sample; /**< Bits/sample */
unsigned samples_per_frame; /**< No of samples per frame. */
- unsigned bytes_per_frame; /**< No of samples per frame. */
+ unsigned bytes_per_frame; /**< No of bytes per frame. */
} pjmedia_port_info;
diff --git a/pjmedia/src/pjmedia/stream.c b/pjmedia/src/pjmedia/stream.c
index f6d53d0a..4436da51 100644
--- a/pjmedia/src/pjmedia/stream.c
+++ b/pjmedia/src/pjmedia/stream.c
@@ -2030,23 +2030,28 @@ PJ_DEF(pj_status_t) pjmedia_stream_create( pjmedia_endpt *endpt,
stream->codec_param.info.frm_ptime *
stream->codec_param.setting.frm_per_pkt /
1000;
- stream->port.info.bytes_per_frame = stream->codec_param.info.max_bps *
- stream->codec_param.info.frm_ptime *
- stream->codec_param.setting.frm_per_pkt /
- 8 / 1000;
- if ((stream->codec_param.info.max_bps * stream->codec_param.info.frm_ptime *
- stream->codec_param.setting.frm_per_pkt) % 8000 != 0)
- {
- ++stream->port.info.bytes_per_frame;
- }
-
stream->port.info.format.id = stream->codec_param.info.fmt_id;
if (stream->codec_param.info.fmt_id == PJMEDIA_FORMAT_L16) {
+ /* Raw format */
+ stream->port.info.bytes_per_frame = stream->port.info.samples_per_frame *
+ stream->port.info.bits_per_sample / 8;
+
stream->port.put_frame = &put_frame;
stream->port.get_frame = &get_frame;
} else {
+ /* Encoded format */
+ stream->port.info.bytes_per_frame = stream->codec_param.info.max_bps *
+ stream->codec_param.info.frm_ptime *
+ stream->codec_param.setting.frm_per_pkt /
+ 8 / 1000;
+ if ((stream->codec_param.info.max_bps * stream->codec_param.info.frm_ptime *
+ stream->codec_param.setting.frm_per_pkt) % 8000 != 0)
+ {
+ ++stream->port.info.bytes_per_frame;
+ }
stream->port.info.format.bitrate = stream->codec_param.info.avg_bps;
stream->port.info.format.vad = (stream->codec_param.setting.vad != 0);
+
stream->port.put_frame = &put_frame;
stream->port.get_frame = &get_frame_ext;
}
diff --git a/pjsip-apps/src/samples/streamutil.c b/pjsip-apps/src/samples/streamutil.c
index 36809190..23606d10 100644
--- a/pjsip-apps/src/samples/streamutil.c
+++ b/pjsip-apps/src/samples/streamutil.c
@@ -89,7 +89,8 @@ static const char *desc =
/* Prototype */
-static void print_stream_stat(pjmedia_stream *stream);
+static void print_stream_stat(pjmedia_stream *stream,
+ const pjmedia_codec_param *codec_param);
/* Prototype for LIBSRTP utility in file datatypes.c */
int hex_string_to_octet_string(char *raw, char *hex, int len);
@@ -273,6 +274,7 @@ int main(int argc, char *argv[])
/* Default values */
const pjmedia_codec_info *codec_info;
+ pjmedia_codec_param codec_param;
pjmedia_dir dir = PJMEDIA_DIR_DECODING;
pj_sockaddr_in remote_addr;
pj_uint16_t local_port = 4000;
@@ -487,6 +489,13 @@ int main(int argc, char *argv[])
if (status != PJ_SUCCESS)
goto on_exit;
+ /* Get codec default param for info */
+ status = pjmedia_codec_mgr_get_default_param(
+ pjmedia_endpt_get_codec_mgr(med_endpt),
+ codec_info,
+ &codec_param);
+ /* Should be ok, as create_stream() above succeeded */
+ pj_assert(status == PJ_SUCCESS);
/* Get the port interface of the stream */
status = pjmedia_stream_get_port( stream, &stream_port);
@@ -622,7 +631,7 @@ int main(int argc, char *argv[])
}
if (tmp[0] == 's')
- print_stream_stat(stream);
+ print_stream_stat(stream, &codec_param);
else if (tmp[0] == 'q')
break;
@@ -723,7 +732,8 @@ static const char *good_number(char *buf, pj_int32_t val)
/*
* Print stream statistics
*/
-static void print_stream_stat(pjmedia_stream *stream)
+static void print_stream_stat(pjmedia_stream *stream,
+ const pjmedia_codec_param *codec_param)
{
char duration[80], last_update[80];
char bps[16], ipbps[16], packets[16], bytes[16], ipbytes[16];
@@ -752,10 +762,11 @@ static void print_stream_stat(pjmedia_stream *stream)
port->info.encoding_name.ptr,
port->info.clock_rate,
port->info.samples_per_frame * 1000 / port->info.clock_rate,
- good_number(bps, port->info.bytes_per_frame * port->info.clock_rate /
- port->info.samples_per_frame),
- good_number(ipbps, (port->info.bytes_per_frame+32) *
- port->info.clock_rate / port->info.clock_rate));
+ good_number(bps, (codec_param->info.avg_bps+7)/8),
+ good_number(ipbps, ((codec_param->info.avg_bps+7)/8) +
+ (40 * 1000 /
+ codec_param->setting.frm_per_pkt /
+ codec_param->info.frm_ptime)));
if (stat.rx.update_cnt == 0)
strcpy(last_update, "never");