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

Unified Diff: media/filters/ffmpeg_demuxer.h

Issue 10581050: Ensure media's buffered ranges always have a range that includes currentTime. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 6 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
Index: media/filters/ffmpeg_demuxer.h
diff --git a/media/filters/ffmpeg_demuxer.h b/media/filters/ffmpeg_demuxer.h
index dee6db350313d830f67e5a02e5f0144952e67c2a..3a9acbf8a8b0ed56d6ff7d5acf6fb86d0a5a03d5 100644
--- a/media/filters/ffmpeg_demuxer.h
+++ b/media/filters/ffmpeg_demuxer.h
@@ -47,11 +47,14 @@ class BitstreamConverter;
class FFmpegDemuxer;
class ScopedPtrAVFreePacket;
+typedef base::Callback<void(base::TimeDelta, base::TimeDelta)> NotifyBufferedCB;
+
class FFmpegDemuxerStream : public DemuxerStream {
public:
// Keeps a copy of |demuxer| and initializes itself using information
// inside |stream|. Both parameters must outlive |this|.
- FFmpegDemuxerStream(FFmpegDemuxer* demuxer, AVStream* stream);
+ FFmpegDemuxerStream(const NotifyBufferedCB& notify_buffered_cb_,
+ FFmpegDemuxer* demuxer, AVStream* stream);
// Returns true is this stream has pending reads, false otherwise.
//
@@ -107,6 +110,7 @@ class FFmpegDemuxerStream : public DemuxerStream {
static base::TimeDelta ConvertStreamTimestamp(const AVRational& time_base,
int64 timestamp);
+ NotifyBufferedCB notify_buffered_cb_;
FFmpegDemuxer* demuxer_;
AVStream* stream_;
AudioDecoderConfig audio_config_;
@@ -115,6 +119,7 @@ class FFmpegDemuxerStream : public DemuxerStream {
base::TimeDelta duration_;
bool discontinuous_;
bool stopped_;
+ base::TimeDelta last_packet_timestamp_;
typedef std::deque<scoped_refptr<DecoderBuffer> > BufferQueue;
BufferQueue buffer_queue_;
@@ -205,6 +210,11 @@ class MEDIA_EXPORT FFmpegDemuxer : public Demuxer, public FFmpegURLProtocol {
// read or kReadError in case of error.
virtual void SignalReadCompleted(int size);
+ // Callback for DemuxerStreams to notify us they've buffered a time range,
+ // which we then percolate upwards.
+ void NotifyBufferedRange(
+ int stream_id, base::TimeDelta start, base::TimeDelta end);
+
DemuxerHost* host_;
MessageLoop* message_loop_;
@@ -224,6 +234,9 @@ class MEDIA_EXPORT FFmpegDemuxer : public Demuxer, public FFmpegURLProtocol {
typedef std::vector<scoped_refptr<FFmpegDemuxerStream> > StreamVector;
StreamVector streams_;
+ // The times buffered by each stream.
+ std::vector<Ranges<base::TimeDelta> > buffered_times_;
+
// Reference to the data source. Asynchronous read requests are submitted to
// this object.
scoped_refptr<DataSource> data_source_;

Powered by Google App Engine
This is Rietveld 408576698