| Index: media/filters/ffmpeg_demuxer.cc
|
| ===================================================================
|
| --- media/filters/ffmpeg_demuxer.cc (revision 17376)
|
| +++ media/filters/ffmpeg_demuxer.cc (working copy)
|
| @@ -20,7 +20,6 @@
|
| AVPacketBuffer(AVPacket* packet, const base::TimeDelta& timestamp,
|
| const base::TimeDelta& duration)
|
| : packet_(packet) {
|
| - DCHECK(packet);
|
| SetTimestamp(timestamp);
|
| SetDuration(duration);
|
| }
|
| @@ -318,9 +317,9 @@
|
| scoped_ptr<AVPacket> packet(new AVPacket());
|
| int result = av_read_frame(format_context_.get(), packet.get());
|
| if (result < 0) {
|
| - // TODO(scherkus): handle end of stream by marking Buffer with the end
|
| - // of stream flag.
|
| - NOTIMPLEMENTED();
|
| + // If we have reached the end of stream, tell the downstream filters about
|
| + // the event.
|
| + StreamHasEnded();
|
| return;
|
| }
|
|
|
| @@ -373,6 +372,15 @@
|
| return false;
|
| }
|
|
|
| +void FFmpegDemuxer::StreamHasEnded() {
|
| + StreamVector::iterator iter;
|
| + for (iter = streams_.begin(); iter != streams_.end(); ++iter) {
|
| + AVPacket* packet = new AVPacket();
|
| + memset(packet, 0, sizeof(*packet));
|
| + (*iter)->EnqueuePacket(packet);
|
| + }
|
| +}
|
| +
|
| AVPacket* FFmpegDemuxer::ClonePacket(AVPacket* packet) {
|
| scoped_ptr<AVPacket> clone(new AVPacket());
|
| if (!clone.get() || av_new_packet(clone.get(), packet->size) < 0) {
|
|
|