| // Copyright (c) 2011 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/in_memory_url_protocol.h" |
| |
| #include "cobalt/media/ffmpeg/ffmpeg_common.h" |
| #include "starboard/memory.h" |
| |
| namespace cobalt { |
| namespace media { |
| |
| InMemoryUrlProtocol::InMemoryUrlProtocol(const uint8_t* data, int64_t size, |
| bool streaming) |
| : data_(data), |
| size_(size >= 0 ? size : 0), |
| position_(0), |
| streaming_(streaming) {} |
| |
| InMemoryUrlProtocol::~InMemoryUrlProtocol() {} |
| |
| int InMemoryUrlProtocol::Read(int size, uint8_t* data) { |
| if (size < 0) return AVERROR(EIO); |
| |
| int64_t available_bytes = size_ - position_; |
| if (size > available_bytes) size = available_bytes; |
| |
| if (size > 0) { |
| SbMemoryCopy(data, data_ + position_, size); |
| position_ += size; |
| } |
| |
| return size; |
| } |
| |
| bool InMemoryUrlProtocol::GetPosition(int64_t* position_out) { |
| if (!position_out) return false; |
| |
| *position_out = position_; |
| return true; |
| } |
| |
| bool InMemoryUrlProtocol::SetPosition(int64_t position) { |
| if (position < 0 || position > size_) return false; |
| position_ = position; |
| return true; |
| } |
| |
| bool InMemoryUrlProtocol::GetSize(int64_t* size_out) { |
| if (!size_out) return false; |
| |
| *size_out = size_; |
| return true; |
| } |
| |
| bool InMemoryUrlProtocol::IsStreaming() { return streaming_; } |
| |
| } // namespace media |
| } // namespace cobalt |