Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1080)

Unified Diff: webrtc/media/engine/webrtcvideoengine2.cc

Issue 2474993002: Pass selected cricket::VideoCodec down to internal H264 encoder (Closed)
Patch Set: Fix. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/media/engine/webrtcvideoengine2.cc
diff --git a/webrtc/media/engine/webrtcvideoengine2.cc b/webrtc/media/engine/webrtcvideoengine2.cc
index e37bf94a651cc517676c484861ee063ebc1b1aca..5f79f4b04b961e28cf2f230bbd2a0cd63f9eb85d 100644
--- a/webrtc/media/engine/webrtcvideoengine2.cc
+++ b/webrtc/media/engine/webrtcvideoengine2.cc
@@ -1526,16 +1526,16 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::VideoSendStreamParameters::
WebRtcVideoChannel2::WebRtcVideoSendStream::AllocatedEncoder::AllocatedEncoder(
webrtc::VideoEncoder* encoder,
- webrtc::VideoCodecType type,
+ const cricket::VideoCodec& codec,
bool external)
: encoder(encoder),
external_encoder(nullptr),
- type(type),
+ codec(codec),
external(external) {
if (external) {
external_encoder = encoder;
this->encoder =
- new webrtc::VideoEncoderSoftwareFallbackWrapper(type, encoder);
+ new webrtc::VideoEncoderSoftwareFallbackWrapper(codec, encoder);
}
}
@@ -1563,7 +1563,7 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream(
encoder_sink_(nullptr),
parameters_(std::move(config), options, max_bitrate_bps, codec_settings),
rtp_parameters_(CreateRtpParametersWithOneEncoding()),
- allocated_encoder_(nullptr, webrtc::kVideoCodecUnknown, false),
+ allocated_encoder_(nullptr, cricket::VideoCodec(), false),
sending_(false),
last_frame_timestamp_us_(0) {
parameters_.config.rtp.max_packet_size = kVideoMtu;
@@ -1698,36 +1698,32 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::AllocatedEncoder
WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoder(
const VideoCodec& codec) {
RTC_DCHECK_RUN_ON(&thread_checker_);
- webrtc::VideoCodecType type = CodecTypeFromName(codec.name);
// Do not re-create encoders of the same type.
- if (type == allocated_encoder_.type && allocated_encoder_.encoder != NULL) {
+ if (codec == allocated_encoder_.codec &&
+ allocated_encoder_.encoder != nullptr) {
return allocated_encoder_;
}
+ // Try creating external encoder.
if (external_encoder_factory_ != NULL) {
webrtc::VideoEncoder* encoder =
external_encoder_factory_->CreateVideoEncoder(codec);
if (encoder != NULL) {
- return AllocatedEncoder(encoder, type, true);
+ return AllocatedEncoder(encoder, codec, true /* is_external */);
}
}
- if (type == webrtc::kVideoCodecVP8) {
- return AllocatedEncoder(
- webrtc::VideoEncoder::Create(webrtc::VideoEncoder::kVp8), type, false);
- } else if (type == webrtc::kVideoCodecVP9) {
- return AllocatedEncoder(
- webrtc::VideoEncoder::Create(webrtc::VideoEncoder::kVp9), type, false);
- } else if (type == webrtc::kVideoCodecH264) {
- return AllocatedEncoder(
- webrtc::VideoEncoder::Create(webrtc::VideoEncoder::kH264), type, false);
+ // Try creating internal encoder.
+ if (webrtc::VideoEncoder::IsSupportedSoftware(codec)) {
+ return AllocatedEncoder(webrtc::VideoEncoder::Create(codec), codec,
+ false /* is_external */);
}
// This shouldn't happen, we should not be trying to create something we don't
// support.
- RTC_DCHECK(false);
- return AllocatedEncoder(NULL, webrtc::kVideoCodecUnknown, false);
+ RTC_NOTREACHED();
+ return AllocatedEncoder(NULL, cricket::VideoCodec(), false);
}
void WebRtcVideoChannel2::WebRtcVideoSendStream::DestroyVideoEncoder(

Powered by Google App Engine
This is Rietveld 408576698