diff options
author | Minyue <minyue@webrtc.org> | 2015-08-10 15:08:36 +0200 |
---|---|---|
committer | Minyue <minyue@webrtc.org> | 2015-08-10 13:08:46 +0000 |
commit | 4cee419e0777dcbfbd0837e26bed202e35e696a9 (patch) | |
tree | fd1be3c19d17e9dd93dc393f3e015a2f59497b59 | |
parent | c2ee2c86f905991a8cd05ee1f35bea105b41e4e0 (diff) | |
download | webrtc-4cee419e0777dcbfbd0837e26bed202e35e696a9.tar.gz |
Separating voice activity flag from audio level in RtpHeaderExtension.
VAD flag was embedded in RtpHeaderExtension.audioLevel, which is not easy to interpret. This CL tries to separate the flag with the actual audio level.
BUG=
R=andrew@webrtc.org, henrik.lundin@webrtc.org
Review URL: https://codereview.webrtc.org/1272343003 .
Cr-Commit-Position: refs/heads/master@{#9691}
-rw-r--r-- | webrtc/common_types.cc | 1 | ||||
-rw-r--r-- | webrtc/common_types.h | 1 | ||||
-rw-r--r-- | webrtc/modules/audio_coding/neteq/tools/rtp_analyze.cc | 5 | ||||
-rw-r--r-- | webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc | 11 | ||||
-rw-r--r-- | webrtc/modules/rtp_rtcp/source/rtp_utility.cc | 11 |
5 files changed, 14 insertions, 15 deletions
diff --git a/webrtc/common_types.cc b/webrtc/common_types.cc index b67c18c986..7b99f3c5a8 100644 --- a/webrtc/common_types.cc +++ b/webrtc/common_types.cc @@ -28,6 +28,7 @@ RTPHeaderExtension::RTPHeaderExtension() hasTransportSequenceNumber(false), transportSequenceNumber(0), hasAudioLevel(false), + voiceActivity(false), audioLevel(0), hasVideoRotation(false), videoRotation(0) { diff --git a/webrtc/common_types.h b/webrtc/common_types.h index ac56eb1cf1..39ece41197 100644 --- a/webrtc/common_types.h +++ b/webrtc/common_types.h @@ -804,6 +804,7 @@ struct RTPHeaderExtension { // Audio Level includes both level in dBov and voiced/unvoiced bit. See: // https://datatracker.ietf.org/doc/draft-lennox-avt-rtp-audio-level-exthdr/ bool hasAudioLevel; + bool voiceActivity; uint8_t audioLevel; // For Coordination of Video Orientation. See diff --git a/webrtc/modules/audio_coding/neteq/tools/rtp_analyze.cc b/webrtc/modules/audio_coding/neteq/tools/rtp_analyze.cc index d6d1b6560a..78f0497fff 100644 --- a/webrtc/modules/audio_coding/neteq/tools/rtp_analyze.cc +++ b/webrtc/modules/audio_coding/neteq/tools/rtp_analyze.cc @@ -123,11 +123,10 @@ int main(int argc, char* argv[]) { packet->header().markerBit, packet->header().ssrc); if (print_audio_level && packet->header().extension.hasAudioLevel) { - // |audioLevel| consists of one bit for "V" and then 7 bits level. fprintf(out_file, " %5u (%1i)", - packet->header().extension.audioLevel & 0x7F, - (packet->header().extension.audioLevel & 0x80) == 0 ? 0 : 1); + packet->header().extension.audioLevel, + packet->header().extension.voiceActivity); } if (print_abs_send_time && packet->header().extension.hasAbsoluteSendTime) { if (cycles == -1) { diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc index ea6fb6adf3..409be1a66c 100644 --- a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc +++ b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc @@ -320,6 +320,7 @@ TEST_F(RtpSenderTest, BuildRTPPacket) { EXPECT_FALSE(rtp_header.extension.hasAudioLevel); EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); EXPECT_EQ(0u, rtp_header.extension.absoluteSendTime); + EXPECT_FALSE(rtp_header.extension.voiceActivity); EXPECT_EQ(0u, rtp_header.extension.audioLevel); EXPECT_EQ(0u, rtp_header.extension.videoRotation); } @@ -504,9 +505,8 @@ TEST_F(RtpSenderTest, BuildRTPPacketWithAudioLevelExtension) { VerifyRTPHeaderCommon(rtp_header); EXPECT_EQ(length, rtp_header.headerLength); EXPECT_TRUE(rtp_header.extension.hasAudioLevel); - // Expect kAudioLevel + 0x80 because we set "voiced" to true in the call to - // UpdateAudioLevel(), above. - EXPECT_EQ(kAudioLevel + 0x80u, rtp_header.extension.audioLevel); + EXPECT_TRUE(rtp_header.extension.voiceActivity); + EXPECT_EQ(kAudioLevel, rtp_header.extension.audioLevel); // Parse without map extension webrtc::RTPHeader rtp_header2; @@ -516,6 +516,7 @@ TEST_F(RtpSenderTest, BuildRTPPacketWithAudioLevelExtension) { VerifyRTPHeaderCommon(rtp_header2); EXPECT_EQ(length, rtp_header2.headerLength); EXPECT_FALSE(rtp_header2.extension.hasAudioLevel); + EXPECT_FALSE(rtp_header2.extension.voiceActivity); EXPECT_EQ(0u, rtp_header2.extension.audioLevel); } @@ -566,7 +567,8 @@ TEST_F(RtpSenderTest, BuildRTPPacketWithHeaderExtensions) { EXPECT_TRUE(rtp_header.extension.hasTransportSequenceNumber); EXPECT_EQ(kTimeOffset, rtp_header.extension.transmissionTimeOffset); EXPECT_EQ(kAbsoluteSendTime, rtp_header.extension.absoluteSendTime); - EXPECT_EQ(kAudioLevel + 0x80u, rtp_header.extension.audioLevel); + EXPECT_TRUE(rtp_header.extension.voiceActivity); + EXPECT_EQ(kAudioLevel, rtp_header.extension.audioLevel); EXPECT_EQ(kTransportSequenceNumber, rtp_header.extension.transportSequenceNumber); @@ -584,6 +586,7 @@ TEST_F(RtpSenderTest, BuildRTPPacketWithHeaderExtensions) { EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset); EXPECT_EQ(0u, rtp_header2.extension.absoluteSendTime); + EXPECT_FALSE(rtp_header2.extension.voiceActivity); EXPECT_EQ(0u, rtp_header2.extension.audioLevel); EXPECT_EQ(0u, rtp_header2.extension.transportSequenceNumber); } diff --git a/webrtc/modules/rtp_rtcp/source/rtp_utility.cc b/webrtc/modules/rtp_rtcp/source/rtp_utility.cc index 0d083bd92a..2727e7b8bc 100644 --- a/webrtc/modules/rtp_rtcp/source/rtp_utility.cc +++ b/webrtc/modules/rtp_rtcp/source/rtp_utility.cc @@ -312,6 +312,7 @@ bool RtpHeaderParser::Parse(RTPHeader& header, // May not be present in packet. header.extension.hasAudioLevel = false; + header.extension.voiceActivity = false; header.extension.audioLevel = 0; // May not be present in packet. @@ -423,14 +424,8 @@ void RtpHeaderParser::ParseOneByteExtensionHeader( // | ID | len=0 |V| level | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // - - // Parse out the fields but only use it for debugging for now. - // const uint8_t V = (*ptr & 0x80) >> 7; - // const uint8_t level = (*ptr & 0x7f); - // DEBUG_PRINT("RTP_AUDIO_LEVEL_UNIQUE_ID: ID=%u, len=%u, V=%u, - // level=%u", ID, len, V, level); - - header.extension.audioLevel = ptr[0]; + header.extension.audioLevel = ptr[0] & 0x7f; + header.extension.voiceActivity = (ptr[0] & 0x80) != 0; header.extension.hasAudioLevel = true; break; } |