xref: /rockchip-linux_mpp/kmpp/test/kmpp_venc_test.c (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
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