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

Unified Diff: media/blink/buffered_data_source_host_impl.h

Issue 2796193002: fix canplaythrough (Closed)
Patch Set: kSpecCompliantCanPlayThrough Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/base/media_switches.cc ('k') | media/blink/buffered_data_source_host_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/blink/buffered_data_source_host_impl.h
diff --git a/media/blink/buffered_data_source_host_impl.h b/media/blink/buffered_data_source_host_impl.h
index 7dc39ea331a6ab447e0998e6ca19ce10e254acdf..5f37f762d131ac1108fa0a6e7bf610682abf4aba 100644
--- a/media/blink/buffered_data_source_host_impl.h
+++ b/media/blink/buffered_data_source_host_impl.h
@@ -6,8 +6,12 @@
#define MEDIA_BLINK_BUFFERED_DATA_SOURCE_HOST_IMPL_H_
#include <stdint.h>
+#include <deque>
+#include "base/callback.h"
+#include "base/gtest_prod_util.h"
#include "base/macros.h"
+#include "base/time/tick_clock.h"
#include "base/time/time.h"
#include "media/base/ranges.h"
#include "media/blink/interval_map.h"
@@ -35,7 +39,8 @@ class MEDIA_BLINK_EXPORT BufferedDataSourceHost {
class MEDIA_BLINK_EXPORT BufferedDataSourceHostImpl
: public BufferedDataSourceHost {
public:
- BufferedDataSourceHostImpl();
+ BufferedDataSourceHostImpl(base::Closure progress_cb,
+ base::TickClock* tick_clock);
~BufferedDataSourceHostImpl() override;
// BufferedDataSourceHost implementation.
@@ -50,7 +55,23 @@ class MEDIA_BLINK_EXPORT BufferedDataSourceHostImpl
bool DidLoadingProgress();
+ // Returns true if we have enough buffered bytes to play from now
+ // until the end of media
+ bool CanPlayThrough(base::TimeDelta current_position,
+ base::TimeDelta media_duration,
+ double playback_rate) const;
+
+ // Caller must make sure |tick_clock| is valid for lifetime of this object.
+ void SetTickClockForTest(base::TickClock* tick_clock);
+
private:
+ // Returns number of bytes not yet loaded in the given interval.
+ int64_t UnloadedBytesInInterval(const Interval<int64_t>& interval) const;
+
+ // Returns an estimate of the download rate.
+ // Returns 0.0 if an estimate cannot be made.
+ double DownloadRate() const;
+
// Total size of the data source.
int64_t total_bytes_;
@@ -62,6 +83,16 @@ class MEDIA_BLINK_EXPORT BufferedDataSourceHostImpl
// DidLoadingProgress().
bool did_loading_progress_;
+ // Contains how much we had downloaded at a given time.
+ // Pruned to contain roughly the last 10 seconds of data.
+ std::deque<std::pair<base::TimeTicks, uint64_t>> download_history_;
+ base::Closure progress_cb_;
+
+ base::TickClock* tick_clock_;
+
+ FRIEND_TEST_ALL_PREFIXES(BufferedDataSourceHostImplTest, CanPlayThrough);
+ FRIEND_TEST_ALL_PREFIXES(BufferedDataSourceHostImplTest,
+ CanPlayThroughSmallAdvances);
DISALLOW_COPY_AND_ASSIGN(BufferedDataSourceHostImpl);
};
« no previous file with comments | « media/base/media_switches.cc ('k') | media/blink/buffered_data_source_host_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698