1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- // 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"
- #include "media/ffmpeg/ffmpeg_common.h"
- 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() = default;
- int InMemoryUrlProtocol::Read(int size, uint8_t* data) {
- // Not sure this can happen, but it's unclear from the ffmpeg code, so guard
- // against it.
- if (size < 0)
- return AVERROR(EIO);
- if (!size)
- return 0;
- const int64_t available_bytes = size_ - position_;
- if (available_bytes <= 0)
- return AVERROR_EOF;
- if (size > available_bytes)
- size = available_bytes;
- if (size > 0) {
- memcpy(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
|