| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 #ifndef MEDIA_CAST_AUDIO_RECEIVER_AUDIO_RECEIVER_H_ | 5 #ifndef MEDIA_CAST_AUDIO_RECEIVER_AUDIO_RECEIVER_H_ |
| 6 #define MEDIA_CAST_AUDIO_RECEIVER_AUDIO_RECEIVER_H_ | 6 #define MEDIA_CAST_AUDIO_RECEIVER_AUDIO_RECEIVER_H_ |
| 7 | 7 |
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 9 #include "base/callback.h" | 9 #include "base/callback.h" |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 // the configuration that was passed to the ctor. | 69 // the configuration that was passed to the ctor. |
| 70 // | 70 // |
| 71 // The given |callback| is guaranteed to be run at some point in the future, | 71 // The given |callback| is guaranteed to be run at some point in the future, |
| 72 // even if to respond with NULL at shutdown time. | 72 // even if to respond with NULL at shutdown time. |
| 73 void GetRawAudioFrame(const AudioFrameDecodedCallback& callback); | 73 void GetRawAudioFrame(const AudioFrameDecodedCallback& callback); |
| 74 | 74 |
| 75 // Request an encoded audio frame. | 75 // Request an encoded audio frame. |
| 76 // | 76 // |
| 77 // The given |callback| is guaranteed to be run at some point in the future, | 77 // The given |callback| is guaranteed to be run at some point in the future, |
| 78 // even if to respond with NULL at shutdown time. | 78 // even if to respond with NULL at shutdown time. |
| 79 void GetEncodedAudioFrame(const AudioFrameEncodedCallback& callback); | 79 void GetEncodedAudioFrame(const FrameEncodedCallback& callback); |
| 80 | 80 |
| 81 // Deliver another packet, possibly a duplicate, and possibly out-of-order. | 81 // Deliver another packet, possibly a duplicate, and possibly out-of-order. |
| 82 void IncomingPacket(scoped_ptr<Packet> packet); | 82 void IncomingPacket(scoped_ptr<Packet> packet); |
| 83 | 83 |
| 84 // Update target audio delay used to compute the playout time. Rtcp | 84 // Update target audio delay used to compute the playout time. Rtcp |
| 85 // will also be updated (will be included in all outgoing reports). | 85 // will also be updated (will be included in all outgoing reports). |
| 86 void SetTargetDelay(base::TimeDelta target_delay); | 86 void SetTargetDelay(base::TimeDelta target_delay); |
| 87 | 87 |
| 88 protected: | 88 protected: |
| 89 friend class AudioReceiverTest; // Invokes OnReceivedPayloadData(). | 89 friend class AudioReceiverTest; // Invokes OnReceivedPayloadData(). |
| 90 | 90 |
| 91 virtual void OnReceivedPayloadData(const uint8* payload_data, | 91 virtual void OnReceivedPayloadData(const uint8* payload_data, |
| 92 size_t payload_size, | 92 size_t payload_size, |
| 93 const RtpCastHeader& rtp_header) OVERRIDE; | 93 const RtpCastHeader& rtp_header) OVERRIDE; |
| 94 | 94 |
| 95 // RtpPayloadFeedback implementation. | 95 // RtpPayloadFeedback implementation. |
| 96 virtual void CastFeedback(const RtcpCastMessage& cast_message) OVERRIDE; | 96 virtual void CastFeedback(const RtcpCastMessage& cast_message) OVERRIDE; |
| 97 | 97 |
| 98 private: | 98 private: |
| 99 // Processes ready-to-consume packets from |framer_|, decrypting each packet's | 99 // Processes ready-to-consume packets from |framer_|, decrypting each packet's |
| 100 // payload data, and then running the enqueued callbacks in order (one for | 100 // payload data, and then running the enqueued callbacks in order (one for |
| 101 // each packet). This method may post a delayed task to re-invoke itself in | 101 // each packet). This method may post a delayed task to re-invoke itself in |
| 102 // the future to wait for missing/incomplete frames. | 102 // the future to wait for missing/incomplete frames. |
| 103 void EmitAvailableEncodedFrames(); | 103 void EmitAvailableEncodedFrames(); |
| 104 | 104 |
| 105 // Clears the |is_waiting_for_consecutive_frame_| flag and invokes | 105 // Clears the |is_waiting_for_consecutive_frame_| flag and invokes |
| 106 // EmitAvailableEncodedFrames(). | 106 // EmitAvailableEncodedFrames(). |
| 107 void EmitAvailableEncodedFramesAfterWaiting(); | 107 void EmitAvailableEncodedFramesAfterWaiting(); |
| 108 | 108 |
| 109 // Feeds an EncodedAudioFrame into |audio_decoder_|. GetRawAudioFrame() uses | 109 // Feeds an EncodedFrame into |audio_decoder_|. GetRawAudioFrame() uses this |
| 110 // this as a callback for GetEncodedAudioFrame(). | 110 // as a callback for GetEncodedAudioFrame(). |
| 111 void DecodeEncodedAudioFrame( | 111 void DecodeEncodedAudioFrame( |
| 112 const AudioFrameDecodedCallback& callback, | 112 const AudioFrameDecodedCallback& callback, |
| 113 scoped_ptr<transport::EncodedAudioFrame> encoded_frame, | 113 scoped_ptr<transport::EncodedFrame> encoded_frame); |
| 114 const base::TimeTicks& playout_time); | |
| 115 | 114 |
| 116 // Return the playout time based on the current time and rtp timestamp. | 115 // Return the playout time based on the current time and rtp timestamp. |
| 117 base::TimeTicks GetPlayoutTime(base::TimeTicks now, uint32 rtp_timestamp); | 116 base::TimeTicks GetPlayoutTime(base::TimeTicks now, uint32 rtp_timestamp); |
| 118 | 117 |
| 119 void InitializeTimers(); | 118 void InitializeTimers(); |
| 120 | 119 |
| 121 // Schedule the next RTCP report. | 120 // Schedule the next RTCP report. |
| 122 void ScheduleNextRtcpReport(); | 121 void ScheduleNextRtcpReport(); |
| 123 | 122 |
| 124 // Actually send the next RTCP report. | 123 // Actually send the next RTCP report. |
| (...skipping 30 matching lines...) Expand all Loading... |
| 155 base::TimeDelta target_delay_delta_; | 154 base::TimeDelta target_delay_delta_; |
| 156 Framer framer_; | 155 Framer framer_; |
| 157 scoped_ptr<AudioDecoder> audio_decoder_; | 156 scoped_ptr<AudioDecoder> audio_decoder_; |
| 158 Rtcp rtcp_; | 157 Rtcp rtcp_; |
| 159 base::TimeDelta time_offset_; | 158 base::TimeDelta time_offset_; |
| 160 base::TimeTicks time_first_incoming_packet_; | 159 base::TimeTicks time_first_incoming_packet_; |
| 161 uint32 first_incoming_rtp_timestamp_; | 160 uint32 first_incoming_rtp_timestamp_; |
| 162 transport::TransportEncryptionHandler decryptor_; | 161 transport::TransportEncryptionHandler decryptor_; |
| 163 | 162 |
| 164 // Outstanding callbacks to run to deliver on client requests for frames. | 163 // Outstanding callbacks to run to deliver on client requests for frames. |
| 165 std::list<AudioFrameEncodedCallback> frame_request_queue_; | 164 std::list<FrameEncodedCallback> frame_request_queue_; |
| 166 | 165 |
| 167 // True while there's an outstanding task to re-invoke | 166 // True while there's an outstanding task to re-invoke |
| 168 // EmitAvailableEncodedFrames(). | 167 // EmitAvailableEncodedFrames(). |
| 169 bool is_waiting_for_consecutive_frame_; | 168 bool is_waiting_for_consecutive_frame_; |
| 170 | 169 |
| 171 // This mapping allows us to log AUDIO_ACK_SENT as a frame event. In addition | 170 // This mapping allows us to log AUDIO_ACK_SENT as a frame event. In addition |
| 172 // it allows the event to be transmitted via RTCP. | 171 // it allows the event to be transmitted via RTCP. |
| 173 RtpTimestamp frame_id_to_rtp_timestamp_[256]; | 172 RtpTimestamp frame_id_to_rtp_timestamp_[256]; |
| 174 | 173 |
| 175 // NOTE: Weak pointers must be invalidated before all other member variables. | 174 // NOTE: Weak pointers must be invalidated before all other member variables. |
| 176 base::WeakPtrFactory<AudioReceiver> weak_factory_; | 175 base::WeakPtrFactory<AudioReceiver> weak_factory_; |
| 177 | 176 |
| 178 DISALLOW_COPY_AND_ASSIGN(AudioReceiver); | 177 DISALLOW_COPY_AND_ASSIGN(AudioReceiver); |
| 179 }; | 178 }; |
| 180 | 179 |
| 181 } // namespace cast | 180 } // namespace cast |
| 182 } // namespace media | 181 } // namespace media |
| 183 | 182 |
| 184 #endif // MEDIA_CAST_AUDIO_RECEIVER_AUDIO_RECEIVER_H_ | 183 #endif // MEDIA_CAST_AUDIO_RECEIVER_AUDIO_RECEIVER_H_ |
| OLD | NEW |