| // 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 "media/filters/in_memory_url_protocol.h" |
| |
| namespace media { |
| |
| InMemoryUrlProtocol::InMemoryUrlProtocol(const uint8* data, int64 size, |
| bool streaming) |
| : data_(data), |
| size_(size >= 0 ? size : 0), |
| position_(0), |
| streaming_(streaming) { |
| } |
| |
| InMemoryUrlProtocol::~InMemoryUrlProtocol() {} |
| |
| int InMemoryUrlProtocol::Read(int size, uint8* data) { |
| int available_bytes = size_ - position_; |
| if (size > available_bytes) |
| size = available_bytes; |
| |
| memcpy(data, data_ + position_, size); |
| position_ += size; |
| return size; |
| } |
| |
| bool InMemoryUrlProtocol::GetPosition(int64* position_out) { |
| if (!position_out) |
| return false; |
| |
| *position_out = position_; |
| return true; |
| } |
| |
| bool InMemoryUrlProtocol::SetPosition(int64 position) { |
| if (position < 0 || position >= size_) |
| return false; |
| position_ = position; |
| return true; |
| } |
| |
| bool InMemoryUrlProtocol::GetSize(int64* size_out) { |
| if (!size_out) |
| return false; |
| |
| *size_out = size_; |
| return true; |
| } |
| |
| bool InMemoryUrlProtocol::IsStreaming() { |
| return streaming_; |
| } |
| |
| } // namespace media |