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

Method WriteSliceBytes

track/h265.go:31–83  ·  view source on GitHub ↗
(slice []byte)

Source from the content-addressed store, hash-verified

29}
30
31func (vt *H265) WriteSliceBytes(slice []byte) {
32 if len(slice) == 0 {
33 vt.Error("H265 WriteSliceBytes got empty slice")
34 return
35 }
36 t := codec.ParseH265NALUType(slice[0])
37 if log.Trace {
38 vt.Trace("naluType", zap.Uint8("naluType", byte(t)))
39 }
40 switch t {
41 case codec.NAL_UNIT_VPS:
42 vt.VPS = slice
43 vt.ParamaterSets[0] = slice
44 case codec.NAL_UNIT_SPS:
45 vt.SPS = slice
46 vt.ParamaterSets[1] = slice
47 spsInfo, _ := codec.ParseHevcSPS(slice)
48 if spsInfo.Width != vt.SPSInfo.Width || spsInfo.Height != vt.SPSInfo.Height {
49 vt.Debug("SPS", zap.Any("SPSInfo", spsInfo))
50 }
51 vt.SPSInfo = spsInfo
52 case codec.NAL_UNIT_PPS:
53 vt.PPS = slice
54 vt.ParamaterSets[2] = slice
55 if vt.VPS != nil && vt.SPS != nil && vt.PPS != nil {
56 extraData, err := codec.BuildH265SeqHeaderFromVpsSpsPps(vt.VPS, vt.SPS, vt.PPS)
57 if err == nil {
58 vt.nalulenSize = (int(extraData[26]) & 0x03) + 1
59 vt.Video.WriteSequenceHead(extraData)
60 } else {
61 vt.Error("H265 BuildH265SeqHeaderFromVpsSpsPps", zap.Error(err))
62 // vt.Stream.Close()
63 }
64 }
65 case
66 codec.NAL_UNIT_CODED_SLICE_BLA,
67 codec.NAL_UNIT_CODED_SLICE_BLANT,
68 codec.NAL_UNIT_CODED_SLICE_BLA_N_LP,
69 codec.NAL_UNIT_CODED_SLICE_IDR,
70 codec.NAL_UNIT_CODED_SLICE_IDR_N_LP,
71 codec.NAL_UNIT_CODED_SLICE_CRA:
72 vt.Value.IFrame = true
73 vt.AppendAuBytes(slice)
74 case 0, 1, 2, 3, 4, 5, 6, 7, 8, 9:
75 vt.Value.IFrame = false
76 vt.AppendAuBytes(slice)
77 case codec.NAL_UNIT_SEI, codec.NAL_UNIT_SEI_SUFFIX:
78 vt.AppendAuBytes(slice)
79 case codec.NAL_UNIT_ACCESS_UNIT_DELIMITER:
80 default:
81 vt.Warn("nalu type not supported", zap.Uint("type", uint(t)))
82 }
83}
84
85func (vt *H265) WriteSequenceHead(head []byte) (err error) {
86 if vt.VPS, vt.SPS, vt.PPS, err = codec.ParseVpsSpsPpsFromSeqHeaderWithoutMalloc(head); err == nil {

Callers 1

WriteRTPFrameMethod · 0.95

Calls 9

ParseH265NALUTypeFunction · 0.92
ParseHevcSPSFunction · 0.92
AppendAuBytesMethod · 0.80
ErrorMethod · 0.65
TraceMethod · 0.65
DebugMethod · 0.65
WriteSequenceHeadMethod · 0.65
WarnMethod · 0.65

Tested by

no test coverage detected