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

Unified Diff: media/filters/ffmpeg_demuxer.cc

Issue 42521: Ability for demuxer clients to get to FFmpeg's AVStream object exposed as an ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 9 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
« no previous file with comments | « media/filters/ffmpeg_demuxer.h ('k') | media/filters/ffmpeg_demuxer_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/filters/ffmpeg_demuxer.cc
===================================================================
--- media/filters/ffmpeg_demuxer.cc (revision 12463)
+++ media/filters/ffmpeg_demuxer.cc (working copy)
@@ -49,39 +49,40 @@
// FFmpegDemuxerStream
//
FFmpegDemuxerStream::FFmpegDemuxerStream(FFmpegDemuxer* demuxer,
- const AVStream& stream)
- : demuxer_(demuxer) {
+ AVStream* stream)
+ : demuxer_(demuxer),
+ av_stream_(stream) {
DCHECK(demuxer_);
// Determine our media format.
- switch (stream.codec->codec_type) {
+ switch (stream->codec->codec_type) {
case CODEC_TYPE_AUDIO:
media_format_.SetAsString(MediaFormat::kMimeType,
mime_type::kFFmpegAudio);
media_format_.SetAsInteger(MediaFormat::kChannels,
- stream.codec->channels);
+ stream->codec->channels);
media_format_.SetAsInteger(MediaFormat::kSampleRate,
- stream.codec->sample_rate);
+ stream->codec->sample_rate);
break;
case CODEC_TYPE_VIDEO:
media_format_.SetAsString(MediaFormat::kMimeType,
mime_type::kFFmpegVideo);
media_format_.SetAsInteger(MediaFormat::kHeight,
- stream.codec->height);
+ stream->codec->height);
media_format_.SetAsInteger(MediaFormat::kWidth,
- stream.codec->width);
+ stream->codec->width);
break;
default:
NOTREACHED();
break;
}
- int codec_id = static_cast<int>(stream.codec->codec_id);
+ int codec_id = static_cast<int>(stream->codec->codec_id);
media_format_.SetAsInteger(kFFmpegCodecID, codec_id);
// Calculate the time base and duration in microseconds.
- int64 time_base_us = static_cast<int64>(av_q2d(stream.time_base) *
+ int64 time_base_us = static_cast<int64>(av_q2d(stream->time_base) *
base::Time::kMicrosecondsPerSecond);
- int64 duration_us = static_cast<int64>(time_base_us * stream.duration);
+ int64 duration_us = static_cast<int64>(time_base_us * stream->duration);
time_base_ = base::TimeDelta::FromMicroseconds(time_base_us);
duration_ = base::TimeDelta::FromMicroseconds(duration_us);
}
@@ -91,6 +92,20 @@
// should get released.
}
+// static
+const char* FFmpegDemuxerStream::interface_id() {
+ return interface_id::kFFmpegDemuxerStream;
+}
+
+void* FFmpegDemuxerStream::QueryInterface(const char* id) {
+ DCHECK(id);
+ FFmpegDemuxerStream* interface_ptr = NULL;
+ if (0 == strcmp(id, interface_id())) {
+ interface_ptr = this;
+ }
+ return interface_ptr;
+}
+
bool FFmpegDemuxerStream::HasPendingReads() {
AutoLock auto_lock(lock_);
return !output_queue_.empty();
@@ -158,10 +173,6 @@
if (format_context_) {
av_free(format_context_);
}
- while (!streams_.empty()) {
- delete streams_.back();
- streams_.pop_back();
- }
}
void FFmpegDemuxer::ScheduleDemux() {
@@ -215,7 +226,7 @@
if (codec_type == CODEC_TYPE_AUDIO || codec_type == CODEC_TYPE_VIDEO) {
AVStream* stream = format_context_->streams[i];
FFmpegDemuxerStream* demuxer_stream
- = new FFmpegDemuxerStream(this, *stream);
+ = new FFmpegDemuxerStream(this, stream);
DCHECK(demuxer_stream);
streams_.push_back(demuxer_stream);
max_duration = std::max(max_duration, demuxer_stream->duration());
@@ -237,10 +248,10 @@
return streams_.size();
}
-DemuxerStream* FFmpegDemuxer::GetStream(int stream) {
+scoped_refptr<DemuxerStream> FFmpegDemuxer::GetStream(int stream) {
DCHECK(stream >= 0);
DCHECK(stream < static_cast<int>(streams_.size()));
- return streams_[stream];
+ return streams_[stream].get();
}
void FFmpegDemuxer::Demux() {
« no previous file with comments | « media/filters/ffmpeg_demuxer.h ('k') | media/filters/ffmpeg_demuxer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698