From 397d4cf15414db8f6706bd1d0b145e7a1a3d96b4 Mon Sep 17 00:00:00 2001 From: Tryanks Date: Thu, 4 Jan 2024 18:11:02 +0800 Subject: [PATCH] Some Impl --- frame.go | 9 +++++ mpi.go | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++---- packet.go | 5 +++ type.go | 5 +++ 4 files changed, 125 insertions(+), 7 deletions(-) create mode 100644 frame.go create mode 100644 packet.go create mode 100644 type.go diff --git a/frame.go b/frame.go new file mode 100644 index 0000000..39451a0 --- /dev/null +++ b/frame.go @@ -0,0 +1,9 @@ +package rkcodec + +import "C" + +//#cgo pkg-config: rockchip_mpp +//#include +import "C" + +type MppFrame = C.MppFrame diff --git a/mpi.go b/mpi.go index bfbab93..8c8e5e2 100644 --- a/mpi.go +++ b/mpi.go @@ -1,19 +1,118 @@ package rkcodec //#cgo pkg-config: rockchip_mpp -//##include +/* +#include + +MPP_RET Mpi_decode(MppApi mpi, MppCtx ctx, MppPacket packet, MppFrame *frame) { + return mpi->decode(ctx, packet, frame); +} + +MPP_RET Mpi_decode_put_packet(MppApi mpi, MppCtx ctx, MppPacket packet) { + return mpi->decode_put_packet(ctx, packet); +} + +MPP_RET Mpi_decode_get_frame(MppApi mpi, MppCtx ctx, MppFrame *frame) { + return mpi->decode_get_frame(ctx, frame); +} + +MPP_RET Mpi_encode(MppApi mpi, MppCtx ctx, MppFrame frame, MppPacket *packet) { + return mpi->encode(ctx, frame, packet); +} + +MPP_RET Mpi_encode_put_frame(MppApi mpi, MppCtx ctx, MppFrame frame) { + return mpi->encode_put_frame(ctx, frame); +} + +MPP_RET Mpi_encode_get_packet(MppApi mpi, MppCtx ctx, MppPacket *packet) { + return mpi->encode_get_packet(ctx, packet); +} + +//MPP_RET Mpi_isp(MppApi mpi, MppCtx ctx, MppFrame dst, MppFrame src) { +// return mpi->isp(ctx, dst, src); +//} +// +//MPP_RET Mpi_isp_put_frame(MppApi mpi, MppCtx ctx, MppFrame frame) { +// return mpi->isp_put_frame(ctx, frame); +//} +// +//MPP_RET Mpi_isp_get_frame(MppApi mpi, MppCtx ctx, MppFrame *frame) { +// return mpi->isp_get_frame(ctx, frame); +//} +// +//MPP_RET Mpi_poll(MppApi mpi, MppCtx ctx, MppPortType type, MppPollType timeout) { +// return mpi->poll(ctx, type, timeout); +//} +// +//MPP_RET Mpi_dequeue(MppApi mpi, MppCtx ctx, MppPortType type, MppTask *task) { +// return mpi->dequeue(ctx, type, task); +//} +// +//MPP_RET Mpi_enqueue(MppApi mpi, MppCtx ctx, MppPortType type, MppTask task) { +// return mpi->enqueue(ctx, type, task); +//} + +MPP_RET Mpi_reset(MppApi mpi, MppCtx ctx) { + return mpi->reset(ctx); +} + +MPP_RET Mpi_control(MppApi mpi, MppCtx ctx, MpiCmd cmd, MppParam param) { + return mpi->control(ctx, cmd, param); +} +*/ import "C" -type MppFrame struct { - c *C.struct_MppFrame +type MppContext struct { + mpi *C.struct_MppApi + ctx C.MppCtx } -type MppCtx struct { - c *C.struct_MppCtx +func CreateCtxAndApi(ctxType MppCtxType, codingType MppCodingType) *MppContext { + var mpi *C.struct_MppApi + var ctx C.MppCtx + C.mpp_create(&mpi, &ctx, ctxType) + C.mpp_init(ctx, codingType, 0) + return &MppContext{mpi: mpi, ctx: ctx} } -type MppApi struct { - c *C.struct_MppApi +func (c *MppContext) Decode(packet MppPacket, frame *MppFrame) { + C.Mpi_decode(c.mpi, c.ctx, packet.c, frame.c) +} + +func (c *MppContext) DecodePutPacket(packet MppPacket) { + C.Mpi_decode_put_packet(c.mpi, c.ctx, packet.c) +} + +func (c *MppContext) DecodeGetFrame(frame *MppFrame) { + C.Mpi_decode_get_frame(c.mpi, c.ctx, frame.c) +} + +func (c *MppContext) Encode(frame MppFrame, packet *MppPacket) { + C.Mpi_encode(c.mpi, c.ctx, frame.c, packet.c) +} + +func (c *MppContext) EncodePutFrame(frame MppFrame) { + C.Mpi_encode_put_frame(c.mpi, c.ctx, frame.c) +} + +func (c *MppContext) EncodeGetPacket(packet *MppPacket) { + C.Mpi_encode_get_packet(c.mpi, c.ctx, packet.c) +} + +func (c *MppContext) Reset() { + C.Mpi_reset(c.mpi, c.ctx) +} + +func (c *MppContext) Control(cmd MpiCmd, param bool) { + param2 := C.int(0) + if param { + param2 = C.int(1) + } + C.Mpi_control(c.mpi, c.ctx, (C.enum_MpiCmd)(cmd), C.MppParam(param2)) +} + +func (c *MppContext) Destroy() { + C.mpp_destroy(c.mpi, c.ctx) } type MpiCmd C.enum_MpiCmd diff --git a/packet.go b/packet.go new file mode 100644 index 0000000..f360a68 --- /dev/null +++ b/packet.go @@ -0,0 +1,5 @@ +package rkcodec + +import "C" + +type MppPacket = C.MppPacket diff --git a/type.go b/type.go new file mode 100644 index 0000000..a6d907a --- /dev/null +++ b/type.go @@ -0,0 +1,5 @@ +package rkcodec + +//#cgo pkg-config: rockchip_mpp +//#include +import "C"