xref: /rockchip-linux_mpp/doc/design/4.mpp_task.txt (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisakaMPP task design (2017.4.7)
2*437bfbebSnyanmisaka================================================================================
3*437bfbebSnyanmisaka
4*437bfbebSnyanmisakaMpp task is the contain component for transaction with external user in advanced
5*437bfbebSnyanmisakamode. The target of advanced mode is to provide flexible, multiple input/output
6*437bfbebSnyanmisakacontent for extension.
7*437bfbebSnyanmisaka
8*437bfbebSnyanmisakaMpp task has mpp_meta as the rich content carrier. Mpp meta uses KEY and value
9*437bfbebSnyanmisakapair for extension. One task can carries multiple data into or out of mpp.
10*437bfbebSnyanmisakaThe typical case is encoder with OSD and motion detection. One task may contain
11*437bfbebSnyanmisakaOSD buffer, motion detection buffer, frame buffer and stream buffer as input and
12*437bfbebSnyanmisakaoutput stream buffer and motion detection buffer with data. And this case can
13*437bfbebSnyanmisakaalso be used on decoder if decoder wants to output some side information.
14*437bfbebSnyanmisaka
15*437bfbebSnyanmisaka
16*437bfbebSnyanmisakaMpp task transaction
17*437bfbebSnyanmisaka================================================================================
18*437bfbebSnyanmisaka
19*437bfbebSnyanmisaka1. Mpp task queue
20*437bfbebSnyanmisakaMpp task queue is the manager of tasks. Due to user may incorrectly use the task
21*437bfbebSnyanmisakawe choose the design that hold all task inside mpp. Task queue will create and
22*437bfbebSnyanmisakarelease task. But task queue will not interact with user directly. We use port
23*437bfbebSnyanmisakaand task status to control the transaction.
24*437bfbebSnyanmisaka
25*437bfbebSnyanmisaka2. Mpp port
26*437bfbebSnyanmisakaMpp port is the transaction interface of task queue. External user and internal
27*437bfbebSnyanmisakaworker thread will use mpp_port_poll / mpp_port_dequeue / mpp_port_enqueue
28*437bfbebSnyanmisakainterface to poll / dequeue / enqueue the task task queue. Mpp advanced mode is
29*437bfbebSnyanmisakausing port to connect external user, interface storage and internal process
30*437bfbebSnyanmisakathread. Each task queue has two port: input port and output port. And from a
31*437bfbebSnyanmisakaglobal view the task will always flow from input port to output port.
32*437bfbebSnyanmisaka
33*437bfbebSnyanmisaka3. Mpp task status
34*437bfbebSnyanmisakaThere are four status for one task. Mpp use list_head to represent the status.
35*437bfbebSnyanmisaka
36*437bfbebSnyanmisakaINPUT_PORT : Initial status for input port user to dequeue. Or when output port
37*437bfbebSnyanmisaka             successfully enqueue a task then the task is on this status.
38*437bfbebSnyanmisaka
39*437bfbebSnyanmisakaINPUT_HOLD : When input port user successfully dequeue a task then the task is
40*437bfbebSnyanmisaka             on this status.
41*437bfbebSnyanmisaka
42*437bfbebSnyanmisakaOUTPUT_PORT: When input port user successfully enqueue a task then the task is
43*437bfbebSnyanmisaka             on OUTPUT_PORT status. And this task is ready for dequeue from
44*437bfbebSnyanmisaka             output port.
45*437bfbebSnyanmisaka
46*437bfbebSnyanmisakaOUTPUT_HOLD: When output port user successfully dequeue a task then the task is
47*437bfbebSnyanmisaka             on this status.
48*437bfbebSnyanmisaka
49*437bfbebSnyanmisaka4. Mpp task / port transaction
50*437bfbebSnyanmisakaThere are three transaction functions on a port: poll / dequeue / enqueue.
51*437bfbebSnyanmisakaWhen port user call the transaction function task will be transfer from one
52*437bfbebSnyanmisakastatus to next status. The status transform flow is unidirectional from input
53*437bfbebSnyanmisakaport to output port.
54*437bfbebSnyanmisaka
55*437bfbebSnyanmisakaThe overall relationship graph of task / port / status is shown below.
56*437bfbebSnyanmisaka
57*437bfbebSnyanmisaka                               1. task queue
58*437bfbebSnyanmisaka                       +------------------------------+
59*437bfbebSnyanmisaka                       |                              |
60*437bfbebSnyanmisaka                  +----+----+  +--------------+  +----+----+
61*437bfbebSnyanmisaka                  |    4    |  |       3      |  |   2.1   |
62*437bfbebSnyanmisaka         +--------+ dequeue <--+    status    <--+ enqueue <---------+
63*437bfbebSnyanmisaka         |        |         |  |  INPUT_PORT  |  |         |         |
64*437bfbebSnyanmisaka         |        +---------+  |              |  +---------+         |
65*437bfbebSnyanmisaka  +------v-----+  |         |  +--------------+  |         |  +------+------+
66*437bfbebSnyanmisaka  |      3     |  |    2    |                    |    2    |  |      3      |
67*437bfbebSnyanmisaka  |   status   |  |  input  |                    |  output |  |   status    |
68*437bfbebSnyanmisaka  | INPUT_HOLD |  |   port  |                    |   port  |  | OUTPUT_HOLD |
69*437bfbebSnyanmisaka  |            |  |         |                    |         |  |             |
70*437bfbebSnyanmisaka  +------+-----+  |         |  +--------------+  |         |  +------^------+
71*437bfbebSnyanmisaka         |        +---------+  |       3      |  +---------+         |
72*437bfbebSnyanmisaka         |        |    4    |  |    status    |  |   2.1   |         |
73*437bfbebSnyanmisaka         +--------> enqueue +-->  INPUT_PORT  +--> dequeue +---------+
74*437bfbebSnyanmisaka                  |         |  |              |  |         |
75*437bfbebSnyanmisaka                  +----+----+  +--------------+  -----+----+
76*437bfbebSnyanmisaka                       |                              |
77*437bfbebSnyanmisaka                       +------------------------------+
78*437bfbebSnyanmisaka
79*437bfbebSnyanmisaka
80*437bfbebSnyanmisakaMpp task transaction of a complete work flow
81*437bfbebSnyanmisaka================================================================================
82*437bfbebSnyanmisaka
83*437bfbebSnyanmisakaOn advanced mode mpp uses two task queue: input task queue and output task
84*437bfbebSnyanmisakaqueue.
85*437bfbebSnyanmisakaInput task queue connects input side external user to internal worker thread.
86*437bfbebSnyanmisakaOutput task queue connects internal worker thread to output side external user.
87*437bfbebSnyanmisakaThen there will be three threads to parallelize internal process and external
88*437bfbebSnyanmisakatransation. This will maximize mpp efficiency.
89*437bfbebSnyanmisaka
90*437bfbebSnyanmisakaThe work flow is demonstrated as below graph.
91*437bfbebSnyanmisaka
92*437bfbebSnyanmisaka            +-------------------+           +-------------------+
93*437bfbebSnyanmisaka            |  input side user  |           | output side user  |
94*437bfbebSnyanmisaka            +----^---------+----+           +----^---------+----+
95*437bfbebSnyanmisaka                 |         |                     |         |
96*437bfbebSnyanmisaka            +----+----+----v----+           +----+----+----v----+
97*437bfbebSnyanmisaka            | dequeue | enqueue |           | dequeue | enqueue |
98*437bfbebSnyanmisaka            +----^----+----+----+           +----^----+----+----+
99*437bfbebSnyanmisaka                 |         |                     |         |
100*437bfbebSnyanmisaka            +----+---------+----+    MPP    +----+---------v----+
101*437bfbebSnyanmisaka        +---+     input port    +-----------+    output port    +---+
102*437bfbebSnyanmisaka        |   +-------------------+           +-------------------+   |
103*437bfbebSnyanmisaka        |   |  input task queue |           | output task queue |   |
104*437bfbebSnyanmisaka        |   +-------------------+           +-------------------+   |
105*437bfbebSnyanmisaka        |   |    output port    |           |     input port    |   |
106*437bfbebSnyanmisaka        |   +----+---------^----+           +----+---------^----+   |
107*437bfbebSnyanmisaka        |        |         |                     |         |        |
108*437bfbebSnyanmisaka        |   +----v----+----+----+           +----v----+----+----+   |
109*437bfbebSnyanmisaka        |   | dequeue | enqueue |           | dequeue | enqueue |   |
110*437bfbebSnyanmisaka        |   +----+----+----^----+           +----+----+----^----+   |
111*437bfbebSnyanmisaka        |        |         |                     |         |        |
112*437bfbebSnyanmisaka        |   +----v---------+---------------------v---------+----+   |
113*437bfbebSnyanmisaka        |   |              internal work thread                 |   |
114*437bfbebSnyanmisaka        |   +---------------------------------------------------+   |
115*437bfbebSnyanmisaka        |                                                           |
116*437bfbebSnyanmisaka        +-----------------------------------------------------------+
117*437bfbebSnyanmisaka
118