1 // Copyright (c) 2013 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 #ifndef PPAPI_PROXY_VIDEO_SOURCE_RESOURCE_H_ 6 #define PPAPI_PROXY_VIDEO_SOURCE_RESOURCE_H_ 7 8 #include <string> 9 10 #include "ppapi/c/pp_time.h" 11 #include "ppapi/c/pp_var.h" 12 #include "ppapi/proxy/connection.h" 13 #include "ppapi/proxy/plugin_resource.h" 14 #include "ppapi/proxy/ppapi_proxy_export.h" 15 #include "ppapi/thunk/ppb_video_source_private_api.h" 16 17 struct PP_ImageDataDesc; 18 struct PP_VideoFrame_Private; 19 20 namespace ppapi { 21 22 class TrackedCallback; 23 24 namespace proxy { 25 26 class PPAPI_PROXY_EXPORT VideoSourceResource 27 : public PluginResource, 28 public thunk::PPB_VideoSource_Private_API { 29 public: 30 VideoSourceResource(Connection connection, 31 PP_Instance instance); 32 virtual ~VideoSourceResource(); 33 34 // Resource overrides. 35 virtual thunk::PPB_VideoSource_Private_API* 36 AsPPB_VideoSource_Private_API() OVERRIDE; 37 38 // PPB_VideoSource_Private_API implementation. 39 virtual int32_t Open( 40 const PP_Var& stream_url, 41 scoped_refptr<TrackedCallback> callback) OVERRIDE; 42 virtual int32_t GetFrame( 43 PP_VideoFrame_Private* frame, 44 scoped_refptr<TrackedCallback> callback) OVERRIDE; 45 virtual void Close() OVERRIDE; 46 47 private: 48 void OnPluginMsgOpenComplete( 49 const ResourceMessageReplyParams& reply_params); 50 void OnPluginMsgGetFrameComplete( 51 PP_VideoFrame_Private* frame, 52 const ResourceMessageReplyParams& reply_params, 53 const HostResource& image_data, 54 const PP_ImageDataDesc& image_desc_data, 55 PP_TimeTicks timestamp); 56 57 scoped_refptr<TrackedCallback> open_callback_; 58 scoped_refptr<TrackedCallback> get_frame_callback_; 59 bool is_open_; 60 61 DISALLOW_COPY_AND_ASSIGN(VideoSourceResource); 62 }; 63 64 } // namespace proxy 65 } // namespace ppapi 66 67 #endif // PPAPI_PROXY_VIDEO_SOURCE_RESOURCE_H_ 68