OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 // vector. | 45 // vector. |
46 struct EncodedInfo : public EncodedInfoLeaf { | 46 struct EncodedInfo : public EncodedInfoLeaf { |
47 EncodedInfo(); | 47 EncodedInfo(); |
48 ~EncodedInfo(); | 48 ~EncodedInfo(); |
49 | 49 |
50 std::vector<EncodedInfoLeaf> redundant; | 50 std::vector<EncodedInfoLeaf> redundant; |
51 }; | 51 }; |
52 | 52 |
53 virtual ~AudioEncoder() = default; | 53 virtual ~AudioEncoder() = default; |
54 | 54 |
55 // Returns the maximum number of bytes that can be produced by the encoder | |
56 // at each Encode() call. The caller can use the return value to determine | |
57 // the size of the buffer that needs to be allocated. This value is allowed | |
58 // to depend on encoder parameters like bitrate, frame size etc., so if | |
59 // any of these change, the caller of Encode() is responsible for checking | |
60 // that the buffer is large enough by calling MaxEncodedBytes() again. | |
61 virtual size_t MaxEncodedBytes() const = 0; | |
62 | |
63 // Returns the input sample rate in Hz and the number of input channels. | 55 // Returns the input sample rate in Hz and the number of input channels. |
64 // These are constants set at instantiation time. | 56 // These are constants set at instantiation time. |
65 virtual int SampleRateHz() const = 0; | 57 virtual int SampleRateHz() const = 0; |
66 virtual size_t NumChannels() const = 0; | 58 virtual size_t NumChannels() const = 0; |
67 | 59 |
68 // Returns the rate at which the RTP timestamps are updated. The default | 60 // Returns the rate at which the RTP timestamps are updated. The default |
69 // implementation returns SampleRateHz(). | 61 // implementation returns SampleRateHz(). |
70 virtual int RtpTimestampRateHz() const; | 62 virtual int RtpTimestampRateHz() const; |
71 | 63 |
72 // Returns the number of 10 ms frames the encoder will put in the next | 64 // Returns the number of 10 ms frames the encoder will put in the next |
(...skipping 15 matching lines...) Expand all Loading... |
88 // Accepts one 10 ms block of input audio (i.e., SampleRateHz() / 100 * | 80 // Accepts one 10 ms block of input audio (i.e., SampleRateHz() / 100 * |
89 // NumChannels() samples). Multi-channel audio must be sample-interleaved. | 81 // NumChannels() samples). Multi-channel audio must be sample-interleaved. |
90 // The encoder appends zero or more bytes of output to |encoded| and returns | 82 // The encoder appends zero or more bytes of output to |encoded| and returns |
91 // additional encoding information. Encode() checks some preconditions, calls | 83 // additional encoding information. Encode() checks some preconditions, calls |
92 // EncodeImpl() which does the actual work, and then checks some | 84 // EncodeImpl() which does the actual work, and then checks some |
93 // postconditions. | 85 // postconditions. |
94 EncodedInfo Encode(uint32_t rtp_timestamp, | 86 EncodedInfo Encode(uint32_t rtp_timestamp, |
95 rtc::ArrayView<const int16_t> audio, | 87 rtc::ArrayView<const int16_t> audio, |
96 rtc::Buffer* encoded); | 88 rtc::Buffer* encoded); |
97 | 89 |
98 // Deprecated interface to Encode (remove eventually, bug 5591). May incur a | |
99 // copy. The encoder produces zero or more bytes of output in |encoded| and | |
100 // returns additional encoding information. The caller is responsible for | |
101 // making sure that |max_encoded_bytes| is not smaller than the number of | |
102 // bytes actually produced by the encoder. | |
103 RTC_DEPRECATED EncodedInfo Encode(uint32_t rtp_timestamp, | |
104 rtc::ArrayView<const int16_t> audio, | |
105 size_t max_encoded_bytes, | |
106 uint8_t* encoded); | |
107 | |
108 EncodedInfo DEPRECATED_Encode(uint32_t rtp_timestamp, | |
109 rtc::ArrayView<const int16_t> audio, | |
110 size_t max_encoded_bytes, | |
111 uint8_t* encoded); | |
112 | |
113 // Deprecated interface EncodeInternal (see bug 5591). May incur a copy. | |
114 // Subclasses implement this to perform the actual encoding. Called by | |
115 // Encode(). By default, this is implemented as a call to the newer | |
116 // EncodeImpl() that accepts an rtc::Buffer instead of a raw pointer. | |
117 // That version is protected, so see below. At least one of EncodeInternal | |
118 // or EncodeImpl _must_ be implemented by a subclass. | |
119 virtual EncodedInfo EncodeInternal( | |
120 uint32_t rtp_timestamp, | |
121 rtc::ArrayView<const int16_t> audio, | |
122 size_t max_encoded_bytes, | |
123 uint8_t* encoded); | |
124 | |
125 // Resets the encoder to its starting state, discarding any input that has | 90 // Resets the encoder to its starting state, discarding any input that has |
126 // been fed to the encoder but not yet emitted in a packet. | 91 // been fed to the encoder but not yet emitted in a packet. |
127 virtual void Reset() = 0; | 92 virtual void Reset() = 0; |
128 | 93 |
129 // Enables or disables codec-internal FEC (forward error correction). Returns | 94 // Enables or disables codec-internal FEC (forward error correction). Returns |
130 // true if the codec was able to comply. The default implementation returns | 95 // true if the codec was able to comply. The default implementation returns |
131 // true when asked to disable FEC and false when asked to enable it (meaning | 96 // true when asked to disable FEC and false when asked to enable it (meaning |
132 // that FEC isn't supported). | 97 // that FEC isn't supported). |
133 virtual bool SetFec(bool enable); | 98 virtual bool SetFec(bool enable); |
134 | 99 |
(...skipping 20 matching lines...) Expand all Loading... |
155 // does nothing. | 120 // does nothing. |
156 virtual void SetProjectedPacketLossRate(double fraction); | 121 virtual void SetProjectedPacketLossRate(double fraction); |
157 | 122 |
158 // Tells the encoder what average bitrate we'd like it to produce. The | 123 // Tells the encoder what average bitrate we'd like it to produce. The |
159 // encoder is free to adjust or disregard the given bitrate (the default | 124 // encoder is free to adjust or disregard the given bitrate (the default |
160 // implementation does the latter). | 125 // implementation does the latter). |
161 virtual void SetTargetBitrate(int target_bps); | 126 virtual void SetTargetBitrate(int target_bps); |
162 | 127 |
163 protected: | 128 protected: |
164 // Subclasses implement this to perform the actual encoding. Called by | 129 // Subclasses implement this to perform the actual encoding. Called by |
165 // Encode(). For compatibility reasons, this is implemented by default as a | 130 // Encode(). |
166 // call to the older interface EncodeInternal(). At least one of | |
167 // EncodeInternal or EncodeImpl _must_ be implemented by a | |
168 // subclass. Preferably this one. | |
169 virtual EncodedInfo EncodeImpl(uint32_t rtp_timestamp, | 131 virtual EncodedInfo EncodeImpl(uint32_t rtp_timestamp, |
170 rtc::ArrayView<const int16_t> audio, | 132 rtc::ArrayView<const int16_t> audio, |
171 rtc::Buffer* encoded); | 133 rtc::Buffer* encoded) = 0; |
| 134 |
| 135 private: |
| 136 // This function is deprecated. It was used to return the maximum number of |
| 137 // bytes that can be produced by the encoder at each Encode() call. Since the |
| 138 // Encode interface was changed to use rtc::Buffer, this is no longer |
| 139 // applicable. It is only kept in to avoid breaking subclasses that still have |
| 140 // it implemented (with the override attribute). It will be removed as soon |
| 141 // as these subclasses have been given a chance to change. |
| 142 virtual size_t MaxEncodedBytes() const; |
172 }; | 143 }; |
173 } // namespace webrtc | 144 } // namespace webrtc |
174 #endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_AUDIO_ENCODER_H_ | 145 #endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_AUDIO_ENCODER_H_ |
OLD | NEW |