aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMinyue <minyue@webrtc.org>2015-08-10 15:08:36 +0200
committerMinyue <minyue@webrtc.org>2015-08-10 13:08:46 +0000
commit4cee419e0777dcbfbd0837e26bed202e35e696a9 (patch)
treefd1be3c19d17e9dd93dc393f3e015a2f59497b59
parentc2ee2c86f905991a8cd05ee1f35bea105b41e4e0 (diff)
downloadwebrtc-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.cc1
-rw-r--r--webrtc/common_types.h1
-rw-r--r--webrtc/modules/audio_coding/neteq/tools/rtp_analyze.cc5
-rw-r--r--webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc11
-rw-r--r--webrtc/modules/rtp_rtcp/source/rtp_utility.cc11
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;
}