Chromium Code Reviews| Index: content/renderer/media/media_recorder_handler.cc |
| diff --git a/content/renderer/media/media_recorder_handler.cc b/content/renderer/media/media_recorder_handler.cc |
| index 6d8eb4de4d3964905e695a8e9ad9c5334584c138..0b21cbb76ad547d43510ffda487c3fa3dc432444 100644 |
| --- a/content/renderer/media/media_recorder_handler.cc |
| +++ b/content/renderer/media/media_recorder_handler.cc |
| @@ -15,7 +15,6 @@ |
| #include "content/renderer/media/audio_track_recorder.h" |
| #include "content/renderer/media/media_stream_audio_track.h" |
| #include "content/renderer/media/media_stream_track.h" |
| -#include "content/renderer/media/video_track_recorder.h" |
| #include "content/renderer/media/webrtc_uma_histograms.h" |
| #include "media/audio/audio_parameters.h" |
| #include "media/base/audio_bus.h" |
| @@ -29,13 +28,34 @@ |
| using base::TimeDelta; |
| using base::TimeTicks; |
| +using base::ToLowerASCII; |
| namespace content { |
| +namespace { |
| + |
| +media::VideoCodec CodecIdToMediaVideoCodec(VideoTrackRecorder::CodecId id) { |
| + switch (id) { |
| + case VideoTrackRecorder::CodecId::VP8: |
| + return media::kCodecVP8; |
| + case VideoTrackRecorder::CodecId::VP9: |
| + return media::kCodecVP8; |
| +#if BUILDFLAG(RTC_USE_H264) |
| + case VideoTrackRecorder::CodecId::H264: |
| + return media::kCodecH264; |
| +#endif |
| + default: |
|
emircan
2016/04/25 19:26:15
If you remove default case, that would cause a com
mcasas
2016/04/26 18:13:38
Done.
|
| + NOTREACHED() << "Unsupported codec"; |
| + return media::kUnknownVideoCodec; |
| + } |
| +} |
| + |
| +} // anonymous namespace |
| + |
| MediaRecorderHandler::MediaRecorderHandler() |
| : video_bits_per_second_(0), |
| audio_bits_per_second_(0), |
| - use_vp9_(false), |
| + codec_id_(VideoTrackRecorder::CodecId::VP8), |
| recording_(false), |
| client_(nullptr), |
| weak_factory_(this) {} |
| @@ -48,7 +68,8 @@ MediaRecorderHandler::~MediaRecorderHandler() { |
| } |
| bool MediaRecorderHandler::canSupportMimeType( |
| - const blink::WebString& web_type, const blink::WebString& web_codecs) { |
| + const blink::WebString& web_type, |
| + const blink::WebString& web_codecs) { |
| DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
| // An empty |web_type| means MediaRecorderHandler can choose its preferred |
| // codecs. |
| @@ -65,7 +86,7 @@ bool MediaRecorderHandler::canSupportMimeType( |
| // Both |video| and |audio| support empty |codecs|; |type| == "video" supports |
| // vp8, vp9 or opus; |type| = "audio", supports only opus. |
| // http://www.webmproject.org/docs/container Sec:"HTML5 Video Type Parameters" |
| - static const char* const kVideoCodecs[] = { "vp8", "vp9", "opus" }; |
| + static const char* const kVideoCodecs[] = { "vp8", "vp9", "h264", "opus" }; |
| static const char* const kAudioCodecs[] = { "opus" }; |
| const char* const* codecs = video ? &kVideoCodecs[0] : &kAudioCodecs[0]; |
| const int codecs_count = |
| @@ -101,7 +122,17 @@ bool MediaRecorderHandler::initialize( |
| << ";codecs=" << codecs.utf8(); |
| return false; |
| } |
| - use_vp9_ = base::ToLowerASCII(codecs.utf8()).find("vp9") != std::string::npos; |
| + |
| + // Once established that we support the codec(s), hunt then individually. |
|
emircan
2016/04/25 19:26:15
const std::string& codecs_str = ToLowerASCII(codec
mcasas
2016/04/26 18:13:38
Done.
|
| + if (ToLowerASCII(codecs.utf8()).find("vp8") != std::string::npos) |
| + codec_id_ = VideoTrackRecorder::CodecId::VP8; |
| + else if (ToLowerASCII(codecs.utf8()).find("vp9") != std::string::npos) |
| + codec_id_ = VideoTrackRecorder::CodecId::VP9; |
| +#if BUILDFLAG(RTC_USE_H264) |
| + else if (ToLowerASCII(codecs.utf8()).find("h264") != std::string::npos) |
| + codec_id_ = VideoTrackRecorder::CodecId::H264; |
| +#endif |
| + |
| media_stream_ = media_stream; |
| DCHECK(client); |
| client_ = client; |
| @@ -147,9 +178,9 @@ bool MediaRecorderHandler::start(int timeslice) { |
| blink::WebMediaStreamSource::ReadyStateLive; |
| webm_muxer_.reset(new media::WebmMuxer( |
| - use_vp9_ ? media::kCodecVP9 : media::kCodecVP8, use_video_tracks, |
| - use_audio_tracks, base::Bind(&MediaRecorderHandler::WriteData, |
| - weak_factory_.GetWeakPtr()))); |
| + CodecIdToMediaVideoCodec(codec_id_), use_video_tracks, use_audio_tracks, |
| + base::Bind(&MediaRecorderHandler::WriteData, |
| + weak_factory_.GetWeakPtr()))); |
| if (use_video_tracks) { |
| // TODO(mcasas): The muxer API supports only one video track. Extend it to |
| @@ -166,9 +197,7 @@ bool MediaRecorderHandler::start(int timeslice) { |
| &MediaRecorderHandler::OnEncodedVideo, weak_factory_.GetWeakPtr())); |
| video_recorders_.push_back(new VideoTrackRecorder( |
| - use_vp9_ ? VideoTrackRecorder::CodecId::VP9 |
| - : VideoTrackRecorder::CodecId::VP8, |
| - video_track, on_encoded_video_cb, video_bits_per_second_)); |
| + codec_id_, video_track, on_encoded_video_cb, video_bits_per_second_)); |
| } |
| if (use_audio_tracks) { |