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