video_destination_private.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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#include "ppapi/cpp/private/video_destination_private.h"
6
7#include "ppapi/c/pp_errors.h"
8#include "ppapi/c/private/ppb_video_destination_private.h"
9#include "ppapi/cpp/instance_handle.h"
10#include "ppapi/cpp/module.h"
11#include "ppapi/cpp/module_impl.h"
12#include "ppapi/cpp/private/video_frame_private.h"
13#include "ppapi/cpp/var.h"
14
15namespace pp {
16
17namespace {
18
19template <> const char* interface_name<PPB_VideoDestination_Private_0_1>() {
20  return PPB_VIDEODESTINATION_PRIVATE_INTERFACE_0_1;
21}
22
23}  // namespace
24
25VideoDestination_Private::VideoDestination_Private() {
26}
27
28VideoDestination_Private::VideoDestination_Private(
29    const InstanceHandle& instance) {
30  if (!has_interface<PPB_VideoDestination_Private_0_1>())
31    return;
32  PassRefFromConstructor(
33      get_interface<PPB_VideoDestination_Private_0_1>()->Create(
34          instance.pp_instance()));
35}
36
37VideoDestination_Private::VideoDestination_Private(
38    const VideoDestination_Private& other)
39    : Resource(other) {
40}
41
42VideoDestination_Private::VideoDestination_Private(PassRef,
43                                                   PP_Resource resource)
44    : Resource(PASS_REF, resource) {
45}
46
47int32_t VideoDestination_Private::Open(const Var& stream_url,
48                                       const CompletionCallback& cc) {
49  if (has_interface<PPB_VideoDestination_Private_0_1>()) {
50    int32_t result =
51        get_interface<PPB_VideoDestination_Private_0_1>()->Open(
52            pp_resource(),
53            stream_url.pp_var(),
54            cc.pp_completion_callback());
55    return result;
56  }
57  return cc.MayForce(PP_ERROR_NOINTERFACE);
58}
59
60int32_t VideoDestination_Private::PutFrame(
61    const VideoFrame_Private& frame) {
62  if (has_interface<PPB_VideoDestination_Private_0_1>()) {
63    return get_interface<PPB_VideoDestination_Private_0_1>()->PutFrame(
64        pp_resource(),
65        &frame.pp_video_frame());
66  }
67  return PP_ERROR_NOINTERFACE;
68}
69
70void VideoDestination_Private::Close() {
71  if (has_interface<PPB_VideoDestination_Private_0_1>()) {
72    get_interface<PPB_VideoDestination_Private_0_1>()->Close(pp_resource());
73  }
74}
75
76}  // namespace pp
77