xref: /rockchip-linux_mpp/mpp/base/inc/mpp_packet_impl.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  * Copyright 2015 Rockchip Electronics Co. LTD
3*437bfbebSnyanmisaka  *
4*437bfbebSnyanmisaka  * Licensed under the Apache License, Version 2.0 (the "License");
5*437bfbebSnyanmisaka  * you may not use this file except in compliance with the License.
6*437bfbebSnyanmisaka  * You may obtain a copy of the License at
7*437bfbebSnyanmisaka  *
8*437bfbebSnyanmisaka  *      http://www.apache.org/licenses/LICENSE-2.0
9*437bfbebSnyanmisaka  *
10*437bfbebSnyanmisaka  * Unless required by applicable law or agreed to in writing, software
11*437bfbebSnyanmisaka  * distributed under the License is distributed on an "AS IS" BASIS,
12*437bfbebSnyanmisaka  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*437bfbebSnyanmisaka  * See the License for the specific language governing permissions and
14*437bfbebSnyanmisaka  * limitations under the License.
15*437bfbebSnyanmisaka  */
16*437bfbebSnyanmisaka 
17*437bfbebSnyanmisaka #ifndef __MPP_PACKET_IMPL_H__
18*437bfbebSnyanmisaka #define __MPP_PACKET_IMPL_H__
19*437bfbebSnyanmisaka 
20*437bfbebSnyanmisaka #include "mpp_packet.h"
21*437bfbebSnyanmisaka 
22*437bfbebSnyanmisaka #define MPP_PACKET_FLAG_EOS             (0x00000001)
23*437bfbebSnyanmisaka #define MPP_PACKET_FLAG_EXTRA_DATA      (0x00000002)
24*437bfbebSnyanmisaka #define MPP_PACKET_FLAG_INTERNAL        (0x00000004)
25*437bfbebSnyanmisaka #define MPP_PACKET_FLAG_INTRA           (0x00000010)
26*437bfbebSnyanmisaka #define MPP_PACKET_FLAG_PARTITION       (0x00000020)
27*437bfbebSnyanmisaka #define MPP_PACKET_FLAG_EOI             (0x00000040)
28*437bfbebSnyanmisaka 
29*437bfbebSnyanmisaka #define MPP_PKT_SEG_CNT_DEFAULT         8
30*437bfbebSnyanmisaka 
31*437bfbebSnyanmisaka typedef void (*ReleaseCb)(void *ctx, void *arg);
32*437bfbebSnyanmisaka 
33*437bfbebSnyanmisaka typedef union MppPacketStatus_t {
34*437bfbebSnyanmisaka     RK_U32  val;
35*437bfbebSnyanmisaka     struct {
36*437bfbebSnyanmisaka         RK_U32  eos         : 1;
37*437bfbebSnyanmisaka         RK_U32  extra_data  : 1;
38*437bfbebSnyanmisaka         RK_U32  internal    : 1;
39*437bfbebSnyanmisaka         /* packet is inputed on reset mark as discard */
40*437bfbebSnyanmisaka         RK_U32  discard     : 1;
41*437bfbebSnyanmisaka 
42*437bfbebSnyanmisaka         /* for slice input output */
43*437bfbebSnyanmisaka         RK_U32  partition   : 1;
44*437bfbebSnyanmisaka         RK_U32  soi         : 1;
45*437bfbebSnyanmisaka         RK_U32  eoi         : 1;
46*437bfbebSnyanmisaka     };
47*437bfbebSnyanmisaka } MppPacketStatus;
48*437bfbebSnyanmisaka 
49*437bfbebSnyanmisaka /*
50*437bfbebSnyanmisaka  * mpp_packet_imp structure
51*437bfbebSnyanmisaka  *
52*437bfbebSnyanmisaka  * data     : pointer
53*437bfbebSnyanmisaka  * size     : total buffer size
54*437bfbebSnyanmisaka  * offset   : valid data start offset
55*437bfbebSnyanmisaka  * length   : valid data length
56*437bfbebSnyanmisaka  * pts      : packet pts
57*437bfbebSnyanmisaka  * dts      : packet dts
58*437bfbebSnyanmisaka  */
59*437bfbebSnyanmisaka typedef struct MppPacketImpl_t {
60*437bfbebSnyanmisaka     const char      *name;
61*437bfbebSnyanmisaka 
62*437bfbebSnyanmisaka     void            *data;
63*437bfbebSnyanmisaka     void            *pos;
64*437bfbebSnyanmisaka     size_t          size;
65*437bfbebSnyanmisaka     size_t          length;
66*437bfbebSnyanmisaka 
67*437bfbebSnyanmisaka     RK_S64          pts;
68*437bfbebSnyanmisaka     RK_S64          dts;
69*437bfbebSnyanmisaka 
70*437bfbebSnyanmisaka     MppPacketStatus status;
71*437bfbebSnyanmisaka     RK_U32          flag;
72*437bfbebSnyanmisaka 
73*437bfbebSnyanmisaka     MppBuffer       buffer;
74*437bfbebSnyanmisaka     MppMeta         meta;
75*437bfbebSnyanmisaka     MppTask         task;
76*437bfbebSnyanmisaka 
77*437bfbebSnyanmisaka     RK_U32          segment_nb;
78*437bfbebSnyanmisaka     RK_U32          segment_buf_cnt;
79*437bfbebSnyanmisaka     MppPktSeg       segments_def[MPP_PKT_SEG_CNT_DEFAULT];
80*437bfbebSnyanmisaka     MppPktSeg       *segments_ext;
81*437bfbebSnyanmisaka     MppPktSeg       *segments;
82*437bfbebSnyanmisaka 
83*437bfbebSnyanmisaka     /* release callback info */
84*437bfbebSnyanmisaka     ReleaseCb       release;
85*437bfbebSnyanmisaka     void            *release_ctx;
86*437bfbebSnyanmisaka     void            *release_arg;
87*437bfbebSnyanmisaka } MppPacketImpl;
88*437bfbebSnyanmisaka 
89*437bfbebSnyanmisaka #ifdef __cplusplus
90*437bfbebSnyanmisaka extern "C" {
91*437bfbebSnyanmisaka #endif
92*437bfbebSnyanmisaka /*
93*437bfbebSnyanmisaka  * mpp_packet_reset is only used internelly and should NOT be used outside
94*437bfbebSnyanmisaka  */
95*437bfbebSnyanmisaka MPP_RET mpp_packet_reset(MppPacketImpl *packet);
96*437bfbebSnyanmisaka MPP_RET mpp_packet_copy(MppPacket dst, MppPacket src);
97*437bfbebSnyanmisaka MPP_RET mpp_packet_append(MppPacket dst, MppPacket src);
98*437bfbebSnyanmisaka 
99*437bfbebSnyanmisaka MPP_RET mpp_packet_set_status(MppPacket packet, MppPacketStatus status);
100*437bfbebSnyanmisaka MPP_RET mpp_packet_get_status(MppPacket packet, MppPacketStatus *status);
101*437bfbebSnyanmisaka void    mpp_packet_set_task(MppPacket packet, MppTask task);
102*437bfbebSnyanmisaka MppTask mpp_packet_get_task(MppPacket packet);
103*437bfbebSnyanmisaka 
104*437bfbebSnyanmisaka void    mpp_packet_reset_segment(MppPacket packet);
105*437bfbebSnyanmisaka void    mpp_packet_set_segment_nb(MppPacket packet, RK_U32 segment_nb);
106*437bfbebSnyanmisaka MPP_RET mpp_packet_add_segment_info(MppPacket packet, RK_S32 type, RK_S32 offset, RK_S32 len);
107*437bfbebSnyanmisaka void    mpp_packet_copy_segment_info(MppPacket dst, MppPacket src);
108*437bfbebSnyanmisaka void    mpp_packet_set_release(MppPacket packet, ReleaseCb release, void *ctx, void *arg);
109*437bfbebSnyanmisaka 
110*437bfbebSnyanmisaka /* pointer check function */
111*437bfbebSnyanmisaka MPP_RET check_is_mpp_packet_f(void *ptr, const char *caller);
112*437bfbebSnyanmisaka #define check_is_mpp_packet(ptr) check_is_mpp_packet_f(ptr, __FUNCTION__)
113*437bfbebSnyanmisaka 
114*437bfbebSnyanmisaka #ifdef __cplusplus
115*437bfbebSnyanmisaka }
116*437bfbebSnyanmisaka #endif
117*437bfbebSnyanmisaka 
118*437bfbebSnyanmisaka #endif /*__MPP_PACKET_IMPL_H__*/
119