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 17struct PP_ImageDataDesc; 18struct PP_VideoFrame_Private; 19 20namespace ppapi { 21 22class TrackedCallback; 23 24namespace proxy { 25 26class 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