Home | History | Annotate | Download | only in filters
      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_FILTERS_FILE_DATA_SOURCE_H_
      6 #define MEDIA_FILTERS_FILE_DATA_SOURCE_H_
      7 
      8 #include <string>
      9 
     10 #include "base/files/file_path.h"
     11 #include "base/files/memory_mapped_file.h"
     12 #include "base/platform_file.h"
     13 #include "media/base/data_source.h"
     14 
     15 namespace media {
     16 
     17 // Basic data source that treats the URL as a file path, and uses the file
     18 // system to read data for a media pipeline.
     19 class MEDIA_EXPORT FileDataSource : public DataSource {
     20  public:
     21   FileDataSource();
     22   virtual ~FileDataSource();
     23 
     24   bool Initialize(const base::FilePath& file_path);
     25   bool InitializeFromPlatformFile(const base::PlatformFile& file);
     26 
     27   // Implementation of DataSource.
     28   virtual void set_host(DataSourceHost* host) OVERRIDE;
     29   virtual void Stop(const base::Closure& callback) OVERRIDE;
     30   virtual void Read(int64 position, int size, uint8* data,
     31                     const DataSource::ReadCB& read_cb) OVERRIDE;
     32   virtual bool GetSize(int64* size_out) OVERRIDE;
     33   virtual bool IsStreaming() OVERRIDE;
     34   virtual void SetBitrate(int bitrate) OVERRIDE;
     35 
     36   // Unit test helpers. Recreate the object if you want the default behaviour.
     37   void force_read_errors_for_testing() { force_read_errors_ = true; }
     38   void force_streaming_for_testing() { force_streaming_ = true; }
     39 
     40  private:
     41   // Informs the host of changes in total and buffered bytes.
     42   void UpdateHostBytes();
     43 
     44   base::MemoryMappedFile file_;
     45 
     46   bool force_read_errors_;
     47   bool force_streaming_;
     48 
     49   DISALLOW_COPY_AND_ASSIGN(FileDataSource);
     50 };
     51 
     52 }  // namespace media
     53 
     54 #endif  // MEDIA_FILTERS_FILE_DATA_SOURCE_H_
     55