| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "content/renderer/media/video_frame_compositor.h" | |
| 6 | |
| 7 #include "media/base/video_frame.h" | |
| 8 | |
| 9 namespace content { | |
| 10 | |
| 11 static bool IsOpaque(const scoped_refptr<media::VideoFrame>& frame) { | |
| 12 switch (frame->format()) { | |
| 13 case media::VideoFrame::UNKNOWN: | |
| 14 case media::VideoFrame::YV12: | |
| 15 case media::VideoFrame::YV12J: | |
| 16 case media::VideoFrame::YV16: | |
| 17 case media::VideoFrame::I420: | |
| 18 case media::VideoFrame::YV24: | |
| 19 case media::VideoFrame::NV12: | |
| 20 return true; | |
| 21 | |
| 22 case media::VideoFrame::YV12A: | |
| 23 #if defined(VIDEO_HOLE) | |
| 24 case media::VideoFrame::HOLE: | |
| 25 #endif // defined(VIDEO_HOLE) | |
| 26 case media::VideoFrame::NATIVE_TEXTURE: | |
| 27 break; | |
| 28 } | |
| 29 return false; | |
| 30 } | |
| 31 | |
| 32 VideoFrameCompositor::VideoFrameCompositor( | |
| 33 const base::Callback<void(gfx::Size)>& natural_size_changed_cb, | |
| 34 const base::Callback<void(bool)>& opacity_changed_cb) | |
| 35 : natural_size_changed_cb_(natural_size_changed_cb), | |
| 36 opacity_changed_cb_(opacity_changed_cb), | |
| 37 client_(NULL) { | |
| 38 } | |
| 39 | |
| 40 VideoFrameCompositor::~VideoFrameCompositor() { | |
| 41 if (client_) | |
| 42 client_->StopUsingProvider(); | |
| 43 } | |
| 44 | |
| 45 void VideoFrameCompositor::SetVideoFrameProviderClient( | |
| 46 cc::VideoFrameProvider::Client* client) { | |
| 47 if (client_) | |
| 48 client_->StopUsingProvider(); | |
| 49 client_ = client; | |
| 50 } | |
| 51 | |
| 52 scoped_refptr<media::VideoFrame> VideoFrameCompositor::GetCurrentFrame() { | |
| 53 return current_frame_; | |
| 54 } | |
| 55 | |
| 56 void VideoFrameCompositor::PutCurrentFrame( | |
| 57 const scoped_refptr<media::VideoFrame>& frame) { | |
| 58 } | |
| 59 | |
| 60 void VideoFrameCompositor::UpdateCurrentFrame( | |
| 61 const scoped_refptr<media::VideoFrame>& frame) { | |
| 62 if (current_frame_.get() && | |
| 63 current_frame_->natural_size() != frame->natural_size()) { | |
| 64 natural_size_changed_cb_.Run(frame->natural_size()); | |
| 65 } | |
| 66 | |
| 67 if (!current_frame_.get() || IsOpaque(current_frame_) != IsOpaque(frame)) { | |
| 68 opacity_changed_cb_.Run(IsOpaque(frame)); | |
| 69 } | |
| 70 | |
| 71 current_frame_ = frame; | |
| 72 | |
| 73 if (client_) | |
| 74 client_->DidReceiveFrame(); | |
| 75 } | |
| 76 | |
| 77 } // namespace content | |
| OLD | NEW |