mirror of
https://github.com/nyanmisaka/mpp.git
synced 2026-01-23 23:50:38 +01:00
feat[kmpp_venc]: Add kmpp_venc module
Signed-off-by: Herman Chen <herman.chen@rock-chips.com> Change-Id: I06f071055caa1c4bab2341258c69398d46671ed3
This commit is contained in:
parent
067de5647a
commit
a0c6f81f7b
7 changed files with 193 additions and 1 deletions
|
|
@ -16,8 +16,14 @@ add_subdirectory(base)
|
|||
# ----------------------------------------------------------------------------
|
||||
set (KMPP_SRC
|
||||
kmpp.c
|
||||
kmpp_venc.c
|
||||
)
|
||||
|
||||
add_library(kmpp OBJECT ${KMPP_SRC})
|
||||
set_target_properties(kmpp PROPERTIES FOLDER "kmpp")
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# add kmpp test case
|
||||
# ----------------------------------------------------------------------------
|
||||
add_subdirectory(test)
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ macro(add_kmpp_base_test module)
|
|||
if(${test_tag})
|
||||
add_executable(${test_name} ${test_name}.c)
|
||||
target_link_libraries(${test_name} ${MPP_SHARED})
|
||||
set_target_properties(${test_name} PROPERTIES FOLDER "osal/test")
|
||||
set_target_properties(${test_name} PROPERTIES FOLDER "kmpp/test")
|
||||
add_test(NAME ${test_name} COMMAND ${test_name})
|
||||
endif()
|
||||
endmacro()
|
||||
|
|
|
|||
33
kmpp/inc/kmpp_venc.h
Normal file
33
kmpp/inc/kmpp_venc.h
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
/* SPDX-License-Identifier: Apache-2.0 OR MIT */
|
||||
/*
|
||||
* Copyright (c) 2015 Rockchip Electronics Co., Ltd.
|
||||
*/
|
||||
|
||||
#ifndef __KMPP_VENC_H__
|
||||
#define __KMPP_VENC_H__
|
||||
|
||||
#include "rk_venc_kcfg.h"
|
||||
|
||||
typedef void* KmppVenc;
|
||||
|
||||
#define KMPP_VENC_IOCTL_TABLE(prefix, IOC_CTX, IOC_IN_, IOC_OUT, IOC_IO_) \
|
||||
IOC_IN_(prefix, init, MppVencKcfg) \
|
||||
IOC_CTX(prefix, deinit) \
|
||||
IOC_CTX(prefix, reset) \
|
||||
IOC_CTX(prefix, start) \
|
||||
IOC_CTX(prefix, stop) \
|
||||
IOC_CTX(prefix, suspend) \
|
||||
IOC_CTX(prefix, resume) \
|
||||
IOC_IN_(prefix, get_cfg, MppVencKcfg) \
|
||||
IOC_IN_(prefix, set_cfg, MppVencKcfg) \
|
||||
IOC_IO_(prefix, encode, KmppFrame, KmppPacket) \
|
||||
IOC_IN_(prefix, put_frm, KmppFrame) \
|
||||
IOC_OUT(prefix, get_pkt, KmppPacket) \
|
||||
IOC_IN_(prefix, put_pkt, KmppPacket)
|
||||
|
||||
#define KMPP_OBJ_NAME kmpp_venc
|
||||
#define KMPP_OBJ_INTF_TYPE KmppVenc
|
||||
#define KMPP_OBJ_FUNC_IOCTL KMPP_VENC_IOCTL_TABLE
|
||||
#include "kmpp_obj_func.h"
|
||||
|
||||
#endif /*__KMPP_VENC_H__*/
|
||||
15
kmpp/kmpp_venc.c
Normal file
15
kmpp/kmpp_venc.c
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
/* SPDX-License-Identifier: Apache-2.0 OR MIT */
|
||||
/*
|
||||
* Copyright (c) 2025 Rockchip Electronics Co., Ltd.
|
||||
*/
|
||||
|
||||
#define MODULE_TAG "kmpp_venc"
|
||||
|
||||
#include "kmpp_obj.h"
|
||||
#include "kmpp_venc.h"
|
||||
|
||||
#define KMPP_OBJ_NAME kmpp_venc
|
||||
#define KMPP_OBJ_INTF_TYPE KmppVenc
|
||||
#define KMPP_OBJ_SGLN_ID MPP_SGLN_KMPP_VENC
|
||||
#define KMPP_OBJ_FUNC_IOCTL KMPP_VENC_IOCTL_TABLE
|
||||
#include "kmpp_obj_helper.h"
|
||||
24
kmpp/test/CMakeLists.txt
Normal file
24
kmpp/test/CMakeLists.txt
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
# vim: syntax=cmake
|
||||
# ----------------------------------------------------------------------------
|
||||
# kmpp/base built-in unit test case
|
||||
# ----------------------------------------------------------------------------
|
||||
# macro for adding osal sub-module unit test
|
||||
macro(add_kmpp_test module)
|
||||
set(test_name ${module}_test)
|
||||
string(TOUPPER ${test_name} test_tag)
|
||||
#message(STATUS "moduule : ${module}")
|
||||
#message(STATUS "test_name : ${test_name}")
|
||||
#message(STATUS "test_tag : ${test_tag}")
|
||||
|
||||
option(${test_tag} "Build base ${module} unit test" ${BUILD_TEST})
|
||||
if(${test_tag})
|
||||
add_executable(${test_name} ${test_name}.c)
|
||||
target_link_libraries(${test_name} ${MPP_SHARED})
|
||||
set_target_properties(${test_name} PROPERTIES FOLDER "kmpp/test")
|
||||
add_test(NAME ${test_name} COMMAND ${test_name})
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
# kmpp venc unit test
|
||||
add_kmpp_test(kmpp_venc)
|
||||
|
||||
113
kmpp/test/kmpp_venc_test.c
Normal file
113
kmpp/test/kmpp_venc_test.c
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
/* SPDX-License-Identifier: Apache-2.0 OR MIT */
|
||||
/*
|
||||
* Copyright (c) 2025 Rockchip Electronics Co., Ltd.
|
||||
*/
|
||||
|
||||
#define MODULE_TAG "kmpp_venc_test"
|
||||
|
||||
#include "mpp_debug.h"
|
||||
#include "kmpp_frame.h"
|
||||
#include "kmpp_packet.h"
|
||||
#include "kmpp_venc.h"
|
||||
#include "rk_venc_kcfg.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
KmppVenc venc = NULL;
|
||||
MppVencKcfg cfg = NULL;
|
||||
KmppFrame frm = NULL;
|
||||
KmppPacket pkt = NULL;
|
||||
rk_s32 ret = rk_ok;
|
||||
|
||||
mpp_log(MODULE_TAG " start\n");
|
||||
|
||||
ret = kmpp_venc_get(&venc);
|
||||
if (ret) {
|
||||
mpp_err(MODULE_TAG " get venc failed\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
mpp_venc_kcfg_init(&cfg, MPP_VENC_KCFG_TYPE_INIT);
|
||||
mpp_venc_kcfg_set_u32(cfg, "type", MPP_CTX_ENC);
|
||||
mpp_venc_kcfg_set_u32(cfg, "coding", MPP_VIDEO_CodingAVC);
|
||||
mpp_venc_kcfg_set_s32(cfg, "chan_id", 0);
|
||||
mpp_venc_kcfg_set_u32(cfg, "buf_size", 4096);
|
||||
mpp_venc_kcfg_set_u32(cfg, "max_width", 1920);
|
||||
mpp_venc_kcfg_set_u32(cfg, "max_height", 1080);
|
||||
mpp_venc_kcfg_set_u32(cfg, "max_lt_cnt", 0);
|
||||
mpp_venc_kcfg_set_s32(cfg, "input_timeout", -1);
|
||||
|
||||
ret = kmpp_venc_init(venc, cfg);
|
||||
if (ret) {
|
||||
mpp_err(MODULE_TAG " init venc failed\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
mpp_venc_kcfg_deinit(cfg);
|
||||
cfg = NULL;
|
||||
|
||||
mpp_venc_kcfg_init(&cfg, MPP_VENC_KCFG_TYPE_ST_CFG);
|
||||
|
||||
ret = kmpp_venc_get_cfg(venc, cfg);
|
||||
if (ret) {
|
||||
mpp_err(MODULE_TAG " get venc cfg failed\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = kmpp_venc_set_cfg(venc, cfg);
|
||||
if (ret) {
|
||||
mpp_err(MODULE_TAG " set venc cfg failed\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
mpp_venc_kcfg_deinit(cfg);
|
||||
cfg = NULL;
|
||||
|
||||
ret = kmpp_venc_start(venc);
|
||||
if (ret) {
|
||||
mpp_err(MODULE_TAG " start venc failed\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
kmpp_frame_get(&frm);
|
||||
|
||||
ret = kmpp_venc_put_frm(venc, frm);
|
||||
if (ret) {
|
||||
mpp_err(MODULE_TAG " put frm failed\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
kmpp_frame_put(frm);
|
||||
frm = NULL;
|
||||
|
||||
ret = kmpp_venc_get_pkt(venc, &pkt);
|
||||
if (ret) {
|
||||
mpp_err(MODULE_TAG " get pkt failed\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (pkt) {
|
||||
ret = kmpp_venc_put_pkt(venc, pkt);
|
||||
if (ret) {
|
||||
mpp_err(MODULE_TAG " put pkt failed\n");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
ret = kmpp_venc_stop(venc);
|
||||
if (ret) {
|
||||
mpp_err(MODULE_TAG " stop venc failed\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = kmpp_venc_deinit(venc);
|
||||
if (ret) {
|
||||
mpp_err(MODULE_TAG " deinit venc failed\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = kmpp_venc_put(venc);
|
||||
|
||||
mpp_log(MODULE_TAG " %s\n", ret ? "failed" : "success");
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -34,6 +34,7 @@ typedef enum MppSingletonId_e {
|
|||
MPP_SGLN_KMPP_FRAME,
|
||||
MPP_SGLN_KMPP_PACKET,
|
||||
MPP_SGLN_KMPP_VENC_CFG,
|
||||
MPP_SGLN_KMPP_VENC,
|
||||
/* userspace base module */
|
||||
MPP_SGLN_BUFFER,
|
||||
MPP_SGLN_META,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue