diff --git a/pkg/codec/vpx/vpx_decoder.go b/pkg/codec/vpx/vpx_decoder.go index ce761e9..77601aa 100644 --- a/pkg/codec/vpx/vpx_decoder.go +++ b/pkg/codec/vpx/vpx_decoder.go @@ -97,9 +97,10 @@ func (d *Decoder) Decode(data []byte) { } } -func (d *Decoder) GetFrame() *C.vpx_image_t { +func (d *Decoder) GetFrame() *VpxImage { iter := C.newIter() - return C.getFrame(d.codec, iter) + img := C.getFrame(d.codec, iter) + return &VpxImage{img: img} } func (d *Decoder) FreeDecoderCtx() { diff --git a/pkg/codec/vpx/vpx_image.go b/pkg/codec/vpx/vpx_image.go new file mode 100644 index 0000000..5ba4dae --- /dev/null +++ b/pkg/codec/vpx/vpx_image.go @@ -0,0 +1,40 @@ +package vpx + +/* +#cgo pkg-config: vpx +#include +*/ +import "C" +import "unsafe" + +type VpxImage struct { + img *C.vpx_image_t +} + +func NewImageFromPtr(ptr *C.vpx_image_t) *VpxImage { + return &VpxImage{img: ptr} +} + +func (i *VpxImage) Width() int { + return int(i.img.d_w) +} + +func (i *VpxImage) Height() int { + return int(i.img.d_h) +} + +func (i *VpxImage) YStride() int { + return int(i.img.stride[0]) +} + +func (i *VpxImage) UStride() int { + return int(i.img.stride[1]) +} + +func (i *VpxImage) VStride() int { + return int(i.img.stride[2]) +} + +func (i *VpxImage) Plane(n int) unsafe.Pointer { + return unsafe.Pointer(i.img.planes[n]) +}