diff --git a/webrtc/DEPS b/webrtc/DEPS index ffb67d17f5..41e0b712ce 100644 --- a/webrtc/DEPS +++ b/webrtc/DEPS @@ -13,7 +13,6 @@ include_rules = [ "+webrtc/call.h", "+webrtc/common.h", "+webrtc/common_types.h", - "+webrtc/common_video/rotation.h", "+webrtc/config.h", "+webrtc/engine_configurations.h", "+webrtc/transport.h", diff --git a/webrtc/common_types.cc b/webrtc/common_types.cc index 8f117e1153..86e7813e58 100644 --- a/webrtc/common_types.cc +++ b/webrtc/common_types.cc @@ -27,7 +27,7 @@ RTPHeaderExtension::RTPHeaderExtension() voiceActivity(false), audioLevel(0), hasVideoRotation(false), - videoRotation(kVideoRotation_0) {} + videoRotation(0) {} RTPHeader::RTPHeader() : markerBit(false), diff --git a/webrtc/common_types.h b/webrtc/common_types.h index cad748aaae..1ef5f91674 100644 --- a/webrtc/common_types.h +++ b/webrtc/common_types.h @@ -18,7 +18,6 @@ #include #include -#include "webrtc/common_video/rotation.h" #include "webrtc/typedefs.h" #if defined(_MSC_VER) @@ -700,7 +699,7 @@ struct RTPHeaderExtension { // http://www.etsi.org/deliver/etsi_ts/126100_126199/126114/12.07.00_60/ // ts_126114v120700p.pdf bool hasVideoRotation; - VideoRotation videoRotation; + uint8_t videoRotation; PlayoutDelay playout_delay = {-1, -1}; }; diff --git a/webrtc/modules/rtp_rtcp/include/rtp_cvo.h b/webrtc/modules/rtp_rtcp/include/rtp_cvo.h index b60b06e5df..5d5c995cd5 100644 --- a/webrtc/modules/rtp_rtcp/include/rtp_cvo.h +++ b/webrtc/modules/rtp_rtcp/include/rtp_cvo.h @@ -34,10 +34,8 @@ inline uint8_t ConvertVideoRotationToCVOByte(VideoRotation rotation) { return 0; } -inline VideoRotation ConvertCVOByteToVideoRotation(uint8_t cvo_byte) { - // CVO byte: |0 0 0 0 C F R R|. - const uint8_t rotation_bits = cvo_byte & 0x3; - switch (rotation_bits) { +inline VideoRotation ConvertCVOByteToVideoRotation(uint8_t rotation) { + switch (rotation) { case 0: return kVideoRotation_0; case 1: diff --git a/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc b/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc index 6e65ed3d8d..2d5dbf91b4 100644 --- a/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc +++ b/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc @@ -177,7 +177,7 @@ bool VideoOrientation::IsSupportedFor(MediaType type) { } bool VideoOrientation::Parse(const uint8_t* data, VideoRotation* rotation) { - *rotation = ConvertCVOByteToVideoRotation(data[0]); + *rotation = ConvertCVOByteToVideoRotation(data[0] & 0x03); return true; } diff --git a/webrtc/modules/rtp_rtcp/source/rtp_receiver_video.cc b/webrtc/modules/rtp_rtcp/source/rtp_receiver_video.cc index 9f6d80ae0a..7667c46f06 100644 --- a/webrtc/modules/rtp_rtcp/source/rtp_receiver_video.cc +++ b/webrtc/modules/rtp_rtcp/source/rtp_receiver_video.cc @@ -94,8 +94,8 @@ int32_t RTPReceiverVideo::ParseRtpPacket(WebRtcRTPHeader* rtp_header, // Retrieve the video rotation information. if (rtp_header->header.extension.hasVideoRotation) { - rtp_header->type.Video.rotation = - rtp_header->header.extension.videoRotation; + rtp_header->type.Video.rotation = ConvertCVOByteToVideoRotation( + rtp_header->header.extension.videoRotation); } rtp_header->type.Video.playout_delay = diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc index b9f061a9d3..e11bf1ee5a 100644 --- a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc +++ b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc @@ -262,7 +262,8 @@ class RtpSenderVideoTest : public RtpSenderTest { EXPECT_EQ(rtp_sender_->SSRC(), rtp_header.ssrc); EXPECT_EQ(0, rtp_header.numCSRCs); EXPECT_EQ(0U, rtp_header.paddingLength); - EXPECT_EQ(rotation, rtp_header.extension.videoRotation); + EXPECT_EQ(ConvertVideoRotationToCVOByte(rotation), + rtp_header.extension.videoRotation); } }; @@ -576,7 +577,8 @@ TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithVideoRotation_MarkerBit) { VerifyRTPHeaderCommon(rtp_header); EXPECT_EQ(length, rtp_header.headerLength); EXPECT_TRUE(rtp_header.extension.hasVideoRotation); - EXPECT_EQ(kRotation, rtp_header.extension.videoRotation); + EXPECT_EQ(ConvertVideoRotationToCVOByte(kRotation), + rtp_header.extension.videoRotation); } // Test CVO header extension is not set when marker bit is false. @@ -1689,26 +1691,4 @@ TEST_F(RtpSenderVideoTest, SendVideoWithCVO) { transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, hdr.rotation); } - -// Make sure rotation is parsed correctly when the Camera (C) and Flip (F) bits -// are set in the CVO byte. -TEST_F(RtpSenderVideoTest, SendVideoWithCameraAndFlipCVO) { - // Test extracting rotation when Camera (C) and Flip (F) bits are zero. - EXPECT_EQ(kVideoRotation_0, ConvertCVOByteToVideoRotation(0)); - EXPECT_EQ(kVideoRotation_90, ConvertCVOByteToVideoRotation(1)); - EXPECT_EQ(kVideoRotation_180, ConvertCVOByteToVideoRotation(2)); - EXPECT_EQ(kVideoRotation_270, ConvertCVOByteToVideoRotation(3)); - // Test extracting rotation when Camera (C) and Flip (F) bits are set. - const int flip_bit = 1 << 2; - const int camera_bit = 1 << 3; - EXPECT_EQ(kVideoRotation_0, - ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 0)); - EXPECT_EQ(kVideoRotation_90, - ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 1)); - EXPECT_EQ(kVideoRotation_180, - ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 2)); - EXPECT_EQ(kVideoRotation_270, - ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 3)); -} - } // namespace webrtc diff --git a/webrtc/modules/rtp_rtcp/source/rtp_utility.cc b/webrtc/modules/rtp_rtcp/source/rtp_utility.cc index 7dd59736fd..e38b3a3b43 100644 --- a/webrtc/modules/rtp_rtcp/source/rtp_utility.cc +++ b/webrtc/modules/rtp_rtcp/source/rtp_utility.cc @@ -13,7 +13,6 @@ #include #include "webrtc/base/logging.h" -#include "webrtc/modules/rtp_rtcp/include/rtp_cvo.h" #include "webrtc/modules/rtp_rtcp/source/byte_io.h" namespace webrtc { @@ -247,7 +246,7 @@ bool RtpHeaderParser::Parse(RTPHeader* header, // May not be present in packet. header->extension.hasVideoRotation = false; - header->extension.videoRotation = kVideoRotation_0; + header->extension.videoRotation = 0; // May not be present in packet. header->extension.playout_delay.min_ms = -1; @@ -398,8 +397,7 @@ void RtpHeaderParser::ParseOneByteExtensionHeader( // | ID | len=0 |0 0 0 0 C F R R| // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ header->extension.hasVideoRotation = true; - header->extension.videoRotation = - ConvertCVOByteToVideoRotation(ptr[0]); + header->extension.videoRotation = ptr[0]; break; } case kRtpExtensionTransportSequenceNumber: { diff --git a/webrtc/sdk/DEPS b/webrtc/sdk/DEPS index d6e53d504d..16ef0f6a06 100644 --- a/webrtc/sdk/DEPS +++ b/webrtc/sdk/DEPS @@ -2,6 +2,7 @@ include_rules = [ "+WebRTC", "+webrtc/api", "+webrtc/common_video/include", + "+webrtc/common_video/rotation.h", "+webrtc/media", "+webrtc/system_wrappers", ] diff --git a/webrtc/video/rtp_stream_receiver.cc b/webrtc/video/rtp_stream_receiver.cc index 20acc06216..d5b547f629 100644 --- a/webrtc/video/rtp_stream_receiver.cc +++ b/webrtc/video/rtp_stream_receiver.cc @@ -443,7 +443,8 @@ void RtpStreamReceiver::NotifyReceiverOfFecPacket(const RTPHeader& header) { rtp_header.type.Video.codec = payload_specific.Video.videoCodecType; rtp_header.type.Video.rotation = kVideoRotation_0; if (header.extension.hasVideoRotation) { - rtp_header.type.Video.rotation = header.extension.videoRotation; + rtp_header.type.Video.rotation = + ConvertCVOByteToVideoRotation(header.extension.videoRotation); } rtp_header.type.Video.playout_delay = header.extension.playout_delay;