• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "ppapi/cpp/media_stream_video_track.h"
6 
7 #include "ppapi/c/pp_errors.h"
8 #include "ppapi/c/ppb_media_stream_video_track.h"
9 #include "ppapi/cpp/completion_callback.h"
10 #include "ppapi/cpp/module_impl.h"
11 #include "ppapi/cpp/var.h"
12 #include "ppapi/cpp/video_frame.h"
13 
14 namespace pp {
15 
16 namespace {
17 
interface_name()18 template <> const char* interface_name<PPB_MediaStreamVideoTrack_1_0>() {
19   return PPB_MEDIASTREAMVIDEOTRACK_INTERFACE_1_0;
20 }
21 
interface_name()22 template <> const char* interface_name<PPB_MediaStreamVideoTrack_0_1>() {
23   return PPB_MEDIASTREAMVIDEOTRACK_INTERFACE_0_1;
24 }
25 
26 }  // namespace
27 
MediaStreamVideoTrack()28 MediaStreamVideoTrack::MediaStreamVideoTrack() {
29 }
30 
MediaStreamVideoTrack(const MediaStreamVideoTrack & other)31 MediaStreamVideoTrack::MediaStreamVideoTrack(
32     const MediaStreamVideoTrack& other) : Resource(other) {
33 }
34 
MediaStreamVideoTrack(const Resource & resource)35 MediaStreamVideoTrack::MediaStreamVideoTrack(const Resource& resource)
36     : Resource(resource) {
37   PP_DCHECK(IsMediaStreamVideoTrack(resource));
38 }
39 
MediaStreamVideoTrack(const InstanceHandle & instance)40 MediaStreamVideoTrack::MediaStreamVideoTrack(const InstanceHandle& instance) {
41   if (has_interface<PPB_MediaStreamVideoTrack_1_0>()) {
42     PassRefFromConstructor(
43         get_interface<PPB_MediaStreamVideoTrack_1_0>()->Create(
44             instance.pp_instance()));
45     return;
46   }
47   PP_DCHECK(false);
48 }
49 
MediaStreamVideoTrack(PassRef,PP_Resource resource)50 MediaStreamVideoTrack::MediaStreamVideoTrack(PassRef, PP_Resource resource)
51     : Resource(PASS_REF, resource) {
52 }
53 
~MediaStreamVideoTrack()54 MediaStreamVideoTrack::~MediaStreamVideoTrack() {
55 }
56 
Configure(const int32_t attributes[],const CompletionCallback & callback)57 int32_t MediaStreamVideoTrack::Configure(
58     const int32_t attributes[],
59     const CompletionCallback& callback) {
60   if (has_interface<PPB_MediaStreamVideoTrack_1_0>()) {
61     return get_interface<PPB_MediaStreamVideoTrack_1_0>()->Configure(
62         pp_resource(), attributes, callback.pp_completion_callback());
63   } else if (has_interface<PPB_MediaStreamVideoTrack_0_1>()) {
64     return get_interface<PPB_MediaStreamVideoTrack_0_1>()->Configure(
65         pp_resource(), attributes, callback.pp_completion_callback());
66   }
67   return callback.MayForce(PP_ERROR_NOINTERFACE);
68 }
69 
GetAttrib(PP_MediaStreamVideoTrack_Attrib attrib,int32_t * value)70 int32_t MediaStreamVideoTrack::GetAttrib(PP_MediaStreamVideoTrack_Attrib attrib,
71                                          int32_t* value) {
72   if (has_interface<PPB_MediaStreamVideoTrack_1_0>()) {
73     return get_interface<PPB_MediaStreamVideoTrack_1_0>()->GetAttrib(
74         pp_resource(), attrib, value);
75   } else if (has_interface<PPB_MediaStreamVideoTrack_0_1>()) {
76     return get_interface<PPB_MediaStreamVideoTrack_0_1>()->GetAttrib(
77         pp_resource(), attrib, value);
78   }
79   return PP_ERROR_NOINTERFACE;
80 }
81 
GetId() const82 std::string MediaStreamVideoTrack::GetId() const {
83   if (has_interface<PPB_MediaStreamVideoTrack_1_0>()) {
84     pp::Var id(PASS_REF, get_interface<PPB_MediaStreamVideoTrack_1_0>()->GetId(
85         pp_resource()));
86     if (id.is_string())
87       return id.AsString();
88   } else if (has_interface<PPB_MediaStreamVideoTrack_0_1>()) {
89     pp::Var id(PASS_REF, get_interface<PPB_MediaStreamVideoTrack_0_1>()->GetId(
90         pp_resource()));
91     if (id.is_string())
92       return id.AsString();
93   }
94   return std::string();
95 }
96 
HasEnded() const97 bool MediaStreamVideoTrack::HasEnded() const {
98   if (has_interface<PPB_MediaStreamVideoTrack_1_0>()) {
99     return PP_ToBool(get_interface<PPB_MediaStreamVideoTrack_1_0>()->HasEnded(
100         pp_resource()));
101   } else if (has_interface<PPB_MediaStreamVideoTrack_0_1>()) {
102     return PP_ToBool(get_interface<PPB_MediaStreamVideoTrack_0_1>()->HasEnded(
103         pp_resource()));
104   }
105   return true;
106 }
107 
GetFrame(const CompletionCallbackWithOutput<VideoFrame> & callback)108 int32_t MediaStreamVideoTrack::GetFrame(
109     const CompletionCallbackWithOutput<VideoFrame>& callback) {
110   if (has_interface<PPB_MediaStreamVideoTrack_1_0>()) {
111     return get_interface<PPB_MediaStreamVideoTrack_1_0>()->GetFrame(
112         pp_resource(), callback.output(), callback.pp_completion_callback());
113   } else if (has_interface<PPB_MediaStreamVideoTrack_0_1>()) {
114     return get_interface<PPB_MediaStreamVideoTrack_0_1>()->GetFrame(
115         pp_resource(), callback.output(), callback.pp_completion_callback());
116   }
117   return callback.MayForce(PP_ERROR_NOINTERFACE);
118 }
119 
RecycleFrame(const VideoFrame & frame)120 int32_t MediaStreamVideoTrack::RecycleFrame(const VideoFrame& frame) {
121   if (has_interface<PPB_MediaStreamVideoTrack_1_0>()) {
122     return get_interface<PPB_MediaStreamVideoTrack_1_0>()->RecycleFrame(
123         pp_resource(), frame.pp_resource());
124   } else if (has_interface<PPB_MediaStreamVideoTrack_0_1>()) {
125     return get_interface<PPB_MediaStreamVideoTrack_0_1>()->RecycleFrame(
126         pp_resource(), frame.pp_resource());
127   }
128   return PP_ERROR_NOINTERFACE;
129 }
130 
Close()131 void MediaStreamVideoTrack::Close() {
132   if (has_interface<PPB_MediaStreamVideoTrack_1_0>())
133     get_interface<PPB_MediaStreamVideoTrack_1_0>()->Close(pp_resource());
134   else if (has_interface<PPB_MediaStreamVideoTrack_0_1>())
135     get_interface<PPB_MediaStreamVideoTrack_0_1>()->Close(pp_resource());
136 
137 }
138 
GetEmptyFrame(const CompletionCallbackWithOutput<VideoFrame> & callback)139 int32_t MediaStreamVideoTrack::GetEmptyFrame(
140     const CompletionCallbackWithOutput<VideoFrame>& callback) {
141   if (has_interface<PPB_MediaStreamVideoTrack_1_0>()) {
142     return get_interface<PPB_MediaStreamVideoTrack_1_0>()->GetEmptyFrame(
143         pp_resource(), callback.output(), callback.pp_completion_callback());
144   }
145   return callback.MayForce(PP_ERROR_NOINTERFACE);
146 }
147 
PutFrame(const VideoFrame & frame)148 int32_t MediaStreamVideoTrack::PutFrame(const VideoFrame& frame) {
149   if (has_interface<PPB_MediaStreamVideoTrack_1_0>()) {
150     return get_interface<PPB_MediaStreamVideoTrack_1_0>()->PutFrame(
151         pp_resource(), frame.pp_resource());
152   }
153   return PP_ERROR_NOINTERFACE;
154 }
155 
IsMediaStreamVideoTrack(const Resource & resource)156 bool MediaStreamVideoTrack::IsMediaStreamVideoTrack(const Resource& resource) {
157   if (has_interface<PPB_MediaStreamVideoTrack_1_0>()) {
158     return PP_ToBool(get_interface<PPB_MediaStreamVideoTrack_1_0>()->
159         IsMediaStreamVideoTrack(resource.pp_resource()));
160   } else if (has_interface<PPB_MediaStreamVideoTrack_0_1>()) {
161     return PP_ToBool(get_interface<PPB_MediaStreamVideoTrack_0_1>()->
162         IsMediaStreamVideoTrack(resource.pp_resource()));
163   }
164   return false;
165 }
166 
167 }  // namespace pp
168