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 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