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

Side by Side Diff: content/renderer/media/webrtc_audio_renderer.cc

Issue 2437863004: Make more media APIs aware of |delay| and |delay_timestamp| (Closed)
Patch Set: Created 4 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/media/webrtc_audio_renderer.h" 5 #include "content/renderer/media/webrtc_audio_renderer.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 source_->AudioRendererThreadStopped(); 395 source_->AudioRendererThreadStopped();
396 } 396 }
397 PrepareSink(); 397 PrepareSink();
398 sink_->Start(); 398 sink_->Start();
399 sink_->Play(); // Not all the sinks play on start. 399 sink_->Play(); // Not all the sinks play on start.
400 400
401 callback.Run(media::OUTPUT_DEVICE_STATUS_OK); 401 callback.Run(media::OUTPUT_DEVICE_STATUS_OK);
402 } 402 }
403 403
404 int WebRtcAudioRenderer::Render(media::AudioBus* audio_bus, 404 int WebRtcAudioRenderer::Render(media::AudioBus* audio_bus,
405 uint32_t frames_delayed, 405 base::TimeDelta delay,
406 base::TimeTicks delay_timestamp,
406 uint32_t frames_skipped) { 407 uint32_t frames_skipped) {
407 DCHECK(sink_->CurrentThreadIsRenderingThread()); 408 DCHECK(sink_->CurrentThreadIsRenderingThread());
408 base::AutoLock auto_lock(lock_); 409 base::AutoLock auto_lock(lock_);
409 if (!source_) 410 if (!source_)
410 return 0; 411 return 0;
411 412
412 // TODO(grunell): Converting from frames to milliseconds will potentially lose 413 // TODO(grunell): Using of milliseconds will potentially lose
James West 2016/10/21 19:40:17 "Using of milliseconds" => "Using milliseconds"
413 // hundreds of microseconds which may cause audio video drift. Update 414 // hundreds of microseconds which may cause audio video drift. Update
414 // this class and all usage of render delay msec -> frames (possibly even 415 // this class and all usage of render delay msec -> frames (possibly even
415 // using a double type for frames). See http://crbug.com/586540 416 // using a double type for frames). See http://crbug.com/586540
416 uint32_t audio_delay_milliseconds = static_cast<double>(frames_delayed) * 417 int64_t audio_delay_milliseconds = delay.InMilliseconds();
miu 2016/10/23 01:19:15 No need to create a local variable here. Just assi
Mikhail 2016/10/24 19:50:23 Done.
miu 2016/10/24 22:45:52 Thanks for the "bonus" change! :)
417 base::Time::kMillisecondsPerSecond /
418 sink_params_.sample_rate();
419 418
420 DVLOG(2) << "WebRtcAudioRenderer::Render()"; 419 DVLOG(2) << "WebRtcAudioRenderer::Render()";
421 DVLOG(2) << "audio_delay_milliseconds: " << audio_delay_milliseconds; 420 DVLOG(2) << "audio_delay_milliseconds: " << audio_delay_milliseconds;
422 421
423 DCHECK_LE(audio_delay_milliseconds, static_cast<uint32_t>(INT_MAX)); 422 DCHECK_LE(audio_delay_milliseconds, static_cast<uint32_t>(INT_MAX));
424 audio_delay_milliseconds_ = static_cast<int>(audio_delay_milliseconds); 423 audio_delay_milliseconds_ = static_cast<int>(audio_delay_milliseconds);
425 424
426 // If there are skipped frames, pull and throw away the same amount. We always 425 // If there are skipped frames, pull and throw away the same amount. We always
427 // pull 10 ms of data from the source (see PrepareSink()), so the fifo is only 426 // pull 10 ms of data from the source (see PrepareSink()), so the fifo is only
428 // required if the number of frames to drop doesn't correspond to 10 ms. 427 // required if the number of frames to drop doesn't correspond to 10 ms.
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 sink_params_ = new_sink_params; 667 sink_params_ = new_sink_params;
669 } 668 }
670 669
671 // Specify the latency info to be passed to the browser side. 670 // Specify the latency info to be passed to the browser side.
672 new_sink_params.set_latency_tag(AudioDeviceFactory::GetSourceLatencyType( 671 new_sink_params.set_latency_tag(AudioDeviceFactory::GetSourceLatencyType(
673 AudioDeviceFactory::AudioDeviceFactory::kSourceWebRtc)); 672 AudioDeviceFactory::AudioDeviceFactory::kSourceWebRtc));
674 sink_->Initialize(new_sink_params, this); 673 sink_->Initialize(new_sink_params, this);
675 } 674 }
676 675
677 } // namespace content 676 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698