Update MultiplexEncoderAdapter to use EncodedImage::Allocate

Bug: webrtc:9378
Change-Id: Icb09478c7035ec4ddbcb11f402db140a838721f3
Reviewed-on: https://webrtc-review.googlesource.com/c/122881
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26663}
diff --git a/modules/video_coding/codecs/multiplex/multiplex_encoded_image_packer.cc b/modules/video_coding/codecs/multiplex/multiplex_encoded_image_packer.cc
index 1afdf28..dcba67e 100644
--- a/modules/video_coding/codecs/multiplex/multiplex_encoded_image_packer.cc
+++ b/modules/video_coding/codecs/multiplex/multiplex_encoded_image_packer.cc
@@ -188,7 +188,7 @@
     frame_headers.push_back(frame_header);
   }
 
-  combined_image.set_buffer(new uint8_t[bitstream_offset], bitstream_offset);
+  combined_image.Allocate(bitstream_offset);
   combined_image.set_size(bitstream_offset);
 
   // header
diff --git a/modules/video_coding/codecs/multiplex/multiplex_encoder_adapter.cc b/modules/video_coding/codecs/multiplex/multiplex_encoder_adapter.cc
index fb588eb..b93fd92 100644
--- a/modules/video_coding/codecs/multiplex/multiplex_encoder_adapter.cc
+++ b/modules/video_coding/codecs/multiplex/multiplex_encoder_adapter.cc
@@ -247,16 +247,8 @@
   encoders_.clear();
   adapter_callbacks_.clear();
   rtc::CritScope cs(&crit_);
-  for (auto& stashed_image : stashed_images_) {
-    for (auto& image_component : stashed_image.second.image_components) {
-      delete[] image_component.encoded_image.data();
-    }
-  }
   stashed_images_.clear();
-  if (combined_image_.buffer()) {
-    delete[] combined_image_.buffer();
-    combined_image_.set_buffer(nullptr, 0);
-  }
+
   return WEBRTC_VIDEO_CODEC_OK;
 }
 
@@ -275,11 +267,9 @@
   image_component.codec_type =
       PayloadStringToCodecType(associated_format_.name);
   image_component.encoded_image = encodedImage;
-  image_component.encoded_image.set_buffer(new uint8_t[encodedImage.size()],
-                                           encodedImage.size());
-  image_component.encoded_image.set_size(encodedImage.size());
-  std::memcpy(image_component.encoded_image.data(), encodedImage.data(),
-              encodedImage.size());
+
+  // If we don't already own the buffer, make a copy.
+  image_component.encoded_image.Retain();
 
   rtc::CritScope cs(&crit_);
   const auto& stashed_image_itr =
@@ -302,8 +292,6 @@
 
       // We have to send out those stashed frames, otherwise the delta frame
       // dependency chain is broken.
-      if (combined_image_.buffer())
-        delete[] combined_image_.buffer();
       combined_image_ =
           MultiplexEncodedImagePacker::PackAndRelease(iter->second);