MCPcopy Create free account
hub / github.com/livekit/livekit / SetCodecWithState

Method SetCodecWithState

pkg/sfu/receiver_base.go:1192–1229  ·  view source on GitHub ↗
(codec webrtc.RTPCodecParameters, headerExtensions []webrtc.RTPHeaderExtensionParameter, codecState ReceiverCodecState)

Source from the content-addressed store, hash-verified

1190}
1191
1192func (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
1231func (r *ReceiverBase) checkCodecChanged(codec webrtc.RTPCodecParameters, headerExtensions []webrtc.RTPHeaderExtensionParameter) {
1232 existingFmtp := strings.Split(r.params.Codec.SDPFmtpLine, ";")

Callers

nothing calls this directly

Calls 2

checkCodecChangedMethod · 0.95
ClearAllBuffersMethod · 0.95

Tested by

no test coverage detected