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