forked from asticode/go-astiav
-
Notifications
You must be signed in to change notification settings - Fork 0
/
packet_test.go
98 lines (83 loc) · 3.62 KB
/
packet_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package astiav_test
import (
"errors"
"fmt"
"testing"
"github.com/asticode/go-astiav"
"github.com/stretchr/testify/require"
)
func videoInputFirstPacket() (pkt *astiav.Packet, err error) {
if global.pkt != nil {
return global.pkt, nil
}
var fc *astiav.FormatContext
if fc, err = videoInputFormatContext(); err != nil {
err = fmt.Errorf("astiav_test: getting input format context failed")
return
}
pkt = astiav.AllocPacket()
if pkt == nil {
err = errors.New("astiav_test: pkt is nil")
return
}
global.closer.Add(pkt.Free)
if err = fc.ReadFrame(pkt); err != nil {
err = fmt.Errorf("astiav_test: reading frame failed: %w", err)
return
}
global.pkt = pkt
return
}
func TestPacket(t *testing.T) {
pkt1, err := videoInputFirstPacket()
require.NoError(t, err)
require.Equal(t, []byte{0x0, 0x0, 0x0, 0xd1, 0x65, 0x88, 0x82, 0x0, 0x1f, 0x5f, 0xff, 0xf8, 0x22, 0x8a, 0x0, 0x2, 0x2d, 0xbe, 0x38, 0xc7, 0x19, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x3a, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xba, 0xeb, 0xae, 0xb9, 0xb8, 0xe6, 0x39, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xc0}, pkt1.Data())
require.Equal(t, int64(0), pkt1.Dts())
require.Equal(t, int64(512), pkt1.Duration())
require.True(t, pkt1.Flags().Has(astiav.PacketFlagKey))
require.Equal(t, int64(48), pkt1.Pos())
require.Equal(t, int64(0), pkt1.Pts())
require.Equal(t, 213, pkt1.Size())
require.Equal(t, 0, pkt1.StreamIndex())
pkt2 := astiav.AllocPacket()
require.NotNil(t, pkt2)
defer pkt2.Free()
require.Nil(t, pkt2.Data())
err = pkt2.AllocPayload(5)
require.NoError(t, err)
require.Len(t, pkt2.Data(), 5)
pkt2.SetDts(1)
pkt2.SetDuration(2)
pkt2.SetFlags(astiav.NewPacketFlags(3))
pkt2.SetPos(4)
pkt2.SetPts(5)
pkt2.SetSize(6)
pkt2.SetStreamIndex(7)
require.Equal(t, int64(1), pkt2.Dts())
require.Equal(t, int64(2), pkt2.Duration())
require.Equal(t, astiav.NewPacketFlags(3), pkt2.Flags())
require.Equal(t, int64(4), pkt2.Pos())
require.Equal(t, int64(5), pkt2.Pts())
require.Equal(t, 6, pkt2.Size())
require.Equal(t, 7, pkt2.StreamIndex())
pkt3 := pkt1.Clone()
require.NotNil(t, pkt3)
defer pkt3.Free()
require.Equal(t, int64(512), pkt3.Duration())
err = pkt3.Ref(pkt2)
require.NoError(t, err)
require.Equal(t, int64(2), pkt3.Duration())
pkt3.MoveRef(pkt1)
require.Equal(t, int64(512), pkt3.Duration())
require.Equal(t, int64(0), pkt1.Duration())
pkt3.Unref()
require.Equal(t, int64(0), pkt3.Duration())
pkt3.SetDts(10)
pkt3.SetDuration(20)
pkt3.SetPts(30)
pkt3.RescaleTs(astiav.NewRational(1, 10), astiav.NewRational(1, 1))
require.Equal(t, int64(1), pkt3.Dts())
require.Equal(t, int64(2), pkt3.Duration())
require.Equal(t, int64(3), pkt3.Pts())
// TODO Test SideData
}