blob: ad63b69fcaea2196c69fce87abe3d1254c727248 [file] [log] [blame]
// 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