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
15namespace ppapi {
16namespace proxy {
17
18class VideoFrameResource;
19
20class 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