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

Unified Diff: media/cast/test/fake_media_source.cc

Issue 900913004: [cast/test] Use AudioConverter in FakeMediaSource to play back 6-channel WEBM's. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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/cast/test/fake_media_source.h ('k') | media/cast/test/sender.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/cast/test/fake_media_source.cc
diff --git a/media/cast/test/fake_media_source.cc b/media/cast/test/fake_media_source.cc
index f17a053f8dfaa23cbae74ae61373d62f6a3e5cb7..061478d37fc504e25dc8d3ad6e9ea8a938540c83 100644
--- a/media/cast/test/fake_media_source.cc
+++ b/media/cast/test/fake_media_source.cc
@@ -15,7 +15,6 @@
#include "media/base/audio_fifo.h"
#include "media/base/audio_timestamp_helper.h"
#include "media/base/media.h"
-#include "media/base/multi_channel_resampler.h"
#include "media/base/video_frame.h"
#include "media/base/video_util.h"
#include "media/cast/cast_sender.h"
@@ -31,8 +30,6 @@
namespace {
-static const int kAudioChannels = 2;
-static const int kAudioSamplingFrequency = 48000;
static const int kSoundFrequency = 440; // Frequency of sinusoid wave.
static const float kSoundVolume = 0.10f;
static const int kAudioFrameMs = 10; // Each audio frame is exactly 10ms.
@@ -69,9 +66,15 @@ namespace cast {
FakeMediaSource::FakeMediaSource(
scoped_refptr<base::SingleThreadTaskRunner> task_runner,
base::TickClock* clock,
+ const AudioSenderConfig& audio_config,
const VideoSenderConfig& video_config,
bool keep_frames)
: task_runner_(task_runner),
+ output_audio_params_(AudioParameters::AUDIO_PCM_LINEAR,
+ media::GuessChannelLayout(audio_config.channels),
+ audio_config.frequency,
+ 32,
+ audio_config.frequency / kAudioPacketsPerSecond),
video_config_(video_config),
keep_frames_(keep_frames),
variable_frame_size_mode_(false),
@@ -88,8 +91,9 @@ FakeMediaSource::FakeMediaSource(
video_first_pts_(0),
video_first_pts_set_(false),
weak_factory_(this) {
- audio_bus_factory_.reset(new TestAudioBusFactory(kAudioChannels,
- kAudioSamplingFrequency,
+ CHECK(output_audio_params_.IsValid());
+ audio_bus_factory_.reset(new TestAudioBusFactory(audio_config.channels,
+ audio_config.frequency,
kSoundFrequency,
kSoundVolume));
}
@@ -161,13 +165,14 @@ void FakeMediaSource::SetSourceFile(const base::FilePath& video_file,
LOG(WARNING) << "Found multiple audio streams.";
}
audio_stream_index_ = static_cast<int>(i);
- audio_params_.Reset(
+ source_audio_params_.Reset(
AudioParameters::AUDIO_PCM_LINEAR,
layout,
av_codec_context->channels,
av_codec_context->sample_rate,
8 * av_get_bytes_per_sample(av_codec_context->sample_fmt),
av_codec_context->sample_rate / kAudioPacketsPerSecond);
+ CHECK(source_audio_params_.IsValid());
LOG(INFO) << "Source file has audio.";
} else if (av_codec->type == AVMEDIA_TYPE_VIDEO) {
VideoFrame::Format format =
@@ -228,21 +233,18 @@ void FakeMediaSource::Start(scoped_refptr<AudioFrameInput> audio_frame_input,
}
// Send transcoding streams.
- audio_algo_.Initialize(audio_params_);
+ audio_algo_.Initialize(source_audio_params_);
audio_algo_.FlushBuffers();
- audio_fifo_input_bus_ =
- AudioBus::Create(
- audio_params_.channels(), audio_params_.frames_per_buffer());
+ audio_fifo_input_bus_ = AudioBus::Create(
+ source_audio_params_.channels(),
+ source_audio_params_.frames_per_buffer());
// Audio FIFO can carry all data fron AudioRendererAlgorithm.
audio_fifo_.reset(
- new AudioFifo(audio_params_.channels(),
+ new AudioFifo(source_audio_params_.channels(),
audio_algo_.QueueCapacity()));
- audio_resampler_.reset(new media::MultiChannelResampler(
- audio_params_.channels(),
- static_cast<double>(audio_params_.sample_rate()) /
- kAudioSamplingFrequency,
- audio_params_.frames_per_buffer(),
- base::Bind(&FakeMediaSource::ProvideData, weak_factory_.GetWeakPtr())));
+ audio_converter_.reset(new media::AudioConverter(
+ source_audio_params_, output_audio_params_, true));
+ audio_converter_->AddInput(this);
task_runner_->PostTask(
FROM_HERE,
base::Bind(&FakeMediaSource::SendNextFrame, weak_factory_.GetWeakPtr()));
@@ -462,7 +464,7 @@ void FakeMediaSource::DecodeAudio(ScopedAVPacket packet) {
// Not the frequency of the source file. This is because we
// increment the frame count by samples we sent.
audio_sent_ts_.reset(
- new AudioTimestampHelper(kAudioSamplingFrequency));
+ new AudioTimestampHelper(output_audio_params_.sample_rate()));
// For some files this is an invalid value.
base::TimeDelta base_ts;
audio_sent_ts_->SetBaseTimestamp(base_ts);
@@ -506,16 +508,15 @@ void FakeMediaSource::DecodeAudio(ScopedAVPacket packet) {
// Make sure there's enough data to resample audio.
if (audio_fifo_->frames() <
- 2 * audio_params_.sample_rate() / kAudioPacketsPerSecond) {
+ 2 * source_audio_params_.sample_rate() / kAudioPacketsPerSecond) {
continue;
}
scoped_ptr<media::AudioBus> resampled_bus(
media::AudioBus::Create(
- audio_params_.channels(),
- kAudioSamplingFrequency / kAudioPacketsPerSecond));
- audio_resampler_->Resample(resampled_bus->frames(),
- resampled_bus.get());
+ output_audio_params_.channels(),
+ output_audio_params_.sample_rate() / kAudioPacketsPerSecond));
+ audio_converter_->Convert(resampled_bus.get());
audio_bus_queue_.push(resampled_bus.release());
}
}
@@ -588,13 +589,15 @@ void FakeMediaSource::Decode(bool decode_audio) {
}
}
-void FakeMediaSource::ProvideData(int frame_delay,
- media::AudioBus* output_bus) {
+double FakeMediaSource::ProvideInput(media::AudioBus* output_bus,
+ base::TimeDelta buffer_delay) {
if (audio_fifo_->frames() >= output_bus->frames()) {
audio_fifo_->Consume(output_bus, 0, output_bus->frames());
+ return 1.0;
} else {
LOG(WARNING) << "Not enough audio data for resampling.";
output_bus->Zero();
+ return 0.0;
}
}
« no previous file with comments | « media/cast/test/fake_media_source.h ('k') | media/cast/test/sender.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698