Single exit point in VPx wrapper Release().
This fixes potential memory leak caused by early exit in Release() methods. Bug: webrtc:8967 Change-Id: I932ec4a451d30b3145a6133a9562e73248a8c203 Reviewed-on: https://webrtc-review.googlesource.com/59380 Reviewed-by: Rasmus Brandt <brandtr@webrtc.org> Commit-Queue: Sergey Silkin <ssilkin@webrtc.org> Cr-Commit-Position: refs/heads/master@{#22268}
This commit is contained in:
committed by
Commit Bot
parent
a944732dac
commit
3e871ea047
@ -1291,16 +1291,18 @@ int VP8DecoderImpl::RegisterDecodeCompleteCallback(
|
||||
}
|
||||
|
||||
int VP8DecoderImpl::Release() {
|
||||
int ret_val = WEBRTC_VIDEO_CODEC_OK;
|
||||
|
||||
if (decoder_ != NULL) {
|
||||
if (vpx_codec_destroy(decoder_)) {
|
||||
return WEBRTC_VIDEO_CODEC_MEMORY;
|
||||
ret_val = WEBRTC_VIDEO_CODEC_MEMORY;
|
||||
}
|
||||
delete decoder_;
|
||||
decoder_ = NULL;
|
||||
}
|
||||
buffer_pool_.Release();
|
||||
inited_ = false;
|
||||
return WEBRTC_VIDEO_CODEC_OK;
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
const char* VP8DecoderImpl::ImplementationName() const {
|
||||
|
||||
@ -94,13 +94,15 @@ VP9EncoderImpl::~VP9EncoderImpl() {
|
||||
}
|
||||
|
||||
int VP9EncoderImpl::Release() {
|
||||
int ret_val = WEBRTC_VIDEO_CODEC_OK;
|
||||
|
||||
if (encoded_image_._buffer != nullptr) {
|
||||
delete[] encoded_image_._buffer;
|
||||
encoded_image_._buffer = nullptr;
|
||||
}
|
||||
if (encoder_ != nullptr) {
|
||||
if (vpx_codec_destroy(encoder_)) {
|
||||
return WEBRTC_VIDEO_CODEC_MEMORY;
|
||||
ret_val = WEBRTC_VIDEO_CODEC_MEMORY;
|
||||
}
|
||||
delete encoder_;
|
||||
encoder_ = nullptr;
|
||||
@ -114,7 +116,7 @@ int VP9EncoderImpl::Release() {
|
||||
raw_ = nullptr;
|
||||
}
|
||||
inited_ = false;
|
||||
return WEBRTC_VIDEO_CODEC_OK;
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
bool VP9EncoderImpl::ExplicitlyConfiguredSpatialLayers() const {
|
||||
@ -1003,11 +1005,13 @@ int VP9DecoderImpl::RegisterDecodeCompleteCallback(
|
||||
}
|
||||
|
||||
int VP9DecoderImpl::Release() {
|
||||
int ret_val = WEBRTC_VIDEO_CODEC_OK;
|
||||
|
||||
if (decoder_ != nullptr) {
|
||||
// When a codec is destroyed libvpx will release any buffers of
|
||||
// |frame_buffer_pool_| it is currently using.
|
||||
if (vpx_codec_destroy(decoder_)) {
|
||||
return WEBRTC_VIDEO_CODEC_MEMORY;
|
||||
ret_val = WEBRTC_VIDEO_CODEC_MEMORY;
|
||||
}
|
||||
delete decoder_;
|
||||
decoder_ = nullptr;
|
||||
@ -1017,7 +1021,7 @@ int VP9DecoderImpl::Release() {
|
||||
// to the pool.
|
||||
frame_buffer_pool_.ClearPool();
|
||||
inited_ = false;
|
||||
return WEBRTC_VIDEO_CODEC_OK;
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
const char* VP9DecoderImpl::ImplementationName() const {
|
||||
|
||||
Reference in New Issue
Block a user