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
12namespace media {
13
14class MEDIA_EXPORT DataSource {
15 public:
16  typedef base::Callback<void(int64, int64)> StatusCallback;
17  typedef base::Callback<void(int)> ReadCB;
18
19  enum { kReadError = -1 };
20
21  DataSource();
22  virtual ~DataSource();
23
24  // Reads |size| bytes from |position| into |data|. And when the read is done
25  // or failed, |read_cb| is called with the number of bytes read or
26  // kReadError in case of error.
27  virtual void Read(int64 position, int size, uint8* data,
28                    const DataSource::ReadCB& read_cb) = 0;
29
30  // Stops the DataSource. Once this is called all future Read() calls will
31  // return an error.
32  virtual void Stop() = 0;
33
34  // Returns true and the file size, false if the file size could not be
35  // retrieved.
36  virtual bool GetSize(int64* size_out) = 0;
37
38  // Returns true if we are performing streaming. In this case seeking is
39  // not possible.
40  virtual bool IsStreaming() = 0;
41
42  // Notify the DataSource of the bitrate of the media.
43  // Values of |bitrate| <= 0 are invalid and should be ignored.
44  virtual void SetBitrate(int bitrate) = 0;
45
46 private:
47  DISALLOW_COPY_AND_ASSIGN(DataSource);
48};
49
50}  // namespace media
51
52#endif  // MEDIA_BASE_DATA_SOURCE_H_
53