summaryrefslogtreecommitdiff
path: root/pjmedia/src/test
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2011-09-29 08:31:15 +0000
committerBenny Prijono <bennylp@teluu.com>2011-09-29 08:31:15 +0000
commit21bee233619f1e2187345efd4eaed85e49facc5b (patch)
tree53db607a42e99c01d67c8e0612b29ec9313b4755 /pjmedia/src/test
parent90bbdfb85e44e2be7a185a7f8288bd50371d735a (diff)
Closed #1361: codec API change. Details:
- changed encode(), packetize(), unpacketize(), and decode() to encode_begin(), encode_more(), and decode() - codec has new "packing" setting - updated stream, aviplay, codec-test, and stream-util due to above - minor doxygen documentation fixes here and there git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3776 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia/src/test')
-rw-r--r--pjmedia/src/test/vid_codec_test.c158
1 files changed, 76 insertions, 82 deletions
diff --git a/pjmedia/src/test/vid_codec_test.c b/pjmedia/src/test/vid_codec_test.c
index 4d222564..a6c62469 100644
--- a/pjmedia/src/test/vid_codec_test.c
+++ b/pjmedia/src/test/vid_codec_test.c
@@ -28,9 +28,6 @@
#define THIS_FILE "vid_codec.c"
-#define BYPASS_CODEC 0
-#define BYPASS_PACKETIZER 0
-
/*
* Capture device setting:
* -1 = colorbar,
@@ -80,69 +77,62 @@ static pj_status_t codec_on_event(pjmedia_event_subscription *esub,
static pj_status_t codec_put_frame(pjmedia_port *port,
pjmedia_frame *frame)
{
+ enum { MAX_PACKETS = 50 };
codec_port_data_t *port_data = (codec_port_data_t*)port->port_data.pdata;
pj_status_t status;
+ pjmedia_vid_codec *codec = port_data->codec;
+ unsigned enc_cnt = 0;
+ pj_uint8_t *enc_buf;
+ unsigned enc_size_left;
+ pjmedia_frame enc_frames[MAX_PACKETS];
+ pj_bool_t has_more = PJ_FALSE;
+
+ enc_buf = port_data->enc_buf;
+ enc_size_left = port_data->enc_buf_size;
+
+ /*
+ * Encode
+ */
+ enc_frames[enc_cnt].buf = enc_buf;
+ enc_frames[enc_cnt].size = enc_size_left;
+
+ status = pjmedia_vid_codec_encode_begin(codec, frame, enc_size_left,
+ &enc_frames[enc_cnt], &has_more);
+ if (status != PJ_SUCCESS) goto on_error;
-#if !BYPASS_CODEC
- {
- pjmedia_vid_codec *codec = port_data->codec;
- pjmedia_frame enc_frame;
-
- enc_frame.buf = port_data->enc_buf;
- enc_frame.size = port_data->enc_buf_size;
-
- status = pjmedia_vid_codec_encode(codec, frame, enc_frame.size,
- &enc_frame);
- if (status != PJ_SUCCESS) goto on_error;
-
-#if !BYPASS_PACKETIZER
- if (enc_frame.size) {
- unsigned pos = 0;
- pj_bool_t packetized = PJ_FALSE;
- unsigned unpack_pos = 0;
-
- while (pos < enc_frame.size) {
- pj_uint8_t *payload;
- pj_size_t payload_len;
-
- status = pjmedia_vid_codec_packetize(
- codec,
- (pj_uint8_t*)enc_frame.buf,
- enc_frame.size, &pos,
- (const pj_uint8_t**)&payload,
- &payload_len);
- if (status == PJ_ENOTSUP)
- break;
- if (status != PJ_SUCCESS)
- goto on_error;
-
- status = pjmedia_vid_codec_unpacketize(
- codec, payload, payload_len,
- port_data->pack_buf,
- port_data->pack_buf_size,
- &unpack_pos);
- if (status != PJ_SUCCESS)
- goto on_error;
-
- // what happen if the bitstream is broken?
- //if (i++ != 1) unpack_pos -= 10;
-
- packetized = PJ_TRUE;
- }
+ enc_buf += enc_frames[enc_cnt].size;
+ enc_size_left -= enc_frames[enc_cnt].size;
- if (packetized) {
- enc_frame.buf = port_data->pack_buf;
- enc_frame.size = unpack_pos;
- }
- }
-#endif
+ ++enc_cnt;
+ while (has_more) {
+ enc_frames[enc_cnt].buf = enc_buf;
+ enc_frames[enc_cnt].size = enc_size_left;
+
+ status = pjmedia_vid_codec_encode_more(codec, enc_size_left,
+ &enc_frames[enc_cnt],
+ &has_more);
+ if (status != PJ_SUCCESS)
+ break;
+
+ enc_buf += enc_frames[enc_cnt].size;
+ enc_size_left -= enc_frames[enc_cnt].size;
- status = pjmedia_vid_codec_decode(codec, &enc_frame,
- frame->size, frame);
- if (status != PJ_SUCCESS) goto on_error;
+ ++enc_cnt;
+
+ if (enc_cnt >= MAX_PACKETS) {
+ assert(!"Too many packets!");
+ break;
+ }
}
-#endif
+ /*
+ * Decode
+ */
+ status = pjmedia_vid_codec_decode(codec, enc_cnt, enc_frames,
+ frame->size, frame);
+ if (status != PJ_SUCCESS) goto on_error;
+
+ /* Display */
status = pjmedia_port_put_frame(
pjmedia_vid_port_get_passive_port(port_data->rdr_port),
frame);
@@ -195,7 +185,8 @@ static int enum_codecs()
return PJ_SUCCESS;
}
-static int encode_decode_test(pj_pool_t *pool, const char *codec_id)
+static int encode_decode_test(pj_pool_t *pool, const char *codec_id,
+ pjmedia_vid_packing packing)
{
const pj_str_t port_name = {"codec", 5};
@@ -204,16 +195,30 @@ static int encode_decode_test(pj_pool_t *pool, const char *codec_id)
codec_port_data_t codec_port_data;
pjmedia_vid_codec_param codec_param;
const pjmedia_vid_codec_info *codec_info;
-
+ const char *packing_name;
pjmedia_vid_dev_index cap_idx, rdr_idx;
pjmedia_vid_port *capture=NULL, *renderer=NULL;
pjmedia_vid_port_param vport_param;
pjmedia_video_format_detail *vfd;
pjmedia_event_subscription esub;
+ char codec_name[5];
pj_status_t status;
int rc = 0;
- PJ_LOG(3, (THIS_FILE, " encode decode test"));
+ switch (packing) {
+ case PJMEDIA_VID_PACKING_PACKETS:
+ packing_name = "framed";
+ break;
+ case PJMEDIA_VID_PACKING_WHOLE:
+ packing_name = "whole";
+ break;
+ default:
+ packing_name = "unknown";
+ break;
+ }
+
+ PJ_LOG(3, (THIS_FILE, " encode decode test: codec=%s, packing=%s",
+ codec_id, packing_name));
/* Lookup codec */
{
@@ -293,7 +298,7 @@ static int encode_decode_test(pj_pool_t *pool, const char *codec_id)
rc = 246; goto on_return;
}
-#if !BYPASS_CODEC
+ codec_param.packing = packing;
/* Open codec */
status = pjmedia_vid_codec_mgr_alloc_codec(NULL, codec_info,
@@ -321,7 +326,6 @@ static int encode_decode_test(pj_pool_t *pool, const char *codec_id)
pjmedia_event_subscription_init(&esub, &codec_on_event,
&codec_port_data);
pjmedia_event_subscribe(&codec->epub, &esub);
-#endif /* !BYPASS_CODEC */
}
pjmedia_vid_port_param_default(&vport_param);
@@ -392,27 +396,13 @@ static int encode_decode_test(pj_pool_t *pool, const char *codec_id)
rc = 270; goto on_return;
}
-#if BYPASS_CODEC
- PJ_LOG(3, (THIS_FILE, " starting loopback test: %c%c%c%c %dx%d",
- ((codec_param.dec_fmt.id & 0x000000FF) >> 0),
- ((codec_param.dec_fmt.id & 0x0000FF00) >> 8),
- ((codec_param.dec_fmt.id & 0x00FF0000) >> 16),
- ((codec_param.dec_fmt.id & 0xFF000000) >> 24),
- codec_param.dec_fmt.det.vid.size.w,
- codec_param.dec_fmt.det.vid.size.h
- ));
-#else
- PJ_LOG(3, (THIS_FILE, " starting codec test: %c%c%c%c<->%.*s %dx%d",
- ((codec_param.dec_fmt.id & 0x000000FF) >> 0),
- ((codec_param.dec_fmt.id & 0x0000FF00) >> 8),
- ((codec_param.dec_fmt.id & 0x00FF0000) >> 16),
- ((codec_param.dec_fmt.id & 0xFF000000) >> 24),
+ PJ_LOG(3, (THIS_FILE, " starting codec test: %s<->%.*s %dx%d",
+ pjmedia_fourcc_name(codec_param.dec_fmt.id, codec_name),
codec_info->encoding_name.slen,
codec_info->encoding_name.ptr,
codec_param.dec_fmt.det.vid.size.w,
codec_param.dec_fmt.det.vid.size.h
));
-#endif
/* Start streaming.. */
status = pjmedia_vid_port_start(renderer);
@@ -455,7 +445,7 @@ int vid_codec_test(void)
int orig_log_level;
orig_log_level = pj_log_get_level();
- pj_log_set_level(6);
+ pj_log_set_level(3);
PJ_LOG(3, (THIS_FILE, "Performing video codec tests.."));
@@ -475,7 +465,11 @@ int vid_codec_test(void)
if (rc != 0)
goto on_return;
- rc = encode_decode_test(pool, "h263-1998");
+ rc = encode_decode_test(pool, "h263-1998", PJMEDIA_VID_PACKING_WHOLE);
+ if (rc != 0)
+ goto on_return;
+
+ rc = encode_decode_test(pool, "h263-1998", PJMEDIA_VID_PACKING_PACKETS);
if (rc != 0)
goto on_return;