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

Unified Diff: media/audio/audio_output_resampler.cc

Issue 2582703003: Audio output debug recording. (Closed)
Patch Set: Code review. Created 3 years, 11 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/audio/audio_output_resampler.cc
diff --git a/media/audio/audio_output_resampler.cc b/media/audio/audio_output_resampler.cc
index 9439a634fcdb45a6e38d32768662c8310a5c888e..97e9efe7c0e2ef42419977268a53e319a88c31f1 100644
--- a/media/audio/audio_output_resampler.cc
+++ b/media/audio/audio_output_resampler.cc
@@ -33,7 +33,8 @@ class OnMoreDataConverter
public AudioConverter::InputCallback {
public:
OnMoreDataConverter(const AudioParameters& input_params,
- const AudioParameters& output_params);
+ const AudioParameters& output_params,
+ std::unique_ptr<AudioDebugRecorder> debug_recorder);
~OnMoreDataConverter() override;
// AudioSourceCallback interface.
@@ -54,6 +55,8 @@ class OnMoreDataConverter
bool error_occurred() const { return error_occurred_; }
+ const AudioParameters& output_params() const { return output_params_; }
+
private:
// AudioConverter::InputCallback implementation.
double ProvideInput(AudioBus* audio_bus, uint32_t frames_delayed) override;
@@ -80,9 +83,14 @@ class OnMoreDataConverter
// stream has been stopped.
bool error_occurred_;
- // Information about input and output buffer sizes to be traced.
+ // Information about input buffer sizes to be traced.
const int input_buffer_size_;
- const int output_buffer_size_;
+
+ // Output parameters used for buffer size tracing and for users to get.
+ const AudioParameters output_params_;
+
+ // For audio debug recordings.
+ std::unique_ptr<AudioDebugRecorder> debug_recorder_;
DISALLOW_COPY_AND_ASSIGN(OnMoreDataConverter);
};
@@ -215,11 +223,14 @@ void AudioOutputResampler::SetupFallbackParams() {
#endif
}
-AudioOutputResampler::AudioOutputResampler(AudioManager* audio_manager,
- const AudioParameters& input_params,
- const AudioParameters& output_params,
- const std::string& output_device_id,
- const base::TimeDelta& close_delay)
+AudioOutputResampler::AudioOutputResampler(
+ AudioManager* audio_manager,
+ const AudioParameters& input_params,
+ const AudioParameters& output_params,
+ const std::string& output_device_id,
+ base::TimeDelta close_delay,
+ const RegisterDebugRecordingSourceCallback&
+ register_debug_recording_source_callback)
: AudioOutputDispatcher(audio_manager, input_params, output_device_id),
close_delay_(close_delay),
output_params_(output_params),
@@ -230,6 +241,8 @@ AudioOutputResampler::AudioOutputResampler(AudioManager* audio_manager,
base::Bind(&AudioOutputResampler::Reinitialize,
base::Unretained(this)),
false),
+ register_debug_recording_source_callback_(
+ register_debug_recording_source_callback),
weak_factory_(this) {
DCHECK(input_params.IsValid());
DCHECK(output_params.IsValid());
@@ -341,7 +354,10 @@ bool AudioOutputResampler::StartStream(
OnMoreDataConverter* resampler_callback = nullptr;
CallbackMap::iterator it = callbacks_.find(stream_proxy);
if (it == callbacks_.end()) {
- resampler_callback = new OnMoreDataConverter(params_, output_params_);
+ std::unique_ptr<AudioDebugRecorder> debug_recorder =
+ register_debug_recording_source_callback_.Run(output_params_);
+ resampler_callback = new OnMoreDataConverter(params_, output_params_,
+ std::move(debug_recorder));
callbacks_[stream_proxy] =
base::WrapUnique<OnMoreDataConverter>(resampler_callback);
} else {
@@ -406,10 +422,15 @@ void AudioOutputResampler::StopStreamInternal(
// call above.
if (callback->error_occurred())
dispatcher_->CloseAllIdleStreams();
+
+ // TODO BEFORE COMMIT: I think we need to clear the recorder wrapper here and
+ // register again at start. Seems like converters are re-used.
o1ka 2017/01/31 11:00:11 Please figure this out. Now we register recording
Henrik Grunell 2017/02/08 11:29:38 I've looked into this now. We should unregister wh
}
-OnMoreDataConverter::OnMoreDataConverter(const AudioParameters& input_params,
- const AudioParameters& output_params)
+OnMoreDataConverter::OnMoreDataConverter(
+ const AudioParameters& input_params,
+ const AudioParameters& output_params,
+ std::unique_ptr<AudioDebugRecorder> debug_recorder)
: io_ratio_(static_cast<double>(input_params.GetBytesPerSecond()) /
output_params.GetBytesPerSecond()),
source_callback_(nullptr),
@@ -417,7 +438,8 @@ OnMoreDataConverter::OnMoreDataConverter(const AudioParameters& input_params,
audio_converter_(input_params, output_params, false),
error_occurred_(false),
input_buffer_size_(input_params.frames_per_buffer()),
- output_buffer_size_(output_params.frames_per_buffer()) {
+ output_params_(output_params),
+ debug_recorder_(std::move(debug_recorder)) {
RecordRebufferingStats(input_params, output_params);
}
@@ -449,11 +471,15 @@ int OnMoreDataConverter::OnMoreData(base::TimeDelta delay,
int /* prior_frames_skipped */,
AudioBus* dest) {
TRACE_EVENT2("audio", "OnMoreDataConverter::OnMoreData", "input buffer size",
- input_buffer_size_, "output buffer size", output_buffer_size_);
+ input_buffer_size_, "output buffer size",
+ output_params_.frames_per_buffer());
current_delay_ = delay;
current_delay_timestamp_ = delay_timestamp;
audio_converter_.Convert(dest);
+ if (debug_recorder_)
o1ka 2017/01/31 11:00:11 If you are going to unregistered in Stop, there ma
Henrik Grunell 2017/02/08 11:29:38 See above comment - won't unregister in Stop().
+ debug_recorder_->OnData(dest);
+
// Always return the full number of frames requested, ProvideInput()
// will pad with silence if it wasn't able to acquire enough data.
return dest->frames();

Powered by Google App Engine
This is Rietveld 408576698