- add sources.
[platform/framework/web/crosswalk.git] / src / media / base / data_source.h
1 // Copyright (c) 2012 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 #ifndef MEDIA_BASE_DATA_SOURCE_H_
6 #define MEDIA_BASE_DATA_SOURCE_H_
7
8 #include "base/callback.h"
9 #include "base/time/time.h"
10 #include "media/base/media_export.h"
11
12 namespace media {
13
14 class MEDIA_EXPORT DataSourceHost {
15  public:
16   // Set the total size of the media file.
17   virtual void SetTotalBytes(int64 total_bytes) = 0;
18
19   // Notify the host that byte range [start,end] has been buffered.
20   // TODO(fischman): remove this method when demuxing is push-based instead of
21   // pull-based.  http://crbug.com/131444
22   virtual void AddBufferedByteRange(int64 start, int64 end) = 0;
23
24   // Notify the host that time range [start,end] has been buffered.
25   virtual void AddBufferedTimeRange(base::TimeDelta start,
26                                     base::TimeDelta end) = 0;
27
28  protected:
29   virtual ~DataSourceHost();
30 };
31
32 class MEDIA_EXPORT DataSource {
33  public:
34   typedef base::Callback<void(int64, int64)> StatusCallback;
35   typedef base::Callback<void(int)> ReadCB;
36   static const int kReadError;
37
38   DataSource();
39   virtual ~DataSource();
40
41   virtual void set_host(DataSourceHost* host);
42
43   // Reads |size| bytes from |position| into |data|. And when the read is done
44   // or failed, |read_cb| is called with the number of bytes read or
45   // kReadError in case of error.
46   virtual void Read(int64 position, int size, uint8* data,
47                     const DataSource::ReadCB& read_cb) = 0;
48
49   // Stops the DataSource. Once this is called all future Read() calls will
50   // return an error.
51   virtual void Stop(const base::Closure& callback) = 0;
52
53   // Returns true and the file size, false if the file size could not be
54   // retrieved.
55   virtual bool GetSize(int64* size_out) = 0;
56
57   // Returns true if we are performing streaming. In this case seeking is
58   // not possible.
59   virtual bool IsStreaming() = 0;
60
61   // Notify the DataSource of the bitrate of the media.
62   // Values of |bitrate| <= 0 are invalid and should be ignored.
63   virtual void SetBitrate(int bitrate) = 0;
64
65  protected:
66   DataSourceHost* host();
67
68  private:
69   DataSourceHost* host_;
70
71   DISALLOW_COPY_AND_ASSIGN(DataSource);
72 };
73
74 }  // namespace media
75
76 #endif  // MEDIA_BASE_DATA_SOURCE_H_