From 3f0d8e46a848b3359be348a8cb73ab11a2692cae Mon Sep 17 00:00:00 2001 From: Mirko Bonadei Date: Tue, 15 Oct 2019 07:03:54 +0000 Subject: [PATCH] Revert "Delete methods EncodedImage::Allocate and EncodedImageBufferInterface::Realloc" This reverts commit d6bb18479f4d9e258ae3e05427c101fb9e635373. Reason for revert: Breaks Chromium Roll. Example: https://ci.chromium.org/p/chromium/builders/try/android-kitkat-arm-rel/382446 Roll: https://chromium-review.googlesource.com/c/chromium/src/+/1859941 Original change's description: > Delete methods EncodedImage::Allocate and EncodedImageBufferInterface::Realloc > > Bug: webrtc:9378 > Change-Id: I3b03656769623647fcbb4f9125a3e920b7650fe9 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/155961 > Reviewed-by: Philip Eliasson > Reviewed-by: Ilya Nikolaevskiy > Commit-Queue: Niels Moller > Cr-Commit-Position: refs/heads/master@{#29458} TBR=ilnik@webrtc.org,nisse@webrtc.org,philipel@webrtc.org Change-Id: I7209c5ae2be2d512572210cf08a4751ee2ee5bc4 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: webrtc:9378 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/157040 Reviewed-by: Mirko Bonadei Commit-Queue: Mirko Bonadei Cr-Commit-Position: refs/heads/master@{#29473} --- api/video/encoded_image.cc | 9 +++++++++ api/video/encoded_image.h | 14 +++++++++++++- video/frame_encode_metadata_writer.cc | 2 ++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/api/video/encoded_image.cc b/api/video/encoded_image.cc index 13d57ef5ff..72f88d2922 100644 --- a/api/video/encoded_image.cc +++ b/api/video/encoded_image.cc @@ -81,6 +81,15 @@ void EncodedImage::Retain() { } } +void EncodedImage::Allocate(size_t capacity) { + if (encoded_data_ && encoded_data_->HasOneRef()) { + encoded_data_->Realloc(capacity); + } else { + encoded_data_ = EncodedImageBuffer::Create(capacity); + } + buffer_ = nullptr; +} + void EncodedImage::SetEncodeTime(int64_t encode_start_ms, int64_t encode_finish_ms) { timing_.encode_start_ms = encode_start_ms; diff --git a/api/video/encoded_image.h b/api/video/encoded_image.h index 6de432c3c9..91f2e0f567 100644 --- a/api/video/encoded_image.h +++ b/api/video/encoded_image.h @@ -44,6 +44,13 @@ class EncodedImageBufferInterface : public rtc::RefCountInterface { // this non-const data method. virtual uint8_t* data() = 0; virtual size_t size() const = 0; + // TODO(bugs.webrtc.org/9378): Delete from this interface, together with + // EncodedImage::Allocate. Implemented properly only by the below concrete + // class + virtual void Realloc(size_t size) { RTC_NOTREACHED(); } + // Will be implemented by RefCountedObject, which also implements + // |rtc::RefCountInterface|. + virtual bool HasOneRef() const = 0; }; // Basic implementation of EncodedImageBufferInterface. @@ -57,7 +64,7 @@ class EncodedImageBuffer : public EncodedImageBufferInterface { const uint8_t* data() const override; uint8_t* data() override; size_t size() const override; - void Realloc(size_t t); + void Realloc(size_t t) override; protected: explicit EncodedImageBuffer(size_t size); @@ -139,6 +146,11 @@ class RTC_EXPORT EncodedImage { capacity_ = capacity; } + // TODO(bugs.webrtc.org/9378): Delete; this method implies realloc, which + // should not be generally supported by the EncodedImageBufferInterface. + RTC_DEPRECATED + void Allocate(size_t capacity); + void SetEncodedData( rtc::scoped_refptr encoded_data) { encoded_data_ = encoded_data; diff --git a/video/frame_encode_metadata_writer.cc b/video/frame_encode_metadata_writer.cc index 8b2c2e67aa..a0a16c2b4e 100644 --- a/video/frame_encode_metadata_writer.cc +++ b/video/frame_encode_metadata_writer.cc @@ -35,6 +35,8 @@ class EncodedImageBufferWrapper : public EncodedImageBufferInterface { uint8_t* data() override { return buffer_.data(); } size_t size() const override { return buffer_.size(); } + void Realloc(size_t t) override { RTC_NOTREACHED(); } + private: rtc::Buffer buffer_; };