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