| // Copyright 2016 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 "cobalt/media/filters/memory_data_source.h" |
| |
| #include <algorithm> |
| |
| #include "base/logging.h" |
| #include "starboard/memory.h" |
| |
| namespace cobalt { |
| namespace media { |
| |
| MemoryDataSource::MemoryDataSource(const uint8_t* data, size_t size) |
| : data_(data), size_(size) {} |
| |
| MemoryDataSource::~MemoryDataSource() {} |
| |
| void MemoryDataSource::Read(int64_t position, int size, uint8_t* data, |
| const DataSource::ReadCB& read_cb) { |
| DCHECK(!read_cb.is_null()); |
| |
| if (is_stopped_ || size < 0 || position < 0 || |
| static_cast<size_t>(position) > size_) { |
| read_cb.Run(kReadError); |
| return; |
| } |
| |
| // Cap size within bounds. |
| size_t clamped_size = std::min(static_cast<size_t>(size), |
| size_ - static_cast<size_t>(position)); |
| |
| if (clamped_size > 0) { |
| DCHECK(data); |
| SbMemoryCopy(data, data_ + position, clamped_size); |
| } |
| |
| read_cb.Run(clamped_size); |
| } |
| |
| void MemoryDataSource::Stop() { is_stopped_ = true; } |
| |
| void MemoryDataSource::Abort() {} |
| |
| bool MemoryDataSource::GetSize(int64_t* size_out) { |
| *size_out = size_; |
| return true; |
| } |
| |
| bool MemoryDataSource::IsStreaming() { return false; } |
| |
| void MemoryDataSource::SetBitrate(int bitrate) {} |
| |
| } // namespace media |
| } // namespace cobalt |