-
Notifications
You must be signed in to change notification settings - Fork 111
/
Copy pathreadme.txt
260 lines (244 loc) · 12.7 KB
/
readme.txt
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
Media Process Platform (MPP) module directory description:
MPP : Media Process Platform
MPI : Media Process Interface
HAL : Hardware Abstract Layer
OSAL : Operation System Abstract Layer
Rules:
1. header file arrange rule
a. inc directory in each module folder is for external module usage.
b. module internal header file should be put along with the implement file.
c. header file should not contain any relative path or absolute path, all include path should be keep in Makefile.
2. compiling system rule
a. for cross platform compiling use cmake as the compiling management system.
b. use cmake out-of-source build, final binary and library will be install to out/ directory.
3. header file include order
a. MODULE_TAG
b. system header
c. osal header
d. module header
NOTE:
1. when run on window pthreadVC2.dll needed to be copied to the system directory.
---- top
|
|----- build CMake out-of-source build directory
| |
| |----- cmake cmake script directory
| |
| |----- android android build directory
| |
| |----- linux linux build directory
| |
| |----- vc10-x86_64 visual studio 2010 on x86_64 build directory
| |
| |----- vc12-x86_64 visual studio 2013 on x86_64 build directory
|
|----- inc header file for external usage, including platform header and mpi header
|
|----- mpp Media Process Platform : mpi function private implement and mpp infrastructure (vpu_api private layer)
| |
| |----- common video codec protocol syntax interface for both codec parser and hal
| |
| |----- codec all video codec parser, convert stream to protocol structure
| | |
| | |----- inc header files provided by codec module for external usage
| | |
| | |----- dec
| | | |
| | | |----- dummy decoder parser work flow sample
| | | |
| | | |----- h264
| | | |
| | | |----- h265
| | | |
| | | |----- vp9
| | | |
| | | |----- jpeg
| | |
| | |----- enc
| | |
| | |----- dummy encoder controllor work flow sample
| | |
| | |----- h264
| | |
| | |----- h265
| | |
| | |----- jpeg
| |
| |----- hal Hardware Abstract Layer (HAL): modules used in mpi
| | |
| | |----- inc header files provided by hal for external usage
| | |
| | |----- iep iep user library
| | |
| | |----- pp post-processor user library
| | |
| | |----- rga rga user library
| | |
| | |----- deinter deinterlace function module including pp/iep/rga
| | |
| | |----- rkdec rockchip hardware decoder register generation library
| | | |
| | | |----- h264d generate register file from H.264 structure created by codec parser
| | | |
| | | |----- h265d generate register file from H.265 structure created by codec parser
| | | |
| | | |----- vp9d generate register file from vp9 structure created by codec parser
| | |
| | |----- vpu vpu register generation library
| | |
| | |----- h264d generate register file from H.264 structure created by codec parser
| | |
| | |----- h265d generate register file from H.265 structure created by codec parser
| |
| |----- legacy generate new libvpu to include old vpuapi path and new mpp path
| |
| |----- test mpp internal video protocol unit test and demo
|
|----- test mpp buffer/packet component unit test and mpi demo
|
|----- out final release binary output directory
| |
| |----- bin executable binary file output directory
| |
| |----- inc header file output directory
| |
| |----- lib library file output directory
|
|----- osal Operation System Abstract Layer: abstract layer for different operation system
| |
| |----- mem mpi memory subsystem for hardware
| |
| |----- android google's android
| |
| |----- linux mainline linux kernel
| |
| |----- window microsoft's window
| |
| |----- test OASL unit test
|
|----- tools coding style format tools
|
|----- utils small util functions
Here is the mpp implement overall framework:
+-------------------------+ +--------+
| | | |
| MPI / MPP | | |
| buffer queue manage | | |
| | | |
+-------------------------+ | |
| |
+-------------------------+ | |
| | | |
| codec | | OSAL |
| decoder / encoder | | |
| | | |
+-------------------------+ | |
| |
+-----------+ +-----------+ | |
| | | | | |
| parser | | HAL | | |
| recoder | | reg_gen | | |
| | | | | |
+-----------+ +-----------+ +--------+
Here is the Media Process Interface hierarchical structure
MpiPacket and MpiFrame is the stream I/O data structure.
And MpiBuffer encapsulates different buffer implement like Linux's dma-buf and Android's ion.
This part is learned from ffmpeg.
+-------------------+
| |
| MPI |
| |
+---------+---------+
|
|
v
+---------+---------+
| |
+---+ ctx +---+
| | | |
| +-------------------+ |
| |
v v
+-------+-------+ +-------+-------+
| | | |
| packet | | frame |
| | | |
+---------------+ +-------+-------+
| |
| |
| |
| +---------------+ |
| | | |
+---->+ buffer +<----+
| |
+---------------+
Take H.264 deocder for example. Video stream will first queued by MPI/MPP layer, MPP will send the stream to codec layer,
codec layer parses the stream header and generates a protocol standard output. This output will be send to HAL to generate
register file set and communicate with hardware. Hardware will complete the task and resend information back. MPP notify
codec by hardware result, codec output decoded frame by display order.
MPI MPP decoder parser HAL
+ + + + +
| | | | |
| open context | | | |
+----------------> | | | |
| | | | |
| init | | | |
+----------------> | | | |
| | | | |
| | init | | |
| +----------------> | | |
| | | | |
| | | init | |
| | +----------------> | |
| | | | |
| | | | open |
| | +-----------------------------------> |
| | | | |
| decode | | | |
+----------------> | | | |
| | | | |
| | send_stream | | |
| +----------------> | | |
| | | | |
| | | parse_stream | |
| | +----------------> | |
| | | | |
| | | | reg generation |
| | +-----------------------------------> |
| | | | |
| | | | send_regs |
| | +-----------------------------------> |
| | | | |
| | | | wait_regs |
| | +-----------------------------------> |
| | | | |
| | | notify_hw_end | |
| | +----------------> | |
| | | | |
| | get_picture | | |
| +----------------> | | |
| | | | |
| | | get_picture | |
| | +----------------> | |
| | | | |
| flush | | | |
+----------------> | | | |
| | | | |
| | flush | | |
| +----------------> | | |
| | | | |
| | | reset | |
| | +----------------> | |
| | | | |
| close | | | |
+----------------> | | | |
| | | | |
| | close | | |
| +----------------> | | |
| | | | |
| | | close | |
| | +----------------> | |
| | | | |
| | | | close |
| | +-----------------------------------> |
+ + + + +