blob: 84780d0c635cf23562dd24b7b25c7f2a339a8536 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MEDIA_CAST_TRANSPORT_TRANSPORT_AUDIO_SENDER_H_
#define MEDIA_CAST_TRANSPORT_TRANSPORT_AUDIO_SENDER_H_
#include "base/callback.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/threading/non_thread_safe.h"
#include "media/cast/transport/rtp_sender/rtp_sender.h"
#include "media/cast/transport/utility/transport_encryption_handler.h"
namespace media {
namespace cast {
namespace transport {
class PacedSender;
// It's only called from the main cast transport thread.
class TransportAudioSender : public base::NonThreadSafe {
public:
TransportAudioSender(
const CastTransportAudioConfig& config,
base::TickClock* clock,
const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner,
PacedSender* const paced_packet_sender);
virtual ~TransportAudioSender();
// Handles the encoded audio frames to be processed.
// Frames will be encrypted, packetized and transmitted to the network.
void SendFrame(const EncodedFrame& audio_frame);
// Retransmision request.
void ResendPackets(
const MissingFramesAndPacketsMap& missing_frames_and_packets);
size_t send_packet_count() const { return rtp_sender_.send_packet_count(); }
size_t send_octet_count() const { return rtp_sender_.send_octet_count(); }
uint32 ssrc() const { return rtp_sender_.ssrc(); }
bool initialized() const { return initialized_; }
private:
friend class LocalRtcpAudioSenderFeedback;
// Caller must allocate the destination |encrypted_frame|. The data member
// will be resized to hold the encrypted size.
bool EncryptAudioFrame(const EncodedFrame& audio_frame,
EncodedFrame* encrypted_frame);
RtpSender rtp_sender_;
TransportEncryptionHandler encryptor_;
bool initialized_;
DISALLOW_IMPLICIT_CONSTRUCTORS(TransportAudioSender);
};
} // namespace transport
} // namespace cast
} // namespace media
#endif // MEDIA_CAST_TRANSPORT_TRANSPORT_AUDIO_SENDER_H_