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