From 08bbde04bd948c42eaf0c302737604c0e0db4159 Mon Sep 17 00:00:00 2001 From: "xiaoxu.chen" Date: Thu, 10 Apr 2025 19:50:16 +0800 Subject: [PATCH] feat[kmpp_packet]: Add kmpp_packet interface Change-Id: If913e5deb0077b8fe59f2a6a5eebfcd76fcabf7b Signed-off-by: xiaoxu.chen --- kmpp/base/CMakeLists.txt | 1 + kmpp/base/inc/kmpp_packet.h | 36 +++++++++++++++++++ kmpp/base/inc/kmpp_packet_impl.h | 59 ++++++++++++++++++++++++++++++++ kmpp/base/kmpp_packet.c | 13 +++++++ 4 files changed, 109 insertions(+) create mode 100644 kmpp/base/inc/kmpp_packet.h create mode 100644 kmpp/base/inc/kmpp_packet_impl.h create mode 100644 kmpp/base/kmpp_packet.c diff --git a/kmpp/base/CMakeLists.txt b/kmpp/base/CMakeLists.txt index 65ec56f0..25059287 100644 --- a/kmpp/base/CMakeLists.txt +++ b/kmpp/base/CMakeLists.txt @@ -7,6 +7,7 @@ add_library(kmpp_base OBJECT kmpp_obj.c kmpp_frame.c kmpp_venc_cfg.c + kmpp_packet.c ) set_target_properties(kmpp_base PROPERTIES FOLDER "kmpp/base") diff --git a/kmpp/base/inc/kmpp_packet.h b/kmpp/base/inc/kmpp_packet.h new file mode 100644 index 00000000..7c5af989 --- /dev/null +++ b/kmpp/base/inc/kmpp_packet.h @@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: Apache-2.0 OR MIT */ +/* + * Copyright (c) 2025 Rockchip Electronics Co., Ltd. + */ + +#ifndef __KMPP_PACKET_H__ +#define __KMPP_PACKET_H__ + +#include "rk_type.h" + +#define KMPP_PACKET_ENTRY_TABLE(prefix, ENTRY, STRCT, EHOOK, SHOOK, ALIAS) \ + ENTRY(prefix, s32, rk_s32, size, FLAG_NONE, size) \ + ENTRY(prefix, s32, rk_s32, length, FLAG_NONE, length) \ + ENTRY(prefix, s64, rk_s64, pts, FLAG_NONE, pts) \ + ENTRY(prefix, s64, rk_s64, dts, FLAG_NONE, dts) \ + ENTRY(prefix, u32, rk_u32, status, FLAG_NONE, status) \ + ENTRY(prefix, u32, rk_u32, temporal_id, FLAG_NONE, temporal_id) \ + STRCT(prefix, shm, KmppShmPtr, data, FLAG_NONE, data) \ + STRCT(prefix, shm, KmppShmPtr, buffer, FLAG_NONE, buffer) \ + STRCT(prefix, shm, KmppShmPtr, pos, FLAG_NONE, pos) \ + ENTRY(prefix, u32, rk_u32, flag, FLAG_NONE, flag) + +#ifdef __cplusplus +extern "C" { +#endif + +#define KMPP_OBJ_NAME kmpp_packet +#define KMPP_OBJ_INTF_TYPE KmppPacket +#define KMPP_OBJ_ENTRY_TABLE KMPP_PACKET_ENTRY_TABLE +#include "kmpp_obj_func.h" + +#ifdef __cplusplus +} +#endif + +#endif /*__KMPP_PACKET_H__*/ \ No newline at end of file diff --git a/kmpp/base/inc/kmpp_packet_impl.h b/kmpp/base/inc/kmpp_packet_impl.h new file mode 100644 index 00000000..b1ce3d5f --- /dev/null +++ b/kmpp/base/inc/kmpp_packet_impl.h @@ -0,0 +1,59 @@ +/* SPDX-License-Identifier: Apache-2.0 OR MIT */ +/* + * Copyright (c) 2025 Rockchip Electronics Co., Ltd. + */ + +#ifndef __KMPP_PACKET_IMPL_H__ +#define __KMPP_PACKET_IMPL_H__ + +#include "kmpp_packet.h" + +#define KMPP_PACKET_FLAG_EOS (0x00000001) +#define KMPP_PACKET_FLAG_EXTRA_DATA (0x00000002) +#define KMPP_PACKET_FLAG_INTERNAL (0x00000004) +#define KMPP_PACKET_FLAG_EXTERNAL (0x00000008) +#define KMPP_PACKET_FLAG_INTRA (0x00000010) +#define KMPP_PACKET_FLAG_PARTITION (0x00000020) +#define KMPP_PACKET_FLAG_EOI (0x00000040) + +typedef struct RingBufPool_t { + rk_u32 r_pos; + rk_u32 w_pos; + rk_u32 len; + rk_u32 use_len; + void *buf_base; + MppBuffer buf; + rk_u32 init_done; + rk_u32 min_buf_size; + rk_u32 l_r_pos; + rk_u32 l_w_pos; + rk_u32 max_use_len; +} RingBufPool; + +typedef struct RingBuf_t { + MppBuffer buf; + void *buf_start; + RingBufPool *ring_pool; + rk_u32 start_offset; + rk_u32 r_pos; + rk_u32 use_len; + rk_u32 size; + rk_u32 cir_flag; +} RingBuf; + +typedef struct KmppPacketImpl_t { + const char *name; + rk_s32 size; + rk_s32 length; + rk_s64 pts; + rk_s64 dts; + rk_u32 status; + rk_u32 flag; + rk_u32 temporal_id; + KmppShmPtr data; + KmppShmPtr pos; + KmppShmPtr buffer; + RingBuf buf; +} KmppPacketImpl; + +#endif /* __KMPP_PACKET_IMPL_H__ */ \ No newline at end of file diff --git a/kmpp/base/kmpp_packet.c b/kmpp/base/kmpp_packet.c new file mode 100644 index 00000000..4a1aa7fa --- /dev/null +++ b/kmpp/base/kmpp_packet.c @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: Apache-2.0 OR MIT */ +/* + * Copyright (c) 2025 Rockchip Electronics Co., Ltd. + */ + +#include "kmpp_packet_impl.h" + +#define KMPP_OBJ_NAME kmpp_packet +#define KMPP_OBJ_INTF_TYPE KmppPacket +#define KMPP_OBJ_IMPL_TYPE KmppPacketImpl +#define KMPP_OBJ_SGLN_ID MPP_SGLN_PACKET +#define KMPP_OBJ_ENTRY_TABLE KMPP_PACKET_ENTRY_TABLE +#include "kmpp_obj_helper.h" \ No newline at end of file