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