| 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 13 matching lines...) Expand all  Loading... | 
| 24 #include "media/cast/rtp_receiver/rtp_receiver_defines.h" | 24 #include "media/cast/rtp_receiver/rtp_receiver_defines.h" | 
| 25 #include "media/cast/transport/utility/transport_encryption_handler.h" | 25 #include "media/cast/transport/utility/transport_encryption_handler.h" | 
| 26 | 26 | 
| 27 namespace media { | 27 namespace media { | 
| 28 namespace cast { | 28 namespace cast { | 
| 29 | 29 | 
| 30 class AudioDecoder; | 30 class AudioDecoder; | 
| 31 | 31 | 
| 32 // AudioReceiver receives packets out-of-order while clients make requests for | 32 // AudioReceiver receives packets out-of-order while clients make requests for | 
| 33 // complete frames in-order.  (A frame consists of one or more packets.) | 33 // complete frames in-order.  (A frame consists of one or more packets.) | 
| 34 // AudioReceiver also includes logic for mapping RTP timestamps to the local | 34 // | 
| 35 // base::TimeTicks clock for each frame. | 35 // AudioReceiver also includes logic for computing the playout time for each | 
|  | 36 // frame, accounting for a constant targeted playout delay.  The purpose of the | 
|  | 37 // playout delay is to provide a fixed window of time between the capture event | 
|  | 38 // on the sender and the playout on the receiver.  This is important because | 
|  | 39 // each step of the pipeline (i.e., encode frame, then transmit/retransmit from | 
|  | 40 // the sender, then receive and re-order packets on the receiver, then decode | 
|  | 41 // frame) can vary in duration and is typically very hard to predict. | 
|  | 42 // Heuristics will determine when the targeted playout delay is insufficient in | 
|  | 43 // the current environment; and the receiver can then increase the playout | 
|  | 44 // delay, notifying the sender, to account for the extra variance. | 
|  | 45 // TODO(miu): Make the last sentence true.  http://crbug.com/360111 | 
| 36 // | 46 // | 
| 37 // Two types of frames can be requested: 1) A frame of decoded audio data; or 2) | 47 // Two types of frames can be requested: 1) A frame of decoded audio data; or 2) | 
| 38 // a frame of still-encoded audio data, to be passed into an external audio | 48 // a frame of still-encoded audio data, to be passed into an external audio | 
| 39 // decoder.  Each request for a frame includes a callback which AudioReceiver | 49 // decoder.  Each request for a frame includes a callback which AudioReceiver | 
| 40 // guarantees will be called at some point in the future.  Clients should | 50 // guarantees will be called at some point in the future.  Clients should | 
| 41 // generally limit the number of outstanding requests (perhaps to just one or | 51 // generally limit the number of outstanding requests (perhaps to just one or | 
| 42 // two).  When AudioReceiver is destroyed, any outstanding requests will be | 52 // two).  When AudioReceiver is destroyed, any outstanding requests will be | 
| 43 // immediately invoked with a NULL frame. | 53 // immediately invoked with a NULL frame. | 
| 44 // | 54 // | 
| 45 // This class is not thread safe.  Should only be called from the Main cast | 55 // This class is not thread safe.  Should only be called from the Main cast | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 56   virtual ~AudioReceiver(); | 66   virtual ~AudioReceiver(); | 
| 57 | 67 | 
| 58   // Request a decoded audio frame.  The audio signal data returned in the | 68   // Request a decoded audio frame.  The audio signal data returned in the | 
| 59   // callback will have the sampling rate and number of channels as requested in | 69   // callback will have the sampling rate and number of channels as requested in | 
| 60   // the configuration that was passed to the ctor. | 70   // the configuration that was passed to the ctor. | 
| 61   // | 71   // | 
| 62   // The given |callback| is guaranteed to be run at some point in the future, | 72   // The given |callback| is guaranteed to be run at some point in the future, | 
| 63   // even if to respond with NULL at shutdown time. | 73   // even if to respond with NULL at shutdown time. | 
| 64   void GetRawAudioFrame(const AudioFrameDecodedCallback& callback); | 74   void GetRawAudioFrame(const AudioFrameDecodedCallback& callback); | 
| 65 | 75 | 
| 66   // Extract an encoded audio frame from the cast receiver. | 76   // Request an encoded audio frame. | 
| 67   // | 77   // | 
| 68   // The given |callback| is guaranteed to be run at some point in the future, | 78   // The given |callback| is guaranteed to be run at some point in the future, | 
| 69   // even if to respond with NULL at shutdown time. | 79   // even if to respond with NULL at shutdown time. | 
| 70   void GetEncodedAudioFrame(const AudioFrameEncodedCallback& callback); | 80   void GetEncodedAudioFrame(const AudioFrameEncodedCallback& callback); | 
| 71 | 81 | 
| 72   // Deliver another packet, possibly a duplicate, and possibly out-of-order. | 82   // Deliver another packet, possibly a duplicate, and possibly out-of-order. | 
| 73   void IncomingPacket(scoped_ptr<Packet> packet); | 83   void IncomingPacket(scoped_ptr<Packet> packet); | 
| 74 | 84 | 
| 75   // Update target audio delay used to compute the playout time. Rtcp | 85   // Update target audio delay used to compute the playout time. Rtcp | 
| 76   // will also be updated (will be included in all outgoing reports). | 86   // will also be updated (will be included in all outgoing reports). | 
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 166   // NOTE: Weak pointers must be invalidated before all other member variables. | 176   // NOTE: Weak pointers must be invalidated before all other member variables. | 
| 167   base::WeakPtrFactory<AudioReceiver> weak_factory_; | 177   base::WeakPtrFactory<AudioReceiver> weak_factory_; | 
| 168 | 178 | 
| 169   DISALLOW_COPY_AND_ASSIGN(AudioReceiver); | 179   DISALLOW_COPY_AND_ASSIGN(AudioReceiver); | 
| 170 }; | 180 }; | 
| 171 | 181 | 
| 172 }  // namespace cast | 182 }  // namespace cast | 
| 173 }  // namespace media | 183 }  // namespace media | 
| 174 | 184 | 
| 175 #endif  // MEDIA_CAST_AUDIO_RECEIVER_AUDIO_RECEIVER_H_ | 185 #endif  // MEDIA_CAST_AUDIO_RECEIVER_AUDIO_RECEIVER_H_ | 
| OLD | NEW | 
|---|