(ep *ExtPacket)
| 1052 | } |
| 1053 | |
| 1054 | func (b *BufferBase) processVideoPacket(ep *ExtPacket) error { |
| 1055 | if b.codecType != webrtc.RTPCodecTypeVideo { |
| 1056 | return nil |
| 1057 | } |
| 1058 | |
| 1059 | ep.Temporal = 0 |
| 1060 | var videoSize []codec.VideoSize |
| 1061 | if b.ddParser != nil { |
| 1062 | ddVal, videoLayer, err := b.ddParser.Parse(ep.Packet) |
| 1063 | if err != nil { |
| 1064 | if errors.Is(err, ErrDDExtentionNotFound) { |
| 1065 | if b.mime == mime.MimeTypeVP8 || b.mime == mime.MimeTypeVP9 { |
| 1066 | b.logger.Infow("dd extension not found, disable dd parser") |
| 1067 | b.ddParser = nil |
| 1068 | b.createFrameRateCalculator() |
| 1069 | } |
| 1070 | } else { |
| 1071 | return err |
| 1072 | } |
| 1073 | } else if ddVal != nil { |
| 1074 | ep.DependencyDescriptor = ddVal |
| 1075 | ep.VideoLayer = videoLayer |
| 1076 | videoSize = ExtractDependencyDescriptorVideoSize(ddVal.Descriptor) |
| 1077 | // DD-TODO : notify active decode target change if changed. |
| 1078 | } |
| 1079 | } |
| 1080 | |
| 1081 | switch b.mime { |
| 1082 | case mime.MimeTypeVP8: |
| 1083 | vp8Packet := codec.VP8{} |
| 1084 | if err := vp8Packet.Unmarshal(ep.Packet.Payload); err != nil { |
| 1085 | b.logger.Warnw("could not unmarshal VP8 packet", err) |
| 1086 | return err |
| 1087 | } |
| 1088 | ep.IsKeyFrame = vp8Packet.IsKeyFrame |
| 1089 | if ep.DependencyDescriptor == nil { |
| 1090 | ep.Temporal = int32(vp8Packet.TID) |
| 1091 | |
| 1092 | if ep.IsKeyFrame { |
| 1093 | if sz := codec.ExtractVP8VideoSize(&vp8Packet, ep.Packet.Payload); sz.Width > 0 && sz.Height > 0 { |
| 1094 | videoSize = append(videoSize, sz) |
| 1095 | } |
| 1096 | } |
| 1097 | } else { |
| 1098 | // vp8 with DependencyDescriptor enabled, use the TID from the descriptor |
| 1099 | vp8Packet.TID = uint8(ep.Temporal) |
| 1100 | } |
| 1101 | ep.Payload = vp8Packet |
| 1102 | ep.Spatial = InvalidLayerSpatial // vp8 don't have spatial scalability, reset to invalid |
| 1103 | |
| 1104 | case mime.MimeTypeVP9: |
| 1105 | if ep.DependencyDescriptor == nil { |
| 1106 | var vp9Packet codecs.VP9Packet |
| 1107 | _, err := vp9Packet.Unmarshal(ep.Packet.Payload) |
| 1108 | if err != nil { |
| 1109 | b.logger.Warnw("could not unmarshal VP9 packet", err) |
| 1110 | return err |
| 1111 | } |
no test coverage detected