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