xref: /rockchip-linux_mpp/inc/mpp_packet.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1 /* SPDX-License-Identifier: Apache-2.0 OR MIT */
2 /*
3  * Copyright (c) 2015 Rockchip Electronics Co., Ltd.
4  */
5 
6 #ifndef __MPP_PACKET_H__
7 #define __MPP_PACKET_H__
8 
9 #include "mpp_meta.h"
10 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 
15 /*
16  * MppPacket interface
17  *
18  * mpp_packet_init = mpp_packet_new + mpp_packet_set_data + mpp_packet_set_size
19  * mpp_packet_copy_init = mpp_packet_init + memcpy
20  */
21 MPP_RET mpp_packet_new(MppPacket *packet);
22 MPP_RET mpp_packet_init(MppPacket *packet, void *data, size_t size);
23 MPP_RET mpp_packet_init_with_buffer(MppPacket *packet, MppBuffer buffer);
24 MPP_RET mpp_packet_copy_init(MppPacket *packet, const MppPacket src);
25 MPP_RET mpp_packet_deinit(MppPacket *packet);
26 
27 /*
28  * data   : ( R/W ) start address of the whole packet memory
29  * size   : ( R/W ) total size of the whole packet memory
30  * pos    : ( R/W ) current access position of the whole packet memory, used for buffer read/write
31  * length : ( R/W ) the rest length from current position to end of buffer
32  *                  NOTE: normally length is updated only by set_pos,
33  *                        so set length must be used carefully for special usage
34  */
35 void    mpp_packet_set_data(MppPacket packet, void *data);
36 void    mpp_packet_set_size(MppPacket packet, size_t size);
37 void    mpp_packet_set_pos(MppPacket packet, void *pos);
38 void    mpp_packet_set_length(MppPacket packet, size_t size);
39 
40 void*   mpp_packet_get_data(const MppPacket packet);
41 void*   mpp_packet_get_pos(const MppPacket packet);
42 size_t  mpp_packet_get_size(const MppPacket packet);
43 size_t  mpp_packet_get_length(const MppPacket packet);
44 
45 
46 void    mpp_packet_set_pts(MppPacket packet, RK_S64 pts);
47 RK_S64  mpp_packet_get_pts(const MppPacket packet);
48 void    mpp_packet_set_dts(MppPacket packet, RK_S64 dts);
49 RK_S64  mpp_packet_get_dts(const MppPacket packet);
50 
51 void    mpp_packet_set_flag(MppPacket packet, RK_U32 flag);
52 RK_U32  mpp_packet_get_flag(const MppPacket packet);
53 
54 MPP_RET mpp_packet_set_eos(MppPacket packet);
55 MPP_RET mpp_packet_clr_eos(MppPacket packet);
56 RK_U32  mpp_packet_get_eos(MppPacket packet);
57 MPP_RET mpp_packet_set_extra_data(MppPacket packet);
58 
59 void        mpp_packet_set_buffer(MppPacket packet, MppBuffer buffer);
60 MppBuffer   mpp_packet_get_buffer(const MppPacket packet);
61 
62 /*
63  * data access interface
64  */
65 MPP_RET mpp_packet_read(MppPacket packet, size_t offset, void *data, size_t size);
66 MPP_RET mpp_packet_write(MppPacket packet, size_t offset, void *data, size_t size);
67 
68 /*
69  * meta data access interface
70  */
71 RK_S32  mpp_packet_has_meta(const MppPacket packet);
72 MppMeta mpp_packet_get_meta(const MppPacket packet);
73 
74 /*
75  * multi packet sequence interface for slice/split encoding/decoding
76  * partition - the packet is a part of a while image
77  * soi - Start Of Image
78  * eoi - End Of Image
79  */
80 RK_U32  mpp_packet_is_partition(const MppPacket packet);
81 RK_U32  mpp_packet_is_soi(const MppPacket packet);
82 RK_U32  mpp_packet_is_eoi(const MppPacket packet);
83 
84 /*
85  * packet segement pack info for
86  * segment number - number of segment
87  * segment info   - base address of segment info
88  */
89 typedef struct MppPktSeg_t MppPktSeg;
90 
91 struct MppPktSeg_t {
92     RK_S32          index;
93     RK_S32          type;
94     RK_U32          offset;
95     RK_U32          len;
96     const MppPktSeg *next;
97 };
98 
99 RK_U32 mpp_packet_get_segment_nb(const MppPacket packet);
100 const MppPktSeg *mpp_packet_get_segment_info(const MppPacket packet);
101 
102 #ifdef __cplusplus
103 }
104 #endif
105 
106 #endif /*__MPP_PACKET_H__*/
107