Index: content/renderer/media/rtc_video_encoder_factory.cc |
diff --git a/content/renderer/media/rtc_video_encoder_factory.cc b/content/renderer/media/rtc_video_encoder_factory.cc |
index 777d69f83c9a13e43d906e35cde8a53d5479d05f..f30b6260cecbeb2df287dad58f0aa7c2331d94a0 100644 |
--- a/content/renderer/media/rtc_video_encoder_factory.cc |
+++ b/content/renderer/media/rtc_video_encoder_factory.cc |
@@ -14,32 +14,28 @@ namespace content { |
namespace { |
// Translate from media::VideoEncodeAccelerator::SupportedProfile to |
-// cricket::WebRtcVideoEncoderFactory::VideoCodec |
-cricket::WebRtcVideoEncoderFactory::VideoCodec VEAToWebRTCCodec( |
+// one or more instances of cricket::WebRtcVideoEncoderFactory::VideoCodec |
+std::vector<cricket::WebRtcVideoEncoderFactory::VideoCodec> VEAToWebRTCCodecs( |
const media::VideoEncodeAccelerator::SupportedProfile& profile) { |
- webrtc::VideoCodecType type = webrtc::kVideoCodecUnknown; |
- std::string name; |
- int width = 0, height = 0, fps = 0; |
+ int width = profile.max_resolution.width(); |
+ int height = profile.max_resolution.height(); |
+ int fps = profile.max_framerate.numerator; |
+ DCHECK_EQ(profile.max_framerate.denominator, 1U); |
+ std::vector<cricket::WebRtcVideoEncoderFactory::VideoCodec> codecs; |
if (profile.profile >= media::VP8PROFILE_MIN && |
profile.profile <= media::VP8PROFILE_MAX) { |
- type = webrtc::kVideoCodecVP8; |
- name = "VP8"; |
+ codecs.push_back(cricket::WebRtcVideoEncoderFactory::VideoCodec( |
+ webrtc::kVideoCodecVP8, "VP8", width, height, fps)); |
} else if (profile.profile >= media::H264PROFILE_MIN && |
profile.profile <= media::H264PROFILE_MAX) { |
- type = webrtc::kVideoCodecGeneric; |
- name = "CAST1"; |
+ codecs.push_back(cricket::WebRtcVideoEncoderFactory::VideoCodec( |
+ webrtc::kVideoCodecGeneric, "CAST1", width, height, fps)); |
+ codecs.push_back(cricket::WebRtcVideoEncoderFactory::VideoCodec( |
+ webrtc::kVideoCodecH264, "H264", width, height, fps)); |
} |
- if (type != webrtc::kVideoCodecUnknown) { |
- width = profile.max_resolution.width(); |
- height = profile.max_resolution.height(); |
- fps = profile.max_framerate.numerator; |
- DCHECK_EQ(profile.max_framerate.denominator, 1U); |
- } |
- |
- return cricket::WebRtcVideoEncoderFactory::VideoCodec( |
- type, name, width, height, fps); |
+ return codecs; |
} |
// Translate from cricket::WebRtcVideoEncoderFactory::VideoCodec to |
@@ -49,6 +45,7 @@ media::VideoCodecProfile WebRTCCodecToVideoCodecProfile( |
switch (type) { |
case webrtc::kVideoCodecVP8: |
return media::VP8PROFILE_MAIN; |
+ case webrtc::kVideoCodecH264: |
case webrtc::kVideoCodecGeneric: |
return media::H264PROFILE_MAIN; |
default: |
@@ -65,9 +62,8 @@ RTCVideoEncoderFactory::RTCVideoEncoderFactory( |
std::vector<media::VideoEncodeAccelerator::SupportedProfile> profiles = |
GpuVideoEncodeAcceleratorHost::GetSupportedProfiles(); |
for (size_t i = 0; i < profiles.size(); ++i) { |
- VideoCodec codec = VEAToWebRTCCodec(profiles[i]); |
- if (codec.type != webrtc::kVideoCodecUnknown) |
- codecs_.push_back(codec); |
+ std::vector<VideoCodec> codecs = VEAToWebRTCCodecs(profiles[i]); |
+ codecs_.insert(codecs_.end(), codecs.begin(), codecs.end()); |
} |
} |