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/proxy/video_frame_resource.h"
6
7#include "base/logging.h"
8#include "ppapi/c/pp_bool.h"
9#include "ppapi/shared_impl/var.h"
10
11namespace ppapi {
12namespace proxy {
13
14VideoFrameResource::VideoFrameResource(PP_Instance instance,
15                                       int32_t index,
16                                       MediaStreamBuffer* buffer)
17    : Resource(OBJECT_IS_PROXY, instance),
18      index_(index),
19      buffer_(buffer) {
20  DCHECK_EQ(buffer_->header.type, MediaStreamBuffer::TYPE_VIDEO);
21}
22
23VideoFrameResource::~VideoFrameResource() {
24  CHECK(!buffer_) << "An unused (or unrecycled) frame is destroyed.";
25}
26
27thunk::PPB_VideoFrame_API* VideoFrameResource::AsPPB_VideoFrame_API() {
28  return this;
29}
30
31PP_TimeDelta VideoFrameResource::GetTimestamp() {
32  if (!buffer_) {
33    VLOG(1) << "Frame is invalid";
34    return 0.0;
35  }
36  return buffer_->video.timestamp;
37}
38
39void VideoFrameResource::SetTimestamp(PP_TimeDelta timestamp) {
40  if (!buffer_) {
41    VLOG(1) << "Frame is invalid";
42    return;
43  }
44  buffer_->video.timestamp = timestamp;
45}
46
47PP_VideoFrame_Format VideoFrameResource::GetFormat() {
48  if (!buffer_) {
49    VLOG(1) << "Frame is invalid";
50    return PP_VIDEOFRAME_FORMAT_UNKNOWN;
51  }
52  return buffer_->video.format;
53}
54
55PP_Bool VideoFrameResource::GetSize(PP_Size* size) {
56  if (!buffer_) {
57    VLOG(1) << "Frame is invalid";
58    return PP_FALSE;
59  }
60  *size = buffer_->video.size;
61  return PP_TRUE;
62}
63
64void* VideoFrameResource::GetDataBuffer() {
65  if (!buffer_) {
66    VLOG(1) << "Frame is invalid";
67    return NULL;
68  }
69  return buffer_->video.data;
70}
71
72uint32_t VideoFrameResource::GetDataBufferSize() {
73  if (!buffer_) {
74    VLOG(1) << "Frame is invalid";
75    return 0;
76  }
77  return buffer_->video.data_size;
78}
79
80MediaStreamBuffer* VideoFrameResource::GetBuffer() {
81  return buffer_;
82}
83
84int32_t VideoFrameResource::GetBufferIndex() {
85  return index_;
86}
87
88void VideoFrameResource::Invalidate() {
89  DCHECK(buffer_);
90  DCHECK_GE(index_, 0);
91  buffer_ = NULL;
92  index_ = -1;
93}
94
95}  // namespace proxy
96}  // namespace ppapi
97