// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ppapi/proxy/video_frame_resource.h" #include "base/logging.h" #include "ppapi/c/pp_bool.h" #include "ppapi/shared_impl/var.h" namespace ppapi { namespace proxy { VideoFrameResource::VideoFrameResource(PP_Instance instance, int32_t index, MediaStreamBuffer* buffer) : Resource(OBJECT_IS_PROXY, instance), index_(index), buffer_(buffer) { DCHECK_EQ(buffer_->header.type, MediaStreamBuffer::TYPE_VIDEO); } VideoFrameResource::~VideoFrameResource() { CHECK(!buffer_) << "An unused (or unrecycled) frame is destroyed."; } thunk::PPB_VideoFrame_API* VideoFrameResource::AsPPB_VideoFrame_API() { return this; } PP_TimeDelta VideoFrameResource::GetTimestamp() { if (!buffer_) { VLOG(1) << "Frame is invalid"; return 0.0; } return buffer_->video.timestamp; } void VideoFrameResource::SetTimestamp(PP_TimeDelta timestamp) { if (!buffer_) { VLOG(1) << "Frame is invalid"; return; } buffer_->video.timestamp = timestamp; } PP_VideoFrame_Format VideoFrameResource::GetFormat() { if (!buffer_) { VLOG(1) << "Frame is invalid"; return PP_VIDEOFRAME_FORMAT_UNKNOWN; } return buffer_->video.format; } PP_Bool VideoFrameResource::GetSize(PP_Size* size) { if (!buffer_) { VLOG(1) << "Frame is invalid"; return PP_FALSE; } *size = buffer_->video.size; return PP_TRUE; } void* VideoFrameResource::GetDataBuffer() { if (!buffer_) { VLOG(1) << "Frame is invalid"; return NULL; } return buffer_->video.data; } uint32_t VideoFrameResource::GetDataBufferSize() { if (!buffer_) { VLOG(1) << "Frame is invalid"; return 0; } return buffer_->video.data_size; } MediaStreamBuffer* VideoFrameResource::GetBuffer() { return buffer_; } int32_t VideoFrameResource::GetBufferIndex() { return index_; } void VideoFrameResource::Invalidate() { DCHECK(buffer_); DCHECK_GE(index_, 0); buffer_ = NULL; index_ = -1; } } // namespace proxy } // namespace ppapi