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