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.
5 #ifndef MEDIA_BASE_DATA_SOURCE_H_
6 #define MEDIA_BASE_DATA_SOURCE_H_
8 #include "base/callback.h"
9 #include "base/time/time.h"
10 #include "media/base/media_export.h"
14 class MEDIA_EXPORT DataSource
{
16 typedef base::Callback
<void(int64
, int64
)> StatusCallback
;
17 typedef base::Callback
<void(int)> ReadCB
;
19 enum { kReadError
= -1 };
22 virtual ~DataSource();
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;
30 // Stops the DataSource. Once this is called all future Read() calls will
32 virtual void Stop() = 0;
34 // Returns true and the file size, false if the file size could not be
36 virtual bool GetSize(int64
* size_out
) = 0;
38 // Returns true if we are performing streaming. In this case seeking is
40 virtual bool IsStreaming() = 0;
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;
47 DISALLOW_COPY_AND_ASSIGN(DataSource
);
52 #endif // MEDIA_BASE_DATA_SOURCE_H_