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