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_vdec_test"
7*437bfbebSnyanmisaka
8*437bfbebSnyanmisaka #include <stdio.h>
9*437bfbebSnyanmisaka
10*437bfbebSnyanmisaka #include "mpp_mem.h"
11*437bfbebSnyanmisaka #include "mpp_debug.h"
12*437bfbebSnyanmisaka
13*437bfbebSnyanmisaka #include "kmpp_frame.h"
14*437bfbebSnyanmisaka #include "kmpp_packet.h"
15*437bfbebSnyanmisaka #include "kmpp_vdec.h"
16*437bfbebSnyanmisaka #include "rk_vdec_kcfg.h"
17*437bfbebSnyanmisaka
main(int argc,char ** argv)18*437bfbebSnyanmisaka int main(int argc, char **argv)
19*437bfbebSnyanmisaka {
20*437bfbebSnyanmisaka KmppVdec vdec = NULL;
21*437bfbebSnyanmisaka char *path = argv[1];
22*437bfbebSnyanmisaka MppVdecKcfg cfg;
23*437bfbebSnyanmisaka rk_s32 ret = rk_ok;
24*437bfbebSnyanmisaka
25*437bfbebSnyanmisaka mpp_log(MODULE_TAG " start path %s\n", path);
26*437bfbebSnyanmisaka
27*437bfbebSnyanmisaka ret = kmpp_vdec_get(&vdec);
28*437bfbebSnyanmisaka if (ret) {
29*437bfbebSnyanmisaka mpp_err(MODULE_TAG " get vdec failed\n");
30*437bfbebSnyanmisaka return ret;
31*437bfbebSnyanmisaka }
32*437bfbebSnyanmisaka
33*437bfbebSnyanmisaka mpp_vdec_kcfg_init(&cfg, MPP_VDEC_KCFG_TYPE_INIT);
34*437bfbebSnyanmisaka mpp_vdec_kcfg_set_u32(cfg, "type", MPP_CTX_ENC);
35*437bfbebSnyanmisaka mpp_vdec_kcfg_set_u32(cfg, "coding", MPP_VIDEO_CodingAVC);
36*437bfbebSnyanmisaka
37*437bfbebSnyanmisaka ret = kmpp_vdec_init(vdec, cfg);
38*437bfbebSnyanmisaka if (ret) {
39*437bfbebSnyanmisaka mpp_err(MODULE_TAG " init vdec failed\n");
40*437bfbebSnyanmisaka return ret;
41*437bfbebSnyanmisaka }
42*437bfbebSnyanmisaka mpp_vdec_kcfg_deinit(cfg);
43*437bfbebSnyanmisaka cfg = NULL;
44*437bfbebSnyanmisaka
45*437bfbebSnyanmisaka ret = kmpp_vdec_start(vdec);
46*437bfbebSnyanmisaka if (ret) {
47*437bfbebSnyanmisaka mpp_err(MODULE_TAG " start vdec failed\n");
48*437bfbebSnyanmisaka return ret;
49*437bfbebSnyanmisaka }
50*437bfbebSnyanmisaka
51*437bfbebSnyanmisaka if (path) {
52*437bfbebSnyanmisaka FILE *fp = fopen(path, "rb");
53*437bfbebSnyanmisaka char *buf = NULL;
54*437bfbebSnyanmisaka rk_s32 size = 0;
55*437bfbebSnyanmisaka
56*437bfbebSnyanmisaka if (fp) {
57*437bfbebSnyanmisaka fseek(fp, 0L, SEEK_END);
58*437bfbebSnyanmisaka size = ftell(fp);
59*437bfbebSnyanmisaka fseek(fp, 0L, SEEK_SET);
60*437bfbebSnyanmisaka
61*437bfbebSnyanmisaka buf = mpp_calloc(char, size);
62*437bfbebSnyanmisaka
63*437bfbebSnyanmisaka if (buf) {
64*437bfbebSnyanmisaka KmppPacket packet = NULL;
65*437bfbebSnyanmisaka KmppFrame frame = NULL;
66*437bfbebSnyanmisaka KmppShmPtr sptr;
67*437bfbebSnyanmisaka
68*437bfbebSnyanmisaka fread(buf, 1, size, fp);
69*437bfbebSnyanmisaka
70*437bfbebSnyanmisaka kmpp_packet_get(&packet);
71*437bfbebSnyanmisaka
72*437bfbebSnyanmisaka sptr.uptr = buf;
73*437bfbebSnyanmisaka sptr.kaddr = 0;
74*437bfbebSnyanmisaka kmpp_packet_set_data(packet, &sptr);
75*437bfbebSnyanmisaka kmpp_packet_set_size(packet, size);
76*437bfbebSnyanmisaka kmpp_packet_set_pos(packet, &sptr);
77*437bfbebSnyanmisaka kmpp_packet_set_length(packet, size);
78*437bfbebSnyanmisaka
79*437bfbebSnyanmisaka kmpp_vdec_put_pkt(vdec, packet);
80*437bfbebSnyanmisaka
81*437bfbebSnyanmisaka kmpp_vdec_get_frm(vdec, &frame);
82*437bfbebSnyanmisaka
83*437bfbebSnyanmisaka kmpp_packet_put(packet);
84*437bfbebSnyanmisaka kmpp_frame_put(frame);
85*437bfbebSnyanmisaka }
86*437bfbebSnyanmisaka
87*437bfbebSnyanmisaka MPP_FREE(buf);
88*437bfbebSnyanmisaka fclose(fp);
89*437bfbebSnyanmisaka }
90*437bfbebSnyanmisaka }
91*437bfbebSnyanmisaka
92*437bfbebSnyanmisaka ret = kmpp_vdec_stop(vdec);
93*437bfbebSnyanmisaka if (ret) {
94*437bfbebSnyanmisaka mpp_err(MODULE_TAG " stop vdec failed\n");
95*437bfbebSnyanmisaka return ret;
96*437bfbebSnyanmisaka }
97*437bfbebSnyanmisaka
98*437bfbebSnyanmisaka ret = kmpp_vdec_deinit(vdec);
99*437bfbebSnyanmisaka if (ret) {
100*437bfbebSnyanmisaka mpp_err(MODULE_TAG " deinit vdec failed\n");
101*437bfbebSnyanmisaka return ret;
102*437bfbebSnyanmisaka }
103*437bfbebSnyanmisaka
104*437bfbebSnyanmisaka ret = kmpp_vdec_put(vdec);
105*437bfbebSnyanmisaka
106*437bfbebSnyanmisaka mpp_log(MODULE_TAG " %s\n", ret ? "failed" : "success");
107*437bfbebSnyanmisaka return ret;
108*437bfbebSnyanmisaka }
109