| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "media/blink/webmediaplayer_impl.h" | 5 #include "media/blink/webmediaplayer_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 | 125 |
| 126 #define BIND_TO_RENDER_LOOP1(function, arg1) \ | 126 #define BIND_TO_RENDER_LOOP1(function, arg1) \ |
| 127 (DCHECK(main_task_runner_->BelongsToCurrentThread()), \ | 127 (DCHECK(main_task_runner_->BelongsToCurrentThread()), \ |
| 128 BindToCurrentLoop(base::Bind(function, AsWeakPtr(), arg1))) | 128 BindToCurrentLoop(base::Bind(function, AsWeakPtr(), arg1))) |
| 129 | 129 |
| 130 static void LogMediaSourceError(const scoped_refptr<MediaLog>& media_log, | 130 static void LogMediaSourceError(const scoped_refptr<MediaLog>& media_log, |
| 131 const std::string& error) { | 131 const std::string& error) { |
| 132 media_log->AddEvent(media_log->CreateMediaSourceErrorEvent(error)); | 132 media_log->AddEvent(media_log->CreateMediaSourceErrorEvent(error)); |
| 133 } | 133 } |
| 134 | 134 |
| 135 // Note: The log will appear in chrome://media-internals page. Only log info |
| 136 // that's worht logging. |
| 137 static void LogMediaInfo(const scoped_refptr<MediaLog>& media_log, |
| 138 const std::string& info) { |
| 139 media_log->AddEvent(media_log->CreateInfoEvent(info)); |
| 140 } |
| 141 |
| 135 WebMediaPlayerImpl::WebMediaPlayerImpl( | 142 WebMediaPlayerImpl::WebMediaPlayerImpl( |
| 136 blink::WebLocalFrame* frame, | 143 blink::WebLocalFrame* frame, |
| 137 blink::WebMediaPlayerClient* client, | 144 blink::WebMediaPlayerClient* client, |
| 138 base::WeakPtr<WebMediaPlayerDelegate> delegate, | 145 base::WeakPtr<WebMediaPlayerDelegate> delegate, |
| 139 const WebMediaPlayerParams& params) | 146 const WebMediaPlayerParams& params) |
| 140 : frame_(frame), | 147 : frame_(frame), |
| 141 network_state_(WebMediaPlayer::NetworkStateEmpty), | 148 network_state_(WebMediaPlayer::NetworkStateEmpty), |
| 142 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), | 149 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), |
| 143 preload_(BufferedDataSource::AUTO), | 150 preload_(BufferedDataSource::AUTO), |
| 144 main_task_runner_(base::MessageLoopProxy::current()), | 151 main_task_runner_(base::MessageLoopProxy::current()), |
| (...skipping 688 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 833 | 840 |
| 834 // TODO(xhwang): Move this to a factory class so that we can create different | 841 // TODO(xhwang): Move this to a factory class so that we can create different |
| 835 // renderers. | 842 // renderers. |
| 836 scoped_ptr<Renderer> WebMediaPlayerImpl::CreateRenderer() { | 843 scoped_ptr<Renderer> WebMediaPlayerImpl::CreateRenderer() { |
| 837 SetDecryptorReadyCB set_decryptor_ready_cb = | 844 SetDecryptorReadyCB set_decryptor_ready_cb = |
| 838 encrypted_media_support_->CreateSetDecryptorReadyCB(); | 845 encrypted_media_support_->CreateSetDecryptorReadyCB(); |
| 839 | 846 |
| 840 // Create our audio decoders and renderer. | 847 // Create our audio decoders and renderer. |
| 841 ScopedVector<AudioDecoder> audio_decoders; | 848 ScopedVector<AudioDecoder> audio_decoders; |
| 842 | 849 |
| 843 LogCB log_cb = base::Bind(&LogMediaSourceError, media_log_); | 850 audio_decoders.push_back(new media::FFmpegAudioDecoder( |
| 844 audio_decoders.push_back(new FFmpegAudioDecoder(media_task_runner_, log_cb)); | 851 media_task_runner_, base::Bind(&LogMediaSourceError, media_log_))); |
| 845 audio_decoders.push_back(new OpusAudioDecoder(media_task_runner_)); | 852 audio_decoders.push_back(new media::OpusAudioDecoder(media_task_runner_)); |
| 846 | 853 |
| 847 scoped_ptr<AudioRenderer> audio_renderer(new AudioRendererImpl( | 854 scoped_ptr<AudioRenderer> audio_renderer(new AudioRendererImpl( |
| 848 media_task_runner_, | 855 media_task_runner_, |
| 849 audio_source_provider_.get(), | 856 audio_source_provider_.get(), |
| 850 audio_decoders.Pass(), | 857 audio_decoders.Pass(), |
| 851 set_decryptor_ready_cb, | 858 set_decryptor_ready_cb, |
| 852 audio_hardware_config_)); | 859 audio_hardware_config_, |
| 860 base::Bind(&LogMediaInfo, media_log_))); |
| 853 | 861 |
| 854 // Create our video decoders and renderer. | 862 // Create our video decoders and renderer. |
| 855 ScopedVector<VideoDecoder> video_decoders; | 863 ScopedVector<VideoDecoder> video_decoders; |
| 856 | 864 |
| 857 if (gpu_factories_.get()) { | 865 if (gpu_factories_.get()) { |
| 858 video_decoders.push_back( | 866 video_decoders.push_back( |
| 859 new GpuVideoDecoder(gpu_factories_, media_log_)); | 867 new GpuVideoDecoder(gpu_factories_, media_log_)); |
| 860 } | 868 } |
| 861 | 869 |
| 862 #if !defined(MEDIA_DISABLE_LIBVPX) | 870 #if !defined(MEDIA_DISABLE_LIBVPX) |
| 863 video_decoders.push_back(new VpxVideoDecoder(media_task_runner_)); | 871 video_decoders.push_back(new VpxVideoDecoder(media_task_runner_)); |
| 864 #endif // !defined(MEDIA_DISABLE_LIBVPX) | 872 #endif // !defined(MEDIA_DISABLE_LIBVPX) |
| 865 | 873 |
| 866 video_decoders.push_back(new FFmpegVideoDecoder(media_task_runner_)); | 874 video_decoders.push_back(new FFmpegVideoDecoder(media_task_runner_)); |
| 867 | 875 |
| 868 scoped_ptr<VideoRenderer> video_renderer( | 876 scoped_ptr<VideoRenderer> video_renderer( |
| 869 new VideoRendererImpl( | 877 new VideoRendererImpl( |
| 870 media_task_runner_, | 878 media_task_runner_, |
| 871 video_decoders.Pass(), | 879 video_decoders.Pass(), |
| 872 set_decryptor_ready_cb, | 880 set_decryptor_ready_cb, |
| 873 base::Bind(&WebMediaPlayerImpl::FrameReady, base::Unretained(this)), | 881 base::Bind(&WebMediaPlayerImpl::FrameReady, base::Unretained(this)), |
| 874 true)); | 882 true, |
| 883 base::Bind(&LogMediaInfo, media_log_))); |
| 875 | 884 |
| 876 // Create renderer. | 885 // Create renderer. |
| 877 return scoped_ptr<Renderer>(new RendererImpl( | 886 return scoped_ptr<Renderer>(new RendererImpl( |
| 878 media_task_runner_, | 887 media_task_runner_, |
| 879 demuxer_.get(), | 888 demuxer_.get(), |
| 880 audio_renderer.Pass(), | 889 audio_renderer.Pass(), |
| 881 video_renderer.Pass())); | 890 video_renderer.Pass())); |
| 882 } | 891 } |
| 883 | 892 |
| 884 void WebMediaPlayerImpl::StartPipeline() { | 893 void WebMediaPlayerImpl::StartPipeline() { |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1025 compositor_task_runner_->PostTask(FROM_HERE, | 1034 compositor_task_runner_->PostTask(FROM_HERE, |
| 1026 base::Bind(&GetCurrentFrameAndSignal, | 1035 base::Bind(&GetCurrentFrameAndSignal, |
| 1027 base::Unretained(compositor_), | 1036 base::Unretained(compositor_), |
| 1028 &video_frame, | 1037 &video_frame, |
| 1029 &event)); | 1038 &event)); |
| 1030 event.Wait(); | 1039 event.Wait(); |
| 1031 return video_frame; | 1040 return video_frame; |
| 1032 } | 1041 } |
| 1033 | 1042 |
| 1034 } // namespace media | 1043 } // namespace media |
| OLD | NEW |