OLD | NEW |
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 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 "base/compiler_specific.h" | 5 #include "base/compiler_specific.h" |
6 #include "media/base/filter_host_impl.h" | 6 #include "media/base/filter_host_impl.h" |
7 #include "media/base/media_format.h" | 7 #include "media/base/media_format.h" |
8 #include "media/base/pipeline_impl.h" | 8 #include "media/base/pipeline_impl.h" |
9 | 9 |
10 namespace media { | 10 namespace media { |
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
411 message_loop()->Quit(); | 411 message_loop()->Quit(); |
412 } | 412 } |
413 } | 413 } |
414 | 414 |
415 template <class Decoder, class Renderer> | 415 template <class Decoder, class Renderer> |
416 void PipelineThread::Render(FilterFactory* filter_factory, Demuxer* demuxer) { | 416 void PipelineThread::Render(FilterFactory* filter_factory, Demuxer* demuxer) { |
417 DCHECK(PipelineOk()); | 417 DCHECK(PipelineOk()); |
418 const std::string major_mime_type = Decoder::major_mime_type(); | 418 const std::string major_mime_type = Decoder::major_mime_type(); |
419 const int num_outputs = demuxer->GetNumberOfStreams(); | 419 const int num_outputs = demuxer->GetNumberOfStreams(); |
420 for (int i = 0; i < num_outputs; ++i) { | 420 for (int i = 0; i < num_outputs; ++i) { |
421 scoped_refptr<DemuxerStream> demuxer_stream = demuxer->GetStream(i); | 421 scoped_refptr<DemuxerStream> stream = demuxer->GetStream(i); |
422 const MediaFormat* stream_format = demuxer_stream->GetMediaFormat(); | |
423 std::string value; | 422 std::string value; |
424 if (stream_format->GetAsString(MediaFormat::kMimeType, &value) && | 423 if (stream->media_format().GetAsString(MediaFormat::kMimeType, &value) && |
425 0 == value.compare(0, major_mime_type.length(), major_mime_type)) { | 424 0 == value.compare(0, major_mime_type.length(), major_mime_type)) { |
426 scoped_refptr<Decoder> decoder = | 425 scoped_refptr<Decoder> decoder = |
427 CreateFilter<Decoder, DemuxerStream>(filter_factory, demuxer_stream); | 426 CreateFilter<Decoder, DemuxerStream>(filter_factory, stream); |
428 if (PipelineOk()) { | 427 if (PipelineOk()) { |
429 DCHECK(decoder); | 428 DCHECK(decoder); |
430 CreateFilter<Renderer, Decoder>(filter_factory, decoder); | 429 CreateFilter<Renderer, Decoder>(filter_factory, decoder); |
431 } | 430 } |
432 if (PipelineOk()) { | 431 if (PipelineOk()) { |
433 pipeline_->InsertRenderedMimeType(major_mime_type); | 432 pipeline_->InsertRenderedMimeType(major_mime_type); |
434 } | 433 } |
435 break; | 434 break; |
436 } | 435 } |
437 } | 436 } |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
493 iter != filter_hosts_.end() && NULL == *filter_out; | 492 iter != filter_hosts_.end() && NULL == *filter_out; |
494 iter++) { | 493 iter++) { |
495 (*iter)->GetFilter(filter_out); | 494 (*iter)->GetFilter(filter_out); |
496 } | 495 } |
497 } | 496 } |
498 | 497 |
499 template <class Filter, class Source> | 498 template <class Filter, class Source> |
500 scoped_refptr<Filter> PipelineThread::CreateFilter( | 499 scoped_refptr<Filter> PipelineThread::CreateFilter( |
501 FilterFactory* filter_factory, | 500 FilterFactory* filter_factory, |
502 Source source, | 501 Source source, |
503 const MediaFormat* media_format) { | 502 const MediaFormat& media_format) { |
504 DCHECK(PipelineOk()); | 503 DCHECK(PipelineOk()); |
505 scoped_refptr<Filter> filter = filter_factory->Create<Filter>(media_format); | 504 scoped_refptr<Filter> filter = filter_factory->Create<Filter>(media_format); |
506 if (!filter) { | 505 if (!filter) { |
507 Error(PIPELINE_ERROR_REQUIRED_FILTER_MISSING); | 506 Error(PIPELINE_ERROR_REQUIRED_FILTER_MISSING); |
508 } else { | 507 } else { |
509 DCHECK(!host_initializing_); | 508 DCHECK(!host_initializing_); |
510 host_initializing_ = new FilterHostImpl(this, filter.get()); | 509 host_initializing_ = new FilterHostImpl(this, filter.get()); |
511 if (NULL == host_initializing_) { | 510 if (NULL == host_initializing_) { |
512 Error(PIPELINE_ERROR_OUT_OF_MEMORY); | 511 Error(PIPELINE_ERROR_OUT_OF_MEMORY); |
513 } else { | 512 } else { |
(...skipping 28 matching lines...) Expand all Loading... |
542 filter = NULL; | 541 filter = NULL; |
543 } | 542 } |
544 return filter; | 543 return filter; |
545 } | 544 } |
546 | 545 |
547 scoped_refptr<DataSource> PipelineThread::CreateDataSource( | 546 scoped_refptr<DataSource> PipelineThread::CreateDataSource( |
548 FilterFactory* filter_factory, const std::string& url) { | 547 FilterFactory* filter_factory, const std::string& url) { |
549 MediaFormat url_format; | 548 MediaFormat url_format; |
550 url_format.SetAsString(MediaFormat::kMimeType, mime_type::kURL); | 549 url_format.SetAsString(MediaFormat::kMimeType, mime_type::kURL); |
551 url_format.SetAsString(MediaFormat::kURL, url); | 550 url_format.SetAsString(MediaFormat::kURL, url); |
552 return CreateFilter<DataSource>(filter_factory, url, &url_format); | 551 return CreateFilter<DataSource>(filter_factory, url, url_format); |
553 } | 552 } |
554 | 553 |
555 // Called as a result of destruction of the thread. | 554 // Called as a result of destruction of the thread. |
556 void PipelineThread::WillDestroyCurrentMessageLoop() { | 555 void PipelineThread::WillDestroyCurrentMessageLoop() { |
557 while (!filter_hosts_.empty()) { | 556 while (!filter_hosts_.empty()) { |
558 delete filter_hosts_.back(); | 557 delete filter_hosts_.back(); |
559 filter_hosts_.pop_back(); | 558 filter_hosts_.pop_back(); |
560 } | 559 } |
561 } | 560 } |
562 | 561 |
563 } // namespace media | 562 } // namespace media |
OLD | NEW |