summaryrefslogtreecommitdiffstats
path: root/media/filters
diff options
context:
space:
mode:
authorhclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-17 20:04:29 +0000
committerhclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-17 20:04:29 +0000
commit40e5ac1f115a7905372d3414debaac63a5244886 (patch)
tree1613d237a6e69e0d1f95b1953b8b2572a9f5b52a /media/filters
parentb0c2bda2081e3627baac5814d6c66ef121b88515 (diff)
downloadchromium_src-40e5ac1f115a7905372d3414debaac63a5244886.zip
chromium_src-40e5ac1f115a7905372d3414debaac63a5244886.tar.gz
chromium_src-40e5ac1f115a7905372d3414debaac63a5244886.tar.bz2
andrew's patch
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11904 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/filters')
-rw-r--r--media/filters/audio_renderer_base.cc4
-rw-r--r--media/filters/audio_renderer_base.h2
-rw-r--r--media/filters/audio_renderer_impl.cc3
-rw-r--r--media/filters/ffmpeg_demuxer.cc20
-rw-r--r--media/filters/file_data_source.cc10
5 files changed, 30 insertions, 9 deletions
diff --git a/media/filters/audio_renderer_base.cc b/media/filters/audio_renderer_base.cc
index 548586e..af16271 100644
--- a/media/filters/audio_renderer_base.cc
+++ b/media/filters/audio_renderer_base.cc
@@ -35,7 +35,7 @@ void AudioRendererBase::Stop() {
OnStop();
AutoLock auto_lock(lock_);
- while (queue_.empty()) {
+ while (!queue_.empty()) {
queue_.front()->Release();
queue_.pop_front();
}
@@ -94,7 +94,7 @@ size_t AudioRendererBase::FillBuffer(uint8* dest, size_t len) {
Buffer* buffer = queue_.front();
// Determine how much to copy.
- const uint8* data = buffer->GetData() + data_offset_;
+ const char* data = buffer->GetData() + data_offset_;
size_t data_len = buffer->GetDataSize() - data_offset_;
data_len = std::min(len, data_len);
diff --git a/media/filters/audio_renderer_base.h b/media/filters/audio_renderer_base.h
index fd371e6..7d8d571 100644
--- a/media/filters/audio_renderer_base.h
+++ b/media/filters/audio_renderer_base.h
@@ -36,7 +36,7 @@ class AudioRendererBase : public AudioRenderer {
virtual bool Initialize(AudioDecoder* decoder);
// AssignableBuffer<AudioRendererBase, BufferInterface> implementation.
- virtual void OnAssignment(Buffer* buffer_in);
+ void OnAssignment(Buffer* buffer_in);
protected:
// The default maximum size of the queue.
diff --git a/media/filters/audio_renderer_impl.cc b/media/filters/audio_renderer_impl.cc
index 6412d38..7b66e14 100644
--- a/media/filters/audio_renderer_impl.cc
+++ b/media/filters/audio_renderer_impl.cc
@@ -29,7 +29,8 @@ bool AudioRendererImpl::IsMediaFormatSupported(
int channels;
int sample_rate;
int sample_bits;
- return ParseMediaFormat(media_format, &channels, &sample_rate, &sample_bits);
+ return AudioManager::GetAudioManager()->HasAudioDevices() &&
+ ParseMediaFormat(media_format, &channels, &sample_rate, &sample_bits);
}
void AudioRendererImpl::SetPlaybackRate(float playback_rate) {
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
index 472ec5bd..73f6da5 100644
--- a/media/filters/ffmpeg_demuxer.cc
+++ b/media/filters/ffmpeg_demuxer.cc
@@ -2,9 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "base/scoped_ptr.h"
#include "base/string_util.h"
#include "base/time.h"
+#include "base/scoped_ptr.h"
#include "media/base/filter_host.h"
#include "media/filters/ffmpeg_common.h"
#include "media/filters/ffmpeg_demuxer.h"
@@ -30,8 +30,8 @@ class AVPacketBuffer : public Buffer {
}
// Buffer implementation.
- virtual const uint8* GetData() const {
- return reinterpret_cast<const uint8*>(packet_->data);
+ virtual const char* GetData() const {
+ return reinterpret_cast<const char*>(packet_->data);
}
virtual size_t GetDataSize() const {
@@ -48,6 +48,8 @@ class AVPacketBuffer : public Buffer {
//
// FFmpegDemuxerStream
//
+AVCodecContext* g_audio_codec = NULL;
+AVCodecContext* g_video_codec = NULL;
FFmpegDemuxerStream::FFmpegDemuxerStream(FFmpegDemuxer* demuxer,
const AVStream& stream)
: demuxer_(demuxer) {
@@ -62,6 +64,12 @@ FFmpegDemuxerStream::FFmpegDemuxerStream(FFmpegDemuxer* demuxer,
stream.codec->channels);
media_format_.SetAsInteger(MediaFormat::kSampleRate,
stream.codec->sample_rate);
+ media_format_.SetAsInteger(MediaFormat::kBlockAlign,
+ stream.codec->block_align);
+ media_format_.SetAsInteger(MediaFormat::kFrameSize,
+ stream.codec->frame_size);
+ DCHECK(!g_audio_codec && stream.codec);
+ g_audio_codec = stream.codec;
break;
case CODEC_TYPE_VIDEO:
media_format_.SetAsString(MediaFormat::kMimeType,
@@ -70,6 +78,8 @@ FFmpegDemuxerStream::FFmpegDemuxerStream(FFmpegDemuxer* demuxer,
stream.codec->height);
media_format_.SetAsInteger(MediaFormat::kWidth,
stream.codec->width);
+ DCHECK(!g_video_codec && stream.codec);
+ g_video_codec = stream.codec;
break;
default:
NOTREACHED();
@@ -77,6 +87,10 @@ FFmpegDemuxerStream::FFmpegDemuxerStream(FFmpegDemuxer* demuxer,
}
int codec_id = static_cast<int>(stream.codec->codec_id);
media_format_.SetAsInteger(kFFmpegCodecID, codec_id);
+ media_format_.SetAsInteger(MediaFormat::kBitRate,
+ stream.codec->bit_rate);
+ media_format_.SetAsInteger(MediaFormat::kBitsPerCodedSample,
+ stream.codec->bits_per_coded_sample);
// Calculate the time base and duration in microseconds.
int64 time_base_us = static_cast<int64>(av_q2d(stream.time_base) *
diff --git a/media/filters/file_data_source.cc b/media/filters/file_data_source.cc
index 854fea2..c0abe6a 100644
--- a/media/filters/file_data_source.cc
+++ b/media/filters/file_data_source.cc
@@ -22,8 +22,14 @@ FileDataSource::~FileDataSource() {
bool FileDataSource::Initialize(const std::string& url) {
DCHECK(!file_);
+ std::string url_clean;
+ if (url.find("file:///") == 0) {
+ url_clean = url.substr(arraysize("file:///") - 1);
+ } else {
+ url_clean = url;
+ }
#if defined(OS_WIN)
- FilePath file_path(UTF8ToWide(url));
+ FilePath file_path(UTF8ToWide(url_clean));
#else
FilePath file_path(url);
#endif
@@ -37,7 +43,7 @@ bool FileDataSource::Initialize(const std::string& url) {
}
media_format_.SetAsString(MediaFormat::kMimeType,
mime_type::kApplicationOctetStream);
- media_format_.SetAsString(MediaFormat::kURL, url);
+ media_format_.SetAsString(MediaFormat::kURL, url_clean);
host_->SetTotalBytes(file_size_);
host_->SetBufferedBytes(file_size_);
host_->InitializationComplete();