Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(58)

Side by Side Diff: media/blink/webmediaplayer_impl.cc

Issue 2656053002: NullStream
Patch Set: . Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 <cmath> 8 #include <cmath>
9 #include <limits> 9 #include <limits>
10 #include <string> 10 #include <string>
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 } // namespace 157 } // namespace
158 158
159 class BufferedDataSourceHostImpl; 159 class BufferedDataSourceHostImpl;
160 160
161 STATIC_ASSERT_ENUM(WebMediaPlayer::CORSModeUnspecified, 161 STATIC_ASSERT_ENUM(WebMediaPlayer::CORSModeUnspecified,
162 UrlData::CORS_UNSPECIFIED); 162 UrlData::CORS_UNSPECIFIED);
163 STATIC_ASSERT_ENUM(WebMediaPlayer::CORSModeAnonymous, UrlData::CORS_ANONYMOUS); 163 STATIC_ASSERT_ENUM(WebMediaPlayer::CORSModeAnonymous, UrlData::CORS_ANONYMOUS);
164 STATIC_ASSERT_ENUM(WebMediaPlayer::CORSModeUseCredentials, 164 STATIC_ASSERT_ENUM(WebMediaPlayer::CORSModeUseCredentials,
165 UrlData::CORS_USE_CREDENTIALS); 165 UrlData::CORS_USE_CREDENTIALS);
166 166
167 #define BIND_TO_RENDER_LOOP(function) \
168 (DCHECK(main_task_runner_->BelongsToCurrentThread()), \
169 BindToCurrentLoop(base::Bind(function, AsWeakPtr())))
170
171 #define BIND_TO_RENDER_LOOP1(function, arg1) \
172 (DCHECK(main_task_runner_->BelongsToCurrentThread()), \
173 BindToCurrentLoop(base::Bind(function, AsWeakPtr(), arg1)))
174
175 WebMediaPlayerImpl::WebMediaPlayerImpl( 167 WebMediaPlayerImpl::WebMediaPlayerImpl(
176 blink::WebLocalFrame* frame, 168 blink::WebLocalFrame* frame,
177 blink::WebMediaPlayerClient* client, 169 blink::WebMediaPlayerClient* client,
178 blink::WebMediaPlayerEncryptedMediaClient* encrypted_client, 170 blink::WebMediaPlayerEncryptedMediaClient* encrypted_client,
179 WebMediaPlayerDelegate* delegate, 171 WebMediaPlayerDelegate* delegate,
180 std::unique_ptr<RendererFactory> renderer_factory, 172 std::unique_ptr<RendererFactory> renderer_factory,
181 linked_ptr<UrlIndex> url_index, 173 linked_ptr<UrlIndex> url_index,
182 const WebMediaPlayerParams& params) 174 const WebMediaPlayerParams& params)
183 : frame_(frame), 175 : frame_(frame),
184 delegate_state_(DelegateState::GONE), 176 delegate_state_(DelegateState::GONE),
(...skipping 1249 matching lines...) Expand 10 before | Expand all | Expand 10 after
1434 1426
1435 if (watch_time_reporter_) 1427 if (watch_time_reporter_)
1436 watch_time_reporter_->OnShown(); 1428 watch_time_reporter_->OnShown();
1437 1429
1438 // Only track the time to the first frame if playing or about to play because 1430 // Only track the time to the first frame if playing or about to play because
1439 // of being shown and only for videos we would optimize background playback 1431 // of being shown and only for videos we would optimize background playback
1440 // for. 1432 // for.
1441 if ((!paused_ && IsBackgroundOptimizationCandidate()) || 1433 if ((!paused_ && IsBackgroundOptimizationCandidate()) ||
1442 paused_when_hidden_) { 1434 paused_when_hidden_) {
1443 VideoFrameCompositor::OnNewProcessedFrameCB new_processed_frame_cb = 1435 VideoFrameCompositor::OnNewProcessedFrameCB new_processed_frame_cb =
1444 BIND_TO_RENDER_LOOP1( 1436 BindToCurrentLoop(base::Bind(
1445 &WebMediaPlayerImpl::ReportTimeFromForegroundToFirstFrame, 1437 &WebMediaPlayerImpl::ReportTimeFromForegroundToFirstFrame,
1446 base::TimeTicks::Now()); 1438 AsWeakPtr(), base::TimeTicks::Now()));
1447 compositor_task_runner_->PostTask( 1439 compositor_task_runner_->PostTask(
1448 FROM_HERE, 1440 FROM_HERE,
1449 base::Bind(&VideoFrameCompositor::SetOnNewProcessedFrameCallback, 1441 base::Bind(&VideoFrameCompositor::SetOnNewProcessedFrameCallback,
1450 base::Unretained(compositor_), new_processed_frame_cb)); 1442 base::Unretained(compositor_), new_processed_frame_cb));
1451 } 1443 }
1452 1444
1453 if (paused_when_hidden_) { 1445 if (paused_when_hidden_) {
1454 paused_when_hidden_ = false; 1446 paused_when_hidden_ = false;
1455 OnPlay(); // Calls UpdatePlayState() so return afterwards. 1447 OnPlay(); // Calls UpdatePlayState() so return afterwards.
1456 return; 1448 return;
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
1659 1651
1660 // If we're waiting for the surface to arrive, OnSurfaceCreated() will be 1652 // If we're waiting for the surface to arrive, OnSurfaceCreated() will be
1661 // called later when it arrives; so do nothing for now. 1653 // called later when it arrives; so do nothing for now.
1662 if (overlay_enabled_ && overlay_surface_id_ == SurfaceManager::kNoSurfaceID) 1654 if (overlay_enabled_ && overlay_surface_id_ == SurfaceManager::kNoSurfaceID)
1663 return; 1655 return;
1664 1656
1665 OnSurfaceCreated(overlay_surface_id_); 1657 OnSurfaceCreated(overlay_surface_id_);
1666 } 1658 }
1667 1659
1668 std::unique_ptr<Renderer> WebMediaPlayerImpl::CreateRenderer() { 1660 std::unique_ptr<Renderer> WebMediaPlayerImpl::CreateRenderer() {
1661 DCHECK(main_task_runner_->BelongsToCurrentThread());
1662
1669 if (force_video_overlays_) 1663 if (force_video_overlays_)
1670 EnableOverlay(); 1664 EnableOverlay();
1671 1665
1672 RequestSurfaceCB request_surface_cb; 1666 RequestSurfaceCB request_surface_cb;
1673 #if defined(OS_ANDROID) 1667 #if defined(OS_ANDROID)
1674 request_surface_cb = 1668 request_surface_cb = BindToCurrentLoop(
1675 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnSurfaceRequested); 1669 base::Bind(&WebMediaPlayerImpl::OnSurfaceRequested, AsWeakPtr()));
1676 #endif 1670 #endif
1677 return renderer_factory_->CreateRenderer( 1671 return renderer_factory_->CreateRenderer(
1678 media_task_runner_, worker_task_runner_, audio_source_provider_.get(), 1672 media_task_runner_, worker_task_runner_, audio_source_provider_.get(),
1679 compositor_, request_surface_cb); 1673 compositor_, request_surface_cb);
1680 } 1674 }
1681 1675
1682 void WebMediaPlayerImpl::StartPipeline() { 1676 void WebMediaPlayerImpl::StartPipeline() {
1683 DCHECK(main_task_runner_->BelongsToCurrentThread()); 1677 DCHECK(main_task_runner_->BelongsToCurrentThread());
1684 1678
1685 Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb = 1679 Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb =
1686 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnEncryptedMediaInitData); 1680 BindToCurrentLoop(base::Bind(
1681 &WebMediaPlayerImpl::OnEncryptedMediaInitData, AsWeakPtr()));
1687 1682
1688 if (use_fallback_path_) { 1683 if (use_fallback_path_) {
1689 demuxer_.reset( 1684 demuxer_.reset(
1690 new MediaUrlDemuxer(media_task_runner_, fallback_url_, 1685 new MediaUrlDemuxer(media_task_runner_, fallback_url_,
1691 frame_->document().firstPartyForCookies())); 1686 frame_->document().firstPartyForCookies()));
1692 pipeline_controller_.Start(demuxer_.get(), this, false, false); 1687 pipeline_controller_.Start(demuxer_.get(), this, false, false);
1693 return; 1688 return;
1694 } 1689 }
1695 1690
1696 // Figure out which demuxer to use. 1691 // Figure out which demuxer to use.
1697 if (load_type_ != LoadTypeMediaSource) { 1692 if (load_type_ != LoadTypeMediaSource) {
1698 DCHECK(!chunk_demuxer_); 1693 DCHECK(!chunk_demuxer_);
1699 DCHECK(data_source_); 1694 DCHECK(data_source_);
1700 1695
1701 #if !defined(MEDIA_DISABLE_FFMPEG) 1696 #if !defined(MEDIA_DISABLE_FFMPEG)
1702 Demuxer::MediaTracksUpdatedCB media_tracks_updated_cb = 1697 Demuxer::MediaTracksUpdatedCB media_tracks_updated_cb =
1703 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnFFmpegMediaTracksUpdated); 1698 BindToCurrentLoop(base::Bind(
1699 &WebMediaPlayerImpl::OnFFmpegMediaTracksUpdated, AsWeakPtr()));
1704 1700
1705 demuxer_.reset(new FFmpegDemuxer(media_task_runner_, data_source_.get(), 1701 demuxer_.reset(new FFmpegDemuxer(media_task_runner_, data_source_.get(),
1706 encrypted_media_init_data_cb, 1702 encrypted_media_init_data_cb,
1707 media_tracks_updated_cb, media_log_)); 1703 media_tracks_updated_cb, media_log_));
1708 #else 1704 #else
1709 OnError(PipelineStatus::DEMUXER_ERROR_COULD_NOT_OPEN); 1705 OnError(PipelineStatus::DEMUXER_ERROR_COULD_NOT_OPEN);
1710 return; 1706 return;
1711 #endif 1707 #endif
1712 } else { 1708 } else {
1713 DCHECK(!chunk_demuxer_); 1709 DCHECK(!chunk_demuxer_);
1714 DCHECK(!data_source_); 1710 DCHECK(!data_source_);
1715 1711
1716 chunk_demuxer_ = new ChunkDemuxer( 1712 chunk_demuxer_ = new ChunkDemuxer(
1717 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDemuxerOpened), 1713 BindToCurrentLoop(
1714 base::Bind(&WebMediaPlayerImpl::OnDemuxerOpened, AsWeakPtr())),
1718 encrypted_media_init_data_cb, media_log_); 1715 encrypted_media_init_data_cb, media_log_);
1719 demuxer_.reset(chunk_demuxer_); 1716 demuxer_.reset(chunk_demuxer_);
1720 } 1717 }
1721 1718
1722 // TODO(sandersd): FileSystem objects may also be non-static, but due to our 1719 // TODO(sandersd): FileSystem objects may also be non-static, but due to our
1723 // caching layer such situations are broken already. http://crbug.com/593159 1720 // caching layer such situations are broken already. http://crbug.com/593159
1724 bool is_static = !chunk_demuxer_; 1721 bool is_static = !chunk_demuxer_;
1725 bool is_streaming = IsStreaming(); 1722 bool is_streaming = IsStreaming();
1726 UMA_HISTOGRAM_BOOLEAN("Media.IsStreaming", is_streaming); 1723 UMA_HISTOGRAM_BOOLEAN("Media.IsStreaming", is_streaming);
1727 1724
(...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after
2257 UMA_HISTOGRAM_TIMES( 2254 UMA_HISTOGRAM_TIMES(
2258 "Media.Video.TimeFromForegroundToFirstFrame.DisableTrack", 2255 "Media.Video.TimeFromForegroundToFirstFrame.DisableTrack",
2259 time_to_first_frame); 2256 time_to_first_frame);
2260 } else { 2257 } else {
2261 UMA_HISTOGRAM_TIMES("Media.Video.TimeFromForegroundToFirstFrame.Paused", 2258 UMA_HISTOGRAM_TIMES("Media.Video.TimeFromForegroundToFirstFrame.Paused",
2262 time_to_first_frame); 2259 time_to_first_frame);
2263 } 2260 }
2264 } 2261 }
2265 2262
2266 } // namespace media 2263 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698