blob: 941471256eebe5750ffabc9807deb01c9cde41a2 [file] [log] [blame]
// 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