blob: 5a15d074d2048d200f11ec3991a5d79ef7fd940b [file] [log] [blame]
// Copyright 2015 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 "media/cdm/cdm_helpers.h"
#include "base/check.h"
#include "ui/gfx/color_space.h"
namespace media {
namespace {
// See ISO 23001-8:2016, section 7. Value 2 means "Unspecified".
constexpr cdm::ColorSpace kUnspecifiedColorSpace = {2, 2, 2,
cdm::ColorRange::kInvalid};
gfx::ColorSpace::RangeID ToGfxColorSpaceRange(cdm::ColorRange range) {
switch (range) {
case cdm::ColorRange::kInvalid:
return gfx::ColorSpace::RangeID::INVALID;
case cdm::ColorRange::kLimited:
return gfx::ColorSpace::RangeID::LIMITED;
case cdm::ColorRange::kFull:
return gfx::ColorSpace::RangeID::FULL;
case cdm::ColorRange::kDerived:
return gfx::ColorSpace::RangeID::DERIVED;
}
}
} // namespace
DecryptedBlockImpl::DecryptedBlockImpl() : buffer_(nullptr), timestamp_(0) {}
DecryptedBlockImpl::~DecryptedBlockImpl() {
if (buffer_)
buffer_->Destroy();
}
void DecryptedBlockImpl::SetDecryptedBuffer(cdm::Buffer* buffer) {
buffer_ = buffer;
}
cdm::Buffer* DecryptedBlockImpl::DecryptedBuffer() {
return buffer_;
}
void DecryptedBlockImpl::SetTimestamp(int64_t timestamp) {
timestamp_ = timestamp;
}
int64_t DecryptedBlockImpl::Timestamp() const {
return timestamp_;
}
VideoFrameImpl::VideoFrameImpl()
: format_(cdm::kUnknownVideoFormat),
color_space_(kUnspecifiedColorSpace),
frame_buffer_(nullptr),
timestamp_(0) {
for (uint32_t i = 0; i < cdm::kMaxPlanes; ++i) {
plane_offsets_[i] = 0;
strides_[i] = 0;
}
}
VideoFrameImpl::~VideoFrameImpl() {
if (frame_buffer_)
frame_buffer_->Destroy();
}
void VideoFrameImpl::SetFormat(cdm::VideoFormat format) {
format_ = format;
}
cdm::VideoFormat VideoFrameImpl::Format() const {
return format_;
}
void VideoFrameImpl::SetSize(cdm::Size size) {
size_ = size;
}
cdm::Size VideoFrameImpl::Size() const {
return size_;
}
void VideoFrameImpl::SetFrameBuffer(cdm::Buffer* frame_buffer) {
frame_buffer_ = frame_buffer;
}
cdm::Buffer* VideoFrameImpl::FrameBuffer() {
return frame_buffer_;
}
void VideoFrameImpl::SetPlaneOffset(cdm::VideoPlane plane, uint32_t offset) {
DCHECK(plane < cdm::kMaxPlanes);
plane_offsets_[plane] = offset;
}
uint32_t VideoFrameImpl::PlaneOffset(cdm::VideoPlane plane) {
DCHECK(plane < cdm::kMaxPlanes);
return plane_offsets_[plane];
}
void VideoFrameImpl::SetStride(cdm::VideoPlane plane, uint32_t stride) {
DCHECK(plane < cdm::kMaxPlanes);
strides_[plane] = stride;
}
uint32_t VideoFrameImpl::Stride(cdm::VideoPlane plane) {
DCHECK(plane < cdm::kMaxPlanes);
return strides_[plane];
}
void VideoFrameImpl::SetTimestamp(int64_t timestamp) {
timestamp_ = timestamp;
}
int64_t VideoFrameImpl::Timestamp() const {
return timestamp_;
}
void VideoFrameImpl::SetColorSpace(cdm::ColorSpace color_space) {
color_space_ = color_space;
}
media::VideoColorSpace VideoFrameImpl::MediaColorSpace() const {
return media::VideoColorSpace(
color_space_.primary_id, color_space_.transfer_id, color_space_.matrix_id,
ToGfxColorSpaceRange(color_space_.range));
}
AudioFramesImpl::AudioFramesImpl()
: buffer_(nullptr), format_(cdm::kUnknownAudioFormat) {}
AudioFramesImpl::~AudioFramesImpl() {
if (buffer_)
buffer_->Destroy();
}
void AudioFramesImpl::SetFrameBuffer(cdm::Buffer* buffer) {
buffer_ = buffer;
}
cdm::Buffer* AudioFramesImpl::FrameBuffer() {
return buffer_;
}
void AudioFramesImpl::SetFormat(cdm::AudioFormat format) {
format_ = format;
}
cdm::AudioFormat AudioFramesImpl::Format() const {
return format_;
}
cdm::Buffer* AudioFramesImpl::PassFrameBuffer() {
cdm::Buffer* temp_buffer = buffer_;
buffer_ = nullptr;
return temp_buffer;
}
} // namespace media