Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(951)

Side by Side Diff: webrtc/modules/audio_coding/neteq/decoder_database.h

Issue 2355503002: Stopped using the NetEqDecoder enum internally in NetEq. (Closed)
Patch Set: Clarified comments. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 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 23 matching lines...) Expand all
34 kCodecNotSupported = -2, 34 kCodecNotSupported = -2,
35 kInvalidSampleRate = -3, 35 kInvalidSampleRate = -3,
36 kDecoderExists = -4, 36 kDecoderExists = -4,
37 kDecoderNotFound = -5, 37 kDecoderNotFound = -5,
38 kInvalidPointer = -6 38 kInvalidPointer = -6
39 }; 39 };
40 40
41 // Class that stores decoder info in the database. 41 // Class that stores decoder info in the database.
42 class DecoderInfo { 42 class DecoderInfo {
43 public: 43 public:
44 DecoderInfo( 44 explicit DecoderInfo(const SdpAudioFormat& audio_format,
45 NetEqDecoder ct, 45 AudioDecoderFactory* factory = nullptr);
46 const std::string& nm, 46 explicit DecoderInfo(NetEqDecoder ct,
47 AudioDecoderFactory* factory = nullptr); 47 AudioDecoderFactory* factory = nullptr);
48 DecoderInfo(NetEqDecoder ct, 48 DecoderInfo(const SdpAudioFormat& audio_format, AudioDecoder* ext_dec);
49 const std::string& nm,
50 AudioDecoder* ext_dec);
51 DecoderInfo(DecoderInfo&&); 49 DecoderInfo(DecoderInfo&&);
52 ~DecoderInfo(); 50 ~DecoderInfo();
53 51
54 // Get the AudioDecoder object, creating it first if necessary. 52 // Get the AudioDecoder object, creating it first if necessary.
55 AudioDecoder* GetDecoder() const; 53 AudioDecoder* GetDecoder() const;
56 54
57 // Delete the AudioDecoder object, unless it's external. (This means we can 55 // Delete the AudioDecoder object, unless it's external. (This means we can
58 // always recreate it later if we need it.) 56 // always recreate it later if we need it.)
59 void DropDecoder() const { decoder_.reset(); } 57 void DropDecoder() const { decoder_.reset(); }
60 58
61 int SampleRateHz() const { 59 int SampleRateHz() const {
62 const AudioDecoder* decoder = GetDecoder(); 60 const AudioDecoder* decoder = GetDecoder();
63 RTC_DCHECK_EQ(1, !!decoder + !!cng_decoder_); 61 RTC_DCHECK_EQ(1, !!decoder + !!cng_decoder_);
64 return decoder ? decoder->SampleRateHz() : cng_decoder_->sample_rate_hz; 62 return decoder ? decoder->SampleRateHz() : cng_decoder_->sample_rate_hz;
65 } 63 }
66 64
67 const SdpAudioFormat* GetFormat() const { 65 const SdpAudioFormat& GetFormat() const { return audio_format_; }
68 return audio_format_ ? &*audio_format_ : nullptr;
69 }
70 66
71 // Returns true if |codec_type| is comfort noise. 67 // Returns true if the decoder's format is comfort noise.
72 bool IsComfortNoise() const; 68 bool IsComfortNoise() const;
73 69
74 // Returns true if |codec_type| is DTMF. 70 // Returns true if the decoder's format is DTMF.
75 bool IsDtmf() const; 71 bool IsDtmf() const;
76 72
77 // Returns true if |codec_type| is RED. 73 // Returns true if the decoder's format is RED.
78 bool IsRed() const; 74 bool IsRed() const;
79 75
80 const NetEqDecoder codec_type; 76 // Returns true if the decoder's format is named |name|.
81 const std::string name; 77 bool IsType(const char* name) const;
78 // Returns true if the decoder's format is named |name|.
79 bool IsType(const std::string& name) const;
80
81 // TODO(ossu): |name| is kept here while we retain the old external decoder
82 // interface. Remove this once using an AudioDecoderFactory has
83 // supplanted the old functionality.
84 std::string name;
82 85
83 private: 86 private:
84 const rtc::Optional<SdpAudioFormat> audio_format_; 87 const SdpAudioFormat audio_format_;
85 AudioDecoderFactory* factory_; 88 AudioDecoderFactory* const factory_;
86 mutable std::unique_ptr<AudioDecoder> decoder_; 89 mutable std::unique_ptr<AudioDecoder> decoder_;
87 90
88 // Set iff this is an external decoder. 91 // Set iff this is an external decoder.
89 AudioDecoder* const external_decoder_; 92 AudioDecoder* const external_decoder_;
90 93
91 // Set iff this is a comfort noise decoder. 94 // Set iff this is a comfort noise decoder.
92 struct CngDecoder { 95 struct CngDecoder {
93 static rtc::Optional<CngDecoder> Create(NetEqDecoder ct); 96 static rtc::Optional<CngDecoder> Create(const SdpAudioFormat& format);
94 int sample_rate_hz; 97 int sample_rate_hz;
95 }; 98 };
96 const rtc::Optional<CngDecoder> cng_decoder_; 99 const rtc::Optional<CngDecoder> cng_decoder_;
97 }; 100 };
98 101
99 // Maximum value for 8 bits, and an invalid RTP payload type (since it is 102 // Maximum value for 8 bits, and an invalid RTP payload type (since it is
100 // only 7 bits). 103 // only 7 bits).
101 static const uint8_t kRtpPayloadTypeError = 0xFF; 104 static const uint8_t kRtpPayloadTypeError = 0xFF;
102 105
103 DecoderDatabase( 106 DecoderDatabase(
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 // Returns kDecoderNotFound or kOK depending on the outcome of the operation. 138 // Returns kDecoderNotFound or kOK depending on the outcome of the operation.
136 virtual int Remove(uint8_t rtp_payload_type); 139 virtual int Remove(uint8_t rtp_payload_type);
137 140
138 // Remove all entries. 141 // Remove all entries.
139 virtual void RemoveAll(); 142 virtual void RemoveAll();
140 143
141 // Returns a pointer to the DecoderInfo struct for |rtp_payload_type|. If 144 // Returns a pointer to the DecoderInfo struct for |rtp_payload_type|. If
142 // no decoder is registered with that |rtp_payload_type|, NULL is returned. 145 // no decoder is registered with that |rtp_payload_type|, NULL is returned.
143 virtual const DecoderInfo* GetDecoderInfo(uint8_t rtp_payload_type) const; 146 virtual const DecoderInfo* GetDecoderInfo(uint8_t rtp_payload_type) const;
144 147
145 // Returns one RTP payload type associated with |codec_type|, or
146 // kDecoderNotFound if no entry exists for that value. Note that one
147 // |codec_type| may be registered with several RTP payload types, and the
148 // method may return any of them.
149 virtual uint8_t GetRtpPayloadType(NetEqDecoder codec_type) const;
150
151 // Sets the active decoder to be |rtp_payload_type|. If this call results in a 148 // Sets the active decoder to be |rtp_payload_type|. If this call results in a
152 // change of active decoder, |new_decoder| is set to true. The previous active 149 // change of active decoder, |new_decoder| is set to true. The previous active
153 // decoder's AudioDecoder object is deleted. 150 // decoder's AudioDecoder object is deleted.
154 virtual int SetActiveDecoder(uint8_t rtp_payload_type, bool* new_decoder); 151 virtual int SetActiveDecoder(uint8_t rtp_payload_type, bool* new_decoder);
155 152
156 // Returns the current active decoder, or NULL if no active decoder exists. 153 // Returns the current active decoder, or NULL if no active decoder exists.
157 virtual AudioDecoder* GetActiveDecoder() const; 154 virtual AudioDecoder* GetActiveDecoder() const;
158 155
159 // Sets the active comfort noise decoder to be |rtp_payload_type|. If this 156 // Sets the active comfort noise decoder to be |rtp_payload_type|. If this
160 // call results in a change of active comfort noise decoder, the previous 157 // call results in a change of active comfort noise decoder, the previous
161 // active decoder's AudioDecoder object is deleted. 158 // active decoder's AudioDecoder object is deleted.
162 virtual int SetActiveCngDecoder(uint8_t rtp_payload_type); 159 virtual int SetActiveCngDecoder(uint8_t rtp_payload_type);
163 160
164 // Returns the current active comfort noise decoder, or NULL if no active 161 // Returns the current active comfort noise decoder, or NULL if no active
165 // comfort noise decoder exists. 162 // comfort noise decoder exists.
166 virtual ComfortNoiseDecoder* GetActiveCngDecoder() const; 163 virtual ComfortNoiseDecoder* GetActiveCngDecoder() const;
167 164
168 // The following are utility methods: they will look up DecoderInfo through 165 // The following are utility methods: they will look up DecoderInfo through
169 // GetDecoderInfo and call the respective method on that info object, if it 166 // GetDecoderInfo and call the respective method on that info object, if it
170 // exists. 167 // exists.
171 168
172 // Returns a pointer to the AudioDecoder object associated with 169 // Returns a pointer to the AudioDecoder object associated with
173 // |rtp_payload_type|, or NULL if none is registered. If the AudioDecoder 170 // |rtp_payload_type|, or NULL if none is registered. If the AudioDecoder
174 // object does not exist for that decoder, the object is created. 171 // object does not exist for that decoder, the object is created.
175 AudioDecoder* GetDecoder(uint8_t rtp_payload_type) const; 172 AudioDecoder* GetDecoder(uint8_t rtp_payload_type) const;
176 173
177 // Returns true if |rtp_payload_type| is registered as a |codec_type|. 174 // Returns if |rtp_payload_type| is registered with a format named |name|.
178 bool IsType(uint8_t rtp_payload_type, NetEqDecoder codec_type) const; 175 bool IsType(uint8_t rtp_payload_type, const char* name) const;
176
177 // Returns if |rtp_payload_type| is registered with a format named |name|.
178 bool IsType(uint8_t rtp_payload_type, const std::string& name) const;
179 179
180 // Returns true if |rtp_payload_type| is registered as comfort noise. 180 // Returns true if |rtp_payload_type| is registered as comfort noise.
181 bool IsComfortNoise(uint8_t rtp_payload_type) const; 181 bool IsComfortNoise(uint8_t rtp_payload_type) const;
182 182
183 // Returns true if |rtp_payload_type| is registered as DTMF. 183 // Returns true if |rtp_payload_type| is registered as DTMF.
184 bool IsDtmf(uint8_t rtp_payload_type) const; 184 bool IsDtmf(uint8_t rtp_payload_type) const;
185 185
186 // Returns true if |rtp_payload_type| is registered as RED. 186 // Returns true if |rtp_payload_type| is registered as RED.
187 bool IsRed(uint8_t rtp_payload_type) const; 187 bool IsRed(uint8_t rtp_payload_type) const;
188 188
189 // Returns kOK if all packets in |packet_list| carry payload types that are 189 // Returns kOK if all packets in |packet_list| carry payload types that are
190 // registered in the database. Otherwise, returns kDecoderNotFound. 190 // registered in the database. Otherwise, returns kDecoderNotFound.
191 int CheckPayloadTypes(const PacketList& packet_list) const; 191 int CheckPayloadTypes(const PacketList& packet_list) const;
192 192
193 private: 193 private:
194 typedef std::map<uint8_t, DecoderInfo> DecoderMap; 194 typedef std::map<uint8_t, DecoderInfo> DecoderMap;
195 195
196 DecoderMap decoders_; 196 DecoderMap decoders_;
197 int active_decoder_type_; 197 int active_decoder_type_;
198 int active_cng_decoder_type_; 198 int active_cng_decoder_type_;
199 mutable std::unique_ptr<ComfortNoiseDecoder> active_cng_decoder_; 199 mutable std::unique_ptr<ComfortNoiseDecoder> active_cng_decoder_;
200 rtc::scoped_refptr<AudioDecoderFactory> decoder_factory_; 200 rtc::scoped_refptr<AudioDecoderFactory> decoder_factory_;
201 201
202 RTC_DISALLOW_COPY_AND_ASSIGN(DecoderDatabase); 202 RTC_DISALLOW_COPY_AND_ASSIGN(DecoderDatabase);
203 }; 203 };
204 204
205 } // namespace webrtc 205 } // namespace webrtc
206 #endif // WEBRTC_MODULES_AUDIO_CODING_NETEQ_DECODER_DATABASE_H_ 206 #endif // WEBRTC_MODULES_AUDIO_CODING_NETEQ_DECODER_DATABASE_H_
OLDNEW
« no previous file with comments | « webrtc/modules/audio_coding/acm2/rent_a_codec.cc ('k') | webrtc/modules/audio_coding/neteq/decoder_database.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698