最近在写利用go语言的cgo来包装ffmepg api的项目,该项目来源于github的goav项目(1k starts),但是作者貌似去做收费项目了,这个项目很久没有维护。
我fork了一份这个项目,并扩写了tutorial,tutorial来源于大名鼎鼎的ffmpeg-libav-tutorial项目(5.6k stars),我打算将3个tutorial用goav实现一次。
做的时候发现了原来goav有很多ffmpegapi没有封装。所以需要自己去写封装,封装使用的是go原生的cgo。
其中遇到了就是获取codec对象的pix_fmts,pix_fmts是一个*int32,我需要将这个值转化为go中的[]int 整形切片。
先上代码
func (c *Codec) GetPixFmts() []int {
var ret []int
pointer := c.pix_fmts
fmt.Printf("%d",pointer)
elementPointer := uintptr(unsafe.Pointer(pointer))
element := (int)(*((*int32)(unsafe.Pointer(elementPointer))))
for element !=-1{
elementPointer = elementPointer + 32
ret = append(ret,element)
element =(int)(*((*int32)(unsafe.Pointer(elementPoi