OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 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 #include "webkit/glue/media/buffered_data_source.h" | 5 #include "webkit/glue/media/buffered_data_source.h" |
6 | 6 |
7 #include "media/base/filter_host.h" | 7 #include "media/base/filter_host.h" |
| 8 #include "media/base/media_log.h" |
8 #include "net/base/net_errors.h" | 9 #include "net/base/net_errors.h" |
9 #include "webkit/glue/media/web_data_source_factory.h" | 10 #include "webkit/glue/media/web_data_source_factory.h" |
10 #include "webkit/glue/webkit_glue.h" | 11 #include "webkit/glue/webkit_glue.h" |
11 | 12 |
12 using WebKit::WebFrame; | 13 using WebKit::WebFrame; |
13 | 14 |
14 namespace webkit_glue { | 15 namespace webkit_glue { |
15 | 16 |
16 // BufferedDataSource has an intermediate buffer, this value governs the initial | 17 // BufferedDataSource has an intermediate buffer, this value governs the initial |
17 // size of that buffer. It is set to 32KB because this is a typical read size | 18 // size of that buffer. It is set to 32KB because this is a typical read size |
18 // of FFmpeg. | 19 // of FFmpeg. |
19 static const int kInitialReadBufferSize = 32768; | 20 static const int kInitialReadBufferSize = 32768; |
20 | 21 |
21 // Number of cache misses we allow for a single Read() before signalling an | 22 // Number of cache misses we allow for a single Read() before signalling an |
22 // error. | 23 // error. |
23 static const int kNumCacheMissRetries = 3; | 24 static const int kNumCacheMissRetries = 3; |
24 | 25 |
25 static WebDataSource* NewBufferedDataSource(MessageLoop* render_loop, | 26 static WebDataSource* NewBufferedDataSource(MessageLoop* render_loop, |
26 WebKit::WebFrame* frame) { | 27 WebKit::WebFrame* frame, |
27 return new BufferedDataSource(render_loop, frame); | 28 media::MediaLog* media_log) { |
| 29 return new BufferedDataSource(render_loop, frame, media_log); |
28 } | 30 } |
29 | 31 |
30 // static | 32 // static |
31 media::DataSourceFactory* BufferedDataSource::CreateFactory( | 33 media::DataSourceFactory* BufferedDataSource::CreateFactory( |
32 MessageLoop* render_loop, | 34 MessageLoop* render_loop, |
33 WebKit::WebFrame* frame, | 35 WebKit::WebFrame* frame, |
| 36 media::MediaLog* media_log, |
34 WebDataSourceBuildObserverHack* build_observer) { | 37 WebDataSourceBuildObserverHack* build_observer) { |
35 return new WebDataSourceFactory(render_loop, frame, &NewBufferedDataSource, | 38 return new WebDataSourceFactory(render_loop, frame, media_log, |
36 build_observer); | 39 &NewBufferedDataSource, build_observer); |
37 } | 40 } |
38 | 41 |
39 BufferedDataSource::BufferedDataSource( | 42 BufferedDataSource::BufferedDataSource( |
40 MessageLoop* render_loop, | 43 MessageLoop* render_loop, |
41 WebFrame* frame) | 44 WebFrame* frame, |
| 45 media::MediaLog* media_log) |
42 : total_bytes_(kPositionNotSpecified), | 46 : total_bytes_(kPositionNotSpecified), |
43 buffered_bytes_(0), | 47 buffered_bytes_(0), |
44 loaded_(false), | 48 loaded_(false), |
45 streaming_(false), | 49 streaming_(false), |
46 frame_(frame), | 50 frame_(frame), |
47 loader_(NULL), | 51 loader_(NULL), |
48 network_activity_(false), | 52 network_activity_(false), |
49 initialize_callback_(NULL), | 53 initialize_callback_(NULL), |
50 read_callback_(NULL), | 54 read_callback_(NULL), |
51 read_position_(0), | 55 read_position_(0), |
52 read_size_(0), | 56 read_size_(0), |
53 read_buffer_(NULL), | 57 read_buffer_(NULL), |
54 intermediate_read_buffer_(new uint8[kInitialReadBufferSize]), | 58 intermediate_read_buffer_(new uint8[kInitialReadBufferSize]), |
55 intermediate_read_buffer_size_(kInitialReadBufferSize), | 59 intermediate_read_buffer_size_(kInitialReadBufferSize), |
56 render_loop_(render_loop), | 60 render_loop_(render_loop), |
57 stop_signal_received_(false), | 61 stop_signal_received_(false), |
58 stopped_on_render_loop_(false), | 62 stopped_on_render_loop_(false), |
59 media_is_paused_(true), | 63 media_is_paused_(true), |
60 media_has_played_(false), | 64 media_has_played_(false), |
61 preload_(media::METADATA), | 65 preload_(media::METADATA), |
62 using_range_request_(true), | 66 using_range_request_(true), |
63 cache_miss_retries_left_(kNumCacheMissRetries) { | 67 cache_miss_retries_left_(kNumCacheMissRetries), |
| 68 media_log_(media_log) { |
64 } | 69 } |
65 | 70 |
66 BufferedDataSource::~BufferedDataSource() {} | 71 BufferedDataSource::~BufferedDataSource() {} |
67 | 72 |
68 // A factory method to create BufferedResourceLoader using the read parameters. | 73 // A factory method to create BufferedResourceLoader using the read parameters. |
69 // This method can be overrided to inject mock BufferedResourceLoader object | 74 // This method can be overrided to inject mock BufferedResourceLoader object |
70 // for testing purpose. | 75 // for testing purpose. |
71 BufferedResourceLoader* BufferedDataSource::CreateResourceLoader( | 76 BufferedResourceLoader* BufferedDataSource::CreateResourceLoader( |
72 int64 first_byte_position, int64 last_byte_position) { | 77 int64 first_byte_position, int64 last_byte_position) { |
73 DCHECK(MessageLoop::current() == render_loop_); | 78 DCHECK(MessageLoop::current() == render_loop_); |
74 | 79 |
75 return new BufferedResourceLoader(url_, | 80 return new BufferedResourceLoader(url_, |
76 first_byte_position, | 81 first_byte_position, |
77 last_byte_position); | 82 last_byte_position, |
| 83 media_log_); |
78 } | 84 } |
79 | 85 |
80 void BufferedDataSource::set_host(media::FilterHost* host) { | 86 void BufferedDataSource::set_host(media::FilterHost* host) { |
81 DataSource::set_host(host); | 87 DataSource::set_host(host); |
82 | 88 |
83 if (loader_.get()) | 89 if (loader_.get()) |
84 UpdateHostState(); | 90 UpdateHostState(); |
85 } | 91 } |
86 | 92 |
87 void BufferedDataSource::Initialize(const std::string& url, | 93 void BufferedDataSource::Initialize(const std::string& url, |
(...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
625 | 631 |
626 if (streaming_) { | 632 if (streaming_) { |
627 filter_host->SetStreaming(true); | 633 filter_host->SetStreaming(true); |
628 } else { | 634 } else { |
629 filter_host->SetTotalBytes(total_bytes_); | 635 filter_host->SetTotalBytes(total_bytes_); |
630 filter_host->SetBufferedBytes(buffered_bytes_); | 636 filter_host->SetBufferedBytes(buffered_bytes_); |
631 } | 637 } |
632 } | 638 } |
633 | 639 |
634 } // namespace webkit_glue | 640 } // namespace webkit_glue |
OLD | NEW |