1 // Copyright (c) 2011 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.
5 #ifndef MEDIA_FILTERS_FILE_DATA_SOURCE_H_
6 #define MEDIA_FILTERS_FILE_DATA_SOURCE_H_
10 #include "base/gtest_prod_util.h"
11 #include "base/synchronization/lock.h"
12 #include "media/base/filters.h"
16 // Basic data source that treats the URL as a file path, and uses the file
17 // system to read data for a media pipeline.
18 class FileDataSource
: public DataSource
{
21 virtual ~FileDataSource();
23 PipelineStatus
Initialize(const std::string
& url
);
25 // Implementation of Filter.
26 virtual void set_host(FilterHost
* filter_host
);
27 virtual void Stop(FilterCallback
* callback
);
29 // Implementation of DataSource.
30 virtual void Read(int64 position
, size_t size
, uint8
* data
,
31 ReadCallback
* read_callback
);
32 virtual bool GetSize(int64
* size_out
);
33 virtual bool IsStreaming();
34 virtual void SetPreload(Preload preload
);
37 // Only allow factories and tests to create this object.
39 // TODO(scherkus): I'm getting tired of these factories getting in the way
41 FRIEND_TEST_ALL_PREFIXES(FileDataSourceTest
, OpenFile
);
42 FRIEND_TEST_ALL_PREFIXES(FileDataSourceTest
, ReadData
);
43 FRIEND_TEST_ALL_PREFIXES(FileDataSourceTest
, Seek
);
45 // File handle. NULL if not initialized or an error occurs.
48 // Size of the file in bytes.
51 // Critical section that protects all of the DataSource methods to prevent
52 // a Stop from happening while in the middle of a file I/O operation.
53 // TODO(ralphl): Ideally this would use asynchronous I/O or we will know
54 // that we will block for a short period of time in reads. Otherwise, we can
55 // hang the pipeline Stop.
58 DISALLOW_COPY_AND_ASSIGN(FileDataSource
);
63 #endif // MEDIA_FILTERS_FILE_DATA_SOURCE_H_