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

Unified Diff: media/filters/ffmpeg_demuxer.cc

Issue 113611: Handle end of stream for media... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 7 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.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) {

Powered by Google App Engine
This is Rietveld 408576698