Chromium Code Reviews| 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_); |