Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / media / cast / transport / transport_audio_sender.cc
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
3 // found in the LICENSE file.
4
5 #include "media/cast/transport/transport_audio_sender.h"
6
7 #include "base/bind.h"
8 #include "base/logging.h"
9 #include "base/message_loop/message_loop.h"
10 #include "media/cast/transport/rtp_sender/rtp_sender.h"
11
12 namespace media {
13 namespace cast {
14 namespace transport {
15
16 TransportAudioSender::TransportAudioSender(
17     const CastTransportConfig& config,
18     base::TickClock* clock,
19     const scoped_refptr<base::TaskRunner>& transport_task_runner,
20     PacedSender* const paced_packet_sender)
21     : rtp_sender_(clock,
22                   config,
23                   true,
24                   transport_task_runner,
25                   paced_packet_sender),
26       encryptor_() {
27   initialized_ = encryptor_.Initialize(config.aes_key, config.aes_iv_mask);
28 }
29
30 TransportAudioSender::~TransportAudioSender() {}
31
32 void TransportAudioSender::InsertCodedAudioFrame(
33     const EncodedAudioFrame* audio_frame,
34     const base::TimeTicks& recorded_time) {
35   if (encryptor_.initialized()) {
36     EncodedAudioFrame encrypted_frame;
37     if (!EncryptAudioFrame(*audio_frame, &encrypted_frame)) {
38       return;
39     }
40     rtp_sender_.IncomingEncodedAudioFrame(&encrypted_frame, recorded_time);
41   } else {
42     rtp_sender_.IncomingEncodedAudioFrame(audio_frame, recorded_time);
43   }
44 }
45
46 bool TransportAudioSender::EncryptAudioFrame(
47     const EncodedAudioFrame& audio_frame,
48     EncodedAudioFrame* encrypted_frame) {
49   if (!encryptor_.Encrypt(
50            audio_frame.frame_id, audio_frame.data, &encrypted_frame->data))
51     return false;
52
53   encrypted_frame->codec = audio_frame.codec;
54   encrypted_frame->frame_id = audio_frame.frame_id;
55   encrypted_frame->rtp_timestamp = audio_frame.rtp_timestamp;
56   return true;
57 }
58
59 void TransportAudioSender::ResendPackets(
60     const MissingFramesAndPacketsMap& missing_frames_and_packets) {
61   rtp_sender_.ResendPackets(missing_frames_and_packets);
62 }
63
64 void TransportAudioSender::SubscribeAudioRtpStatsCallback(
65     const CastTransportRtpStatistics& callback) {
66   rtp_sender_.SubscribeRtpStatsCallback(callback);
67 }
68
69 }  // namespace transport
70 }  // namespace cast
71 }  // namespace media