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 // Implements a Demuxer that can switch among different data sources mid-stream. | 5 // Implements a Demuxer that can switch among different data sources mid-stream. |
6 // Uses FFmpegDemuxer under the covers, so see the caveats at the top of | 6 // Uses FFmpegDemuxer under the covers, so see the caveats at the top of |
7 // ffmpeg_demuxer.h. | 7 // ffmpeg_demuxer.h. |
8 | 8 |
9 #include "media/filters/chunk_demuxer.h" | 9 #include "media/filters/chunk_demuxer.h" |
10 | 10 |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
217 if (buffers_.empty()) | 217 if (buffers_.empty()) |
218 return false; | 218 return false; |
219 | 219 |
220 *timestamp = buffers_.back()->GetTimestamp(); | 220 *timestamp = buffers_.back()->GetTimestamp(); |
221 return true; | 221 return true; |
222 } | 222 } |
223 | 223 |
224 // Helper function that makes sure |read_callback| runs on |message_loop|. | 224 // Helper function that makes sure |read_callback| runs on |message_loop|. |
225 static void RunOnMessageLoop(const DemuxerStream::ReadCallback& read_callback, | 225 static void RunOnMessageLoop(const DemuxerStream::ReadCallback& read_callback, |
226 MessageLoop* message_loop, | 226 MessageLoop* message_loop, |
227 Buffer* buffer) { | 227 const scoped_refptr<Buffer>& buffer) { |
228 if (MessageLoop::current() != message_loop) { | 228 if (MessageLoop::current() != message_loop) { |
229 message_loop->PostTask(FROM_HERE, base::Bind( | 229 message_loop->PostTask(FROM_HERE, base::Bind( |
230 &RunOnMessageLoop, read_callback, message_loop, | 230 &RunOnMessageLoop, read_callback, message_loop, buffer)); |
231 scoped_refptr<Buffer>(buffer))); | |
232 return; | 231 return; |
233 } | 232 } |
234 | 233 |
235 read_callback.Run(buffer); | 234 read_callback.Run(buffer); |
236 } | 235 } |
237 | 236 |
238 // DemuxerStream methods. | 237 // DemuxerStream methods. |
239 void ChunkDemuxerStream::Read(const ReadCallback& read_callback) { | 238 void ChunkDemuxerStream::Read(const ReadCallback& read_callback) { |
240 scoped_refptr<Buffer> buffer; | 239 scoped_refptr<Buffer> buffer; |
241 | 240 |
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
739 base::AutoUnlock auto_unlock(lock_); | 738 base::AutoUnlock auto_unlock(lock_); |
740 if (cb.is_null()) { | 739 if (cb.is_null()) { |
741 host()->SetError(error); | 740 host()->SetError(error); |
742 return; | 741 return; |
743 } | 742 } |
744 cb.Run(error); | 743 cb.Run(error); |
745 } | 744 } |
746 } | 745 } |
747 | 746 |
748 } // namespace media | 747 } // namespace media |
OLD | NEW |