1*437bfbebSnyanmisaka /* SPDX-License-Identifier: Apache-2.0 OR MIT */
2*437bfbebSnyanmisaka /*
3*437bfbebSnyanmisaka * Copyright (c) 2025 Rockchip Electronics Co., Ltd.
4*437bfbebSnyanmisaka */
5*437bfbebSnyanmisaka
6*437bfbebSnyanmisaka #define MODULE_TAG "kmpp_venc_test"
7*437bfbebSnyanmisaka
8*437bfbebSnyanmisaka #include "mpp_debug.h"
9*437bfbebSnyanmisaka #include "kmpp_frame.h"
10*437bfbebSnyanmisaka #include "kmpp_packet.h"
11*437bfbebSnyanmisaka #include "kmpp_venc.h"
12*437bfbebSnyanmisaka #include "rk_venc_kcfg.h"
13*437bfbebSnyanmisaka
main()14*437bfbebSnyanmisaka int main()
15*437bfbebSnyanmisaka {
16*437bfbebSnyanmisaka KmppVenc venc = NULL;
17*437bfbebSnyanmisaka MppVencKcfg cfg = NULL;
18*437bfbebSnyanmisaka KmppFrame frm = NULL;
19*437bfbebSnyanmisaka KmppPacket pkt = NULL;
20*437bfbebSnyanmisaka rk_s32 ret = rk_ok;
21*437bfbebSnyanmisaka
22*437bfbebSnyanmisaka mpp_log(MODULE_TAG " start\n");
23*437bfbebSnyanmisaka
24*437bfbebSnyanmisaka ret = kmpp_venc_get(&venc);
25*437bfbebSnyanmisaka if (ret) {
26*437bfbebSnyanmisaka mpp_err(MODULE_TAG " get venc failed\n");
27*437bfbebSnyanmisaka return ret;
28*437bfbebSnyanmisaka }
29*437bfbebSnyanmisaka
30*437bfbebSnyanmisaka mpp_venc_kcfg_init(&cfg, MPP_VENC_KCFG_TYPE_INIT);
31*437bfbebSnyanmisaka mpp_venc_kcfg_set_u32(cfg, "type", MPP_CTX_ENC);
32*437bfbebSnyanmisaka mpp_venc_kcfg_set_u32(cfg, "coding", MPP_VIDEO_CodingAVC);
33*437bfbebSnyanmisaka mpp_venc_kcfg_set_s32(cfg, "chan_id", 0);
34*437bfbebSnyanmisaka mpp_venc_kcfg_set_u32(cfg, "buf_size", 4096);
35*437bfbebSnyanmisaka mpp_venc_kcfg_set_u32(cfg, "max_width", 1920);
36*437bfbebSnyanmisaka mpp_venc_kcfg_set_u32(cfg, "max_height", 1080);
37*437bfbebSnyanmisaka mpp_venc_kcfg_set_u32(cfg, "max_lt_cnt", 0);
38*437bfbebSnyanmisaka mpp_venc_kcfg_set_s32(cfg, "input_timeout", -1);
39*437bfbebSnyanmisaka
40*437bfbebSnyanmisaka ret = kmpp_venc_init(venc, cfg);
41*437bfbebSnyanmisaka if (ret) {
42*437bfbebSnyanmisaka mpp_err(MODULE_TAG " init venc failed\n");
43*437bfbebSnyanmisaka return ret;
44*437bfbebSnyanmisaka }
45*437bfbebSnyanmisaka
46*437bfbebSnyanmisaka mpp_venc_kcfg_deinit(cfg);
47*437bfbebSnyanmisaka cfg = NULL;
48*437bfbebSnyanmisaka
49*437bfbebSnyanmisaka mpp_venc_kcfg_init(&cfg, MPP_VENC_KCFG_TYPE_ST_CFG);
50*437bfbebSnyanmisaka
51*437bfbebSnyanmisaka ret = kmpp_venc_get_cfg(venc, cfg);
52*437bfbebSnyanmisaka if (ret) {
53*437bfbebSnyanmisaka mpp_err(MODULE_TAG " get venc cfg failed\n");
54*437bfbebSnyanmisaka return ret;
55*437bfbebSnyanmisaka }
56*437bfbebSnyanmisaka
57*437bfbebSnyanmisaka ret = kmpp_venc_set_cfg(venc, cfg);
58*437bfbebSnyanmisaka if (ret) {
59*437bfbebSnyanmisaka mpp_err(MODULE_TAG " set venc cfg failed\n");
60*437bfbebSnyanmisaka return ret;
61*437bfbebSnyanmisaka }
62*437bfbebSnyanmisaka
63*437bfbebSnyanmisaka mpp_venc_kcfg_deinit(cfg);
64*437bfbebSnyanmisaka cfg = NULL;
65*437bfbebSnyanmisaka
66*437bfbebSnyanmisaka ret = kmpp_venc_start(venc);
67*437bfbebSnyanmisaka if (ret) {
68*437bfbebSnyanmisaka mpp_err(MODULE_TAG " start venc failed\n");
69*437bfbebSnyanmisaka return ret;
70*437bfbebSnyanmisaka }
71*437bfbebSnyanmisaka
72*437bfbebSnyanmisaka kmpp_frame_get(&frm);
73*437bfbebSnyanmisaka
74*437bfbebSnyanmisaka ret = kmpp_venc_put_frm(venc, frm);
75*437bfbebSnyanmisaka if (ret) {
76*437bfbebSnyanmisaka mpp_err(MODULE_TAG " put frm failed\n");
77*437bfbebSnyanmisaka return ret;
78*437bfbebSnyanmisaka }
79*437bfbebSnyanmisaka
80*437bfbebSnyanmisaka kmpp_frame_put(frm);
81*437bfbebSnyanmisaka frm = NULL;
82*437bfbebSnyanmisaka
83*437bfbebSnyanmisaka ret = kmpp_venc_get_pkt(venc, &pkt);
84*437bfbebSnyanmisaka if (ret) {
85*437bfbebSnyanmisaka mpp_err(MODULE_TAG " get pkt failed\n");
86*437bfbebSnyanmisaka return ret;
87*437bfbebSnyanmisaka }
88*437bfbebSnyanmisaka
89*437bfbebSnyanmisaka if (pkt) {
90*437bfbebSnyanmisaka ret = kmpp_venc_put_pkt(venc, pkt);
91*437bfbebSnyanmisaka if (ret) {
92*437bfbebSnyanmisaka mpp_err(MODULE_TAG " put pkt failed\n");
93*437bfbebSnyanmisaka return ret;
94*437bfbebSnyanmisaka }
95*437bfbebSnyanmisaka }
96*437bfbebSnyanmisaka
97*437bfbebSnyanmisaka ret = kmpp_venc_stop(venc);
98*437bfbebSnyanmisaka if (ret) {
99*437bfbebSnyanmisaka mpp_err(MODULE_TAG " stop venc failed\n");
100*437bfbebSnyanmisaka return ret;
101*437bfbebSnyanmisaka }
102*437bfbebSnyanmisaka
103*437bfbebSnyanmisaka ret = kmpp_venc_deinit(venc);
104*437bfbebSnyanmisaka if (ret) {
105*437bfbebSnyanmisaka mpp_err(MODULE_TAG " deinit venc failed\n");
106*437bfbebSnyanmisaka return ret;
107*437bfbebSnyanmisaka }
108*437bfbebSnyanmisaka
109*437bfbebSnyanmisaka ret = kmpp_venc_put(venc);
110*437bfbebSnyanmisaka
111*437bfbebSnyanmisaka mpp_log(MODULE_TAG " %s\n", ret ? "failed" : "success");
112*437bfbebSnyanmisaka return ret;
113*437bfbebSnyanmisaka }
114