Upstream version 7.35.139.0
[platform/framework/web/crosswalk.git] / src / media / filters / in_memory_url_protocol.cc
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "media/filters/in_memory_url_protocol.h"
6
7 #include "media/ffmpeg/ffmpeg_common.h"
8
9 namespace media {
10
11 InMemoryUrlProtocol::InMemoryUrlProtocol(const uint8* data, int64 size,
12                                          bool streaming)
13     : data_(data),
14       size_(size >= 0 ? size : 0),
15       position_(0),
16       streaming_(streaming) {
17 }
18
19 InMemoryUrlProtocol::~InMemoryUrlProtocol() {}
20
21 int InMemoryUrlProtocol::Read(int size, uint8* data) {
22   if (size < 0)
23     return AVERROR(EIO);
24
25   int64 available_bytes = size_ - position_;
26   if (size > available_bytes)
27     size = available_bytes;
28
29   if (size > 0) {
30     memcpy(data, data_ + position_, size);
31     position_ += size;
32   }
33
34   return size;
35 }
36
37 bool InMemoryUrlProtocol::GetPosition(int64* position_out) {
38   if (!position_out)
39     return false;
40
41   *position_out = position_;
42   return true;
43 }
44
45 bool InMemoryUrlProtocol::SetPosition(int64 position) {
46   if (position < 0 || position > size_)
47     return false;
48   position_ = position;
49   return true;
50 }
51
52 bool InMemoryUrlProtocol::GetSize(int64* size_out) {
53   if (!size_out)
54     return false;
55
56   *size_out = size_;
57   return true;
58 }
59
60 bool InMemoryUrlProtocol::IsStreaming() {
61   return streaming_;
62 }
63
64 }  // namespace media