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// From ppb_media_stream_video_track.idl modified Mon Mar 31 14:40:45 2014.
6
7#include "ppapi/c/pp_completion_callback.h"
8#include "ppapi/c/pp_errors.h"
9#include "ppapi/c/ppb_media_stream_video_track.h"
10#include "ppapi/shared_impl/tracked_callback.h"
11#include "ppapi/thunk/enter.h"
12#include "ppapi/thunk/ppapi_thunk_export.h"
13#include "ppapi/thunk/ppb_media_stream_video_track_api.h"
14
15namespace ppapi {
16namespace thunk {
17
18namespace {
19
20PP_Resource Create(PP_Instance instance) {
21  VLOG(4) << "PPB_MediaStreamVideoTrack::Create()";
22  EnterResourceCreation enter(instance);
23  if (enter.failed())
24    return 0;
25  return enter.functions()->CreateMediaStreamVideoTrack(instance);
26}
27
28PP_Bool IsMediaStreamVideoTrack(PP_Resource resource) {
29  VLOG(4) << "PPB_MediaStreamVideoTrack::IsMediaStreamVideoTrack()";
30  EnterResource<PPB_MediaStreamVideoTrack_API> enter(resource, false);
31  return PP_FromBool(enter.succeeded());
32}
33
34int32_t Configure(PP_Resource video_track,
35                  const int32_t attrib_list[],
36                  struct PP_CompletionCallback callback) {
37  VLOG(4) << "PPB_MediaStreamVideoTrack::Configure()";
38  EnterResource<PPB_MediaStreamVideoTrack_API> enter(video_track,
39                                                     callback,
40                                                     true);
41  if (enter.failed())
42    return enter.retval();
43  return enter.SetResult(enter.object()->Configure(attrib_list,
44                                                   enter.callback()));
45}
46
47int32_t GetAttrib(PP_Resource video_track,
48                  PP_MediaStreamVideoTrack_Attrib attrib,
49                  int32_t* value) {
50  VLOG(4) << "PPB_MediaStreamVideoTrack::GetAttrib()";
51  EnterResource<PPB_MediaStreamVideoTrack_API> enter(video_track, true);
52  if (enter.failed())
53    return enter.retval();
54  return enter.object()->GetAttrib(attrib, value);
55}
56
57struct PP_Var GetId(PP_Resource video_track) {
58  VLOG(4) << "PPB_MediaStreamVideoTrack::GetId()";
59  EnterResource<PPB_MediaStreamVideoTrack_API> enter(video_track, true);
60  if (enter.failed())
61    return PP_MakeUndefined();
62  return enter.object()->GetId();
63}
64
65PP_Bool HasEnded(PP_Resource video_track) {
66  VLOG(4) << "PPB_MediaStreamVideoTrack::HasEnded()";
67  EnterResource<PPB_MediaStreamVideoTrack_API> enter(video_track, true);
68  if (enter.failed())
69    return PP_TRUE;
70  return enter.object()->HasEnded();
71}
72
73int32_t GetFrame(PP_Resource video_track,
74                 PP_Resource* frame,
75                 struct PP_CompletionCallback callback) {
76  VLOG(4) << "PPB_MediaStreamVideoTrack::GetFrame()";
77  EnterResource<PPB_MediaStreamVideoTrack_API> enter(video_track,
78                                                     callback,
79                                                     true);
80  if (enter.failed())
81    return enter.retval();
82  return enter.SetResult(enter.object()->GetFrame(frame, enter.callback()));
83}
84
85int32_t RecycleFrame(PP_Resource video_track, PP_Resource frame) {
86  VLOG(4) << "PPB_MediaStreamVideoTrack::RecycleFrame()";
87  EnterResource<PPB_MediaStreamVideoTrack_API> enter(video_track, true);
88  if (enter.failed())
89    return enter.retval();
90  return enter.object()->RecycleFrame(frame);
91}
92
93void Close(PP_Resource video_track) {
94  VLOG(4) << "PPB_MediaStreamVideoTrack::Close()";
95  EnterResource<PPB_MediaStreamVideoTrack_API> enter(video_track, true);
96  if (enter.failed())
97    return;
98  enter.object()->Close();
99}
100
101int32_t GetEmptyFrame(PP_Resource video_track,
102                      PP_Resource* frame,
103                      struct PP_CompletionCallback callback) {
104  VLOG(4) << "PPB_MediaStreamVideoTrack::GetEmptyFrame()";
105  EnterResource<PPB_MediaStreamVideoTrack_API> enter(video_track,
106                                                     callback,
107                                                     true);
108  if (enter.failed())
109    return enter.retval();
110  return enter.SetResult(enter.object()->GetEmptyFrame(frame,
111                                                       enter.callback()));
112}
113
114int32_t PutFrame(PP_Resource video_track, PP_Resource frame) {
115  VLOG(4) << "PPB_MediaStreamVideoTrack::PutFrame()";
116  EnterResource<PPB_MediaStreamVideoTrack_API> enter(video_track, true);
117  if (enter.failed())
118    return enter.retval();
119  return enter.object()->PutFrame(frame);
120}
121
122const PPB_MediaStreamVideoTrack_0_1 g_ppb_mediastreamvideotrack_thunk_0_1 = {
123  &IsMediaStreamVideoTrack,
124  &Configure,
125  &GetAttrib,
126  &GetId,
127  &HasEnded,
128  &GetFrame,
129  &RecycleFrame,
130  &Close
131};
132
133const PPB_MediaStreamVideoTrack_1_0 g_ppb_mediastreamvideotrack_thunk_1_0 = {
134  &Create,
135  &IsMediaStreamVideoTrack,
136  &Configure,
137  &GetAttrib,
138  &GetId,
139  &HasEnded,
140  &GetFrame,
141  &RecycleFrame,
142  &Close,
143  &GetEmptyFrame,
144  &PutFrame
145};
146
147}  // namespace
148
149PPAPI_THUNK_EXPORT const PPB_MediaStreamVideoTrack_0_1*
150    GetPPB_MediaStreamVideoTrack_0_1_Thunk() {
151  return &g_ppb_mediastreamvideotrack_thunk_0_1;
152}
153
154PPAPI_THUNK_EXPORT const PPB_MediaStreamVideoTrack_1_0*
155    GetPPB_MediaStreamVideoTrack_1_0_Thunk() {
156  return &g_ppb_mediastreamvideotrack_thunk_1_0;
157}
158
159}  // namespace thunk
160}  // namespace ppapi
161