// 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 "media/filters/memory_data_source.h" #include #include "base/callback.h" #include "base/check.h" namespace media { MemoryDataSource::MemoryDataSource(std::string data) : data_string_(std::move(data)), data_(reinterpret_cast(data_string_.data())), size_(data_string_.size()) {} MemoryDataSource::MemoryDataSource(const uint8_t* data, size_t size) : data_(data), size_(size) {} MemoryDataSource::~MemoryDataSource() = default; void MemoryDataSource::Read(int64_t position, int size, uint8_t* data, DataSource::ReadCB read_cb) { DCHECK(read_cb); if (is_stopped_ || size < 0 || position < 0 || static_cast(position) > size_) { std::move(read_cb).Run(kReadError); return; } // Cap size within bounds. size_t clamped_size = std::min(static_cast(size), size_ - static_cast(position)); if (clamped_size > 0) { DCHECK(data); memcpy(data, data_ + position, clamped_size); } std::move(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