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.h"
     11 #include "base/files/file_path.h"
     12 #include "base/files/memory_mapped_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   explicit FileDataSource(base::File file);
     23   virtual ~FileDataSource();
     24 
     25   bool Initialize(const base::FilePath& file_path);
     26 
     27   // Implementation of DataSource.
     28   virtual void Stop() OVERRIDE;
     29   virtual void Read(int64 position, int size, uint8* data,
     30                     const DataSource::ReadCB& read_cb) OVERRIDE;
     31   virtual bool GetSize(int64* size_out) OVERRIDE;
     32   virtual bool IsStreaming() OVERRIDE;
     33   virtual void SetBitrate(int bitrate) OVERRIDE;
     34 
     35   // Unit test helpers. Recreate the object if you want the default behaviour.
     36   void force_read_errors_for_testing() { force_read_errors_ = true; }
     37   void force_streaming_for_testing() { force_streaming_ = true; }
     38 
     39  private:
     40   base::MemoryMappedFile file_;
     41 
     42   bool force_read_errors_;
     43   bool force_streaming_;
     44 
     45   DISALLOW_COPY_AND_ASSIGN(FileDataSource);
     46 };
     47 
     48 }  // namespace media
     49 
     50 #endif  // MEDIA_FILTERS_FILE_DATA_SOURCE_H_
     51