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}
This commit is contained in:
parent
c2ee2c86f9
commit
4cee419e07
@ -28,6 +28,7 @@ RTPHeaderExtension::RTPHeaderExtension()
|
||||
hasTransportSequenceNumber(false),
|
||||
transportSequenceNumber(0),
|
||||
hasAudioLevel(false),
|
||||
voiceActivity(false),
|
||||
audioLevel(0),
|
||||
hasVideoRotation(false),
|
||||
videoRotation(0) {
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user