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
15namespace 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.
19class 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