Index: media/filters/ffmpeg_demuxer.cc |
=================================================================== |
--- media/filters/ffmpeg_demuxer.cc (revision 12628) |
+++ media/filters/ffmpeg_demuxer.cc (working copy) |
@@ -88,8 +88,11 @@ |
} |
FFmpegDemuxerStream::~FFmpegDemuxerStream() { |
- // Since |input_queue_| and |output_queue_| use scoped_refptr everything |
- // should get released. |
+ // Since |buffer_queue_| uses scoped_refptr everything will get released. |
+ while (!read_queue_.empty()) { |
+ delete read_queue_.front(); |
+ read_queue_.pop_front(); |
+ } |
} |
// static |
@@ -108,7 +111,7 @@ |
bool FFmpegDemuxerStream::HasPendingReads() { |
AutoLock auto_lock(lock_); |
- return !output_queue_.empty(); |
+ return !read_queue_.empty(); |
} |
void FFmpegDemuxerStream::EnqueuePacket(AVPacket* packet) { |
@@ -118,7 +121,7 @@ |
DCHECK(buffer); |
{ |
AutoLock auto_lock(lock_); |
- input_queue_.push_back(buffer); |
+ buffer_queue_.push_back(buffer); |
} |
FulfillPendingReads(); |
} |
@@ -127,11 +130,11 @@ |
return media_format_; |
} |
-void FFmpegDemuxerStream::Read(Assignable<Buffer>* buffer) { |
- DCHECK(buffer); |
+void FFmpegDemuxerStream::Read(Callback1<Buffer*>::Type* read_callback) { |
+ DCHECK(read_callback); |
{ |
AutoLock auto_lock(lock_); |
- output_queue_.push_back(scoped_refptr< Assignable<Buffer> >(buffer)); |
+ read_queue_.push_back(read_callback); |
} |
if (FulfillPendingReads()) { |
demuxer_->ScheduleDemux(); |
@@ -141,21 +144,20 @@ |
bool FFmpegDemuxerStream::FulfillPendingReads() { |
bool pending_reads = false; |
while (true) { |
- scoped_refptr<Buffer> buffer_in; |
- scoped_refptr< Assignable<Buffer> > buffer_out; |
+ scoped_refptr<Buffer> buffer; |
+ scoped_ptr<Callback1<Buffer*>::Type> read_callback; |
{ |
AutoLock auto_lock(lock_); |
- pending_reads = !output_queue_.empty(); |
- if (input_queue_.empty() || output_queue_.empty()) { |
+ pending_reads = !read_queue_.empty(); |
+ if (buffer_queue_.empty() || read_queue_.empty()) { |
break; |
} |
- buffer_in = input_queue_.front(); |
- buffer_out = output_queue_.front(); |
- input_queue_.pop_front(); |
- output_queue_.pop_front(); |
+ buffer = buffer_queue_.front(); |
+ read_callback.reset(read_queue_.front()); |
+ buffer_queue_.pop_front(); |
+ read_queue_.pop_front(); |
} |
- buffer_out->SetBuffer(buffer_in); |
- buffer_out->OnAssignment(); |
+ read_callback->Run(buffer); |
} |
return pending_reads; |
} |