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
3 // found in the LICENSE file.
5 #ifndef MEDIA_CAST_CAST_CONFIG_H_
6 #define MEDIA_CAST_CAST_CONFIG_H_
12 #include "base/basictypes.h"
13 #include "base/callback.h"
14 #include "base/memory/ref_counted.h"
15 #include "base/memory/shared_memory.h"
16 #include "base/single_thread_task_runner.h"
17 #include "base/time/time.h"
18 #include "media/cast/cast_defines.h"
19 #include "media/cast/net/cast_transport_config.h"
22 class VideoEncodeAccelerator
;
26 // TODO(miu): Merge AudioSenderConfig and VideoSenderConfig and make their
27 // naming/documentation consistent with FrameReceiverConfig.
28 struct AudioSenderConfig
{
32 // Identifier referring to the sender, used by the receiver.
35 // The receiver's SSRC identifier.
36 uint32 incoming_feedback_ssrc
;
40 // The total amount of time between a frame's capture/recording on the sender
41 // and its playback on the receiver (i.e., shown to a user). This should be
42 // set to a value large enough to give the system sufficient time to encode,
43 // transmit/retransmit, receive, decode, and render; given its run-time
44 // environment (sender/receiver hardware performance, network conditions,
46 base::TimeDelta min_playout_delay
;
47 base::TimeDelta max_playout_delay
;
49 // RTP payload type enum: Specifies the type/encoding of frame data.
52 bool use_external_encoder
;
55 int bitrate
; // Set to <= 0 for "auto variable bitrate" (libopus knows best).
58 // The AES crypto key and initialization vector. Each of these strings
59 // contains the data in binary form, of size kAesKeySize. If they are empty
60 // strings, crypto is not being used.
62 std::string aes_iv_mask
;
65 struct VideoSenderConfig
{
69 // Identifier referring to the sender, used by the receiver.
72 // The receiver's SSRC identifier.
73 uint32 incoming_feedback_ssrc
; // TODO(miu): Rename to receiver_ssrc.
77 // The total amount of time between a frame's capture/recording on the sender
78 // and its playback on the receiver (i.e., shown to a user). This should be
79 // set to a value large enough to give the system sufficient time to encode,
80 // transmit/retransmit, receive, decode, and render; given its run-time
81 // environment (sender/receiver hardware performance, network conditions,
83 base::TimeDelta min_playout_delay
;
84 base::TimeDelta max_playout_delay
;
86 // RTP payload type enum: Specifies the type/encoding of frame data.
89 bool use_external_encoder
;
90 int width
; // Incoming frames will be scaled to this size.
93 float congestion_control_back_off
;
99 int max_frame_rate
; // TODO(miu): Should be double, not int.
100 int max_number_of_video_buffers_used
; // Max value depend on codec.
102 int number_of_encode_threads
;
104 // The AES crypto key and initialization vector. Each of these strings
105 // contains the data in binary form, of size kAesKeySize. If they are empty
106 // strings, crypto is not being used.
108 std::string aes_iv_mask
;
111 // TODO(miu): Naming and minor type changes are badly needed in a later CL.
112 struct FrameReceiverConfig
{
113 FrameReceiverConfig();
114 ~FrameReceiverConfig();
116 // The receiver's SSRC identifier.
117 uint32 feedback_ssrc
; // TODO(miu): Rename to receiver_ssrc for clarity.
119 // The sender's SSRC identifier.
120 uint32 incoming_ssrc
; // TODO(miu): Rename to sender_ssrc for clarity.
122 // Mean interval (in milliseconds) between RTCP reports.
123 // TODO(miu): Remove this since it's never not kDefaultRtcpIntervalMs.
126 // The total amount of time between a frame's capture/recording on the sender
127 // and its playback on the receiver (i.e., shown to a user). This is fixed as
128 // a value large enough to give the system sufficient time to encode,
129 // transmit/retransmit, receive, decode, and render; given its run-time
130 // environment (sender/receiver hardware performance, network conditions,
132 int rtp_max_delay_ms
; // TODO(miu): Change to TimeDelta target_playout_delay.
134 // RTP payload type enum: Specifies the type/encoding of frame data.
135 int rtp_payload_type
;
137 // RTP timebase: The number of RTP units advanced per one second. For audio,
138 // this is the sampling rate. For video, by convention, this is 90 kHz.
139 int frequency
; // TODO(miu): Rename to rtp_timebase for clarity.
141 // Number of channels. For audio, this is normally 2. For video, this must
142 // be 1 as Cast does not have support for stereoscopic video.
145 // The target frame rate. For audio, this is normally 100 (i.e., frames have
146 // a duration of 10ms each). For video, this is normally 30, but any frame
147 // rate is supported.
148 int max_frame_rate
; // TODO(miu): Rename to target_frame_rate.
150 // Codec used for the compression of signal data.
151 // TODO(miu): Merge the AudioCodec and VideoCodec enums into one so this union
155 // The AES crypto key and initialization vector. Each of these strings
156 // contains the data in binary form, of size kAesKeySize. If they are empty
157 // strings, crypto is not being used.
159 std::string aes_iv_mask
;
162 // Import from media::cast.
164 typedef Packet Packet
;
165 typedef PacketList PacketList
;
167 typedef base::Callback
<void(CastInitializationStatus
)>
168 CastInitializationCallback
;
170 typedef base::Callback
<void(scoped_refptr
<base::SingleThreadTaskRunner
>,
171 scoped_ptr
<media::VideoEncodeAccelerator
>)>
172 ReceiveVideoEncodeAcceleratorCallback
;
173 typedef base::Callback
<void(const ReceiveVideoEncodeAcceleratorCallback
&)>
174 CreateVideoEncodeAcceleratorCallback
;
176 typedef base::Callback
<void(scoped_ptr
<base::SharedMemory
>)>
177 ReceiveVideoEncodeMemoryCallback
;
178 typedef base::Callback
<void(size_t size
,
179 const ReceiveVideoEncodeMemoryCallback
&)>
180 CreateVideoEncodeMemoryCallback
;
185 #endif // MEDIA_CAST_CAST_CONFIG_H_