| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/renderer/media/media_recorder_handler.h" | 5 #include "content/renderer/media/media_recorder_handler.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/location.h" | 10 #include "base/location.h" |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 bool MediaRecorderHandler::canSupportMimeType( | 67 bool MediaRecorderHandler::canSupportMimeType( |
| 68 const blink::WebString& web_type, | 68 const blink::WebString& web_type, |
| 69 const blink::WebString& web_codecs) { | 69 const blink::WebString& web_codecs) { |
| 70 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 70 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
| 71 // An empty |web_type| means MediaRecorderHandler can choose its preferred | 71 // An empty |web_type| means MediaRecorderHandler can choose its preferred |
| 72 // codecs. | 72 // codecs. |
| 73 if (web_type.isEmpty()) | 73 if (web_type.isEmpty()) |
| 74 return true; | 74 return true; |
| 75 | 75 |
| 76 const std::string type(web_type.utf8()); | 76 const std::string type(web_type.utf8()); |
| 77 const bool video = base::EqualsCaseInsensitiveASCII(type, "video/webm"); | 77 const bool video = base::EqualsCaseInsensitiveASCII(type, "video/webm") || |
| 78 base::EqualsCaseInsensitiveASCII(type, "video/x-matroska"); |
| 78 const bool audio = | 79 const bool audio = |
| 79 video ? false : base::EqualsCaseInsensitiveASCII(type, "audio/webm"); | 80 video ? false : base::EqualsCaseInsensitiveASCII(type, "audio/webm"); |
| 80 if (!video && !audio) | 81 if (!video && !audio) |
| 81 return false; | 82 return false; |
| 82 | 83 |
| 83 // Both |video| and |audio| support empty |codecs|; |type| == "video" supports | 84 // Both |video| and |audio| support empty |codecs|; |type| == "video" supports |
| 84 // vp8, vp9 or opus; |type| = "audio", supports only opus. | 85 // vp8, vp9, h264 and avc1 or opus; |type| = "audio", supports only opus. |
| 85 // http://www.webmproject.org/docs/container Sec:"HTML5 Video Type Parameters" | 86 // http://www.webmproject.org/docs/container Sec:"HTML5 Video Type Parameters" |
| 86 static const char* const kVideoCodecs[] = { "vp8", "vp9", "h264", "opus" }; | 87 static const char* const kVideoCodecs[] = {"vp8", "vp9", "h264", "avc1", |
| 88 "opus"}; |
| 87 static const char* const kAudioCodecs[] = { "opus" }; | 89 static const char* const kAudioCodecs[] = { "opus" }; |
| 88 const char* const* codecs = video ? &kVideoCodecs[0] : &kAudioCodecs[0]; | 90 const char* const* codecs = video ? &kVideoCodecs[0] : &kAudioCodecs[0]; |
| 89 const int codecs_count = | 91 const int codecs_count = |
| 90 video ? arraysize(kVideoCodecs) : arraysize(kAudioCodecs); | 92 video ? arraysize(kVideoCodecs) : arraysize(kAudioCodecs); |
| 91 | 93 |
| 92 std::vector<std::string> codecs_list; | 94 std::vector<std::string> codecs_list; |
| 93 media::ParseCodecString(web_codecs.utf8(), &codecs_list, true /* strip */); | 95 media::ParseCodecString(web_codecs.utf8(), &codecs_list, true /* strip */); |
| 94 for (const auto& codec : codecs_list) { | 96 for (const auto& codec : codecs_list) { |
| 95 auto* const* found = std::find_if( | 97 auto* const* found = std::find_if( |
| 96 &codecs[0], &codecs[codecs_count], [&codec](const char* name) { | 98 &codecs[0], &codecs[codecs_count], [&codec](const char* name) { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 122 | 124 |
| 123 // Once established that we support the codec(s), hunt then individually. | 125 // Once established that we support the codec(s), hunt then individually. |
| 124 const std::string& codecs_str = ToLowerASCII(codecs.utf8()); | 126 const std::string& codecs_str = ToLowerASCII(codecs.utf8()); |
| 125 if (codecs_str.find("vp8") != std::string::npos) | 127 if (codecs_str.find("vp8") != std::string::npos) |
| 126 codec_id_ = VideoTrackRecorder::CodecId::VP8; | 128 codec_id_ = VideoTrackRecorder::CodecId::VP8; |
| 127 else if (codecs_str.find("vp9") != std::string::npos) | 129 else if (codecs_str.find("vp9") != std::string::npos) |
| 128 codec_id_ = VideoTrackRecorder::CodecId::VP9; | 130 codec_id_ = VideoTrackRecorder::CodecId::VP9; |
| 129 #if BUILDFLAG(RTC_USE_H264) | 131 #if BUILDFLAG(RTC_USE_H264) |
| 130 else if (codecs_str.find("h264") != std::string::npos) | 132 else if (codecs_str.find("h264") != std::string::npos) |
| 131 codec_id_ = VideoTrackRecorder::CodecId::H264; | 133 codec_id_ = VideoTrackRecorder::CodecId::H264; |
| 134 else if (codecs_str.find("avc1") != std::string::npos) |
| 135 codec_id_ = VideoTrackRecorder::CodecId::H264; |
| 132 #endif | 136 #endif |
| 133 | 137 |
| 134 media_stream_ = media_stream; | 138 media_stream_ = media_stream; |
| 135 DCHECK(client); | 139 DCHECK(client); |
| 136 client_ = client; | 140 client_ = client; |
| 137 | 141 |
| 138 audio_bits_per_second_ = audio_bits_per_second; | 142 audio_bits_per_second_ = audio_bits_per_second; |
| 139 video_bits_per_second_ = video_bits_per_second; | 143 video_bits_per_second_ = video_bits_per_second; |
| 140 return true; | 144 return true; |
| 141 } | 145 } |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 recorder->OnData(audio_bus, timestamp); | 307 recorder->OnData(audio_bus, timestamp); |
| 304 } | 308 } |
| 305 | 309 |
| 306 void MediaRecorderHandler::SetAudioFormatForTesting( | 310 void MediaRecorderHandler::SetAudioFormatForTesting( |
| 307 const media::AudioParameters& params) { | 311 const media::AudioParameters& params) { |
| 308 for (const auto& recorder : audio_recorders_) | 312 for (const auto& recorder : audio_recorders_) |
| 309 recorder->OnSetFormat(params); | 313 recorder->OnSetFormat(params); |
| 310 } | 314 } |
| 311 | 315 |
| 312 } // namespace content | 316 } // namespace content |
| OLD | NEW |