Update LibvpxVp8Encoder to use EncodedImage::Allocate

Bug: webrtc:9378
Change-Id: I81bc1917e615e2982ba022a519bde9e5f55ab699
Reviewed-on: https://webrtc-review.googlesource.com/c/121840
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26614}
diff --git a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc
index 42e57a6..9dc91f9 100644
--- a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc
+++ b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc
@@ -193,11 +193,8 @@
 int LibvpxVp8Encoder::Release() {
   int ret_val = WEBRTC_VIDEO_CODEC_OK;
 
-  while (!encoded_images_.empty()) {
-    EncodedImage& image = encoded_images_.back();
-    delete[] image.data();
-    encoded_images_.pop_back();
-  }
+  encoded_images_.clear();
+
   while (!encoders_.empty()) {
     vpx_codec_ctx_t& encoder = encoders_.back();
     if (inited_) {
@@ -386,12 +383,9 @@
   }
   for (int i = 0; i < number_of_streams; ++i) {
     // allocate memory for encoded image
-    if (encoded_images_[i].data() != nullptr) {
-      delete[] encoded_images_[i].data();
-    }
     size_t frame_capacity =
         CalcBufferSize(VideoType::kI420, codec_.width, codec_.height);
-    encoded_images_[i].set_buffer(new uint8_t[frame_capacity], frame_capacity);
+    encoded_images_[i].Allocate(frame_capacity);
     encoded_images_[i]._completeFrame = true;
   }
   // populate encoder configuration with default values
@@ -883,19 +877,12 @@
            NULL) {
       switch (pkt->kind) {
         case VPX_CODEC_CX_FRAME_PKT: {
-          size_t length = encoded_images_[encoder_idx].size();
-          if (pkt->data.frame.sz + length >
-              encoded_images_[encoder_idx].capacity()) {
-            uint8_t* buffer = new uint8_t[pkt->data.frame.sz + length];
-            memcpy(buffer, encoded_images_[encoder_idx].data(), length);
-            delete[] encoded_images_[encoder_idx].buffer();
-            encoded_images_[encoder_idx].set_buffer(
-                buffer, pkt->data.frame.sz + length);
-          }
-          memcpy(&encoded_images_[encoder_idx].data()[length],
+          const size_t size = encoded_images_[encoder_idx].size();
+          const size_t new_size = pkt->data.frame.sz + size;
+          encoded_images_[encoder_idx].Allocate(new_size);
+          memcpy(&encoded_images_[encoder_idx].data()[size],
                  pkt->data.frame.buf, pkt->data.frame.sz);
-          encoded_images_[encoder_idx].set_size(
-              encoded_images_[encoder_idx].size() + pkt->data.frame.sz);
+          encoded_images_[encoder_idx].set_size(new_size);
           break;
         }
         default: