Index: webkit/media/webmediasourceclient_impl.cc |
diff --git a/webkit/media/webmediasourceclient_impl.cc b/webkit/media/webmediasourceclient_impl.cc |
index 2f84c0f1447c8634eeef6de0ad16acaed39d814c..586ea0dc8b6cbaa58a579f69e8780711bbfa8fb8 100644 |
--- a/webkit/media/webmediasourceclient_impl.cc |
+++ b/webkit/media/webmediasourceclient_impl.cc |
@@ -6,6 +6,7 @@ |
#include "base/guid.h" |
#include "media/filters/chunk_demuxer.h" |
+#include "media/filters/stream_parser_factory.h" |
#include "third_party/WebKit/Source/Platform/chromium/public/WebCString.h" |
#include "third_party/WebKit/Source/Platform/chromium/public/WebString.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebSourceBuffer.h" |
@@ -84,9 +85,21 @@ void WebSourceBufferImpl::removedFromMediaSource() { |
demuxer_ = NULL; |
} |
+bool WebMediaSourceClientImpl::isTypeSupported( |
+ const WebKit::WebString& type, |
+ const WebKit::WebVector<WebKit::WebString>& codecs) { |
+ std::vector<std::string> new_codecs(codecs.size()); |
+ for (size_t i = 0; i < codecs.size(); ++i) |
+ new_codecs[i] = codecs[i].utf8().data(); |
+ return media::StreamParserFactory::IsTypeSupported(type.utf8().data(), |
+ new_codecs); |
+} |
+ |
WebMediaSourceClientImpl::WebMediaSourceClientImpl( |
- const scoped_refptr<media::ChunkDemuxer>& demuxer) |
- : demuxer_(demuxer) { |
+ const scoped_refptr<media::ChunkDemuxer>& demuxer, |
+ media::LogCB log_cb) |
+ : demuxer_(demuxer), |
+ log_cb_(log_cb) { |
DCHECK(demuxer_); |
} |
@@ -96,14 +109,24 @@ WebMediaSourceClient::AddStatus WebMediaSourceClientImpl::addSourceBuffer( |
const WebKit::WebString& type, |
const WebKit::WebVector<WebKit::WebString>& codecs, |
WebKit::WebSourceBuffer** source_buffer) { |
+ DCHECK(isTypeSupported(type, codecs)); |
+ |
std::string id = base::GenerateGUID(); |
+ bool has_audio = false; |
+ bool has_video = false; |
std::vector<std::string> new_codecs(codecs.size()); |
for (size_t i = 0; i < codecs.size(); ++i) |
new_codecs[i] = codecs[i].utf8().data(); |
+ scoped_ptr<media::StreamParser> stream_parser( |
+ media::StreamParserFactory::Create(type.utf8().data(), new_codecs, |
+ log_cb_, &has_audio, &has_video)); |
+ |
+ if (!stream_parser) |
+ return AddStatusNotSupported; |
WebMediaSourceClient::AddStatus result = |
static_cast<WebMediaSourceClient::AddStatus>( |
- demuxer_->AddId(id, type.utf8().data(), new_codecs)); |
+ demuxer_->AddParser(id, stream_parser.Pass(), has_audio, has_video)); |
scherkus (not reviewing)
2013/03/14 01:15:26
where is ChunkDemuxer::AddParser() defined? I'm no
acolwell GONE FROM CHROMIUM
2013/03/14 18:34:34
This was accidentally left in for a refactor that
|
if (result == WebMediaSourceClient::AddStatusOk) |
*source_buffer = new WebSourceBufferImpl(id, demuxer_); |