OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "webkit/glue/webmediaplayer_impl.h" | 5 #include "webkit/glue/webmediaplayer_impl.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 new media::CompositeDataSourceFactory()); | 185 new media::CompositeDataSourceFactory()); |
186 | 186 |
187 if (use_simple_data_source) { | 187 if (use_simple_data_source) { |
188 data_source_factory->AddFactory(simple_data_source_factory.release()); | 188 data_source_factory->AddFactory(simple_data_source_factory.release()); |
189 data_source_factory->AddFactory(buffered_data_source_factory.release()); | 189 data_source_factory->AddFactory(buffered_data_source_factory.release()); |
190 } else { | 190 } else { |
191 data_source_factory->AddFactory(buffered_data_source_factory.release()); | 191 data_source_factory->AddFactory(buffered_data_source_factory.release()); |
192 data_source_factory->AddFactory(simple_data_source_factory.release()); | 192 data_source_factory->AddFactory(simple_data_source_factory.release()); |
193 } | 193 } |
194 | 194 |
195 filter_collection_->SetDemuxerFactory(new media::FFmpegDemuxerFactory( | 195 scoped_ptr<media::DemuxerFactory> demuxer_factory( |
196 data_source_factory.release(), pipeline_message_loop)); | 196 new media::FFmpegDemuxerFactory(data_source_factory.release(), |
| 197 pipeline_message_loop)); |
| 198 |
| 199 std::string source_url = GetClient()->sourceURL().spec(); |
| 200 |
| 201 if (!source_url.empty()) { |
| 202 demuxer_factory.reset( |
| 203 new media::ChunkDemuxerFactory(source_url, |
| 204 demuxer_factory.release(), |
| 205 proxy_)); |
| 206 } |
| 207 filter_collection_->SetDemuxerFactory(demuxer_factory.release()); |
197 | 208 |
198 // Add in the default filter factories. | 209 // Add in the default filter factories. |
199 filter_collection_->AddAudioDecoder(new media::FFmpegAudioDecoder( | 210 filter_collection_->AddAudioDecoder(new media::FFmpegAudioDecoder( |
200 message_loop_factory_->GetMessageLoop("AudioDecoderThread"))); | 211 message_loop_factory_->GetMessageLoop("AudioDecoderThread"))); |
201 filter_collection_->AddVideoDecoder(new media::FFmpegVideoDecoder( | 212 filter_collection_->AddVideoDecoder(new media::FFmpegVideoDecoder( |
202 message_loop_factory_->GetMessageLoop("VideoDecoderThread"), NULL)); | 213 message_loop_factory_->GetMessageLoop("VideoDecoderThread"), NULL)); |
203 filter_collection_->AddAudioRenderer(new media::NullAudioRenderer()); | 214 filter_collection_->AddAudioRenderer(new media::NullAudioRenderer()); |
204 | 215 |
205 return true; | 216 return true; |
206 } | 217 } |
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
638 void WebMediaPlayerImpl::putCurrentFrame( | 649 void WebMediaPlayerImpl::putCurrentFrame( |
639 WebKit::WebVideoFrame* web_video_frame) { | 650 WebKit::WebVideoFrame* web_video_frame) { |
640 if (web_video_frame) { | 651 if (web_video_frame) { |
641 scoped_refptr<media::VideoFrame> video_frame( | 652 scoped_refptr<media::VideoFrame> video_frame( |
642 WebVideoFrameImpl::toVideoFrame(web_video_frame)); | 653 WebVideoFrameImpl::toVideoFrame(web_video_frame)); |
643 proxy_->PutCurrentFrame(video_frame); | 654 proxy_->PutCurrentFrame(video_frame); |
644 delete web_video_frame; | 655 delete web_video_frame; |
645 } | 656 } |
646 } | 657 } |
647 | 658 |
648 // TODO(acolwell): Uncomment once WebKit changes are checked in. | |
649 // https://bugs.webkit.org/show_bug.cgi?id=64731 | |
650 /* | |
651 bool WebMediaPlayerImpl::sourceAppend(const unsigned char* data, | 659 bool WebMediaPlayerImpl::sourceAppend(const unsigned char* data, |
652 unsigned length) { | 660 unsigned length) { |
653 DCHECK_EQ(main_loop_, MessageLoop::current()); | 661 DCHECK_EQ(main_loop_, MessageLoop::current()); |
654 return proxy_->DemuxerAppend(data, length); | 662 return proxy_->DemuxerAppend(data, length); |
655 } | 663 } |
656 | 664 |
657 void WebMediaPlayerImpl::sourceEndOfStream( | 665 void WebMediaPlayerImpl::sourceEndOfStream( |
658 WebKit::WebMediaPlayer::EndOfStreamStatus status) { | 666 WebKit::WebMediaPlayer::EndOfStreamStatus status) { |
659 DCHECK_EQ(main_loop_, MessageLoop::current()); | 667 DCHECK_EQ(main_loop_, MessageLoop::current()); |
660 media::PipelineStatus pipeline_status = media::PIPELINE_OK; | 668 media::PipelineStatus pipeline_status = media::PIPELINE_OK; |
661 | 669 |
662 switch(status) { | 670 switch(status) { |
663 case WebKit::WebMediaPlayer::EosNoError: | 671 case WebKit::WebMediaPlayer::EosNoError: |
664 break; | 672 break; |
665 case WebKit::WebMediaPlayer::EosNetworkError: | 673 case WebKit::WebMediaPlayer::EosNetworkError: |
666 pipeline_status = media::PIPELINE_ERROR_NETWORK; | 674 pipeline_status = media::PIPELINE_ERROR_NETWORK; |
667 break; | 675 break; |
668 case WebKit::WebMediaPlayer::EosDecodeError: | 676 case WebKit::WebMediaPlayer::EosDecodeError: |
669 pipeline_status = media::PIPELINE_ERROR_DECODE; | 677 pipeline_status = media::PIPELINE_ERROR_DECODE; |
670 break; | 678 break; |
671 default: | 679 default: |
672 NOTIMPLEMENTED(); | 680 NOTIMPLEMENTED(); |
673 } | 681 } |
674 | 682 |
675 proxy_->DemuxerEndOfStream(pipeline_status); | 683 proxy_->DemuxerEndOfStream(pipeline_status); |
676 } | 684 } |
677 */ | |
678 | 685 |
679 void WebMediaPlayerImpl::WillDestroyCurrentMessageLoop() { | 686 void WebMediaPlayerImpl::WillDestroyCurrentMessageLoop() { |
680 Destroy(); | 687 Destroy(); |
681 main_loop_ = NULL; | 688 main_loop_ = NULL; |
682 } | 689 } |
683 | 690 |
684 void WebMediaPlayerImpl::Repaint() { | 691 void WebMediaPlayerImpl::Repaint() { |
685 DCHECK_EQ(main_loop_, MessageLoop::current()); | 692 DCHECK_EQ(main_loop_, MessageLoop::current()); |
686 GetClient()->repaint(); | 693 GetClient()->repaint(); |
687 } | 694 } |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
790 DCHECK_EQ(main_loop_, MessageLoop::current()); | 797 DCHECK_EQ(main_loop_, MessageLoop::current()); |
791 if (is_downloading_data) | 798 if (is_downloading_data) |
792 SetNetworkState(WebKit::WebMediaPlayer::Loading); | 799 SetNetworkState(WebKit::WebMediaPlayer::Loading); |
793 else | 800 else |
794 SetNetworkState(WebKit::WebMediaPlayer::Idle); | 801 SetNetworkState(WebKit::WebMediaPlayer::Idle); |
795 } | 802 } |
796 | 803 |
797 void WebMediaPlayerImpl::OnDemuxerOpened() { | 804 void WebMediaPlayerImpl::OnDemuxerOpened() { |
798 DCHECK_EQ(main_loop_, MessageLoop::current()); | 805 DCHECK_EQ(main_loop_, MessageLoop::current()); |
799 | 806 |
800 // TODO(acolwell): Uncomment once WebKit changes are checked in. | 807 GetClient()->sourceOpened(); |
801 // https://bugs.webkit.org/show_bug.cgi?id=64731 | |
802 //GetClient()->sourceOpened(); | |
803 } | 808 } |
804 | 809 |
805 void WebMediaPlayerImpl::SetNetworkState( | 810 void WebMediaPlayerImpl::SetNetworkState( |
806 WebKit::WebMediaPlayer::NetworkState state) { | 811 WebKit::WebMediaPlayer::NetworkState state) { |
807 DCHECK_EQ(main_loop_, MessageLoop::current()); | 812 DCHECK_EQ(main_loop_, MessageLoop::current()); |
808 // Always notify to ensure client has the latest value. | 813 // Always notify to ensure client has the latest value. |
809 network_state_ = state; | 814 network_state_ = state; |
810 GetClient()->networkStateChanged(); | 815 GetClient()->networkStateChanged(); |
811 } | 816 } |
812 | 817 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
858 return client_; | 863 return client_; |
859 } | 864 } |
860 | 865 |
861 void WebMediaPlayerImpl::IncrementExternallyAllocatedMemory() { | 866 void WebMediaPlayerImpl::IncrementExternallyAllocatedMemory() { |
862 DCHECK_EQ(main_loop_, MessageLoop::current()); | 867 DCHECK_EQ(main_loop_, MessageLoop::current()); |
863 incremented_externally_allocated_memory_ = true; | 868 incremented_externally_allocated_memory_ = true; |
864 v8::V8::AdjustAmountOfExternalAllocatedMemory(kPlayerExtraMemory); | 869 v8::V8::AdjustAmountOfExternalAllocatedMemory(kPlayerExtraMemory); |
865 } | 870 } |
866 | 871 |
867 } // namespace webkit_glue | 872 } // namespace webkit_glue |
OLD | NEW |