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

Side by Side Diff: media/cast/sender/audio_sender.cc

Issue 605803004: [cast] Allow audio encoder implementations to specify the frame length. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Move inline namespace back inside media::cast to better match original file. Created 6 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
« no previous file with comments | « media/cast/sender/audio_encoder_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "media/cast/sender/audio_sender.h" 5 #include "media/cast/sender/audio_sender.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "media/cast/cast_defines.h" 10 #include "media/cast/cast_defines.h"
11 #include "media/cast/net/cast_transport_config.h" 11 #include "media/cast/net/cast_transport_config.h"
12 #include "media/cast/sender/audio_encoder.h" 12 #include "media/cast/sender/audio_encoder.h"
13 13
14 namespace media { 14 namespace media {
15 namespace cast { 15 namespace cast {
16 namespace {
17
18 // TODO(miu): This should be specified in AudioSenderConfig, but currently it is
19 // fixed to 100 FPS (i.e., 10 ms per frame), and AudioEncoder assumes this as
20 // well.
21 const int kAudioFrameRate = 100;
22
23 } // namespace
24 16
25 AudioSender::AudioSender(scoped_refptr<CastEnvironment> cast_environment, 17 AudioSender::AudioSender(scoped_refptr<CastEnvironment> cast_environment,
26 const AudioSenderConfig& audio_config, 18 const AudioSenderConfig& audio_config,
27 CastTransportSender* const transport_sender) 19 CastTransportSender* const transport_sender)
28 : FrameSender( 20 : FrameSender(cast_environment,
29 cast_environment, 21 true,
30 true, 22 transport_sender,
31 transport_sender, 23 base::TimeDelta::FromMilliseconds(audio_config.rtcp_interval),
32 base::TimeDelta::FromMilliseconds(audio_config.rtcp_interval), 24 audio_config.frequency,
33 audio_config.frequency, 25 audio_config.ssrc,
34 audio_config.ssrc, 26 0, // |max_frame_rate_| is set after encoder initialization.
35 kAudioFrameRate, 27 audio_config.min_playout_delay,
36 audio_config.min_playout_delay, 28 audio_config.max_playout_delay,
37 audio_config.max_playout_delay, 29 NewFixedCongestionControl(audio_config.bitrate)),
38 NewFixedCongestionControl(audio_config.bitrate)),
39 samples_in_encoder_(0), 30 samples_in_encoder_(0),
40 weak_factory_(this) { 31 weak_factory_(this) {
41 cast_initialization_status_ = STATUS_AUDIO_UNINITIALIZED; 32 cast_initialization_status_ = STATUS_AUDIO_UNINITIALIZED;
42 33
43 if (!audio_config.use_external_encoder) { 34 if (!audio_config.use_external_encoder) {
44 audio_encoder_.reset( 35 audio_encoder_.reset(
45 new AudioEncoder(cast_environment, 36 new AudioEncoder(cast_environment,
46 audio_config.channels, 37 audio_config.channels,
47 audio_config.frequency, 38 audio_config.frequency,
48 audio_config.bitrate, 39 audio_config.bitrate,
49 audio_config.codec, 40 audio_config.codec,
50 base::Bind(&AudioSender::OnEncodedAudioFrame, 41 base::Bind(&AudioSender::OnEncodedAudioFrame,
51 weak_factory_.GetWeakPtr(), 42 weak_factory_.GetWeakPtr(),
52 audio_config.bitrate))); 43 audio_config.bitrate)));
53 cast_initialization_status_ = audio_encoder_->InitializationResult(); 44 cast_initialization_status_ = audio_encoder_->InitializationResult();
54 } else { 45 } else {
55 NOTREACHED(); // No support for external audio encoding. 46 NOTREACHED(); // No support for external audio encoding.
56 cast_initialization_status_ = STATUS_AUDIO_UNINITIALIZED; 47 cast_initialization_status_ = STATUS_AUDIO_UNINITIALIZED;
57 } 48 }
58 49
50 // The number of samples per encoded audio frame depends on the codec and its
51 // initialization parameters. Now that we have an encoder, we can calculate
52 // the maximum frame rate.
53 max_frame_rate_ =
54 audio_config.frequency / audio_encoder_->GetSamplesPerFrame();
55
59 media::cast::CastTransportRtpConfig transport_config; 56 media::cast::CastTransportRtpConfig transport_config;
60 transport_config.ssrc = audio_config.ssrc; 57 transport_config.ssrc = audio_config.ssrc;
61 transport_config.feedback_ssrc = audio_config.incoming_feedback_ssrc; 58 transport_config.feedback_ssrc = audio_config.incoming_feedback_ssrc;
62 transport_config.rtp_payload_type = audio_config.rtp_payload_type; 59 transport_config.rtp_payload_type = audio_config.rtp_payload_type;
63 transport_config.aes_key = audio_config.aes_key; 60 transport_config.aes_key = audio_config.aes_key;
64 transport_config.aes_iv_mask = audio_config.aes_iv_mask; 61 transport_config.aes_iv_mask = audio_config.aes_iv_mask;
65 62
66 transport_sender->InitializeAudio( 63 transport_sender->InitializeAudio(
67 transport_config, 64 transport_config,
68 base::Bind(&AudioSender::OnReceivedCastFeedback, 65 base::Bind(&AudioSender::OnReceivedCastFeedback,
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); 111 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
115 112
116 samples_in_encoder_ -= audio_encoder_->GetSamplesPerFrame() + samples_skipped; 113 samples_in_encoder_ -= audio_encoder_->GetSamplesPerFrame() + samples_skipped;
117 DCHECK_GE(samples_in_encoder_, 0); 114 DCHECK_GE(samples_in_encoder_, 0);
118 115
119 SendEncodedFrame(encoder_bitrate, encoded_frame.Pass()); 116 SendEncodedFrame(encoder_bitrate, encoded_frame.Pass());
120 } 117 }
121 118
122 } // namespace cast 119 } // namespace cast
123 } // namespace media 120 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/sender/audio_encoder_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698