OLD | NEW |
| (Empty) |
1 // Copyright 2012 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 "webkit/compositor_bindings/web_to_ccvideo_frame_provider.h" | |
6 | |
7 #include "base/logging.h" | |
8 #include "media/base/video_frame.h" | |
9 #include "third_party/WebKit/Source/Platform/chromium/public/WebVideoFrameProvid
er.h" | |
10 #include "webkit/media/webvideoframe_impl.h" | |
11 | |
12 using WebKit::WebVideoFrameProvider; | |
13 using webkit_media::WebVideoFrameImpl; | |
14 | |
15 namespace webkit { | |
16 | |
17 scoped_ptr<WebToCCVideoFrameProvider> WebToCCVideoFrameProvider::Create( | |
18 WebVideoFrameProvider* web_provider) { | |
19 return make_scoped_ptr(new WebToCCVideoFrameProvider(web_provider)); | |
20 } | |
21 | |
22 WebToCCVideoFrameProvider::WebToCCVideoFrameProvider( | |
23 WebVideoFrameProvider* web_provider) | |
24 : web_provider_(web_provider), web_frame_(NULL) {} | |
25 | |
26 WebToCCVideoFrameProvider::~WebToCCVideoFrameProvider() {} | |
27 | |
28 class WebToCCVideoFrameProvider::ClientAdapter | |
29 : public WebVideoFrameProvider::Client { | |
30 public: | |
31 explicit ClientAdapter(cc::VideoFrameProvider::Client* cc_client) | |
32 : cc_client_(cc_client) {} | |
33 virtual ~ClientAdapter() {} | |
34 | |
35 // WebVideoFrameProvider::Client implementation. | |
36 virtual void stopUsingProvider() { cc_client_->StopUsingProvider(); } | |
37 | |
38 virtual void didReceiveFrame() { cc_client_->DidReceiveFrame(); } | |
39 | |
40 virtual void didUpdateMatrix(const float* matrix) { | |
41 cc_client_->DidUpdateMatrix(matrix); | |
42 } | |
43 | |
44 private: | |
45 cc::VideoFrameProvider::Client* cc_client_; | |
46 }; | |
47 | |
48 void WebToCCVideoFrameProvider::SetVideoFrameProviderClient(Client* client) { | |
49 scoped_ptr<ClientAdapter> client_adapter; | |
50 if (client) | |
51 client_adapter.reset(new ClientAdapter(client)); | |
52 web_provider_->setVideoFrameProviderClient(client_adapter.get()); | |
53 client_adapter_ = client_adapter.Pass(); | |
54 } | |
55 | |
56 scoped_refptr<media::VideoFrame> WebToCCVideoFrameProvider::GetCurrentFrame() { | |
57 web_frame_ = web_provider_->getCurrentFrame(); | |
58 if (!web_frame_) | |
59 return scoped_refptr<media::VideoFrame>(); | |
60 WebVideoFrameImpl* impl = static_cast<WebVideoFrameImpl*>(web_frame_); | |
61 return impl->video_frame; | |
62 } | |
63 | |
64 void WebToCCVideoFrameProvider::PutCurrentFrame( | |
65 const scoped_refptr<media::VideoFrame>& frame) { | |
66 if (!frame) { | |
67 DCHECK(!web_frame_); | |
68 web_provider_->putCurrentFrame(web_frame_); | |
69 return; | |
70 } | |
71 DCHECK(web_frame_); | |
72 WebVideoFrameImpl* impl = static_cast<WebVideoFrameImpl*>(web_frame_); | |
73 DCHECK_EQ(impl->video_frame.get(), frame.get()); | |
74 web_provider_->putCurrentFrame(web_frame_); | |
75 web_frame_ = NULL; | |
76 } | |
77 | |
78 } // namespace webkit | |
OLD | NEW |