Changeset 3776 for pjproject/trunk/pjmedia/src/test/vid_codec_test.c
- Timestamp:
- Sep 29, 2011 8:31:15 AM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjmedia/src/test/vid_codec_test.c
r3715 r3776 29 29 #define THIS_FILE "vid_codec.c" 30 30 31 #define BYPASS_CODEC 032 #define BYPASS_PACKETIZER 033 34 31 /* 35 32 * Capture device setting: … … 81 78 pjmedia_frame *frame) 82 79 { 80 enum { MAX_PACKETS = 50 }; 83 81 codec_port_data_t *port_data = (codec_port_data_t*)port->port_data.pdata; 84 82 pj_status_t status; 85 86 #if !BYPASS_CODEC 87 { 88 pjmedia_vid_codec *codec = port_data->codec; 89 pjmedia_frame enc_frame; 90 91 enc_frame.buf = port_data->enc_buf; 92 enc_frame.size = port_data->enc_buf_size; 93 94 status = pjmedia_vid_codec_encode(codec, frame, enc_frame.size, 95 &enc_frame); 96 if (status != PJ_SUCCESS) goto on_error; 97 98 #if !BYPASS_PACKETIZER 99 if (enc_frame.size) { 100 unsigned pos = 0; 101 pj_bool_t packetized = PJ_FALSE; 102 unsigned unpack_pos = 0; 103 104 while (pos < enc_frame.size) { 105 pj_uint8_t *payload; 106 pj_size_t payload_len; 107 108 status = pjmedia_vid_codec_packetize( 109 codec, 110 (pj_uint8_t*)enc_frame.buf, 111 enc_frame.size, &pos, 112 (const pj_uint8_t**)&payload, 113 &payload_len); 114 if (status == PJ_ENOTSUP) 115 break; 116 if (status != PJ_SUCCESS) 117 goto on_error; 118 119 status = pjmedia_vid_codec_unpacketize( 120 codec, payload, payload_len, 121 port_data->pack_buf, 122 port_data->pack_buf_size, 123 &unpack_pos); 124 if (status != PJ_SUCCESS) 125 goto on_error; 126 127 // what happen if the bitstream is broken? 128 //if (i++ != 1) unpack_pos -= 10; 129 130 packetized = PJ_TRUE; 131 } 132 133 if (packetized) { 134 enc_frame.buf = port_data->pack_buf; 135 enc_frame.size = unpack_pos; 136 } 83 pjmedia_vid_codec *codec = port_data->codec; 84 unsigned enc_cnt = 0; 85 pj_uint8_t *enc_buf; 86 unsigned enc_size_left; 87 pjmedia_frame enc_frames[MAX_PACKETS]; 88 pj_bool_t has_more = PJ_FALSE; 89 90 enc_buf = port_data->enc_buf; 91 enc_size_left = port_data->enc_buf_size; 92 93 /* 94 * Encode 95 */ 96 enc_frames[enc_cnt].buf = enc_buf; 97 enc_frames[enc_cnt].size = enc_size_left; 98 99 status = pjmedia_vid_codec_encode_begin(codec, frame, enc_size_left, 100 &enc_frames[enc_cnt], &has_more); 101 if (status != PJ_SUCCESS) goto on_error; 102 103 enc_buf += enc_frames[enc_cnt].size; 104 enc_size_left -= enc_frames[enc_cnt].size; 105 106 ++enc_cnt; 107 while (has_more) { 108 enc_frames[enc_cnt].buf = enc_buf; 109 enc_frames[enc_cnt].size = enc_size_left; 110 111 status = pjmedia_vid_codec_encode_more(codec, enc_size_left, 112 &enc_frames[enc_cnt], 113 &has_more); 114 if (status != PJ_SUCCESS) 115 break; 116 117 enc_buf += enc_frames[enc_cnt].size; 118 enc_size_left -= enc_frames[enc_cnt].size; 119 120 ++enc_cnt; 121 122 if (enc_cnt >= MAX_PACKETS) { 123 assert(!"Too many packets!"); 124 break; 137 125 } 138 #endif 139 140 status = pjmedia_vid_codec_decode(codec, &enc_frame, 141 frame->size, frame); 142 if (status != PJ_SUCCESS) goto on_error; 143 } 144 #endif 145 126 } 127 128 /* 129 * Decode 130 */ 131 status = pjmedia_vid_codec_decode(codec, enc_cnt, enc_frames, 132 frame->size, frame); 133 if (status != PJ_SUCCESS) goto on_error; 134 135 /* Display */ 146 136 status = pjmedia_port_put_frame( 147 137 pjmedia_vid_port_get_passive_port(port_data->rdr_port), … … 196 186 } 197 187 198 static int encode_decode_test(pj_pool_t *pool, const char *codec_id) 188 static int encode_decode_test(pj_pool_t *pool, const char *codec_id, 189 pjmedia_vid_packing packing) 199 190 { 200 191 const pj_str_t port_name = {"codec", 5}; … … 205 196 pjmedia_vid_codec_param codec_param; 206 197 const pjmedia_vid_codec_info *codec_info; 207 198 const char *packing_name; 208 199 pjmedia_vid_dev_index cap_idx, rdr_idx; 209 200 pjmedia_vid_port *capture=NULL, *renderer=NULL; … … 211 202 pjmedia_video_format_detail *vfd; 212 203 pjmedia_event_subscription esub; 204 char codec_name[5]; 213 205 pj_status_t status; 214 206 int rc = 0; 215 207 216 PJ_LOG(3, (THIS_FILE, " encode decode test")); 208 switch (packing) { 209 case PJMEDIA_VID_PACKING_PACKETS: 210 packing_name = "framed"; 211 break; 212 case PJMEDIA_VID_PACKING_WHOLE: 213 packing_name = "whole"; 214 break; 215 default: 216 packing_name = "unknown"; 217 break; 218 } 219 220 PJ_LOG(3, (THIS_FILE, " encode decode test: codec=%s, packing=%s", 221 codec_id, packing_name)); 217 222 218 223 /* Lookup codec */ … … 294 299 } 295 300 296 #if !BYPASS_CODEC 301 codec_param.packing = packing; 297 302 298 303 /* Open codec */ … … 322 327 &codec_port_data); 323 328 pjmedia_event_subscribe(&codec->epub, &esub); 324 #endif /* !BYPASS_CODEC */325 329 } 326 330 … … 393 397 } 394 398 395 #if BYPASS_CODEC 396 PJ_LOG(3, (THIS_FILE, " starting loopback test: %c%c%c%c %dx%d", 397 ((codec_param.dec_fmt.id & 0x000000FF) >> 0), 398 ((codec_param.dec_fmt.id & 0x0000FF00) >> 8), 399 ((codec_param.dec_fmt.id & 0x00FF0000) >> 16), 400 ((codec_param.dec_fmt.id & 0xFF000000) >> 24), 401 codec_param.dec_fmt.det.vid.size.w, 402 codec_param.dec_fmt.det.vid.size.h 403 )); 404 #else 405 PJ_LOG(3, (THIS_FILE, " starting codec test: %c%c%c%c<->%.*s %dx%d", 406 ((codec_param.dec_fmt.id & 0x000000FF) >> 0), 407 ((codec_param.dec_fmt.id & 0x0000FF00) >> 8), 408 ((codec_param.dec_fmt.id & 0x00FF0000) >> 16), 409 ((codec_param.dec_fmt.id & 0xFF000000) >> 24), 399 PJ_LOG(3, (THIS_FILE, " starting codec test: %s<->%.*s %dx%d", 400 pjmedia_fourcc_name(codec_param.dec_fmt.id, codec_name), 410 401 codec_info->encoding_name.slen, 411 402 codec_info->encoding_name.ptr, … … 413 404 codec_param.dec_fmt.det.vid.size.h 414 405 )); 415 #endif416 406 417 407 /* Start streaming.. */ … … 456 446 457 447 orig_log_level = pj_log_get_level(); 458 pj_log_set_level( 6);448 pj_log_set_level(3); 459 449 460 450 PJ_LOG(3, (THIS_FILE, "Performing video codec tests..")); … … 476 466 goto on_return; 477 467 478 rc = encode_decode_test(pool, "h263-1998"); 468 rc = encode_decode_test(pool, "h263-1998", PJMEDIA_VID_PACKING_WHOLE); 469 if (rc != 0) 470 goto on_return; 471 472 rc = encode_decode_test(pool, "h263-1998", PJMEDIA_VID_PACKING_PACKETS); 479 473 if (rc != 0) 480 474 goto on_return;
Note: See TracChangeset
for help on using the changeset viewer.