forked from asticode/goav
-
Notifications
You must be signed in to change notification settings - Fork 0
/
frame_struct.go
161 lines (136 loc) · 3.8 KB
/
frame_struct.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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
package avutil
//#cgo pkg-config: libavutil
//#include <libavutil/frame.h>
//#include <stdlib.h>
import "C"
import "unsafe"
// import "github.com/davecgh/go-spew/spew"
type LinesizeValue C.int
func (f *Frame) Data() *uint8 {
// return (*uint8)(unsafe.Pointer((*C.uint8_t)(unsafe.Pointer(&f.data))))
return (*uint8)(unsafe.Pointer((*C.uint8_t)(unsafe.Pointer(&f.data))))
}
func (f *Frame) Linesize() [8]int32 {
var arr [8]int32
arr[0] = int32(*(*C.int)(unsafe.Pointer(&f.linesize[0])))
arr[1] = int32(*(*C.int)(unsafe.Pointer(&f.linesize[1])))
arr[2] = int32(*(*C.int)(unsafe.Pointer(&f.linesize[2])))
arr[3] = int32(*(*C.int)(unsafe.Pointer(&f.linesize[3])))
arr[4] = int32(*(*C.int)(unsafe.Pointer(&f.linesize[4])))
arr[5] = int32(*(*C.int)(unsafe.Pointer(&f.linesize[5])))
arr[6] = int32(*(*C.int)(unsafe.Pointer(&f.linesize[6])))
arr[7] = int32(*(*C.int)(unsafe.Pointer(&f.linesize[7])))
// spew.Dump(&f.linesize)
// slice := (*[1 << 30]LinesizeValue)(unsafe.Pointer(&f.linesize))[:8:8]
return arr
}
func (f *Frame) Width() int {
return int(f.width)
}
func (f *Frame) SetWidth(w int) {
f.width = C.int(w)
}
func (f *Frame) Height() int {
return int(f.height)
}
func (f *Frame) SetHeight(h int) {
f.height = C.int(h)
}
func (f *Frame) Format() int {
return int(f.format)
}
func (f *Frame) SetFormat(fmt int) {
f.format = C.int(fmt)
}
func (f *Frame) NbSamples() int {
return int(f.nb_samples)
}
func (f *Frame) SetNbSamples(n int) {
f.nb_samples = C.int(n)
}
func (f *Frame) SetKeyFrame(k int) {
f.key_frame = C.int(k)
}
func (f *Frame) SetPictType(t AvPictureType) {
f.pict_type = C.enum_AVPictureType(t)
}
func (f *Frame) Pts() int64 {
return int64(f.pts)
}
func (f *Frame) SetPts(i int64) {
f.pts = C.int64_t(i)
}
func (f *Frame) PktPts() int64 {
return int64(f.pkt_pts)
}
func (f *Frame) PktDts() int64 {
return int64(f.pkt_dts)
}
func (f *Frame) SampleRate() int {
return int(f.sample_rate)
}
func (f *Frame) SetChannelLayout(l uint64) {
f.channel_layout = C.uint64_t(l)
}
func (f *Frame) SetSampleRate(r int) {
f.sample_rate = C.int(r)
}
// TODO Create getters and setters
// https://ffmpeg.org/doxygen/4.0/structAVFrame.html
/*
type Frame struct {
Coded_picture_number int32
Data [8]*uint8
Extended_data **uint8
Format int32
Height int32
Key_frame int32
Linesize [8]int32
Nb_samples int32
Pict_type uint32
Pts int64
Pkt_pts int64
Pkt_dts int64
Sample_aspect_ratio Rational
Width int32
Display_picture_number int32
Quality int32
Pad_cgo_0 [4]byte
Opaque *byte
Error [8]uint64
Repeat_pict int32
Interlaced_frame int32
Top_field_first int32
Palette_has_changed int32
Reordered_opaque int64
Sample_rate int32
Pad_cgo_1 [4]byte
Channel_layout uint64
Buf [8]*AvBufferRef
Extended_buf **AvBufferRef
Nb_extended_buf int32
Pad_cgo_2 [4]byte
Side_data **AvFrameSideData
Nb_side_data int32
Flags int32
Color_range uint32
Color_primaries uint32
Color_trc uint32
Colorspace uint32
Chroma_location uint32
Pad_cgo_3 [4]byte
Best_effort_timestamp int64
Pkt_pos int64
Pkt_duration int64
Metadata *Dictionary
Decode_error_flags int32
Channels int32
Pkt_size int32
Pad_cgo_4 [4]byte
Qscale_table *int8
Qstride int32
Qscale_type int32
Qp_table_buf *AvBufferRef
Hw_frames_ctx *AvBufferRef
}
*/