Index: media/filters/in_memory_url_protocol.cc |
diff --git a/media/filters/in_memory_url_protocol.cc b/media/filters/in_memory_url_protocol.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..dd7d984bac34b259ebdff08edc7d735fb4ec7de5 |
--- /dev/null |
+++ b/media/filters/in_memory_url_protocol.cc |
@@ -0,0 +1,59 @@ |
+// 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), |
+ position_(0), |
+ streaming_(streaming) { |
+} |
+ |
+InMemoryUrlProtocol::~InMemoryUrlProtocol() {} |
+ |
+int InMemoryUrlProtocol::Read(int size, uint8* data) { |
+ if (size < 0) |
+ return -1; |
+ |
+ int available_bytes = static_cast<int>(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 |