MCPcopy Create free account
hub / github.com/Monibuca/engine / WriteAVCC

Method WriteAVCC

track/video.go:141–178  ·  view source on GitHub ↗
(ts uint32, frame *util.BLL)

Source from the content-addressed store, hash-verified

139}
140
141func (vt *Video) WriteAVCC(ts uint32, frame *util.BLL) (err error) {
142 if l := frame.ByteLength; l < 6 {
143 vt.Error("AVCC data too short", zap.Int("len", l))
144 return io.ErrShortWrite
145 }
146 // bbb := util.Buffer(frame.ToBytes()[5:])
147 r := frame.NewReader()
148 b, _ := r.ReadByte()
149 isExtHeader := (b >> 4) & 0b1000
150 frameType := (b >> 4) & 0b0111
151 vt.Value.IFrame = frameType == 1 || frameType == 4
152 packetType := b & 0b1111
153 if isExtHeader != 0 {
154 r.ReadBE(4) // fourcc
155 switch packetType {
156 case codec.PacketTypeSequenceStart:
157 err = vt.SpesificTrack.WriteSequenceHead(frame.ToBytes())
158 frame.Recycle()
159 return
160 case codec.PacketTypeCodedFrames:
161 err = vt.SpesificTrack.writeAVCCFrame(ts, r, frame)
162 case codec.PacketTypeCodedFramesX:
163 }
164 } else {
165 b, _ = r.ReadByte() //sequence frame flag
166 if b == 0 {
167 err = vt.SpesificTrack.WriteSequenceHead(frame.ToBytes())
168 frame.Recycle()
169 return
170 }
171 err = vt.SpesificTrack.writeAVCCFrame(ts, r, frame)
172 }
173 if err == nil {
174 vt.Value.WriteAVCC(ts, frame)
175 vt.Flush()
176 }
177 return
178}
179
180func (vt *Video) WriteSliceByte(b ...byte) {
181 // fmt.Println("write slice byte", b)

Callers

nothing calls this directly

Calls 10

FlushMethod · 0.95
ReadBEMethod · 0.80
ErrorMethod · 0.65
ReadByteMethod · 0.65
WriteSequenceHeadMethod · 0.65
RecycleMethod · 0.65
writeAVCCFrameMethod · 0.65
WriteAVCCMethod · 0.65
NewReaderMethod · 0.45
ToBytesMethod · 0.45

Tested by

no test coverage detected