Delete method EncodedFrame::GetBitstream, part 1

Only caller was the RtpFrameObject constructor, so it's
not needed in the interface.

To be able to delete downstream overrides, add a temporary
default implementation. Method will be completely deleted in part 2.

Bug: webrtc:9378
Change-Id: I9083b6284313b6ebce854c6f2cec4617953331d9
Reviewed-on: https://webrtc-review.googlesource.com/c/112128
Reviewed-by: Sebastian Jansson <srte@webrtc.org>
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25822}
diff --git a/api/video/encoded_frame.cc b/api/video/encoded_frame.cc
index 26a794e..d36758d 100644
--- a/api/video/encoded_frame.cc
+++ b/api/video/encoded_frame.cc
@@ -13,6 +13,10 @@
 namespace webrtc {
 namespace video_coding {
 
+bool EncodedFrame::GetBitstream(uint8_t* destination) const {
+  return false;
+}
+
 bool EncodedFrame::delayed_by_retransmission() const {
   return 0;
 }
diff --git a/api/video/encoded_frame.h b/api/video/encoded_frame.h
index b8462c6..841b13b 100644
--- a/api/video/encoded_frame.h
+++ b/api/video/encoded_frame.h
@@ -56,7 +56,9 @@
   EncodedFrame() = default;
   virtual ~EncodedFrame() {}
 
-  virtual bool GetBitstream(uint8_t* destination) const = 0;
+  // TODO(nisse): Deprecated and unused. Delete method and default
+  // implementation as soon as downstream overrides are deleted.
+  virtual bool GetBitstream(uint8_t* destination) const;
 
   // When this frame was received.
   virtual int64_t ReceivedTime() const = 0;
diff --git a/modules/video_coding/frame_buffer2_unittest.cc b/modules/video_coding/frame_buffer2_unittest.cc
index e10f785..ca7af09 100644
--- a/modules/video_coding/frame_buffer2_unittest.cc
+++ b/modules/video_coding/frame_buffer2_unittest.cc
@@ -88,8 +88,6 @@
 
 class FrameObjectFake : public EncodedFrame {
  public:
-  bool GetBitstream(uint8_t* destination) const override { return true; }
-
   int64_t ReceivedTime() const override { return 0; }
 
   int64_t RenderTime() const override { return _renderTimeMs; }
diff --git a/modules/video_coding/frame_object.cc b/modules/video_coding/frame_object.cc
index 0172c55..f0c7449 100644
--- a/modules/video_coding/frame_object.cc
+++ b/modules/video_coding/frame_object.cc
@@ -49,7 +49,7 @@
   SetPlayoutDelay(first_packet->video_header.playout_delay);
 
   AllocateBitstreamBuffer(frame_size);
-  bool bitstream_copied = GetBitstream(_buffer);
+  bool bitstream_copied = packet_buffer_->GetBitstream(*this, _buffer);
   RTC_DCHECK(bitstream_copied);
   _encodedWidth = first_packet->width;
   _encodedHeight = first_packet->height;
@@ -122,15 +122,6 @@
   return codec_type_;
 }
 
-void RtpFrameObject::SetBitstream(rtc::ArrayView<const uint8_t> bitstream) {
-  AllocateBitstreamBuffer(bitstream.size());
-  memcpy(_buffer, bitstream.data(), _length);
-}
-
-bool RtpFrameObject::GetBitstream(uint8_t* destination) const {
-  return packet_buffer_->GetBitstream(*this, destination);
-}
-
 int64_t RtpFrameObject::ReceivedTime() const {
   return received_time_;
 }
diff --git a/modules/video_coding/frame_object.h b/modules/video_coding/frame_object.h
index efded47..a65a4b4 100644
--- a/modules/video_coding/frame_object.h
+++ b/modules/video_coding/frame_object.h
@@ -37,8 +37,6 @@
   int times_nacked() const;
   enum FrameType frame_type() const;
   VideoCodecType codec_type() const;
-  void SetBitstream(rtc::ArrayView<const uint8_t> bitstream);
-  bool GetBitstream(uint8_t* destination) const override;
   int64_t ReceivedTime() const override;
   int64_t RenderTime() const override;
   bool delayed_by_retransmission() const override;
diff --git a/modules/video_coding/video_packet_buffer_unittest.cc b/modules/video_coding/video_packet_buffer_unittest.cc
index 13e64ee..8e0918c 100644
--- a/modules/video_coding/video_packet_buffer_unittest.cc
+++ b/modules/video_coding/video_packet_buffer_unittest.cc
@@ -434,8 +434,8 @@
   memcpy(such, such_data, sizeof(such_data));
   memcpy(data, data_data, sizeof(data_data));
 
-  uint8_t result[sizeof(many_data) + sizeof(bitstream_data) +
-                 sizeof(such_data) + sizeof(data_data)];
+  const size_t result_length = sizeof(many_data) + sizeof(bitstream_data) +
+                               sizeof(such_data) + sizeof(data_data);
 
   const uint16_t seq_num = Rand();
 
@@ -450,14 +450,14 @@
 
   ASSERT_EQ(1UL, frames_from_callback_.size());
   CheckFrame(seq_num);
-  EXPECT_EQ(frames_from_callback_[seq_num]->size(), sizeof(result));
-  EXPECT_TRUE(frames_from_callback_[seq_num]->GetBitstream(result));
-  EXPECT_EQ(memcmp(result, "many bitstream, such data", sizeof(result)), 0);
+  EXPECT_EQ(frames_from_callback_[seq_num]->size(), result_length);
+  EXPECT_EQ(memcmp(frames_from_callback_[seq_num]->Buffer(),
+                   "many bitstream, such data", result_length),
+            0);
 }
 
 TEST_F(TestPacketBuffer, GetBitstreamOneFrameOnePacket) {
   uint8_t bitstream_data[] = "All the bitstream data for this frame!";
-  uint8_t result[sizeof(bitstream_data)];
   uint8_t* data = new uint8_t[sizeof(bitstream_data)];
   memcpy(data, bitstream_data, sizeof(bitstream_data));
 
@@ -467,14 +467,14 @@
   ASSERT_EQ(1UL, frames_from_callback_.size());
   CheckFrame(0);
   EXPECT_EQ(frames_from_callback_[0]->size(), sizeof(bitstream_data));
-  EXPECT_TRUE(frames_from_callback_[0]->GetBitstream(result));
-  EXPECT_EQ(memcmp(result, data, sizeof(bitstream_data)), 0);
+  EXPECT_EQ(
+      memcmp(frames_from_callback_[0]->Buffer(), data, sizeof(bitstream_data)),
+      0);
 }
 
 TEST_F(TestPacketBuffer, GetBitstreamOneFrameFullBuffer) {
   uint8_t* data_arr[kStartSize];
   uint8_t expected[kStartSize];
-  uint8_t result[kStartSize];
 
   for (uint8_t i = 0; i < kStartSize; ++i) {
     data_arr[i] = new uint8_t[1];
@@ -491,8 +491,8 @@
   ASSERT_EQ(1UL, frames_from_callback_.size());
   CheckFrame(0);
   EXPECT_EQ(frames_from_callback_[0]->size(), static_cast<size_t>(kStartSize));
-  EXPECT_TRUE(frames_from_callback_[0]->GetBitstream(result));
-  EXPECT_EQ(memcmp(result, expected, kStartSize), 0);
+  EXPECT_EQ(memcmp(frames_from_callback_[0]->Buffer(), expected, kStartSize),
+            0);
 }
 
 TEST_F(TestPacketBuffer, InsertPacketAfterOldFrameObjectIsRemoved) {
@@ -601,7 +601,6 @@
 TEST_P(TestPacketBufferH264Parameterized, GetBitstreamOneFrameFullBuffer) {
   uint8_t* data_arr[kStartSize];
   uint8_t expected[kStartSize];
-  uint8_t result[kStartSize];
 
   for (uint8_t i = 0; i < kStartSize; ++i) {
     data_arr[i] = new uint8_t[1];
@@ -620,8 +619,8 @@
   ASSERT_EQ(1UL, frames_from_callback_.size());
   CheckFrame(0);
   EXPECT_EQ(frames_from_callback_[0]->size(), static_cast<size_t>(kStartSize));
-  EXPECT_TRUE(frames_from_callback_[0]->GetBitstream(result));
-  EXPECT_EQ(memcmp(result, expected, kStartSize), 0);
+  EXPECT_EQ(memcmp(frames_from_callback_[0]->Buffer(), expected, kStartSize),
+            0);
 }
 
 TEST_P(TestPacketBufferH264Parameterized, GetBitstreamBufferPadding) {
@@ -630,10 +629,6 @@
   uint8_t* data = new uint8_t[sizeof(data_data)];
   memcpy(data, data_data, sizeof(data_data));
 
-  // EncodedImage::kBufferPaddingBytesH264 is unknown at compile time.
-  std::unique_ptr<uint8_t[]> result(
-      new uint8_t[sizeof(data_data) + EncodedImage::kBufferPaddingBytesH264]);
-
   VCMPacket packet;
   auto& h264_header =
       packet.video_header.video_type_header.emplace<RTPVideoHeaderH264>();
@@ -654,8 +649,9 @@
             sizeof(data_data));
   EXPECT_EQ(frames_from_callback_[seq_num]->EncodedImage()._size,
             sizeof(data_data) + EncodedImage::kBufferPaddingBytesH264);
-  EXPECT_TRUE(frames_from_callback_[seq_num]->GetBitstream(result.get()));
-  EXPECT_EQ(memcmp(result.get(), data, sizeof(data_data)), 0);
+  EXPECT_EQ(
+      memcmp(frames_from_callback_[seq_num]->Buffer(), data, sizeof(data_data)),
+      0);
 }
 
 TEST_F(TestPacketBuffer, FreeSlotsOnFrameDestruction) {
@@ -697,16 +693,6 @@
   CheckFrame(seq_num + kStartSize);
 }
 
-TEST_F(TestPacketBuffer, InvalidateFrameByClearing) {
-  const uint16_t seq_num = Rand();
-
-  EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kLast));
-  ASSERT_EQ(1UL, frames_from_callback_.size());
-
-  packet_buffer_->Clear();
-  EXPECT_FALSE(frames_from_callback_.begin()->second->GetBitstream(nullptr));
-}
-
 TEST_F(TestPacketBuffer, FramesAfterClear) {
   Insert(9025, kDeltaFrame, kFirst, kLast);
   Insert(9024, kKeyFrame, kFirst, kLast);
diff --git a/test/fuzzers/frame_buffer2_fuzzer.cc b/test/fuzzers/frame_buffer2_fuzzer.cc
index a559104..6f7c6f6 100644
--- a/test/fuzzers/frame_buffer2_fuzzer.cc
+++ b/test/fuzzers/frame_buffer2_fuzzer.cc
@@ -56,7 +56,6 @@
   FuzzyFrameObject() {}
   ~FuzzyFrameObject() {}
 
-  bool GetBitstream(uint8_t* destination) const override { return false; }
   int64_t ReceivedTime() const override { return 0; }
   int64_t RenderTime() const override { return _renderTimeMs; }
 };
diff --git a/video/rtp_video_stream_receiver_unittest.cc b/video/rtp_video_stream_receiver_unittest.cc
index 10c5e7e..53c1eb3 100644
--- a/video/rtp_video_stream_receiver_unittest.cc
+++ b/video/rtp_video_stream_receiver_unittest.cc
@@ -80,9 +80,8 @@
       DoOnCompleteFrameFailLength(frame.get());
       return;
     }
-    std::vector<uint8_t> actual_data(frame->size());
-    frame->GetBitstream(actual_data.data());
-    if (memcmp(buffer_.Data(), actual_data.data(), buffer_.Length()) != 0) {
+    if (frame->Length() != buffer_.Length() ||
+        memcmp(buffer_.Data(), frame->Buffer(), buffer_.Length()) != 0) {
       DoOnCompleteFrameFailBitstream(frame.get());
       return;
     }