Index: media/filters/ffmpeg_glue.cc |
diff --git a/media/filters/ffmpeg_glue.cc b/media/filters/ffmpeg_glue.cc |
index 23f0a364ddad5efd108d63544ab5c23e5aa9ab0a..39ec1ab2e07cf7e4e9a58c853d2cd86c6c82c0fc 100644 |
--- a/media/filters/ffmpeg_glue.cc |
+++ b/media/filters/ffmpeg_glue.cc |
@@ -137,6 +137,53 @@ FFmpegGlue::FFmpegGlue() { |
av_register_all(); |
} |
+BufferUrlProtocol::BufferUrlProtocol(const uint8* buf, int size, |
+ bool streaming) |
+ : buf_(buf), |
+ size_(size), |
+ offset_(0), |
+ streaming_(streaming) { |
+} |
+ |
+BufferUrlProtocol::~BufferUrlProtocol() {} |
+ |
+int BufferUrlProtocol::Read(int size, uint8* data) { |
+ int bytes_to_copy = size; |
+ int bytes_left = size_ - offset_; |
+ |
+ if (bytes_to_copy > bytes_left) |
+ bytes_to_copy = bytes_left; |
+ |
+ if (bytes_to_copy == 0) |
+ return 0; |
+ |
+ memcpy(data, buf_ + offset_, bytes_to_copy); |
+ offset_ += bytes_to_copy; |
+ |
+ return bytes_to_copy; |
+} |
+ |
+bool BufferUrlProtocol::GetPosition(int64* position_out) { |
+ *position_out = offset_; |
+ return true; |
+} |
+ |
+bool BufferUrlProtocol::SetPosition(int64 position) { |
+ if (position < 0 || position >= size_) |
+ return false; |
+ |
+ offset_ = position; |
+ return true; |
+} |
+ |
+bool BufferUrlProtocol::GetSize(int64* size_out) { |
+ *size_out = size_; |
+ return true; |
+} |
+ |
+bool BufferUrlProtocol::IsStreaming() { return streaming_; } |
+ |
+ |
FFmpegGlue::~FFmpegGlue() { |
av_lockmgr_register(NULL); |
} |