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

Unified Diff: media/renderers/video_renderer_impl.cc

Issue 1978973002: Moves video frame callbacks from VideoFrameCompositor to Renderer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addresses comments Created 4 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/renderers/video_renderer_impl.h ('k') | media/renderers/video_renderer_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/renderers/video_renderer_impl.cc
diff --git a/media/renderers/video_renderer_impl.cc b/media/renderers/video_renderer_impl.cc
index a447efbd15e62d91f43bd9c18a7a6dee9b005a22..e216f2a8f0816fbfe3e235662be454ce9345b4cd 100644
--- a/media/renderers/video_renderer_impl.cc
+++ b/media/renderers/video_renderer_impl.cc
@@ -60,6 +60,8 @@ VideoRendererImpl::VideoRendererImpl(
render_first_frame_and_stop_(false),
posted_maybe_stop_after_first_paint_(false),
last_video_memory_usage_(0),
+ have_renderered_frames_(false),
+ last_frame_opaque_(false),
weak_factory_(this) {
if (gpu_factories &&
gpu_factories->ShouldUseGpuMemoryBuffersForVideoFrames()) {
@@ -141,6 +143,7 @@ void VideoRendererImpl::Initialize(
DCHECK(!posted_maybe_stop_after_first_paint_);
DCHECK(!was_background_rendering_);
DCHECK(!time_progressing_);
+ DCHECK(!have_renderered_frames_);
low_delay_ = (stream->liveness() == DemuxerStream::LIVENESS_LIVE);
UMA_HISTOGRAM_BOOLEAN("Media.VideoRenderer.LowDelay", low_delay_);
@@ -179,6 +182,24 @@ scoped_refptr<VideoFrame> VideoRendererImpl::Render(
// we've had a proper startup sequence.
DCHECK(result);
+ // Notify client of size and opacity changes if this is the first frame
+ // or if those have changed from the last frame.
+ if (!have_renderered_frames_ ||
+ (last_frame_natural_size_ != result->natural_size())) {
+ last_frame_natural_size_ = result->natural_size();
+ task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&VideoRendererImpl::OnVideoNaturalSizeChange,
+ weak_factory_.GetWeakPtr(), last_frame_natural_size_));
+ }
+ if (!have_renderered_frames_ ||
+ (last_frame_opaque_ != IsOpaque(result->format()))) {
+ last_frame_opaque_ = IsOpaque(result->format());
+ task_runner_->PostTask(
+ FROM_HERE, base::Bind(&VideoRendererImpl::OnVideoOpacityChange,
+ weak_factory_.GetWeakPtr(), last_frame_opaque_));
+ }
+
// Declare HAVE_NOTHING if we reach a state where we can't progress playback
// any further. We don't want to do this if we've already done so, reached
// end of stream, or have frames available. We also don't want to do this in
@@ -237,6 +258,7 @@ scoped_refptr<VideoFrame> VideoRendererImpl::Render(
task_runner_->PostTask(FROM_HERE, base::Bind(&VideoRendererImpl::AttemptRead,
weak_factory_.GetWeakPtr()));
+ have_renderered_frames_ = true;
return result;
}
@@ -294,6 +316,16 @@ void VideoRendererImpl::OnWaitingForDecryptionKey() {
client_->OnWaitingForDecryptionKey();
}
+void VideoRendererImpl::OnVideoNaturalSizeChange(const gfx::Size& size) {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ client_->OnVideoNaturalSizeChange(size);
+}
+
+void VideoRendererImpl::OnVideoOpacityChange(bool opaque) {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ client_->OnVideoOpacityChange(opaque);
+}
+
void VideoRendererImpl::SetTickClockForTesting(
std::unique_ptr<base::TickClock> tick_clock) {
tick_clock_.swap(tick_clock);
« no previous file with comments | « media/renderers/video_renderer_impl.h ('k') | media/renderers/video_renderer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698