| 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 <cmath> | 8 #include <cmath> |
| 9 #include <limits> | 9 #include <limits> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 1149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1160 DVLOG(1) << __func__; | 1160 DVLOG(1) << __func__; |
| 1161 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 1161 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 1162 | 1162 |
| 1163 pipeline_metadata_ = metadata; | 1163 pipeline_metadata_ = metadata; |
| 1164 | 1164 |
| 1165 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); | 1165 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); |
| 1166 UMA_HISTOGRAM_ENUMERATION("Media.VideoRotation", metadata.video_rotation, | 1166 UMA_HISTOGRAM_ENUMERATION("Media.VideoRotation", metadata.video_rotation, |
| 1167 VIDEO_ROTATION_MAX + 1); | 1167 VIDEO_ROTATION_MAX + 1); |
| 1168 | 1168 |
| 1169 if (hasVideo()) { | 1169 if (hasVideo()) { |
| 1170 pipeline_metadata_.natural_size = GetRotatedVideoSize( | |
| 1171 pipeline_metadata_.video_rotation, pipeline_metadata_.natural_size); | |
| 1172 | |
| 1173 if (overlay_enabled_) { | 1170 if (overlay_enabled_) { |
| 1174 // SurfaceView doesn't support rotated video, so transition back if | 1171 // SurfaceView doesn't support rotated video, so transition back if |
| 1175 // the video is now rotated. If |force_video_overlays_|, we keep the | 1172 // the video is now rotated. If |force_video_overlays_|, we keep the |
| 1176 // overlay anyway so that the state machine keeps working. | 1173 // overlay anyway so that the state machine keeps working. |
| 1177 if (!force_video_overlays_ && !DoesOverlaySupportMetadata()) | 1174 if (!force_video_overlays_ && !DoesOverlaySupportMetadata()) |
| 1178 DisableOverlay(); | 1175 DisableOverlay(); |
| 1179 else if (surface_manager_) | 1176 else if (surface_manager_) |
| 1180 surface_manager_->NaturalSizeChanged(pipeline_metadata_.natural_size); | 1177 surface_manager_->NaturalSizeChanged(pipeline_metadata_.natural_size); |
| 1181 } | 1178 } |
| 1182 | 1179 |
| 1183 DCHECK(!video_weblayer_); | 1180 DCHECK(!video_weblayer_); |
| 1184 video_weblayer_.reset(new cc_blink::WebLayerImpl(cc::VideoLayer::Create( | 1181 video_weblayer_.reset(new cc_blink::WebLayerImpl(cc::VideoLayer::Create( |
| 1185 compositor_, pipeline_metadata_.video_rotation))); | 1182 compositor_, pipeline_metadata_.video_rotation))); |
| 1186 video_weblayer_->layer()->SetContentsOpaque(opaque_); | 1183 video_weblayer_->layer()->SetContentsOpaque(opaque_); |
| 1187 video_weblayer_->SetContentsOpaqueIsFixed(true); | 1184 video_weblayer_->SetContentsOpaqueIsFixed(true); |
| 1188 client_->setWebLayer(video_weblayer_.get()); | 1185 client_->setWebLayer(video_weblayer_.get()); |
| 1189 } | 1186 } |
| 1190 | 1187 |
| 1191 if (observer_) | 1188 if (observer_) |
| 1192 observer_->OnMetadataChanged(metadata); | 1189 observer_->OnMetadataChanged(pipeline_metadata_); |
| 1193 | 1190 |
| 1194 CreateWatchTimeReporter(); | 1191 CreateWatchTimeReporter(); |
| 1195 UpdatePlayState(); | 1192 UpdatePlayState(); |
| 1196 } | 1193 } |
| 1197 | 1194 |
| 1198 void WebMediaPlayerImpl::OnBufferingStateChange(BufferingState state) { | 1195 void WebMediaPlayerImpl::OnBufferingStateChange(BufferingState state) { |
| 1199 DVLOG(1) << __func__ << "(" << state << ")"; | 1196 DVLOG(1) << __func__ << "(" << state << ")"; |
| 1200 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 1197 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 1201 | 1198 |
| 1202 // Ignore buffering state changes until we've completed all outstanding | 1199 // Ignore buffering state changes until we've completed all outstanding |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1300 // TODO(jrummell): didResumePlaybackBlockedForKey() should only be called | 1297 // TODO(jrummell): didResumePlaybackBlockedForKey() should only be called |
| 1301 // when a key has been successfully added (e.g. OnSessionKeysChange() with | 1298 // when a key has been successfully added (e.g. OnSessionKeysChange() with |
| 1302 // |has_additional_usable_key| = true). http://crbug.com/461903 | 1299 // |has_additional_usable_key| = true). http://crbug.com/461903 |
| 1303 encrypted_client_->didResumePlaybackBlockedForKey(); | 1300 encrypted_client_->didResumePlaybackBlockedForKey(); |
| 1304 } | 1301 } |
| 1305 | 1302 |
| 1306 void WebMediaPlayerImpl::OnVideoNaturalSizeChange(const gfx::Size& size) { | 1303 void WebMediaPlayerImpl::OnVideoNaturalSizeChange(const gfx::Size& size) { |
| 1307 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 1304 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 1308 DCHECK_NE(ready_state_, WebMediaPlayer::ReadyStateHaveNothing); | 1305 DCHECK_NE(ready_state_, WebMediaPlayer::ReadyStateHaveNothing); |
| 1309 | 1306 |
| 1307 // The input |size| is from the decoded video frame, which is the original |
| 1308 // natural size and need to be rotated accordingly. |
| 1310 gfx::Size rotated_size = | 1309 gfx::Size rotated_size = |
| 1311 GetRotatedVideoSize(pipeline_metadata_.video_rotation, size); | 1310 GetRotatedVideoSize(pipeline_metadata_.video_rotation, size); |
| 1312 | 1311 |
| 1313 if (rotated_size == pipeline_metadata_.natural_size) | 1312 if (rotated_size == pipeline_metadata_.natural_size) |
| 1314 return; | 1313 return; |
| 1315 | 1314 |
| 1316 TRACE_EVENT0("media", "WebMediaPlayerImpl::OnNaturalSizeChanged"); | 1315 TRACE_EVENT0("media", "WebMediaPlayerImpl::OnNaturalSizeChanged"); |
| 1317 media_log_->AddEvent(media_log_->CreateVideoSizeSetEvent( | 1316 media_log_->AddEvent(media_log_->CreateVideoSizeSetEvent( |
| 1318 rotated_size.width(), rotated_size.height())); | 1317 rotated_size.width(), rotated_size.height())); |
| 1319 | 1318 |
| 1320 if (overlay_enabled_ && surface_manager_) | 1319 if (overlay_enabled_ && surface_manager_) |
| 1321 surface_manager_->NaturalSizeChanged(rotated_size); | 1320 surface_manager_->NaturalSizeChanged(rotated_size); |
| 1322 | 1321 |
| 1323 gfx::Size old_size = pipeline_metadata_.natural_size; | 1322 gfx::Size old_size = pipeline_metadata_.natural_size; |
| 1324 pipeline_metadata_.natural_size = rotated_size; | 1323 pipeline_metadata_.natural_size = rotated_size; |
| 1325 if (old_size.IsEmpty()) { | 1324 if (old_size.IsEmpty()) { |
| 1326 // WatchTimeReporter doesn't report metrics for empty videos. Re-create | 1325 // WatchTimeReporter doesn't report metrics for empty videos. Re-create |
| 1327 // |watch_time_reporter_| if we didn't originally know the video size. | 1326 // |watch_time_reporter_| if we didn't originally know the video size. |
| 1328 CreateWatchTimeReporter(); | 1327 CreateWatchTimeReporter(); |
| 1329 } | 1328 } |
| 1330 client_->sizeChanged(); | 1329 client_->sizeChanged(); |
| 1331 | 1330 |
| 1332 if (observer_) { | 1331 if (observer_) |
| 1333 PipelineMetadata metadata = pipeline_metadata_; | 1332 observer_->OnMetadataChanged(pipeline_metadata_); |
| 1334 metadata.natural_size = size; | |
| 1335 observer_->OnMetadataChanged(metadata); | |
| 1336 } | |
| 1337 } | 1333 } |
| 1338 | 1334 |
| 1339 void WebMediaPlayerImpl::OnVideoOpacityChange(bool opaque) { | 1335 void WebMediaPlayerImpl::OnVideoOpacityChange(bool opaque) { |
| 1340 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 1336 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 1341 DCHECK_NE(ready_state_, WebMediaPlayer::ReadyStateHaveNothing); | 1337 DCHECK_NE(ready_state_, WebMediaPlayer::ReadyStateHaveNothing); |
| 1342 | 1338 |
| 1343 opaque_ = opaque; | 1339 opaque_ = opaque; |
| 1344 // Modify content opaqueness of cc::Layer directly so that | 1340 // Modify content opaqueness of cc::Layer directly so that |
| 1345 // SetContentsOpaqueIsFixed is ignored. | 1341 // SetContentsOpaqueIsFixed is ignored. |
| 1346 if (video_weblayer_) | 1342 if (video_weblayer_) |
| (...skipping 735 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2082 bool WebMediaPlayerImpl::ShouldPauseWhenHidden() const { | 2078 bool WebMediaPlayerImpl::ShouldPauseWhenHidden() const { |
| 2083 #if defined(OS_ANDROID) // WMPI_CAST | 2079 #if defined(OS_ANDROID) // WMPI_CAST |
| 2084 if (isRemote()) | 2080 if (isRemote()) |
| 2085 return false; | 2081 return false; |
| 2086 #endif // defined(OS_ANDROID) // WMPI_CAST | 2082 #endif // defined(OS_ANDROID) // WMPI_CAST |
| 2087 | 2083 |
| 2088 return hasVideo() && !hasAudio(); | 2084 return hasVideo() && !hasAudio(); |
| 2089 } | 2085 } |
| 2090 | 2086 |
| 2091 } // namespace media | 2087 } // namespace media |
| OLD | NEW |