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: