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