| Index: webrtc/modules/video_coding/codec_database.cc
|
| diff --git a/webrtc/modules/video_coding/codec_database.cc b/webrtc/modules/video_coding/codec_database.cc
|
| index 9f016d99245a419f19c2af0f4bec6a3560e712c7..be7f5ca376d039f4acac89d31579304bfd8e8e28 100644
|
| --- a/webrtc/modules/video_coding/codec_database.cc
|
| +++ b/webrtc/modules/video_coding/codec_database.cc
|
| @@ -111,8 +111,12 @@ VCMCodecDataBase::VCMCodecDataBase(
|
| dec_external_map_() {}
|
|
|
| VCMCodecDataBase::~VCMCodecDataBase() {
|
| - ResetSender();
|
| - ResetReceiver();
|
| + DeleteEncoder();
|
| + ReleaseDecoder(ptr_decoder_);
|
| + for (auto& kv : dec_map_)
|
| + delete kv.second;
|
| + for (auto& kv : dec_external_map_)
|
| + delete kv.second;
|
| }
|
|
|
| void VCMCodecDataBase::Codec(VideoCodecType codec_type, VideoCodec* settings) {
|
| @@ -188,11 +192,6 @@ void VCMCodecDataBase::Codec(VideoCodecType codec_type, VideoCodec* settings) {
|
| }
|
| }
|
|
|
| -void VCMCodecDataBase::ResetSender() {
|
| - DeleteEncoder();
|
| - periodic_key_frames_ = false;
|
| -}
|
| -
|
| // Assuming only one registered encoder - since only one used, no need for more.
|
| bool VCMCodecDataBase::SetSendCodec(const VideoCodec* send_codec,
|
| int number_of_cores,
|
| @@ -397,22 +396,6 @@ bool VCMCodecDataBase::SetPeriodicKeyFrames(bool enable) {
|
| return true;
|
| }
|
|
|
| -void VCMCodecDataBase::ResetReceiver() {
|
| - ReleaseDecoder(ptr_decoder_);
|
| - ptr_decoder_ = nullptr;
|
| - memset(&receive_codec_, 0, sizeof(VideoCodec));
|
| - while (!dec_map_.empty()) {
|
| - DecoderMap::iterator it = dec_map_.begin();
|
| - delete (*it).second;
|
| - dec_map_.erase(it);
|
| - }
|
| - while (!dec_external_map_.empty()) {
|
| - ExternalDecoderMap::iterator external_it = dec_external_map_.begin();
|
| - delete (*external_it).second;
|
| - dec_external_map_.erase(external_it);
|
| - }
|
| -}
|
| -
|
| bool VCMCodecDataBase::DeregisterExternalDecoder(uint8_t payload_type) {
|
| ExternalDecoderMap::iterator it = dec_external_map_.find(payload_type);
|
| if (it == dec_external_map_.end()) {
|
| @@ -423,13 +406,13 @@ bool VCMCodecDataBase::DeregisterExternalDecoder(uint8_t payload_type) {
|
| // because payload type may be out of date (e.g. before we decode the first
|
| // frame after RegisterReceiveCodec)
|
| if (ptr_decoder_ != nullptr &&
|
| - &ptr_decoder_->_decoder == (*it).second->external_decoder_instance) {
|
| + ptr_decoder_->_decoder == (*it).second->external_decoder_instance) {
|
| // Release it if it was registered and in use.
|
| ReleaseDecoder(ptr_decoder_);
|
| ptr_decoder_ = nullptr;
|
| }
|
| DeregisterReceiveCodec(payload_type);
|
| - delete (*it).second;
|
| + delete it->second;
|
| dec_external_map_.erase(it);
|
| return true;
|
| }
|
| @@ -476,8 +459,7 @@ bool VCMCodecDataBase::DeregisterReceiveCodec(
|
| if (it == dec_map_.end()) {
|
| return false;
|
| }
|
| - VCMDecoderMapItem* dec_item = (*it).second;
|
| - delete dec_item;
|
| + delete it->second;
|
| dec_map_.erase(it);
|
| if (receive_codec_.plType == payload_type) {
|
| // This codec is currently in use.
|
| @@ -533,10 +515,10 @@ VCMGenericDecoder* VCMCodecDataBase::GetDecoder(
|
|
|
| void VCMCodecDataBase::ReleaseDecoder(VCMGenericDecoder* decoder) const {
|
| if (decoder) {
|
| - assert(&decoder->_decoder);
|
| + assert(decoder->_decoder);
|
| decoder->Release();
|
| if (!decoder->External()) {
|
| - delete &decoder->_decoder;
|
| + delete decoder->_decoder;
|
| }
|
| delete decoder;
|
| }
|
| @@ -571,7 +553,7 @@ VCMGenericDecoder* VCMCodecDataBase::CreateAndInitDecoder(
|
| if (external_dec_item) {
|
| // External codec.
|
| ptr_decoder = new VCMGenericDecoder(
|
| - *external_dec_item->external_decoder_instance, true);
|
| + external_dec_item->external_decoder_instance, true);
|
| } else {
|
| // Create decoder.
|
| ptr_decoder = CreateDecoder(decoder_item->settings->codecType);
|
| @@ -607,14 +589,14 @@ void VCMCodecDataBase::DeleteEncoder() {
|
| VCMGenericDecoder* VCMCodecDataBase::CreateDecoder(VideoCodecType type) const {
|
| switch (type) {
|
| case kVideoCodecVP8:
|
| - return new VCMGenericDecoder(*(VP8Decoder::Create()));
|
| + return new VCMGenericDecoder(VP8Decoder::Create());
|
| case kVideoCodecVP9:
|
| - return new VCMGenericDecoder(*(VP9Decoder::Create()));
|
| + return new VCMGenericDecoder(VP9Decoder::Create());
|
| case kVideoCodecI420:
|
| - return new VCMGenericDecoder(*(new I420Decoder));
|
| + return new VCMGenericDecoder(new I420Decoder());
|
| case kVideoCodecH264:
|
| if (H264Decoder::IsSupported()) {
|
| - return new VCMGenericDecoder(*(H264Decoder::Create()));
|
| + return new VCMGenericDecoder(H264Decoder::Create());
|
| }
|
| break;
|
| default:
|
|
|