From 9039969de2235df02edf7dc35aec0c574fd2576c Mon Sep 17 00:00:00 2001 From: Sergey Silkin Date: Fri, 2 Mar 2018 14:44:10 +0100 Subject: [PATCH] Call vpx_codec_destroy() only if vpx_codec_init() call preceded. This fixes the issue when Init() with correct codec settings fails because preceding Init() was called with wrong settings. Bug: webrtc:8969 Change-Id: I50e618af6266ef593942fda27839c7c01e8717ae Reviewed-on: https://webrtc-review.googlesource.com/59382 Reviewed-by: Rasmus Brandt Commit-Queue: Sergey Silkin Cr-Commit-Position: refs/heads/master@{#22271} --- modules/video_coding/codecs/vp8/vp8_impl.cc | 12 ++++++++---- modules/video_coding/codecs/vp9/vp9_impl.cc | 16 ++++++++++------ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/modules/video_coding/codecs/vp8/vp8_impl.cc b/modules/video_coding/codecs/vp8/vp8_impl.cc index f491445835..5d47048250 100644 --- a/modules/video_coding/codecs/vp8/vp8_impl.cc +++ b/modules/video_coding/codecs/vp8/vp8_impl.cc @@ -279,8 +279,10 @@ int VP8EncoderImpl::Release() { } while (!encoders_.empty()) { vpx_codec_ctx_t& encoder = encoders_.back(); - if (vpx_codec_destroy(&encoder)) { - ret_val = WEBRTC_VIDEO_CODEC_MEMORY; + if (inited_) { + if (vpx_codec_destroy(&encoder)) { + ret_val = WEBRTC_VIDEO_CODEC_MEMORY; + } } encoders_.pop_back(); } @@ -1294,8 +1296,10 @@ int VP8DecoderImpl::Release() { int ret_val = WEBRTC_VIDEO_CODEC_OK; if (decoder_ != NULL) { - if (vpx_codec_destroy(decoder_)) { - ret_val = WEBRTC_VIDEO_CODEC_MEMORY; + if (inited_) { + if (vpx_codec_destroy(decoder_)) { + ret_val = WEBRTC_VIDEO_CODEC_MEMORY; + } } delete decoder_; decoder_ = NULL; diff --git a/modules/video_coding/codecs/vp9/vp9_impl.cc b/modules/video_coding/codecs/vp9/vp9_impl.cc index c54fda53b7..2fb6e55aff 100644 --- a/modules/video_coding/codecs/vp9/vp9_impl.cc +++ b/modules/video_coding/codecs/vp9/vp9_impl.cc @@ -101,8 +101,10 @@ int VP9EncoderImpl::Release() { encoded_image_._buffer = nullptr; } if (encoder_ != nullptr) { - if (vpx_codec_destroy(encoder_)) { - ret_val = WEBRTC_VIDEO_CODEC_MEMORY; + if (inited_) { + if (vpx_codec_destroy(encoder_)) { + ret_val = WEBRTC_VIDEO_CODEC_MEMORY; + } } delete encoder_; encoder_ = nullptr; @@ -1008,10 +1010,12 @@ 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_)) { - ret_val = WEBRTC_VIDEO_CODEC_MEMORY; + if (inited_) { + // When a codec is destroyed libvpx will release any buffers of + // |frame_buffer_pool_| it is currently using. + if (vpx_codec_destroy(decoder_)) { + ret_val = WEBRTC_VIDEO_CODEC_MEMORY; + } } delete decoder_; decoder_ = nullptr;