From f0eee0087f1e999461d353895b48d1fd5ef126fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= Date: Wed, 28 Nov 2018 16:31:29 +0100 Subject: [PATCH] Move size() method to EncodedImage base class MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Deleted from subclass video_coding::EncodedFrame. Also delete Length and SetLength methods on the intermediate class video_coding::VCMEncodedFrame. Bug: webrtc:9378 Change-Id: I3c90b14735f622f50b2f403f79072e22fc025d11 Reviewed-on: https://webrtc-review.googlesource.com/c/112131 Reviewed-by: Philip Eliasson Reviewed-by: Erik Språng Commit-Queue: Niels Moller Cr-Commit-Position: refs/heads/master@{#25838} --- api/video/encoded_frame.h | 2 -- api/video/encoded_image.h | 4 ++++ modules/video_coding/encoded_frame.h | 12 +----------- modules/video_coding/frame_buffer.cc | 4 ++-- modules/video_coding/frame_object.cc | 5 +++++ modules/video_coding/frame_object.h | 1 + modules/video_coding/jitter_buffer.cc | 6 +++--- modules/video_coding/jitter_buffer_unittest.cc | 2 +- video/rtp_video_stream_receiver.cc | 2 +- video/rtp_video_stream_receiver_unittest.cc | 2 +- video/video_receive_stream.cc | 2 +- 11 files changed, 20 insertions(+), 22 deletions(-) diff --git a/api/video/encoded_frame.h b/api/video/encoded_frame.h index 47fb91cd6e..c5a00428ed 100644 --- a/api/video/encoded_frame.h +++ b/api/video/encoded_frame.h @@ -74,8 +74,6 @@ class EncodedFrame : public webrtc::VCMEncodedFrame { // been implemented. virtual bool delayed_by_retransmission() const; - size_t size() const { return _length; } - bool is_keyframe() const { return num_references == 0; } VideoLayerFrameId id; diff --git a/api/video/encoded_image.h b/api/video/encoded_image.h index a7c719ce3a..fe5716a336 100644 --- a/api/video/encoded_image.h +++ b/api/video/encoded_image.h @@ -67,6 +67,9 @@ class RTC_EXPORT EncodedImage { color_space ? absl::make_optional(*color_space) : absl::nullopt; } + size_t size() const { return _length; } + size_t capacity() const { return _size; } + uint32_t _encodedWidth = 0; uint32_t _encodedHeight = 0; // NTP time of the capture time in local timebase in milliseconds. @@ -74,6 +77,7 @@ class RTC_EXPORT EncodedImage { int64_t capture_time_ms_ = 0; FrameType _frameType = kVideoFrameDelta; uint8_t* _buffer; + // TODO(bugs.webrtc.org/9378): Rename to size_, capacity_ and make private. size_t _length; size_t _size; VideoRotation rotation_ = kVideoRotation_0; diff --git a/modules/video_coding/encoded_frame.h b/modules/video_coding/encoded_frame.h index c7efd40072..124ed4427b 100644 --- a/modules/video_coding/encoded_frame.h +++ b/modules/video_coding/encoded_frame.h @@ -64,22 +64,12 @@ class VCMEncodedFrame : protected EncodedImage { * Get pointer to frame buffer that can be mutated. */ uint8_t* MutableBuffer() { return _buffer; } - /** - * Get frame length - */ - size_t Length() const { return _length; } - /** - * Set frame length - */ - void SetLength(size_t length) { - RTC_DCHECK(length <= _size); - _length = length; - } /** * Frame RTP timestamp (90kHz) */ using EncodedImage::Timestamp; using EncodedImage::SetTimestamp; + using EncodedImage::size; /** * Get render time in milliseconds */ diff --git a/modules/video_coding/frame_buffer.cc b/modules/video_coding/frame_buffer.cc index b623dd607b..e1abb64008 100644 --- a/modules/video_coding/frame_buffer.cc +++ b/modules/video_coding/frame_buffer.cc @@ -102,7 +102,7 @@ VCMFrameBufferEnum VCMFrameBuffer::InsertPacket( } uint32_t requiredSizeBytes = - Length() + packet.sizeBytes + + size() + packet.sizeBytes + (packet.insertStartCode ? kH264StartCodeLengthBytes : 0) + EncodedImage::GetBufferPaddingBytes(packet.codec); if (requiredSizeBytes >= _size) { @@ -139,7 +139,7 @@ VCMFrameBufferEnum VCMFrameBuffer::InsertPacket( return kOutOfBoundsPacket; } // update length - _length = Length() + static_cast(retVal); + _length = size() + static_cast(retVal); _latestPacketTimeMs = timeInMs; diff --git a/modules/video_coding/frame_object.cc b/modules/video_coding/frame_object.cc index 5ccf0b7d87..d27b9e1aaa 100644 --- a/modules/video_coding/frame_object.cc +++ b/modules/video_coding/frame_object.cc @@ -135,6 +135,11 @@ int64_t RtpFrameObject::RenderTime() const { return _renderTimeMs; } +void RtpFrameObject::SetSize(size_t size) { + RTC_DCHECK_LE(size, _size); + _length = size; +} + bool RtpFrameObject::delayed_by_retransmission() const { return times_nacked() > 0; } diff --git a/modules/video_coding/frame_object.h b/modules/video_coding/frame_object.h index a65a4b4dd8..b5a35e7d61 100644 --- a/modules/video_coding/frame_object.h +++ b/modules/video_coding/frame_object.h @@ -39,6 +39,7 @@ class RtpFrameObject : public EncodedFrame { VideoCodecType codec_type() const; int64_t ReceivedTime() const override; int64_t RenderTime() const override; + void SetSize(size_t size); bool delayed_by_retransmission() const override; absl::optional GetRtpVideoHeader() const; absl::optional GetGenericFrameDescriptor() const; diff --git a/modules/video_coding/jitter_buffer.cc b/modules/video_coding/jitter_buffer.cc index 4a0622aade..2805fbb45f 100644 --- a/modules/video_coding/jitter_buffer.cc +++ b/modules/video_coding/jitter_buffer.cc @@ -553,7 +553,7 @@ VCMEncodedFrame* VCMJitterBuffer::ExtractAndSetDecode(uint32_t timestamp) { if (retransmitted) { if (WaitForRetransmissions()) jitter_estimate_.FrameNacked(); - } else if (frame->Length() > 0) { + } else if (frame->size() > 0) { // Ignore retransmitted and empty frames. if (waiting_for_completion_.latest_packet_time >= 0) { UpdateJitterEstimate(waiting_for_completion_, true); @@ -562,7 +562,7 @@ VCMEncodedFrame* VCMJitterBuffer::ExtractAndSetDecode(uint32_t timestamp) { UpdateJitterEstimate(*frame, false); } else { // Wait for this one to get complete. - waiting_for_completion_.frame_size = frame->Length(); + waiting_for_completion_.frame_size = frame->size(); waiting_for_completion_.latest_packet_time = frame->LatestPacketTimeMs(); waiting_for_completion_.timestamp = frame->Timestamp(); } @@ -1264,7 +1264,7 @@ void VCMJitterBuffer::UpdateJitterEstimate(const VCMFrameBuffer& frame, // No retransmitted frames should be a part of the jitter // estimate. UpdateJitterEstimate(frame.LatestPacketTimeMs(), frame.Timestamp(), - frame.Length(), incomplete_frame); + frame.size(), incomplete_frame); } // Must be called under the critical section |crit_sect_|. Should never be diff --git a/modules/video_coding/jitter_buffer_unittest.cc b/modules/video_coding/jitter_buffer_unittest.cc index 3ed18a9386..e95a312738 100644 --- a/modules/video_coding/jitter_buffer_unittest.cc +++ b/modules/video_coding/jitter_buffer_unittest.cc @@ -283,7 +283,7 @@ class TestBasicJitterBuffer : public ::testing::TestWithParam, i += 4; } - EXPECT_EQ(size, frame_out->Length()); + EXPECT_EQ(size, frame_out->size()); int count = 3; for (; i < size; i++) { if (outData[i] == 0 && outData[i + 1] == 0 && outData[i + 2] == 0x80) { diff --git a/video/rtp_video_stream_receiver.cc b/video/rtp_video_stream_receiver.cc index fdf02ff329..4116cad75f 100644 --- a/video/rtp_video_stream_receiver.cc +++ b/video/rtp_video_stream_receiver.cc @@ -430,7 +430,7 @@ void RtpVideoStreamReceiver::OnReceivedFrame( RTC_CHECK(bytes_written <= max_plaintext_byte_size); // Update the frame to contain just the written bytes. - frame->SetLength(bytes_written); + frame->SetSize(bytes_written); } else if (config_.crypto_options.sframe.require_frame_encryption) { RTC_LOG(LS_WARNING) << "Frame decryption required but not attached to this " "stream. Dropping frame."; diff --git a/video/rtp_video_stream_receiver_unittest.cc b/video/rtp_video_stream_receiver_unittest.cc index 53c1eb3b70..478f716828 100644 --- a/video/rtp_video_stream_receiver_unittest.cc +++ b/video/rtp_video_stream_receiver_unittest.cc @@ -80,7 +80,7 @@ class MockOnCompleteFrameCallback DoOnCompleteFrameFailLength(frame.get()); return; } - if (frame->Length() != buffer_.Length() || + if (frame->size() != buffer_.Length() || memcmp(buffer_.Data(), frame->Buffer(), buffer_.Length()) != 0) { DoOnCompleteFrameFailBitstream(frame.get()); return; diff --git a/video/video_receive_stream.cc b/video/video_receive_stream.cc index e478028eec..31757112c5 100644 --- a/video/video_receive_stream.cc +++ b/video/video_receive_stream.cc @@ -460,7 +460,7 @@ bool VideoReceiveStream::Decode() { // Current OnPreDecode only cares about QP for VP8. int qp = -1; if (frame->CodecSpecific()->codecType == kVideoCodecVP8) { - if (!vp8::GetQp(frame->Buffer(), frame->Length(), &qp)) { + if (!vp8::GetQp(frame->Buffer(), frame->size(), &qp)) { RTC_LOG(LS_WARNING) << "Failed to extract QP from VP8 video frame"; } }