Index: webrtc/modules/video_coding/main/source/codec_database.cc |
diff --git a/webrtc/modules/video_coding/main/source/codec_database.cc b/webrtc/modules/video_coding/main/source/codec_database.cc |
index e27314d535c0dcd7fecaf0b229363fee9c445b14..9d8068c5e948b956ee2c273c090b3680b77796c0 100644 |
--- a/webrtc/modules/video_coding/main/source/codec_database.cc |
+++ b/webrtc/modules/video_coding/main/source/codec_database.cc |
@@ -106,10 +106,9 @@ VCMCodecDataBase::VCMCodecDataBase( |
max_payload_size_(kDefaultPayloadSize), |
periodic_key_frames_(false), |
pending_encoder_reset_(true), |
- current_enc_is_external_(false), |
send_codec_(), |
receive_codec_(), |
- external_payload_type_(0), |
+ encoder_payload_type_(0), |
external_encoder_(NULL), |
internal_source_(false), |
encoder_rate_observer_(encoder_rate_observer), |
@@ -296,17 +295,10 @@ bool VCMCodecDataBase::SetSendCodec( |
// If encoder exists, will destroy it and create new one. |
DeleteEncoder(); |
- if (send_codec_.plType == external_payload_type_) { |
- // External encoder. |
- ptr_encoder_ = new VCMGenericEncoder( |
- external_encoder_, encoder_rate_observer_, internal_source_); |
- current_enc_is_external_ = true; |
- } else { |
- ptr_encoder_ = CreateEncoder(send_codec_.codecType); |
- current_enc_is_external_ = false; |
- if (!ptr_encoder_) |
- return false; |
- } |
+ RTC_DCHECK_EQ(encoder_payload_type_, send_codec_.plType) |
+ << "Encoder not registered for payload type " << send_codec_.plType; |
+ ptr_encoder_ = new VCMGenericEncoder( |
+ external_encoder_, encoder_rate_observer_, internal_source_); |
encoded_frame_callback->SetPayloadType(send_codec_.plType); |
if (ptr_encoder_->InitEncode(&send_codec_, number_of_cores_, |
max_payload_size_) < 0) { |
@@ -348,17 +340,16 @@ bool VCMCodecDataBase::DeregisterExternalEncoder( |
uint8_t payload_type, bool* was_send_codec) { |
assert(was_send_codec); |
*was_send_codec = false; |
- if (external_payload_type_ != payload_type) { |
+ if (encoder_payload_type_ != payload_type) { |
return false; |
} |
if (send_codec_.plType == payload_type) { |
// De-register as send codec if needed. |
DeleteEncoder(); |
memset(&send_codec_, 0, sizeof(VideoCodec)); |
- current_enc_is_external_ = false; |
*was_send_codec = true; |
} |
- external_payload_type_ = 0; |
+ encoder_payload_type_ = 0; |
external_encoder_ = NULL; |
internal_source_ = false; |
return true; |
@@ -371,7 +362,7 @@ void VCMCodecDataBase::RegisterExternalEncoder( |
// Since only one encoder can be used at a given time, only one external |
// encoder can be registered/used. |
external_encoder_ = external_encoder; |
- external_payload_type_ = payload_type; |
+ encoder_payload_type_ = payload_type; |
internal_source_ = internal_source; |
pending_encoder_reset_ = true; |
} |
@@ -649,48 +640,12 @@ VCMGenericDecoder* VCMCodecDataBase::CreateAndInitDecoder( |
return ptr_decoder; |
} |
-VCMGenericEncoder* VCMCodecDataBase::CreateEncoder( |
- const VideoCodecType type) const { |
- switch (type) { |
-#ifdef VIDEOCODEC_VP8 |
- case kVideoCodecVP8: |
- return new VCMGenericEncoder(VP8Encoder::Create(), encoder_rate_observer_, |
- false); |
-#endif |
-#ifdef VIDEOCODEC_VP9 |
- case kVideoCodecVP9: |
- return new VCMGenericEncoder(VP9Encoder::Create(), encoder_rate_observer_, |
- false); |
-#endif |
-#ifdef VIDEOCODEC_I420 |
- case kVideoCodecI420: |
- return new VCMGenericEncoder(new I420Encoder(), encoder_rate_observer_, |
- false); |
-#endif |
-#ifdef VIDEOCODEC_H264 |
- case kVideoCodecH264: |
- if (H264Encoder::IsSupported()) { |
- return new VCMGenericEncoder(H264Encoder::Create(), |
- encoder_rate_observer_, |
- false); |
- } |
- break; |
-#endif |
- default: |
- break; |
- } |
- LOG(LS_WARNING) << "No internal encoder of this type exists."; |
- return NULL; |
-} |
- |
void VCMCodecDataBase::DeleteEncoder() { |
- if (ptr_encoder_) { |
- ptr_encoder_->Release(); |
- if (!current_enc_is_external_) |
- delete ptr_encoder_->encoder_; |
- delete ptr_encoder_; |
- ptr_encoder_ = NULL; |
- } |
+ if (!ptr_encoder_) |
+ return; |
+ ptr_encoder_->Release(); |
+ delete ptr_encoder_; |
stefan-webrtc
2015/10/15 07:43:36
Could you make this scoped?
|
+ ptr_encoder_ = NULL; |
} |
VCMGenericDecoder* VCMCodecDataBase::CreateDecoder(VideoCodecType type) const { |