xref: /rockchip-linux_mpp/kmpp/test/kmpp_vdec_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_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