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 #ifndef PPAPI_PROXY_MEDIA_STREAM_VIDEO_TRACK_RESOURCE_H_ 6 #define PPAPI_PROXY_MEDIA_STREAM_VIDEO_TRACK_RESOURCE_H_ 7 8 #include <map> 9 10 #include "base/memory/ref_counted.h" 11 #include "ppapi/proxy/media_stream_track_resource_base.h" 12 #include "ppapi/proxy/ppapi_proxy_export.h" 13 #include "ppapi/thunk/ppb_media_stream_video_track_api.h" 14 15 namespace ppapi { 16 namespace proxy { 17 18 class VideoFrameResource; 19 20 class PPAPI_PROXY_EXPORT MediaStreamVideoTrackResource 21 : public MediaStreamTrackResourceBase, 22 public thunk::PPB_MediaStreamVideoTrack_API { 23 public: 24 MediaStreamVideoTrackResource(Connection connection, 25 PP_Instance instance, 26 int pending_renderer_id, 27 const std::string& id); 28 29 MediaStreamVideoTrackResource(Connection connection, PP_Instance instance); 30 31 virtual ~MediaStreamVideoTrackResource(); 32 33 // Resource overrides: 34 virtual thunk::PPB_MediaStreamVideoTrack_API* 35 AsPPB_MediaStreamVideoTrack_API() OVERRIDE; 36 37 // PPB_MediaStreamVideoTrack_API overrides: 38 virtual PP_Var GetId() OVERRIDE; 39 virtual PP_Bool HasEnded() OVERRIDE; 40 virtual int32_t Configure(const int32_t attrib_list[], 41 scoped_refptr<TrackedCallback> callback) OVERRIDE; 42 virtual int32_t GetAttrib(PP_MediaStreamVideoTrack_Attrib attrib, 43 int32_t* value) OVERRIDE; 44 virtual int32_t GetFrame(PP_Resource* frame, 45 scoped_refptr<TrackedCallback> callback) OVERRIDE; 46 virtual int32_t RecycleFrame(PP_Resource frame) OVERRIDE; 47 virtual void Close() OVERRIDE; 48 virtual int32_t GetEmptyFrame( 49 PP_Resource* frame, scoped_refptr<TrackedCallback> callback) OVERRIDE; 50 virtual int32_t PutFrame(PP_Resource frame) OVERRIDE; 51 52 // MediaStreamBufferManager::Delegate overrides: 53 virtual void OnNewBufferEnqueued() OVERRIDE; 54 55 private: 56 PP_Resource GetVideoFrame(); 57 58 void ReleaseFrames(); 59 60 // IPC message handlers. 61 void OnPluginMsgConfigureReply(const ResourceMessageReplyParams& params, 62 const std::string& track_id); 63 64 // Allocated frame resources by |GetFrame()|. 65 typedef std::map<PP_Resource, scoped_refptr<VideoFrameResource> > FrameMap; 66 FrameMap frames_; 67 68 PP_Resource* get_frame_output_; 69 scoped_refptr<TrackedCallback> get_frame_callback_; 70 71 scoped_refptr<TrackedCallback> configure_callback_; 72 73 DISALLOW_COPY_AND_ASSIGN(MediaStreamVideoTrackResource); 74 }; 75 76 } // namespace proxy 77 } // namespace ppapi 78 79 #endif // PPAPI_PROXY_MEDIA_STREAM_VIDEO_TRACK_RESOURCE_H_ 80