#include "base/basictypes.h"
#include "base/callback.h"
+#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "media/cast/cast_config.h"
#include "media/cast/cast_environment.h"
#include "media/cast/cast_receiver.h"
-#include "media/cast/rtcp/rtcp.h" // RtcpCastMessage
+#include "media/cast/rtcp/receiver_rtcp_event_subscriber.h"
+#include "media/cast/rtcp/rtcp.h" // RtcpCastMessage
#include "media/cast/rtp_receiver/rtp_receiver_defines.h" // RtpCastHeader
-
-namespace crypto {
-class Encryptor;
-class SymmetricKey;
-}
+#include "media/cast/transport/utility/transport_encryption_handler.h"
namespace media {
namespace cast {
// Extract a raw audio frame from the cast receiver.
// Actual decoding will be preformed on a designated audio_decoder thread.
- void GetRawAudioFrame(int number_of_10ms_blocks,
- int desired_frequency,
+ void GetRawAudioFrame(int number_of_10ms_blocks, int desired_frequency,
const AudioFrameDecodedCallback& callback);
// Extract an encoded audio frame from the cast receiver.
void GetEncodedAudioFrame(const AudioFrameEncodedCallback& callback);
// Should only be called from the main cast thread.
- void IncomingPacket(const uint8* packet, size_t length,
- const base::Closure callback);
+ void IncomingPacket(scoped_ptr<Packet> packet);
protected:
- void IncomingParsedRtpPacket(const uint8* payload_data,
- size_t payload_size,
+ void IncomingParsedRtpPacket(const uint8* payload_data, size_t payload_size,
const RtpCastHeader& rtp_header);
+
private:
friend class LocalRtpAudioData;
friend class LocalRtpAudioFeedback;
bool PostEncodedAudioFrame(
const AudioFrameEncodedCallback& callback,
- uint32 rtp_timestamp,
bool next_frame,
scoped_ptr<transport::EncodedAudioFrame>* encoded_frame);
// Actual decoding implementation - should be called under the audio decoder
// thread.
- void DecodeAudioFrameThread(int number_of_10ms_blocks,
- int desired_frequency,
+ void DecodeAudioFrameThread(int number_of_10ms_blocks, int desired_frequency,
const AudioFrameDecodedCallback callback);
void ReturnDecodedFrameWithPlayoutDelay(
scoped_ptr<PcmAudioFrame> audio_frame, uint32 rtp_timestamp,
void SendNextCastMessage();
scoped_refptr<CastEnvironment> cast_environment_;
+
+ // Subscribes to raw events.
+ // Processes raw audio events to be sent over to the cast sender via RTCP.
+ ReceiverRtcpEventSubscriber event_subscriber_;
+
base::WeakPtrFactory<AudioReceiver> weak_factory_;
const transport::AudioCodec codec_;
base::TimeDelta time_offset_;
base::TimeTicks time_first_incoming_packet_;
uint32 first_incoming_rtp_timestamp_;
- scoped_ptr<crypto::Encryptor> decryptor_;
- scoped_ptr<crypto::SymmetricKey> decryption_key_;
- std::string iv_mask_;
+ transport::TransportEncryptionHandler decryptor_;
base::TimeTicks last_playout_time_;
std::list<AudioFrameEncodedCallback> queued_encoded_callbacks_;
std::list<DecodedAudioCallbackData> queued_decoded_callbacks_;
+
+ DISALLOW_COPY_AND_ASSIGN(AudioReceiver);
};
} // namespace cast