Revert of Ignore Camera and Flip bits in CVO when parsing video rotation (patchset #3 id:80001 of https://codereview.webrtc.org/2280703002/ )
Reason for revert:
Breaks downstream build.
Original issue's description:
> Ignore Camera and Flip bits in CVO when parsing video rotation
>
> Currently, if WebRTC receives a CVO byte where the Camera or Flip bit is
> set, then rotation is incorrectly parsed as 0. This CL fixes that issue.
> The Camera and Flip bit is still unimplemented and will just be ignored
> though.
>
> BUG=webrtc:6120
> R=danilchap@webrtc.org, pthatcher@webrtc.org, tommi@webrtc.org
>
> Committed: f9e1b922ef
TBR=pthatcher@webrtc.org,danilchap@webrtc.org,tommi@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:6120
Review-Url: https://codereview.webrtc.org/2300323002
Cr-Commit-Position: refs/heads/master@{#14035}
This commit is contained in:
parent
ac554eebb9
commit
97667c7746
@ -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",
|
||||
|
||||
@ -27,7 +27,7 @@ RTPHeaderExtension::RTPHeaderExtension()
|
||||
voiceActivity(false),
|
||||
audioLevel(0),
|
||||
hasVideoRotation(false),
|
||||
videoRotation(kVideoRotation_0) {}
|
||||
videoRotation(0) {}
|
||||
|
||||
RTPHeader::RTPHeader()
|
||||
: markerBit(false),
|
||||
|
||||
@ -18,7 +18,6 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#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};
|
||||
};
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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 =
|
||||
|
||||
@ -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
|
||||
|
||||
@ -13,7 +13,6 @@
|
||||
#include <string.h>
|
||||
|
||||
#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: {
|
||||
|
||||
@ -2,6 +2,7 @@ include_rules = [
|
||||
"+WebRTC",
|
||||
"+webrtc/api",
|
||||
"+webrtc/common_video/include",
|
||||
"+webrtc/common_video/rotation.h",
|
||||
"+webrtc/media",
|
||||
"+webrtc/system_wrappers",
|
||||
]
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user