Changeset 1942 for pjproject/trunk/pjmedia/src/pjmedia/stream.c
- Timestamp:
- Apr 28, 2008 6:05:49 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjmedia/src/pjmedia/stream.c
r1887 r1942 471 471 rtcp_pkt, len); 472 472 473 #if defined(PJMEDIA_HAS_RTCP_XR) && (PJMEDIA_HAS_RTCP_XR != 0) 474 /* Temporarily always send RTCP XR after RTCP */ 475 if (stream->rtcp.xr_enabled) 476 { 477 int i; 478 pjmedia_jb_state jb_state; 479 480 pjmedia_jbuf_get_state(stream->jb, &jb_state); 481 482 i = jb_state.size * stream->codec_param.info.frm_ptime; 483 pjmedia_rtcp_xr_update_info(&stream->rtcp.xr_session, 484 PJMEDIA_RTCP_XR_INFO_JB_NOM, 485 i); 486 487 i = jb_state.max_size* stream->codec_param.info.frm_ptime; 488 pjmedia_rtcp_xr_update_info(&stream->rtcp.xr_session, 489 PJMEDIA_RTCP_XR_INFO_JB_MAX, 490 i); 491 492 pjmedia_rtcp_build_rtcp_xr(&stream->rtcp.xr_session, 0, 493 &rtcp_pkt, &len); 494 495 (*stream->transport->op->send_rtcp)(stream->transport, 496 rtcp_pkt, len); 497 } 498 #endif 499 473 500 stream->rtcp_last_tx = timestamp; 474 501 } 475 476 502 } 477 503 … … 975 1001 pjmedia_rtp_status seq_st; 976 1002 pj_status_t status; 977 1003 pj_bool_t pkt_discarded = PJ_FALSE; 978 1004 979 1005 /* Check for errors */ … … 996 1022 } 997 1023 998 999 /* Inform RTCP session */1000 pjmedia_rtcp_rx_rtp(&stream->rtcp, pj_ntohs(hdr->seq),1001 pj_ntohl(hdr->ts), payloadlen);1002 1003 1024 /* Ignore the packet if decoder is paused */ 1004 1025 if (channel->paused) 1005 return;1026 goto on_return; 1006 1027 1007 1028 /* Update RTP session (also checks if RTP session can accept … … 1026 1047 hdr->pt, channel->rtp.out_pt)); 1027 1048 } 1049 1050 if (seq_st.status.flag.badssrc) { 1051 PJ_LOG(4,(stream->port.info.name.ptr, 1052 "Changed RTP peer SSRC %d (previously %d)", 1053 channel->rtp.peer_ssrc, stream->rtcp.peer_ssrc)); 1054 stream->rtcp.peer_ssrc = channel->rtp.peer_ssrc; 1055 } 1056 1057 1028 1058 } 1029 1059 1030 1060 /* Skip bad RTP packet */ 1031 if (seq_st.status.flag.bad) 1032 return; 1061 if (seq_st.status.flag.bad) { 1062 pkt_discarded = PJ_TRUE; 1063 goto on_return; 1064 } 1033 1065 1034 1066 /* Ignore if payloadlen is zero */ 1035 if (payloadlen == 0) 1036 return; 1067 if (payloadlen == 0) { 1068 pkt_discarded = PJ_TRUE; 1069 goto on_return; 1070 } 1037 1071 1038 1072 /* Handle incoming DTMF. */ … … 1042 1076 */ 1043 1077 if (seq_st.status.flag.outorder || seq_st.status.flag.dup) { 1044 return;1078 goto on_return; 1045 1079 } 1046 1080 1047 1081 handle_incoming_dtmf(stream, payload, payloadlen); 1048 return;1082 goto on_return; 1049 1083 } 1050 1084 … … 1152 1186 for (i=0; i<count; ++i) { 1153 1187 unsigned ext_seq; 1188 pj_bool_t discarded; 1154 1189 1155 1190 ext_seq = (unsigned)(frames[i].timestamp.u64 / ts_span); 1156 pjmedia_jbuf_put_frame(stream->jb, frames[i].buf, 1157 frames[i].size, ext_seq); 1158 1191 pjmedia_jbuf_put_frame2(stream->jb, frames[i].buf, frames[i].size, 1192 ext_seq, &discarded); 1193 if (discarded) 1194 pkt_discarded = PJ_TRUE; 1159 1195 } 1160 1196 } … … 1173 1209 LOGERR_((stream->port.info.name.ptr, "Jitter buffer put() error", 1174 1210 status)); 1175 return; 1176 } 1211 pkt_discarded = PJ_TRUE; 1212 goto on_return; 1213 } 1214 1215 on_return: 1216 /* Update RTCP session */ 1217 if (stream->rtcp.peer_ssrc == 0) 1218 stream->rtcp.peer_ssrc = channel->rtp.peer_ssrc; 1219 1220 pjmedia_rtcp_rx_rtp2(&stream->rtcp, pj_ntohs(hdr->seq), 1221 pj_ntohl(hdr->ts), payloadlen, pkt_discarded); 1177 1222 } 1178 1223 … … 1513 1558 stream->transport = tp; 1514 1559 1560 #if PJMEDIA_HAS_RTCP_XR && PJMEDIA_STREAM_ENABLE_XR 1561 /* Enable RTCP XR and update some settings */ 1562 { 1563 int i; 1564 pjmedia_rtcp_enable_xr(&stream->rtcp, PJ_TRUE); 1565 1566 /* jitter buffer adaptive info */ 1567 i = PJMEDIA_RTCP_XR_JB_ADAPTIVE; 1568 pjmedia_rtcp_xr_update_info(&stream->rtcp.xr_session, 1569 PJMEDIA_RTCP_XR_INFO_CONF_JBA, 1570 i); 1571 1572 /* Jitter buffer aggressiveness info (estimated) */ 1573 i = 7; 1574 pjmedia_rtcp_xr_update_info(&stream->rtcp.xr_session, 1575 PJMEDIA_RTCP_XR_INFO_CONF_JBR, 1576 i); 1577 1578 /* Jitter buffer absolute maximum delay */ 1579 i = jb_max * stream->codec_param.info.frm_ptime; 1580 pjmedia_rtcp_xr_update_info(&stream->rtcp.xr_session, 1581 PJMEDIA_RTCP_XR_INFO_JB_ABS_MAX, 1582 i); 1583 1584 /* PLC info */ 1585 if (stream->codec_param.setting.plc == 0) 1586 i = PJMEDIA_RTCP_XR_PLC_DIS; 1587 else 1588 #if PJMEDIA_WSOLA_IMP==PJMEDIA_WSOLA_IMP_WSOLA 1589 i = PJMEDIA_RTCP_XR_PLC_ENH; 1590 #else 1591 i = PJMEDIA_RTCP_XR_PLC_DIS; 1592 #endif 1593 pjmedia_rtcp_xr_update_info(&stream->rtcp.xr_session, 1594 PJMEDIA_RTCP_XR_INFO_CONF_PLC, 1595 i); 1596 } 1597 #endif 1515 1598 1516 1599 /* Success! */ … … 1518 1601 1519 1602 PJ_LOG(5,(THIS_FILE, "Stream %s created", stream->port.info.name.ptr)); 1603 1520 1604 return PJ_SUCCESS; 1521 1605
Note: See TracChangeset
for help on using the changeset viewer.