(codec webrtc.RTPCodecParameters, headerExtensions []webrtc.RTPHeaderExtensionParameter, codecState ReceiverCodecState)
| 1190 | } |
| 1191 | |
| 1192 | func (r *ReceiverBase) SetCodecWithState(codec webrtc.RTPCodecParameters, headerExtensions []webrtc.RTPHeaderExtensionParameter, codecState ReceiverCodecState) { |
| 1193 | r.checkCodecChanged(codec, headerExtensions) |
| 1194 | |
| 1195 | r.codecStateLock.Lock() |
| 1196 | if codecState == r.codecState { |
| 1197 | r.codecStateLock.Unlock() |
| 1198 | return |
| 1199 | } |
| 1200 | |
| 1201 | var fireChange bool |
| 1202 | var reason string |
| 1203 | onCodecStateChange := r.onCodecStateChange |
| 1204 | r.params.Logger.Infow("codec state changed", "from", r.codecState, "to", codecState) |
| 1205 | switch codecState { |
| 1206 | case ReceiverCodecStateNormal: |
| 1207 | // TODO: support codec recovery |
| 1208 | r.codecStateLock.Unlock() |
| 1209 | return |
| 1210 | |
| 1211 | case ReceiverCodecStateSuspended: |
| 1212 | reason = "codec suspended" |
| 1213 | fallthrough |
| 1214 | |
| 1215 | case ReceiverCodecStateInvalid: |
| 1216 | r.codecState = codecState |
| 1217 | fireChange = true |
| 1218 | reason = "codec invalid" |
| 1219 | } |
| 1220 | r.codecStateLock.Unlock() |
| 1221 | |
| 1222 | if fireChange { |
| 1223 | r.ClearAllBuffers(reason) |
| 1224 | |
| 1225 | for _, fn := range onCodecStateChange { |
| 1226 | fn(r.params.Codec, codecState) |
| 1227 | } |
| 1228 | } |
| 1229 | } |
| 1230 | |
| 1231 | func (r *ReceiverBase) checkCodecChanged(codec webrtc.RTPCodecParameters, headerExtensions []webrtc.RTPHeaderExtensionParameter) { |
| 1232 | existingFmtp := strings.Split(r.params.Codec.SDPFmtpLine, ";") |
nothing calls this directly
no test coverage detected