Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(30)

Side by Side Diff: media/filters/file_data_source.h

Issue 155469: Splitting media filter's Initialize() into Create() + callback and Seek() + callback. (Closed)
Patch Set: Fixed valgrind errors Created 11 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « media/filters/ffmpeg_video_decoder_unittest.cc ('k') | media/filters/file_data_source.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef MEDIA_FILTERS_FILE_DATA_SOURCE_H_ 5 #ifndef MEDIA_FILTERS_FILE_DATA_SOURCE_H_
6 #define MEDIA_FILTERS_FILE_DATA_SOURCE_H_ 6 #define MEDIA_FILTERS_FILE_DATA_SOURCE_H_
7 7
8 #include <string> 8 #include <string>
9 9
10 #include "base/lock.h" 10 #include "base/lock.h"
11 #include "media/base/filters.h" 11 #include "media/base/filters.h"
12 #include "testing/gtest/include/gtest/gtest_prod.h" 12 #include "testing/gtest/include/gtest/gtest_prod.h"
13 13
14 namespace media { 14 namespace media {
15 15
16 // Basic data source that treats the URL as a file path, and uses the file 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. 17 // system to read data for a media pipeline.
18 class FileDataSource : public DataSource { 18 class FileDataSource : public DataSource {
19 public: 19 public:
20 // Public method to get a filter factory for the FileDataSource. 20 // Public method to get a filter factory for the FileDataSource.
21 static FilterFactory* CreateFactory() { 21 static FilterFactory* CreateFactory() {
22 return new FilterFactoryImpl0<FileDataSource>(); 22 return new FilterFactoryImpl0<FileDataSource>();
23 } 23 }
24 24
25 // Implementation of MediaFilter. 25 // Implementation of MediaFilter.
26 virtual void Stop(); 26 virtual void Stop();
27 27
28 // Implementation of DataSource. 28 // Implementation of DataSource.
29 virtual bool Initialize(const std::string& url); 29 virtual void Initialize(const std::string& url, FilterCallback* callback);
30 virtual const MediaFormat& media_format(); 30 virtual const MediaFormat& media_format();
31 virtual size_t Read(uint8* data, size_t size); 31 virtual size_t Read(uint8* data, size_t size);
32 virtual bool GetPosition(int64* position_out); 32 virtual bool GetPosition(int64* position_out);
33 virtual bool SetPosition(int64 position); 33 virtual bool SetPosition(int64 position);
34 virtual bool GetSize(int64* size_out); 34 virtual bool GetSize(int64* size_out);
35 virtual bool IsSeekable(); 35 virtual bool IsSeekable();
36 36
37 private: 37 private:
38 // Only allow factories and tests to create this object. 38 // Only allow factories and tests to create this object.
39 // 39 //
40 // TODO(scherkus): I'm getting tired of these factories getting in the way 40 // TODO(scherkus): I'm getting tired of these factories getting in the way
41 // of my tests!!! 41 // of my tests!!!
42 FRIEND_TEST(FileDataSourceTest, OpenFile); 42 FRIEND_TEST(FileDataSourceTest, OpenFile);
43 FRIEND_TEST(FileDataSourceTest, ReadData); 43 FRIEND_TEST(FileDataSourceTest, ReadData);
44 FRIEND_TEST(FileDataSourceTest, Seek);
44 friend class FilterFactoryImpl0<FileDataSource>; 45 friend class FilterFactoryImpl0<FileDataSource>;
45 FileDataSource(); 46 FileDataSource();
46 virtual ~FileDataSource(); 47 virtual ~FileDataSource();
47 48
48 // File handle. NULL if not initialized or an error occurs. 49 // File handle. NULL if not initialized or an error occurs.
49 FILE* file_; 50 FILE* file_;
50 51
51 // Size of the file in bytes. 52 // Size of the file in bytes.
52 int64 file_size_; 53 int64 file_size_;
53 54
54 // Media format handed out by the DataSource::GetMediaFormat method. 55 // Media format handed out by the DataSource::GetMediaFormat method.
55 MediaFormat media_format_; 56 MediaFormat media_format_;
56 57
57 // Critical section that protects all of the DataSource methods to prevent 58 // Critical section that protects all of the DataSource methods to prevent
58 // a Stop from happening while in the middle of a file I/O operation. 59 // a Stop from happening while in the middle of a file I/O operation.
59 // TODO(ralphl): Ideally this would use asynchronous I/O or we will know 60 // TODO(ralphl): Ideally this would use asynchronous I/O or we will know
60 // that we will block for a short period of time in reads. Otherwise, we can 61 // that we will block for a short period of time in reads. Otherwise, we can
61 // hang the pipeline Stop. 62 // hang the pipeline Stop.
62 Lock lock_; 63 Lock lock_;
63 64
64 DISALLOW_COPY_AND_ASSIGN(FileDataSource); 65 DISALLOW_COPY_AND_ASSIGN(FileDataSource);
65 }; 66 };
66 67
67 } // namespace media 68 } // namespace media
68 69
69 #endif // MEDIA_FILTERS_FILE_DATA_SOURCE_H_ 70 #endif // MEDIA_FILTERS_FILE_DATA_SOURCE_H_
OLDNEW
« no previous file with comments | « media/filters/ffmpeg_video_decoder_unittest.cc ('k') | media/filters/file_data_source.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698