xref: /rockchip-linux_mpp/readme.txt (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisakaMedia Process Platform (MPP) module directory description:
2*437bfbebSnyanmisaka
3*437bfbebSnyanmisakaMPP    : Media Process Platform
4*437bfbebSnyanmisakaMPI    : Media Process Interface
5*437bfbebSnyanmisakaHAL    : Hardware Abstract Layer
6*437bfbebSnyanmisakaOSAL   : Operation System Abstract Layer
7*437bfbebSnyanmisaka
8*437bfbebSnyanmisakaRules:
9*437bfbebSnyanmisaka1. header file arrange rule
10*437bfbebSnyanmisakaa. inc directory in each module folder is for external module usage.
11*437bfbebSnyanmisakab. module internal header file should be put along with the implement file.
12*437bfbebSnyanmisakac. header file should not contain any relative path or absolute path, all
13*437bfbebSnyanmisaka   include path should be keep in Makefile.
14*437bfbebSnyanmisaka2. compiling system rule
15*437bfbebSnyanmisakaa. for cross platform compiling use cmake as the compiling management system.
16*437bfbebSnyanmisakab. use cmake out-of-source build, final binary and library will be install to
17*437bfbebSnyanmisaka   out/ directory.
18*437bfbebSnyanmisaka3. header file include order
19*437bfbebSnyanmisakaa. MODULE_TAG
20*437bfbebSnyanmisakab. system header
21*437bfbebSnyanmisakac. osal header
22*437bfbebSnyanmisakad. module header
23*437bfbebSnyanmisaka
24*437bfbebSnyanmisakaNOTE:
25*437bfbebSnyanmisaka1. Windows support is NOT maintained any more.
26*437bfbebSnyanmisaka2. Mpp support all rockchip chipset now including:
27*437bfbebSnyanmisaka   RK29XX/RK30XX/RK31XX
28*437bfbebSnyanmisaka   RK3288/RK3368/RK3399
29*437bfbebSnyanmisaka   RK3228/RK3229/RK3228H/RK3328
30*437bfbebSnyanmisaka   RK3528/RK3528A
31*437bfbebSnyanmisaka   RK3562
32*437bfbebSnyanmisaka   RK3566/RK3568
33*437bfbebSnyanmisaka   RK3588
34*437bfbebSnyanmisaka   RV1108/RV1107
35*437bfbebSnyanmisaka   RV1109/RV1126
36*437bfbebSnyanmisaka3. Mpp support all format hardware can support except VC1.
37*437bfbebSnyanmisaka4. you can get demo about mpp applied to linux and android.
38*437bfbebSnyanmisaka     Liunx : https://github.com/WainDing/mpp_linux_cpp
39*437bfbebSnyanmisaka             https://github.com/MUZLATAN
40*437bfbebSnyanmisaka             https://github.com/nyanmisaka
41*437bfbebSnyanmisaka     Android : https://github.com/c-xh/RKMediaCodecDemo
42*437bfbebSnyanmisaka5. offical github: https://github.com/rockchip-linux/mpp
43*437bfbebSnyanmisaka   develop github: https://github.com/HermanChen/mpp
44*437bfbebSnyanmisaka   develop gitee : https://gitee.com/hermanchen82/mpp
45*437bfbebSnyanmisaka6. Commit message format should base on https://keepachangelog.com/en/1.0.0/
46*437bfbebSnyanmisaka
47*437bfbebSnyanmisakaMore document can be found at http://opensource.rock-chips.com/wiki_Mpp
48*437bfbebSnyanmisaka
49*437bfbebSnyanmisaka----                             top
50*437bfbebSnyanmisaka   |
51*437bfbebSnyanmisaka   |----- build                  CMake out-of-source build directory
52*437bfbebSnyanmisaka   |  |
53*437bfbebSnyanmisaka   |  |----- cmake               cmake script directory
54*437bfbebSnyanmisaka   |  |
55*437bfbebSnyanmisaka   |  |----- android             android build directory
56*437bfbebSnyanmisaka   |  |
57*437bfbebSnyanmisaka   |  |----- linux               linux build directory
58*437bfbebSnyanmisaka   |  |
59*437bfbebSnyanmisaka   |  |----- vc10-x86_64         visual studio 2010 on x86_64 build directory
60*437bfbebSnyanmisaka   |  |
61*437bfbebSnyanmisaka   |  |----- vc12-x86_64         visual studio 2013 on x86_64 build directory
62*437bfbebSnyanmisaka   |
63*437bfbebSnyanmisaka   |----- doc                    design documents of mpp
64*437bfbebSnyanmisaka   |
65*437bfbebSnyanmisaka   |----- inc                    header file for external usage, including
66*437bfbebSnyanmisaka   |                             platform header and mpi header
67*437bfbebSnyanmisaka   |
68*437bfbebSnyanmisaka   |----- mpp                    Media Process Platform : mpi function private
69*437bfbebSnyanmisaka   |  |                          implement and mpp infrastructure (vpu_api
70*437bfbebSnyanmisaka   |  |                          private layer)
71*437bfbebSnyanmisaka   |  |
72*437bfbebSnyanmisaka   |  |----- base                base components including MppBuffer, MppFrame,
73*437bfbebSnyanmisaka   |  |                          MppPacket, MppTask, MppMeta, etc.
74*437bfbebSnyanmisaka   |  |
75*437bfbebSnyanmisaka   |  |----- common              video codec protocol syntax interface for both
76*437bfbebSnyanmisaka   |  |                          codec parser and hal
77*437bfbebSnyanmisaka   |  |
78*437bfbebSnyanmisaka   |  |----- codec               all video codec parser, convert stream to
79*437bfbebSnyanmisaka   |  |  |                       protocol structure
80*437bfbebSnyanmisaka   |  |  |
81*437bfbebSnyanmisaka   |  |  |----- inc              header files provided by codec module for
82*437bfbebSnyanmisaka   |  |  |                       external usage
83*437bfbebSnyanmisaka   |  |  |
84*437bfbebSnyanmisaka   |  |  |----- dec
85*437bfbebSnyanmisaka   |  |  |  |
86*437bfbebSnyanmisaka   |  |  |  |----- dummy         decoder parser work flow sample
87*437bfbebSnyanmisaka   |  |  |  |
88*437bfbebSnyanmisaka   |  |  |  |----- h263
89*437bfbebSnyanmisaka   |  |  |  |
90*437bfbebSnyanmisaka   |  |  |  |----- h264
91*437bfbebSnyanmisaka   |  |  |  |
92*437bfbebSnyanmisaka   |  |  |  |----- h265
93*437bfbebSnyanmisaka   |  |  |  |
94*437bfbebSnyanmisaka   |  |  |  |----- m2v           mpeg2 parser
95*437bfbebSnyanmisaka   |  |  |  |
96*437bfbebSnyanmisaka   |  |  |  |----- mpg4          mpeg4 parser
97*437bfbebSnyanmisaka   |  |  |  |
98*437bfbebSnyanmisaka   |  |  |  |----- vp8
99*437bfbebSnyanmisaka   |  |  |  |
100*437bfbebSnyanmisaka   |  |  |  |----- vp9
101*437bfbebSnyanmisaka   |  |  |  |
102*437bfbebSnyanmisaka   |  |  |  |----- jpeg
103*437bfbebSnyanmisaka   |  |  |
104*437bfbebSnyanmisaka   |  |  |----- enc
105*437bfbebSnyanmisaka   |  |     |
106*437bfbebSnyanmisaka   |  |     |----- dummy         encoder controllor work flow sample
107*437bfbebSnyanmisaka   |  |     |
108*437bfbebSnyanmisaka   |  |     |----- h264
109*437bfbebSnyanmisaka   |  |     |
110*437bfbebSnyanmisaka   |  |     |----- h265
111*437bfbebSnyanmisaka   |  |     |
112*437bfbebSnyanmisaka   |  |     |----- jpeg
113*437bfbebSnyanmisaka   |  |
114*437bfbebSnyanmisaka   |  |----- hal                 Hardware Abstract Layer (HAL): modules used in mpi
115*437bfbebSnyanmisaka   |  |  |
116*437bfbebSnyanmisaka   |  |  |----- inc              header files provided by hal for external usage
117*437bfbebSnyanmisaka   |  |  |
118*437bfbebSnyanmisaka   |  |  |----- iep              iep user library
119*437bfbebSnyanmisaka   |  |  |
120*437bfbebSnyanmisaka   |  |  |----- pp               post-processor user library
121*437bfbebSnyanmisaka   |  |  |
122*437bfbebSnyanmisaka   |  |  |----- rga              rga user library
123*437bfbebSnyanmisaka   |  |  |
124*437bfbebSnyanmisaka   |  |  |----- deinter          deinterlace function module including pp/iep/rga
125*437bfbebSnyanmisaka   |  |  |
126*437bfbebSnyanmisaka   |  |  |----- rkdec            rockchip hardware decoder register generation
127*437bfbebSnyanmisaka   |  |  |  |
128*437bfbebSnyanmisaka   |  |  |  |----- h264d         generate register file from H.264 syntax info
129*437bfbebSnyanmisaka   |  |  |  |
130*437bfbebSnyanmisaka   |  |  |  |----- h265d         generate register file from H.265 syntax info
131*437bfbebSnyanmisaka   |  |  |  |
132*437bfbebSnyanmisaka   |  |  |  |----- vp9d          generate register file from vp9 syntax info
133*437bfbebSnyanmisaka   |  |  |
134*437bfbebSnyanmisaka   |  |  |----- vpu              vpu register generation library
135*437bfbebSnyanmisaka   |  |     |
136*437bfbebSnyanmisaka   |  |     |----- h263d         generate register file from H.263 syntax info
137*437bfbebSnyanmisaka   |  |     |
138*437bfbebSnyanmisaka   |  |     |----- h264d         generate register file from H.264 syntax info
139*437bfbebSnyanmisaka   |  |     |
140*437bfbebSnyanmisaka   |  |     |----- h265d         generate register file from H.265 syntax info
141*437bfbebSnyanmisaka   |  |     |
142*437bfbebSnyanmisaka   |  |     |----- jpegd         generate register file from jpeg syntax info
143*437bfbebSnyanmisaka   |  |     |
144*437bfbebSnyanmisaka   |  |     |----- jpege         generate register file from jpeg syntax info
145*437bfbebSnyanmisaka   |  |     |
146*437bfbebSnyanmisaka   |  |     |----- m2vd          generate register file from mpeg2 syntax info
147*437bfbebSnyanmisaka   |  |     |
148*437bfbebSnyanmisaka   |  |     |----- mpg4d         generate register file from mpeg4 syntax info
149*437bfbebSnyanmisaka   |  |     |
150*437bfbebSnyanmisaka   |  |     |----- vp8d          generate register file from vp8 syntax info
151*437bfbebSnyanmisaka   |  |
152*437bfbebSnyanmisaka   |  |----- legacy              generate new libvpu to include old vpuapi path
153*437bfbebSnyanmisaka   |  |                          and new mpp path
154*437bfbebSnyanmisaka   |  |
155*437bfbebSnyanmisaka   |  |----- test                mpp internal video protocol unit test and demo
156*437bfbebSnyanmisaka   |
157*437bfbebSnyanmisaka   |----- test                   mpp buffer/packet component unit test and
158*437bfbebSnyanmisaka   |                             mpp/mpi/vpu_api demo
159*437bfbebSnyanmisaka   |
160*437bfbebSnyanmisaka   |----- out                    final release binary output directory
161*437bfbebSnyanmisaka   |  |
162*437bfbebSnyanmisaka   |  |----- bin                 executable binary file output directory
163*437bfbebSnyanmisaka   |  |
164*437bfbebSnyanmisaka   |  |----- inc                 header file output directory
165*437bfbebSnyanmisaka   |  |
166*437bfbebSnyanmisaka   |  |----- lib                 library file output directory
167*437bfbebSnyanmisaka   |
168*437bfbebSnyanmisaka   |----- osal                   Operation System Abstract Layer: abstract layer
169*437bfbebSnyanmisaka   |  |                          for different operation system
170*437bfbebSnyanmisaka   |  |
171*437bfbebSnyanmisaka   |  |----- allocator           supported allocator including Android ion and
172*437bfbebSnyanmisaka   |  |                          Linux drm
173*437bfbebSnyanmisaka   |  |
174*437bfbebSnyanmisaka   |  |----- android             google's android
175*437bfbebSnyanmisaka   |  |
176*437bfbebSnyanmisaka   |  |----- inc                 osal header file for mpp modules
177*437bfbebSnyanmisaka   |  |
178*437bfbebSnyanmisaka   |  |----- linux               mainline linux kernel
179*437bfbebSnyanmisaka   |  |
180*437bfbebSnyanmisaka   |  |----- windows             microsoft's windows
181*437bfbebSnyanmisaka   |  |
182*437bfbebSnyanmisaka   |  |----- test                OASL unit test
183*437bfbebSnyanmisaka   |
184*437bfbebSnyanmisaka   |----- tools                  coding style format tools
185*437bfbebSnyanmisaka   |
186*437bfbebSnyanmisaka   |----- utils                  small util functions
187*437bfbebSnyanmisaka
188*437bfbebSnyanmisaka
189*437bfbebSnyanmisakaHere is the mpp implement overall framework:
190*437bfbebSnyanmisaka
191*437bfbebSnyanmisaka                +---------------------------------------+
192*437bfbebSnyanmisaka                |                                       |
193*437bfbebSnyanmisaka                |      OpenMax / gstreamer / libva      |
194*437bfbebSnyanmisaka                |                                       |
195*437bfbebSnyanmisaka                +---------------------------------------+
196*437bfbebSnyanmisaka
197*437bfbebSnyanmisaka            +-------------------- MPP ----------------------+
198*437bfbebSnyanmisaka            |                                               |
199*437bfbebSnyanmisaka            |   +-------------------------+    +--------+   |
200*437bfbebSnyanmisaka            |   |                         |    |        |   |
201*437bfbebSnyanmisaka            |   |        MPI / MPP        |    |        |   |
202*437bfbebSnyanmisaka            |   |   buffer queue manage   |    |        |   |
203*437bfbebSnyanmisaka            |   |                         |    |        |   |
204*437bfbebSnyanmisaka            |   +-------------------------+    |        |   |
205*437bfbebSnyanmisaka            |                                  |        |   |
206*437bfbebSnyanmisaka            |   +-------------------------+    |        |   |
207*437bfbebSnyanmisaka            |   |                         |    |        |   |
208*437bfbebSnyanmisaka            |   |          codec          |    |  OSAL  |   |
209*437bfbebSnyanmisaka            |   |    decoder / encoder    |    |        |   |
210*437bfbebSnyanmisaka            |   |                         |    |        |   |
211*437bfbebSnyanmisaka            |   +-------------------------+    |        |   |
212*437bfbebSnyanmisaka            |                                  |        |   |
213*437bfbebSnyanmisaka            |   +-----------+ +-----------+    |        |   |
214*437bfbebSnyanmisaka            |   |           | |           |    |        |   |
215*437bfbebSnyanmisaka            |   |  parser   | |    HAL    |    |        |   |
216*437bfbebSnyanmisaka            |   |  recoder  | |  reg_gen  |    |        |   |
217*437bfbebSnyanmisaka            |   |           | |           |    |        |   |
218*437bfbebSnyanmisaka            |   +-----------+ +-----------+    +--------|   |
219*437bfbebSnyanmisaka            |                                               |
220*437bfbebSnyanmisaka            +-------------------- MPP ----------------------+
221*437bfbebSnyanmisaka
222*437bfbebSnyanmisaka                +---------------------------------------+
223*437bfbebSnyanmisaka                |                                       |
224*437bfbebSnyanmisaka                |                kernel                 |
225*437bfbebSnyanmisaka                |       RK vcodec_service / v4l2        |
226*437bfbebSnyanmisaka                |                                       |
227*437bfbebSnyanmisaka                +---------------------------------------+
228*437bfbebSnyanmisaka
229*437bfbebSnyanmisaka
230*437bfbebSnyanmisaka
231*437bfbebSnyanmisakaHere is the Media Process Interface hierarchical structure
232*437bfbebSnyanmisakaMpiPacket and MpiFrame is the stream I/O data structure.
233*437bfbebSnyanmisakaAnd MpiBuffer encapsulates different buffer implement like Linux's dma-buf and
234*437bfbebSnyanmisakaAndroid's ion.
235*437bfbebSnyanmisakaThis part is learned from ff.
236*437bfbebSnyanmisaka
237*437bfbebSnyanmisaka                +-------------------+
238*437bfbebSnyanmisaka                |                   |
239*437bfbebSnyanmisaka                |        MPI        |
240*437bfbebSnyanmisaka                |                   |
241*437bfbebSnyanmisaka                +---------+---------+
242*437bfbebSnyanmisaka                          |
243*437bfbebSnyanmisaka                          |
244*437bfbebSnyanmisaka                          v
245*437bfbebSnyanmisaka                +---------+---------+
246*437bfbebSnyanmisaka                |                   |
247*437bfbebSnyanmisaka            +---+        ctx        +---+
248*437bfbebSnyanmisaka            |   |                   |   |
249*437bfbebSnyanmisaka            |   +-------------------+   |
250*437bfbebSnyanmisaka            |                           |
251*437bfbebSnyanmisaka            v                           v
252*437bfbebSnyanmisaka    +-------+-------+           +-------+-------+
253*437bfbebSnyanmisaka    |               |           |               |
254*437bfbebSnyanmisaka    |     packet    |           |     frame     |
255*437bfbebSnyanmisaka    |               |           |               |
256*437bfbebSnyanmisaka    +---------------+           +-------+-------+
257*437bfbebSnyanmisaka            |                           |
258*437bfbebSnyanmisaka            |                           |
259*437bfbebSnyanmisaka            |                           |
260*437bfbebSnyanmisaka            |     +---------------+     |
261*437bfbebSnyanmisaka            |     |               |     |
262*437bfbebSnyanmisaka            +---->+     buffer    +<----+
263*437bfbebSnyanmisaka                  |               |
264*437bfbebSnyanmisaka                  +---------------+
265*437bfbebSnyanmisaka
266*437bfbebSnyanmisaka
267*437bfbebSnyanmisaka
268*437bfbebSnyanmisakaTake H.264 deocder for example. Video stream will first queued by MPI/MPP layer,
269*437bfbebSnyanmisakaMPP will send the stream to codec layer, codec layer parses the stream header
270*437bfbebSnyanmisakaand generates a protocol standard output. This output will be send to HAL to
271*437bfbebSnyanmisakagenerate register file set and communicate with hardware. Hardware will complete
272*437bfbebSnyanmisakathe task and resend information back. MPP notify codec by hardware result, codec
273*437bfbebSnyanmisakaoutput decoded frame by display order.
274*437bfbebSnyanmisaka
275*437bfbebSnyanmisakaMPI                MPP              decoder             parser              HAL
276*437bfbebSnyanmisaka
277*437bfbebSnyanmisaka +                  +                  +                  +                  +
278*437bfbebSnyanmisaka |                  |                  |                  |                  |
279*437bfbebSnyanmisaka |   open context   |                  |                  |                  |
280*437bfbebSnyanmisaka +----------------> |                  |                  |                  |
281*437bfbebSnyanmisaka |                  |                  |                  |                  |
282*437bfbebSnyanmisaka |       init       |                  |                  |                  |
283*437bfbebSnyanmisaka +----------------> |                  |                  |                  |
284*437bfbebSnyanmisaka |                  |                  |                  |                  |
285*437bfbebSnyanmisaka |                  |       init       |                  |                  |
286*437bfbebSnyanmisaka |                  +----------------> |                  |                  |
287*437bfbebSnyanmisaka |                  |                  |                  |                  |
288*437bfbebSnyanmisaka |                  |                  |       init       |                  |
289*437bfbebSnyanmisaka |                  |                  +----------------> |                  |
290*437bfbebSnyanmisaka |                  |                  |                  |                  |
291*437bfbebSnyanmisaka |                  |                  |                  |       open       |
292*437bfbebSnyanmisaka |                  |                  +-----------------------------------> |
293*437bfbebSnyanmisaka |                  |                  |                  |                  |
294*437bfbebSnyanmisaka |      decode      |                  |                  |                  |
295*437bfbebSnyanmisaka +----------------> |                  |                  |                  |
296*437bfbebSnyanmisaka |                  |                  |                  |                  |
297*437bfbebSnyanmisaka |                  |   send_stream    |                  |                  |
298*437bfbebSnyanmisaka |                  +----------------> |                  |                  |
299*437bfbebSnyanmisaka |                  |                  |                  |                  |
300*437bfbebSnyanmisaka |                  |                  |   parse_stream   |                  |
301*437bfbebSnyanmisaka |                  |                  +----------------> |                  |
302*437bfbebSnyanmisaka |                  |                  |                  |                  |
303*437bfbebSnyanmisaka |                  |                  |                  |  reg generation  |
304*437bfbebSnyanmisaka |                  |                  +-----------------------------------> |
305*437bfbebSnyanmisaka |                  |                  |                  |                  |
306*437bfbebSnyanmisaka |                  |                  |                  |    send_regs     |
307*437bfbebSnyanmisaka |                  |                  +-----------------------------------> |
308*437bfbebSnyanmisaka |                  |                  |                  |                  |
309*437bfbebSnyanmisaka |                  |                  |                  |    wait_regs     |
310*437bfbebSnyanmisaka |                  |                  +-----------------------------------> |
311*437bfbebSnyanmisaka |                  |                  |                  |                  |
312*437bfbebSnyanmisaka |                  |                  |  notify_hw_end   |                  |
313*437bfbebSnyanmisaka |                  |                  +----------------> |                  |
314*437bfbebSnyanmisaka |                  |                  |                  |                  |
315*437bfbebSnyanmisaka |                  |   get_picture    |                  |                  |
316*437bfbebSnyanmisaka |                  +----------------> |                  |                  |
317*437bfbebSnyanmisaka |                  |                  |                  |                  |
318*437bfbebSnyanmisaka |                  |                  |   get_picture    |                  |
319*437bfbebSnyanmisaka |                  |                  +----------------> |                  |
320*437bfbebSnyanmisaka |                  |                  |                  |                  |
321*437bfbebSnyanmisaka |      flush       |                  |                  |                  |
322*437bfbebSnyanmisaka +----------------> |                  |                  |                  |
323*437bfbebSnyanmisaka |                  |                  |                  |                  |
324*437bfbebSnyanmisaka |                  |      flush       |                  |                  |
325*437bfbebSnyanmisaka |                  +----------------> |                  |                  |
326*437bfbebSnyanmisaka |                  |                  |                  |                  |
327*437bfbebSnyanmisaka |                  |                  |      reset       |                  |
328*437bfbebSnyanmisaka |                  |                  +----------------> |                  |
329*437bfbebSnyanmisaka |                  |                  |                  |                  |
330*437bfbebSnyanmisaka |      close       |                  |                  |                  |
331*437bfbebSnyanmisaka +----------------> |                  |                  |                  |
332*437bfbebSnyanmisaka |                  |                  |                  |                  |
333*437bfbebSnyanmisaka |                  |      close       |                  |                  |
334*437bfbebSnyanmisaka |                  +----------------> |                  |                  |
335*437bfbebSnyanmisaka |                  |                  |                  |                  |
336*437bfbebSnyanmisaka |                  |                  |      close       |                  |
337*437bfbebSnyanmisaka |                  |                  +----------------> |                  |
338*437bfbebSnyanmisaka |                  |                  |                  |                  |
339*437bfbebSnyanmisaka |                  |                  |                  |      close       |
340*437bfbebSnyanmisaka |                  |                  +-----------------------------------> |
341*437bfbebSnyanmisaka +                  +                  +                  +                  +
342*437bfbebSnyanmisaka
343*437bfbebSnyanmisakaThere are three memory usage modes that decoder can support:
344*437bfbebSnyanmisaka
345*437bfbebSnyanmisakaMode 1: Pure internal mode
346*437bfbebSnyanmisakaIn the mode user will NOT call MPP_DEC_SET_EXT_BUF_GROUP control to decoder.
347*437bfbebSnyanmisakaOnly call MPP_DEC_SET_INFO_CHANGE_READY to let decoder go on. Then decoder will
348*437bfbebSnyanmisakause create buffer internally and user need to release each frame they get.
349*437bfbebSnyanmisaka
350*437bfbebSnyanmisakaAdvantage:
351*437bfbebSnyanmisakaEasy to use and get a demo quickly
352*437bfbebSnyanmisakaDisadvantage:
353*437bfbebSnyanmisaka1. The buffer from decoder may not be return before decoder is close.
354*437bfbebSnyanmisaka   So memory leak or crash may happen.
355*437bfbebSnyanmisaka2. The decoder memory usage can not be control. Decoder is on a free-to-run
356*437bfbebSnyanmisaka   status and consume all memory it can get.
357*437bfbebSnyanmisaka3. Difficult to implement zero-copy display path.
358*437bfbebSnyanmisaka
359*437bfbebSnyanmisakaMode 2: Half internal mode
360*437bfbebSnyanmisakaThis is the mode current mpi_dec_test code using. User need to create
361*437bfbebSnyanmisakaMppBufferGroup according to the returned info change MppFrame.
362*437bfbebSnyanmisakaUser can use mpp_buffer_group_limit_config to limit decoder memory usage.
363*437bfbebSnyanmisaka
364*437bfbebSnyanmisakaAdvantage:
365*437bfbebSnyanmisaka1. Easy to use
366*437bfbebSnyanmisaka2. User can release MppBufferGroup after decoder is closed.
367*437bfbebSnyanmisaka   So memory can stay longer safely.
368*437bfbebSnyanmisaka3. Can limit the memory usage by mpp_buffer_group_limit_config
369*437bfbebSnyanmisakaDisadvantage:
370*437bfbebSnyanmisaka1. The buffer limitation is still not accurate. Memory usage is 100% fixed.
371*437bfbebSnyanmisaka2. Also difficult to implement zero-copy display path.
372*437bfbebSnyanmisaka
373*437bfbebSnyanmisakaMode 3: Pure external mode
374*437bfbebSnyanmisakaIn this mode use need to create empty MppBufferGroup and import memory from
375*437bfbebSnyanmisakaexternal allocator by file handle.
376*437bfbebSnyanmisakaOn Android surfaceflinger will create buffer. Then mediaserver get file handle
377*437bfbebSnyanmisakafrom surfaceflinger and commit to decoder's MppBufferGroup.
378*437bfbebSnyanmisaka
379*437bfbebSnyanmisakaAdvantage:
380*437bfbebSnyanmisaka1. Most efficient way for zero-copy display
381*437bfbebSnyanmisakaDisadvantage:
382*437bfbebSnyanmisaka1. Difficult to learn and use.
383*437bfbebSnyanmisaka2. Player work flow may limit this usage.
384*437bfbebSnyanmisaka3. May need external parser to get the correct buffer size for the external
385*437bfbebSnyanmisaka   allocator.
386*437bfbebSnyanmisaka
387*437bfbebSnyanmisakaThe required buffer size caculation:
388*437bfbebSnyanmisakahor_stride * ver_stride * 3 / 2 for pixel data
389*437bfbebSnyanmisakahor_stride * ver_stride / 2 for extra info
390*437bfbebSnyanmisakaTotal hor_stride * ver_stride * 2 will be enough.
391*437bfbebSnyanmisaka
392*437bfbebSnyanmisakaFor H.264/H.265 20+ buffers will be enough.
393*437bfbebSnyanmisakaFor other codec 10 buffers will be enough.
394