Chromium Code Reviews| Index: content/renderer/media/audio_track_recorder.cc |
| diff --git a/content/renderer/media/audio_track_recorder.cc b/content/renderer/media/audio_track_recorder.cc |
| index 2664d5351b6c48b8006ff1a93e6ba30623d19363..46e6b9adb94502d94b53e857afd89f41d0ce54d9 100644 |
| --- a/content/renderer/media/audio_track_recorder.cc |
| +++ b/content/renderer/media/audio_track_recorder.cc |
| @@ -109,9 +109,10 @@ class AudioTrackRecorder::AudioEncoder |
| void EncodeAudio(scoped_ptr<media::AudioBus> audio_bus, |
| const base::TimeTicks& capture_time); |
| + void set_paused(bool paused) { paused_ = paused; } |
| + |
| private: |
| friend class base::RefCountedThreadSafe<AudioEncoder>; |
| - |
| ~AudioEncoder() override; |
| bool is_initialized() const { return !!opus_encoder_; } |
| @@ -142,6 +143,9 @@ class AudioTrackRecorder::AudioEncoder |
| // Buffer for passing AudioBus data to OpusEncoder. |
| scoped_ptr<float[]> buffer_; |
| + // While |paused_|, AudioBuses are not encoded. |
| + bool paused_; |
| + |
| OpusEncoder* opus_encoder_; |
| DISALLOW_COPY_AND_ASSIGN(AudioEncoder); |
| @@ -152,6 +156,7 @@ AudioTrackRecorder::AudioEncoder::AudioEncoder( |
| int32_t bits_per_second) |
| : on_encoded_audio_cb_(on_encoded_audio_cb), |
| bits_per_second_(bits_per_second), |
| + paused_(false), |
| opus_encoder_(nullptr) { |
| // AudioEncoder is constructed on the thread that ATR lives on, but should |
| // operate only on the encoder thread after that. Reset |
| @@ -241,7 +246,7 @@ void AudioTrackRecorder::AudioEncoder::EncodeAudio( |
| DCHECK(!capture_time.is_null()); |
| DCHECK(converter_); |
| - if (!is_initialized()) |
| + if (!is_initialized() || paused_) |
| return; |
| // TODO(mcasas): Consider using a std::deque<scoped_ptr<AudioBus>> instead of |
| // an AudioFifo, to avoid copying data needlessly since we know the sizes of |
| @@ -278,7 +283,7 @@ double AudioTrackRecorder::AudioEncoder::ProvideInput( |
| void AudioTrackRecorder::AudioEncoder::DestroyExistingOpusEncoder() { |
| // We don't DCHECK that we're on the encoder thread here, as this could be |
| - // called from the dtor (main thread) or from OnSetForamt() (render thread); |
| + // called from the dtor (main thread) or from OnSetFormat() (encoder thread). |
| if (opus_encoder_) { |
| opus_encoder_destroy(opus_encoder_); |
| opus_encoder_ = nullptr; |
| @@ -336,4 +341,18 @@ void AudioTrackRecorder::OnData(const media::AudioBus& audio_bus, |
| base::Passed(&audio_data), capture_time)); |
| } |
| +void AudioTrackRecorder::Pause() { |
| + DCHECK(capture_thread_checker_.CalledOnValidThread()); |
|
mcasas
2016/03/22 17:56:57
s/capture_thread_checker_/main_render_thread_check
emircan
2016/03/22 18:09:30
Also revert the comment on l.286.
mcasas
2016/03/22 20:21:02
Discussed offline, the comment is correct now.
|
| + DCHECK(encoder_); |
| + encoder_thread_.task_runner()->PostTask( |
| + FROM_HERE, base::Bind(&AudioEncoder::set_paused, encoder_, true)); |
| +} |
| + |
| +void AudioTrackRecorder::Resume() { |
| + DCHECK(capture_thread_checker_.CalledOnValidThread()); |
| + DCHECK(encoder_); |
| + encoder_thread_.task_runner()->PostTask( |
| + FROM_HERE, base::Bind(&AudioEncoder::set_paused, encoder_, false)); |
| +} |
| + |
| } // namespace content |