Name |
Date |
Size |
#Lines |
LOC |
||
---|---|---|---|---|---|---|
.. | - | - | ||||
hal/ | 12-May-2024 | - | 16,615 | 13,339 | ||
hdi_service/ | 12-May-2024 | - | 5,120 | 4,429 | ||
image/ | 12-May-2024 | - | 999 | 745 | ||
interfaces/include/ | 12-May-2024 | - | 2,185 | 777 | ||
test/ | 12-May-2024 | - | 28,257 | 21,796 | ||
utils/ | 12-May-2024 | - | 226 | 122 | ||
BUILD.gn | D | 12-May-2024 | 982 | 31 | 27 | |
README.md | D | 12-May-2024 | 27.1 KiB | 337 | 309 | |
README_zh.md | D | 12-May-2024 | 26.2 KiB | 337 | 309 | |
bundle.json | D | 12-May-2024 | 2.3 KiB | 82 | 81 | |
codec.gni | D | 12-May-2024 | 791 | 19 | 17 |
README.md
1# Codec<a name="EN-US_TOPIC_0000001131751215"></a> 2 3- [Codec<a name="EN-US_TOPIC_0000001131751215"></a>](#codec) 4 - [Introduction<a name="section11660541593"></a>](#introduction) 5 - [Directory Structure<a name="section161941989596"></a>](#directory-structure) 6 - [Available APIs<a name="section1551164914237"></a>](#available-apis) 7 - [Usage Guidelines<a name="section129654513264"></a>](#usage-guidelines) 8 - [Repositories Involved<a name="section1371113476307"></a>](#repositories-involved) 9 10- [Repositories Involved](#section1371113476307) 11 12## Introduction<a name="section11660541593"></a> 13 14This repository mainly defines and implements the Hardware Driver Interfaces \(HDIs\) of the codec module, allowing upper-layer services to perform the following operations: 15 16- Creating and destroying a codec 17- Starting and stopping the codec 18- Encoding original code streams into compressed code streams 19- Decoding compressed code streams into original code streams 20- Flushing the cache 21 22## Directory Structure<a name="section161941989596"></a> 23 24The source code directory structure is as follows: 25 26``` 27/drivers/peripheral/codec 28├── interfaces # Driver capability APIs provided for upper-layer services 29│ └── include # APIs exposed externally 30``` 31 32### Available APIs<a name="section1551164914237"></a> 33 34The codec module provides APIs that can be directly called by the framework layer to create or destroy a codec, start or stop a codec, perform encoding or decoding operations, flush the cache, and set a callback. 35 36The table below describes major HDI 1.0 APIs provided by the codec module. 37 38**Table 1** Major HDI 1.0 APIs of the codec module 39 40<a name="table1513255710559"></a> 41<table><thead align="left"><tr id="row171321857155517"><th class="cellrowborder" align="center" valign="top" width="12.821282128212822%" id="mcps1.2.4.1.1"><p id="p6132957115511"><a name="p6132957115511"></a><a name="p6132957115511"></a>Header File</p> 42</th> 43<th class="cellrowborder" align="center" valign="top" width="63.61636163616362%" id="mcps1.2.4.1.2"><p id="p14132125715552"><a name="p14132125715552"></a><a name="p14132125715552"></a>API</p> 44</th> 45<th class="cellrowborder" align="center" valign="top" width="23.562356235623565%" id="mcps1.2.4.1.3"><p id="p18132205755516"><a name="p18132205755516"></a><a name="p18132205755516"></a>Description</p> 46</th> 47</tr> 48</thead> 49<tbody><tr id="row1267017500274"><td class="cellrowborder" rowspan="17" align="left" valign="top" width="12.821282128212822%" headers="mcps1.2.4.1.1 "><p id="p15674038913"><a name="p15674038913"></a><a name="p15674038913"></a></p> 50<p id="p169466917181"><a name="p169466917181"></a><a name="p169466917181"></a></p> 51<p id="p12106161012185"><a name="p12106161012185"></a><a name="p12106161012185"></a></p> 52<p id="p7255161017181"><a name="p7255161017181"></a><a name="p7255161017181"></a></p> 53<p id="p1839901041815"><a name="p1839901041815"></a><a name="p1839901041815"></a></p> 54<p id="p4540171015188"><a name="p4540171015188"></a><a name="p4540171015188"></a></p> 55<p id="p368816102189"><a name="p368816102189"></a><a name="p368816102189"></a></p> 56<p id="p679481051814"><a name="p679481051814"></a><a name="p679481051814"></a></p> 57<p id="p7399191241817"><a name="p7399191241817"></a><a name="p7399191241817"></a></p> 58<p id="p11902121271818"><a name="p11902121271818"></a><a name="p11902121271818"></a></p> 59<p id="p1296415129182"><a name="p1296415129182"></a><a name="p1296415129182"></a></p> 60<p id="p1742101311180"><a name="p1742101311180"></a><a name="p1742101311180"></a></p> 61<p id="p171041613101815"><a name="p171041613101815"></a><a name="p171041613101815"></a></p> 62<p id="p10172141314183"><a name="p10172141314183"></a><a name="p10172141314183"></a></p> 63<p id="p723216132180"><a name="p723216132180"></a><a name="p723216132180"></a></p> 64<p id="p825185015460"><a name="p825185015460"></a><a name="p825185015460"></a>codec_interface.h</p> 65<p id="p2133757135510"><a name="p2133757135510"></a><a name="p2133757135510"></a></p> 66<p id="p14171441118"><a name="p14171441118"></a><a name="p14171441118"></a></p> 67<p id="p57063567463"><a name="p57063567463"></a><a name="p57063567463"></a></p> 68<p id="p1285144710118"><a name="p1285144710118"></a><a name="p1285144710118"></a></p> 69<p id="p854114711117"><a name="p854114711117"></a><a name="p854114711117"></a></p> 70<p id="p15741647517"><a name="p15741647517"></a><a name="p15741647517"></a></p> 71<p id="p7909447418"><a name="p7909447418"></a><a name="p7909447418"></a></p> 72<p id="p12525910165811"><a name="p12525910165811"></a><a name="p12525910165811"></a></p> 73<p id="p942322013262"><a name="p942322013262"></a><a name="p942322013262"></a></p> 74<p id="p1040515339526"><a name="p1040515339526"></a><a name="p1040515339526"></a></p> 75<p id="p19405533115216"><a name="p19405533115216"></a><a name="p19405533115216"></a></p> 76</td> 77<td class="cellrowborder" valign="top" width="63.61636163616362%" headers="mcps1.2.4.1.2 "><p id="p174121125175619"><a name="p174121125175619"></a><a name="p174121125175619"></a>int32_t CodecInit();</p> 78</td> 79<td class="cellrowborder" valign="top" width="23.562356235623565%" headers="mcps1.2.4.1.3 "><p id="p114126258569"><a name="p114126258569"></a><a name="p114126258569"></a>Initializes the internal audio and video submodules of the codec.</p> 80</td> 81</tr> 82<tr id="row2661171172814"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1341212595610"><a name="p1341212595610"></a><a name="p1341212595610"></a>int32_t CodecDeinit();</p> 83</td> 84<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1341272515610"><a name="p1341272515610"></a><a name="p1341272515610"></a>Deinitializes the internal audio and video submodules of the codec.</p> 85</td> 86</tr> 87<tr id="row4385112822818"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p14413122555620"><a name="p14413122555620"></a><a name="p14413122555620"></a>int32_t CodecEnumerateCapbility(uint32_t index, CodecCapbility *cap);</p> 88</td> 89<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1141372575614"><a name="p1141372575614"></a><a name="p1141372575614"></a>Obtains the capabilities of a specified media type based on an index.</p> 90</td> 91</tr> 92<tr id="row181371630162816"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1941362515561"><a name="p1941362515561"></a><a name="p1941362515561"></a>int32_t CodecGetCapbility(AvCodecMime mime, CodecType type, uint32_t flags, CodecCapbility *cap);</p> 93</td> 94<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p44131025115619"><a name="p44131025115619"></a><a name="p44131025115619"></a>Obtains the capabilities of a specified media type.</p> 95</td> 96</tr> 97<tr id="row01531026142811"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p241312251562"><a name="p241312251562"></a><a name="p241312251562"></a>int32_t CodecCreate(const char* name, const Param *attr, int len, CODEC_HANDLETYPE *handle);</p> 98</td> 99<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p12413525135615"><a name="p12413525135615"></a><a name="p12413525135615"></a>Creates a specific codec component and returns the component context through a handle.</p> 100</td> 101</tr> 102<tr id="row11460182372815"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p44133252564"><a name="p44133252564"></a><a name="p44133252564"></a>int32_t CodecDestroy(CODEC_HANDLETYPE handle);</p> 103</td> 104<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p041392535610"><a name="p041392535610"></a><a name="p041392535610"></a>Destroys a codec component.</p> 105</td> 106</tr> 107<tr id="row61462216285"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p84134251566"><a name="p84134251566"></a><a name="p84134251566"></a>int32_t CodecSetPortMode(CODEC_HANDLETYPE handle, DirectionType type, BufferMode mode);</p> 108</td> 109<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p204131258569"><a name="p204131258569"></a><a name="p204131258569"></a>Sets the input or output buffer mode.</p> 110</td> 111</tr> 112<tr id="row791355812713"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p10413112575617"><a name="p10413112575617"></a><a name="p10413112575617"></a>int32_t CodecSetParameter(CODEC_HANDLETYPE handle, const Param *params, int paramCnt);</p> 113</td> 114<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p94138253562"><a name="p94138253562"></a><a name="p94138253562"></a>Sets parameters required by a codec component.</p> 115</td> 116</tr> 117<tr id="row3731175622711"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p441318251564"><a name="p441318251564"></a><a name="p441318251564"></a>int32_t CodecGetParameter(CODEC_HANDLETYPE handle, Param *params, int paramCnt);</p> 118</td> 119<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p74132257566"><a name="p74132257566"></a><a name="p74132257566"></a>Obtains parameters from a codec component.</p> 120</td> 121</tr> 122<tr id="row131131754172718"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p14132257567"><a name="p14132257567"></a><a name="p14132257567"></a>int32_t CodecStart(CODEC_HANDLETYPE handle);</p> 123</td> 124<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1741382510566"><a name="p1741382510566"></a><a name="p1741382510566"></a>Starts a codec component.</p> 125</td> 126</tr> 127<tr id="row133541652202712"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p11413125185617"><a name="p11413125185617"></a><a name="p11413125185617"></a>int32_t CodecStop(CODEC_HANDLETYPE handle);</p> 128</td> 129<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p154137256566"><a name="p154137256566"></a><a name="p154137256566"></a>Stops a codec component.</p> 130</td> 131</tr> 132<tr id="row148624820271"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p124141425125610"><a name="p124141425125610"></a><a name="p124141425125610"></a>int32_t CodecFlush(CODEC_HANDLETYPE handle, DirectionType directType);</p> 133</td> 134<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p64141258565"><a name="p64141258565"></a><a name="p64141258565"></a>Clears the cache when the codec component is the running state.</p> 135</td> 136</tr> 137<tr id="row1676314450275"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p144141225165615"><a name="p144141225165615"></a><a name="p144141225165615"></a>int32_t CodecQueueInput(CODEC_HANDLETYPE handle, const InputInfo *inputData, uint32_t timeoutMs);</p> 138</td> 139<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p6414182535616"><a name="p6414182535616"></a><a name="p6414182535616"></a>Queues input data.</p> 140</td> 141</tr> 142<tr id="row194281341102710"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p15414112510561"><a name="p15414112510561"></a><a name="p15414112510561"></a>int32_t CodecDequeInput(CODEC_HANDLETYPE handle, uint32_t timeoutMs, InputInfo *inputData);</p> 143</td> 144<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p341492555613"><a name="p341492555613"></a><a name="p341492555613"></a>Dequeues input data that has been used.</p> 145</td> 146</tr> 147<tr id="row560213915277"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p8414525145610"><a name="p8414525145610"></a><a name="p8414525145610"></a>int32_t CodecQueueOutput(CODEC_HANDLETYPE handle, OutputInfo *outInfo, uint32_t timeoutMs, int releaseFenceFd);</p> 148</td> 149<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1241442513569"><a name="p1241442513569"></a><a name="p1241442513569"></a>Queues output data.</p> 150</td> 151</tr> 152<tr id="row933244161410"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p6414425185619"><a name="p6414425185619"></a><a name="p6414425185619"></a>int32_t CodecDequeueOutput(CODEC_HANDLETYPE handle, uint32_t timeoutMs, int *acquireFd, OutputInfo *outInfo);</p> 153</td> 154<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p16414112518560"><a name="p16414112518560"></a><a name="p16414112518560"></a>Dequeues output data.</p> 155</td> 156</tr> 157<tr id="row182432045121416"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p104148252565"><a name="p104148252565"></a><a name="p104148252565"></a>int32_t CodecSetCallback(CODEC_HANDLETYPE handle, const CodecCallback *cb, UINTPTR instance);</p> 158</td> 159<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p20414172595617"><a name="p20414172595617"></a><a name="p20414172595617"></a>Sets the callback function.</p> 160</td> 161</tr> 162</tbody> 163</table> 164 165The codec module also provides codec HDI 2.0 APIs based on the OMX interfaces. The table below describes the HDI 2.0 APIs. 166 167**Table 2** HDI 2.0 APIs of the codec module 168 169<a name="table1513255710560"></a> 170<table><thead align="left"><tr id="row171321857155518"><th class="cellrowborder" align="center" valign="top" width="12.821282128212822%" id="mcps1.2.4.2.1"><p id="p6132957115521"><a name="p6132957115521"></a><a name="p6132957115521"></a>Header File</p> 171</th> 172<th class="cellrowborder" align="center" valign="top" width="63.61636163616362%" id="mcps1.2.4.2.2"><p id="p14132125715562"><a name="p14132125715562"></a><a name="p14132125715562"></a>API</p> 173</th> 174<th class="cellrowborder" align="center" valign="top" width="23.562356235623565%" id="mcps1.2.4.2.3"><p id="p18132205755526"><a name="p18132205755526"></a><a name="p18132205755526"></a>Description</p> 175</th> 176</tr> 177</thead> 178<tbody><tr id="row1267017500275"><td class="cellrowborder" rowspan="4" align="left" valign="top" width="12.821282128212822%" headers="mcps1.2.4.2.1 "><p id="p15674038923"><a name="p15674038923"></a><a name="p15674038923"></a>codec_component 179_manager.h</p> 180</td> 181<td class="cellrowborder" valign="top" width="63.61636163616362%" headers="mcps1.2.4.2.2 "><p id="p174121125175619"><a name="p174121125175619"></a><a name="p174121125175619"></a>int32_t (*GetComponentNum)();</p> 182</td> 183<td class="cellrowborder" valign="top" width="23.562356235623565%" headers="mcps1.2.4.2.3 "><p id="p114126258569"><a name="p114126258569"></a><a name="p114126258569"></a>Obtains the number of codec components</p> 184</td> 185</tr> 186<tr id="row2661171172814"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p1341212595610"><a name="p1341212595610"></a><a name="p1341212595610"></a>int32_t (*GetComponentCapabilityList)(CodecCompCapability *capList, int32_t count);</p> 187</td> 188<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p1341272515610"><a name="p1341272515610"></a><a name="p1341272515610"></a>Obtains the codec capability list</p> 189</td> 190</tr> 191<tr id="row4385112822818"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p14413122555620"><a name="p14413122555620"></a><a name="p14413122555620"></a>int32_t (*CreateComponent)(struct CodecComponentType **component, uint32_t *componentId, char *compName, int64_t appData, struct CodecCallbackType *callbacks);</p> 192</td> 193<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p1141372575614"><a name="p1141372575614"></a><a name="p1141372575614"></a>Creates a codec instance</p> 194</td> 195</tr> 196<tr id="row181371630162816"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p1941362515561"><a name="p1941362515561"></a><a name="p1941362515561"></a>int32_t (*DestroyComponent)(uint32_t componentId);</p> 197</td> 198<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p44131025115619"><a name="p44131025115619"></a><a name="p44131025115619"></a>Destroys a codec component instance</p> 199</td> 200</tr> 201</tbody> 202<tbody><tr id="row1267017500275"><td class="cellrowborder" rowspan="18" align="left" valign="top" width="12.821282128212822%" headers="mcps1.2.4.2.1 "><p id="p15674038923"><a name="p15674038923"></a><a name="p15674038923"></a>codec_component 203_if.h</p> 204</td> 205<td class="cellrowborder" valign="top" width="63.61636163616362%" headers="mcps1.2.4.2.2 "><p id="p174121125175619"><a name="p174121125175619"></a><a name="p174121125175619"></a>int32_t (*GetComponentVersion)(struct CodecComponentType *self, struct CompVerInfo *verInfo);</p> 206</td> 207<td class="cellrowborder" valign="top" width="23.562356235623565%" headers="mcps1.2.4.2.3 "><p id="p114126258569"><a name="p114126258569"></a><a name="p114126258569"></a>Obtains the version of a codec component</p> 208</td> 209</tr> 210<tr id="row2661171172814"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p1341212595610"><a name="p1341212595610"></a><a name="p1341212595610"></a>int32_t (*SendCommand)(struct CodecComponentType *self, enum OMX_COMMANDTYPE cmd, uint32_t param, int8_t *cmdData, uint32_t cmdDataLen);</p> 211</td> 212<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p1341272515610"><a name="p1341272515610"></a><a name="p1341272515610"></a>Sends a command to a component</p> 213</td> 214</tr> 215<tr id="row4385112822818"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p14413122555620"><a name="p14413122555620"></a><a name="p14413122555620"></a>int32_t (*GetParameter)(struct CodecComponentType *self, uint32_t paramIndex, int8_t *paramStruct, uint32_t paramStructLen);</p> 216</td> 217<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p1141372575614"><a name="p1141372575614"></a><a name="p1141372575614"></a>Obtains parameter settings of a component</p> 218</td> 219</tr> 220<tr id="row181371630162816"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p1941362515561"><a name="p1941362515561"></a><a name="p1941362515561"></a>int32_t (*SetParameter)(struct CodecComponentType *self, uint32_t index, int8_t *paramStruct, uint32_t paramStructLen);</p> 221</td> 222<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p44131025115619"><a name="p44131025115619"></a><a name="p44131025115619"></a>Sets parameters for a component</p> 223</td> 224</tr> 225<tr id="row01531026142811"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p241312251562"><a name="p241312251562"></a><a name="p241312251562"></a>int32_t (*GetConfig)(struct CodecComponentType *self, uint32_t index, int8_t *cfgStruct, uint32_t cfgStructLen);</p> 226</td> 227<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p12413525135615"><a name="p12413525135615"></a><a name="p12413525135615"></a>Obtains the configuration of a component</p> 228</td> 229</tr> 230<tr id="row11460182372815"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p44133252564"><a name="p44133252564"></a><a name="p44133252564"></a>int32_t (*SetConfig)(struct CodecComponentType *self, uint32_t index, int8_t *cfgStruct, uint32_t cfgStructLen);</p> 231</td> 232<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p041392535610"><a name="p041392535610"></a><a name="p041392535610"></a>Sets the component parameters</p> 233</td> 234</tr> 235<tr id="row61462216285"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p84134251566"><a name="p84134251566"></a><a name="p84134251566"></a>int32_t (*GetExtensionIndex)(struct CodecComponentType *self, const char *paramName, uint32_t *indexType);</p> 236</td> 237<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p204131258569"><a name="p204131258569"></a><a name="p204131258569"></a>Obtains the extended index of a component based on a given string</p> 238</td> 239</tr> 240<tr id="row791355812713"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p10413112575617"><a name="p10413112575617"></a><a name="p10413112575617"></a>int32_t (*GetState)(struct CodecComponentType *self, enum OMX_STATETYPE *state);</p> 241</td> 242<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p94138253562"><a name="p94138253562"></a><a name="p94138253562"></a>Obtains component status</p> 243</td> 244</tr> 245<tr id="row3731175622711"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p441318251564"><a name="p441318251564"></a><a name="p441318251564"></a>int32_t (*ComponentTunnelRequest)(struct CodecComponentType *self, uint32_t port, int32_t tunneledComp, uint32_t tunneledPort, struct OMX_TUNNELSETUPTYPE *tunnelSetup);</p> 246</td> 247<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p74132257566"><a name="p74132257566"></a><a name="p74132257566"></a>Sets tunnel communication for a component</p> 248</td> 249</tr> 250<tr id="row131131754172718"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p14132257567"><a name="p14132257567"></a><a name="p14132257567"></a>int32_t (*UseBuffer)(struct CodecComponentType *self, uint32_t portIndex, struct OmxCodecBuffer *buffer);</p> 251</td> 252<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p1741382510566"><a name="p1741382510566"></a><a name="p1741382510566"></a>Specify the buffer of the component port</p> 253</td> 254</tr> 255<tr id="row133541652202712"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p11413125185617"><a name="p11413125185617"></a><a name="p11413125185617"></a>int32_t (*AllocateBuffer)(struct CodecComponentType *self, uint32_t portIndex, struct OmxCodecBuffer *buffer);</p> 256</td> 257<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p154137256566"><a name="p154137256566"></a><a name="p154137256566"></a>Requests a port buffer from the component</p> 258</td> 259</tr> 260<tr id="row148624820271"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p124141425125610"><a name="p124141425125610"></a><a name="p124141425125610"></a>int32_t (*FreeBuffer)(struct CodecComponentType *self, uint32_t portIndex, const struct OmxCodecBuffer *buffer);</p> 261</td> 262<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p64141258565"><a name="p64141258565"></a><a name="p64141258565"></a>Releases a buffer</p> 263</td> 264</tr> 265<tr id="row1676314450275"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p144141225165615"><a name="p144141225165615"></a><a name="p144141225165615"></a>int32_t (*EmptyThisBuffer)(struct CodecComponentType *self, const struct OmxCodecBuffer *buffer);</p> 266</td> 267<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p6414182535616"><a name="p6414182535616"></a><a name="p6414182535616"></a>Specify the buffer to be emptied by a component</p> 268</td> 269</tr> 270<tr id="row194281341102710"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p15414112510561"><a name="p15414112510561"></a><a name="p15414112510561"></a>int32_t (*FillThisBuffer)(struct CodecComponentType *self, const struct OmxCodecBuffer *buffer);</p> 271</td> 272<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p341492555613"><a name="p341492555613"></a><a name="p341492555613"></a>Specify the buffer to be filled with the encoding and decoding output by a component</p> 273</td> 274</tr> 275<tr id="row560213915277"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p8414525145610"><a name="p8414525145610"></a><a name="p8414525145610"></a>int32_t (*SetCallbacks)(struct CodecComponentType *self, struct CodecCallbackType *callback, int64_t appData);</p> 276</td> 277<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p1241442513569"><a name="p1241442513569"></a><a name="p1241442513569"></a>Set a callback for the codec component</p> 278</td> 279</tr> 280<tr id="row933244161410"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p6414425185619"><a name="p6414425185619"></a><a name="p6414425185619"></a>int32_t (*ComponentDeInit)(struct CodecComponentType *self);</p> 281</td> 282<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p16414112518560"><a name="p16414112518560"></a><a name="p16414112518560"></a>Deinitializes a component</p> 283</td> 284</tr> 285<tr id="row182432045121416"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p104148252565"><a name="p104148252565"></a><a name="p104148252565"></a>int32_t (*UseEglImage)(struct CodecComponentType *self, struct OmxCodecBuffer *buffer, uint32_t portIndex, int8_t *eglImage, uint32_t eglImageLen);</p> 286</td> 287<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p20414172595617"><a name="p20414172595617"></a><a name="p20414172595617"></a>Uses the space allocated by EGL</p> 288</td> 289</tr> 290<tr id="row182432045121416"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p104148252565"><a name="p104148252565"></a><a name="p104148252565"></a>int32_t (*ComponentRoleEnum)(struct CodecComponentType *self, uint8_t *role, uint32_t roleLen, uint32_t index);</p> 291</td> 292<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p20414172595617"><a name="p20414172595617"></a><a name="p20414172595617"></a>Obtains the component roles</p> 293</td> 294</tr> 295</tbody> 296<tbody><tr id="row1267017500275"><td class="cellrowborder" rowspan="3" align="left" valign="top" width="12.821282128212822%" headers="mcps1.2.4.2.1 "><p id="p15674038923"><a name="p15674038923"></a><a name="p15674038923"></a>codec_callback_if.h</p> 297</td> 298<td class="cellrowborder" valign="top" width="63.61636163616362%" headers="mcps1.2.4.2.2 "><p id="p174121125175619"><a name="p174121125175619"></a><a name="p174121125175619"></a>int32_t (*EventHandler)(struct CodecCallbackType *self, enum OMX_EVENTTYPE event, struct EventInfo *info);</p> 299</td> 300<td class="cellrowborder" valign="top" width="23.562356235623565%" headers="mcps1.2.4.2.3 "><p id="p114126258569"><a name="p114126258569"></a><a name="p114126258569"></a>Reports an event</p> 301</td> 302</tr> 303<tr id="row2661171172814"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p1341212595610"><a name="p1341212595610"></a><a name="p1341212595610"></a>int32_t (*EmptyBufferDone)(struct CodecCallbackType *self, int64_t appData, const struct OmxCodecBuffer *buffer);</p> 304</td> 305<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p1341272515610"><a name="p1341272515610"></a><a name="p1341272515610"></a>Reports an event indicating that the encoding or decoding in the input buffer is complete</p> 306</td> 307</tr> 308<tr id="row4385112822818"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p14413122555620"><a name="p14413122555620"></a><a name="p14413122555620"></a>int32_t (*FillBufferDone)(struct CodecCallbackType *self, int64_t appData, const struct OmxCodecBuffer *buffer);</p> 309</td> 310<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p1141372575614"><a name="p1141372575614"></a><a name="p1141372575614"></a>Reports an event indicating that the output buffer is filled</p> 311</td> 312</tr> 313</tbody> 314</table> 315 316### Usage Guidelines<a name="section129654513264"></a> 317 318The core functionalities of this repository are as follows: 319 320- Provides codec HDIs that can be directly called by the framework layer to perform encoding and decoding-related operations. 321- Provides standard interfaces for device developers to ensure that the OEM vendors comply with the HDI adapter standard. This promises a healthy evolution of the ecosystem. 322 323For details about the invocation and implementation, see the API reference. 324 325## Repositories Involved<a name="section1371113476307"></a> 326 327[Driver subsystem](https://gitee.com/openharmony/docs/blob/master/en/readme/driver.md) 328 329[drivers\_framework](https://gitee.com/openharmony/drivers_framework/blob/master/README.md) 330 331[drivers\_adapter](https://gitee.com/openharmony/drivers_adapter/blob/master/README.md) 332 333[drivers\_adapter\_khdf\_linux](https://gitee.com/openharmony/drivers_adapter_khdf_linux/blob/master/README.md) 334 335[drivers\_peripheral](https://gitee.com/openharmony/drivers_peripheral) 336 337
README_zh.md
1# Codec<a name="ZH-CN_TOPIC_0000001131751215"></a> 2 3- [Codec<a name="ZH-CN_TOPIC_0000001131751215"></a>](#codec) 4 - [简介<a name="section11660541593"></a>](#简介) 5 - [目录<a name="section161941989596"></a>](#目录) 6 - [接口说明<a name="section1551164914237"></a>](#接口说明) 7 - [使用说明<a name="section129654513264"></a>](#使用说明) 8 - [相关仓<a name="section1371113476307"></a>](#相关仓) 9 10- [相关仓](#section1371113476307) 11 12## 简介<a name="section11660541593"></a> 13 14该仓下主要包含Codec模块HDI(Hardware Driver Interface)接口定义及其实现,对上层提供媒体编解码的驱动能力接口,HDI接口主要提供如下功能: 15 16- 创建、销毁编解码器对象; 17- 启停编解码器 18- 原始码流编码为压缩码流; 19- 压缩码流恢复为原始码流 20- 清除编解码缓存。 21 22## 目录<a name="section161941989596"></a> 23 24该仓下源代码目录结构如下所示 25 26``` 27/drivers/peripheral/codec 28├── interfaces # codec模块对上层服务提供的驱动能力接口 29│ └── include # codec模块对外提供的接口定义 30``` 31 32### 接口说明<a name="section1551164914237"></a> 33 34Codec驱动提供给framework层可直接调用的能力接口,主要功能有:创建、销毁编解码器对象,启停编解码器操作,编解码处理、清除缓存、事件上报等。 35 36提供的部分接口说明如下表所示: 37 38**表 1** Codec HDI 1.0接口列表 39 40<a name="table1513255710559"></a> 41<table><thead align="left"><tr id="row171321857155517"><th class="cellrowborder" align="center" valign="top" width="12.821282128212822%" id="mcps1.2.4.1.1"><p id="p6132957115511"><a name="p6132957115511"></a><a name="p6132957115511"></a>头文件</p> 42</th> 43<th class="cellrowborder" align="center" valign="top" width="63.61636163616362%" id="mcps1.2.4.1.2"><p id="p14132125715552"><a name="p14132125715552"></a><a name="p14132125715552"></a>接口名称</p> 44</th> 45<th class="cellrowborder" align="center" valign="top" width="23.562356235623565%" id="mcps1.2.4.1.3"><p id="p18132205755516"><a name="p18132205755516"></a><a name="p18132205755516"></a>功能描述</p> 46</th> 47</tr> 48</thead> 49<tbody><tr id="row1267017500274"><td class="cellrowborder" rowspan="17" align="left" valign="top" width="12.821282128212822%" headers="mcps1.2.4.1.1 "><p id="p15674038913"><a name="p15674038913"></a><a name="p15674038913"></a></p> 50<p id="p169466917181"><a name="p169466917181"></a><a name="p169466917181"></a></p> 51<p id="p12106161012185"><a name="p12106161012185"></a><a name="p12106161012185"></a></p> 52<p id="p7255161017181"><a name="p7255161017181"></a><a name="p7255161017181"></a></p> 53<p id="p1839901041815"><a name="p1839901041815"></a><a name="p1839901041815"></a></p> 54<p id="p4540171015188"><a name="p4540171015188"></a><a name="p4540171015188"></a></p> 55<p id="p368816102189"><a name="p368816102189"></a><a name="p368816102189"></a></p> 56<p id="p679481051814"><a name="p679481051814"></a><a name="p679481051814"></a></p> 57<p id="p7399191241817"><a name="p7399191241817"></a><a name="p7399191241817"></a></p> 58<p id="p11902121271818"><a name="p11902121271818"></a><a name="p11902121271818"></a></p> 59<p id="p1296415129182"><a name="p1296415129182"></a><a name="p1296415129182"></a></p> 60<p id="p1742101311180"><a name="p1742101311180"></a><a name="p1742101311180"></a></p> 61<p id="p171041613101815"><a name="p171041613101815"></a><a name="p171041613101815"></a></p> 62<p id="p10172141314183"><a name="p10172141314183"></a><a name="p10172141314183"></a></p> 63<p id="p723216132180"><a name="p723216132180"></a><a name="p723216132180"></a></p> 64<p id="p825185015460"><a name="p825185015460"></a><a name="p825185015460"></a>codec_interface.h</p> 65<p id="p2133757135510"><a name="p2133757135510"></a><a name="p2133757135510"></a></p> 66<p id="p14171441118"><a name="p14171441118"></a><a name="p14171441118"></a></p> 67<p id="p57063567463"><a name="p57063567463"></a><a name="p57063567463"></a></p> 68<p id="p1285144710118"><a name="p1285144710118"></a><a name="p1285144710118"></a></p> 69<p id="p854114711117"><a name="p854114711117"></a><a name="p854114711117"></a></p> 70<p id="p15741647517"><a name="p15741647517"></a><a name="p15741647517"></a></p> 71<p id="p7909447418"><a name="p7909447418"></a><a name="p7909447418"></a></p> 72<p id="p12525910165811"><a name="p12525910165811"></a><a name="p12525910165811"></a></p> 73<p id="p942322013262"><a name="p942322013262"></a><a name="p942322013262"></a></p> 74<p id="p1040515339526"><a name="p1040515339526"></a><a name="p1040515339526"></a></p> 75<p id="p19405533115216"><a name="p19405533115216"></a><a name="p19405533115216"></a></p> 76</td> 77<td class="cellrowborder" valign="top" width="63.61636163616362%" headers="mcps1.2.4.1.2 "><p id="p174121125175619"><a name="p174121125175619"></a><a name="p174121125175619"></a>int32_t CodecInit();</p> 78</td> 79<td class="cellrowborder" valign="top" width="23.562356235623565%" headers="mcps1.2.4.1.3 "><p id="p114126258569"><a name="p114126258569"></a><a name="p114126258569"></a>codec模块初始化处理</p> 80</td> 81</tr> 82<tr id="row2661171172814"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1341212595610"><a name="p1341212595610"></a><a name="p1341212595610"></a>int32_t CodecDeinit();</p> 83</td> 84<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1341272515610"><a name="p1341272515610"></a><a name="p1341272515610"></a>codec模块去初始化处理</p> 85</td> 86</tr> 87<tr id="row4385112822818"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p14413122555620"><a name="p14413122555620"></a><a name="p14413122555620"></a>int32_t CodecEnumerateCapbility(uint32_t index, CodecCapbility *cap);</p> 88</td> 89<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1141372575614"><a name="p1141372575614"></a><a name="p1141372575614"></a>获取某一个编解码能力</p> 90</td> 91</tr> 92<tr id="row181371630162816"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1941362515561"><a name="p1941362515561"></a><a name="p1941362515561"></a>int32_t CodecGetCapbility(AvCodecMime mime, CodecType type, uint32_t flags, CodecCapbility *cap);</p> 93</td> 94<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p44131025115619"><a name="p44131025115619"></a><a name="p44131025115619"></a>获取指定编解码能力</p> 95</td> 96</tr> 97<tr id="row01531026142811"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p241312251562"><a name="p241312251562"></a><a name="p241312251562"></a>int32_t CodecCreate(const char* name, const Param *attr, int len, CODEC_HANDLETYPE *handle);</p> 98</td> 99<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p12413525135615"><a name="p12413525135615"></a><a name="p12413525135615"></a>创建编解码对象</p> 100</td> 101</tr> 102<tr id="row11460182372815"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p44133252564"><a name="p44133252564"></a><a name="p44133252564"></a>int32_t CodecDestroy(CODEC_HANDLETYPE handle);</p> 103</td> 104<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p041392535610"><a name="p041392535610"></a><a name="p041392535610"></a>销毁编解码对象</p> 105</td> 106</tr> 107<tr id="row61462216285"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p84134251566"><a name="p84134251566"></a><a name="p84134251566"></a>int32_t CodecSetPortMode(CODEC_HANDLETYPE handle, DirectionType type, BufferMode mode);</p> 108</td> 109<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p204131258569"><a name="p204131258569"></a><a name="p204131258569"></a>设置端口buffer模式:内部buffer或外部buffer</p> 110</td> 111</tr> 112<tr id="row791355812713"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p10413112575617"><a name="p10413112575617"></a><a name="p10413112575617"></a>int32_t CodecSetParameter(CODEC_HANDLETYPE handle, const Param *params, int paramCnt);</p> 113</td> 114<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p94138253562"><a name="p94138253562"></a><a name="p94138253562"></a>扩展接口。设置编解码属性</p> 115</td> 116</tr> 117<tr id="row3731175622711"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p441318251564"><a name="p441318251564"></a><a name="p441318251564"></a>int32_t CodecGetParameter(CODEC_HANDLETYPE handle, Param *params, int paramCnt);</p> 118</td> 119<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p74132257566"><a name="p74132257566"></a><a name="p74132257566"></a>扩展接口。获取编解码属性</p> 120</td> 121</tr> 122<tr id="row131131754172718"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p14132257567"><a name="p14132257567"></a><a name="p14132257567"></a>int32_t CodecStart(CODEC_HANDLETYPE handle);</p> 123</td> 124<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1741382510566"><a name="p1741382510566"></a><a name="p1741382510566"></a>启动工作</p> 125</td> 126</tr> 127<tr id="row133541652202712"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p11413125185617"><a name="p11413125185617"></a><a name="p11413125185617"></a>int32_t CodecStop(CODEC_HANDLETYPE handle);</p> 128</td> 129<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p154137256566"><a name="p154137256566"></a><a name="p154137256566"></a>停止工作</p> 130</td> 131</tr> 132<tr id="row148624820271"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p124141425125610"><a name="p124141425125610"></a><a name="p124141425125610"></a>int32_t CodecFlush(CODEC_HANDLETYPE handle, DirectionType directType);</p> 133</td> 134<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p64141258565"><a name="p64141258565"></a><a name="p64141258565"></a>清除缓存处理</p> 135</td> 136</tr> 137<tr id="row1676314450275"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p144141225165615"><a name="p144141225165615"></a><a name="p144141225165615"></a>int32_t CodecQueueInput(CODEC_HANDLETYPE handle, const InputInfo *inputData, uint32_t timeoutMs);</p> 138</td> 139<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p6414182535616"><a name="p6414182535616"></a><a name="p6414182535616"></a>送入输入buffer</p> 140</td> 141</tr> 142<tr id="row194281341102710"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p15414112510561"><a name="p15414112510561"></a><a name="p15414112510561"></a>int32_t CodecDequeInput(CODEC_HANDLETYPE handle, uint32_t timeoutMs, InputInfo *inputData);</p> 143</td> 144<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p341492555613"><a name="p341492555613"></a><a name="p341492555613"></a>取出输入buffer</p> 145</td> 146</tr> 147<tr id="row560213915277"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p8414525145610"><a name="p8414525145610"></a><a name="p8414525145610"></a>int32_t CodecQueueOutput(CODEC_HANDLETYPE handle, OutputInfo *outInfo, uint32_t timeoutMs, int releaseFenceFd);</p> 148</td> 149<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1241442513569"><a name="p1241442513569"></a><a name="p1241442513569"></a>送入输出buffer</p> 150</td> 151</tr> 152<tr id="row933244161410"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p6414425185619"><a name="p6414425185619"></a><a name="p6414425185619"></a>int32_t CodecDequeueOutput(CODEC_HANDLETYPE handle, uint32_t timeoutMs, int *acquireFd, OutputInfo *outInfo);</p> 153</td> 154<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p16414112518560"><a name="p16414112518560"></a><a name="p16414112518560"></a>取出输出buffer</p> 155</td> 156</tr> 157<tr id="row182432045121416"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p104148252565"><a name="p104148252565"></a><a name="p104148252565"></a>int32_t CodecSetCallback(CODEC_HANDLETYPE handle, const CodecCallback *cb, UINTPTR instance);</p> 158</td> 159<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p20414172595617"><a name="p20414172595617"></a><a name="p20414172595617"></a>设置回调函数</p> 160</td> 161</tr> 162</tbody> 163</table> 164 165除了上述接口外,基于OMX接口提供了Codec HDI 2.0接口,接口说明如下表所示: 166 167**表 2** Codec HDI 2.0接口列表 168 169<a name="table1513255710560"></a> 170<table><thead align="left"><tr id="row171321857155518"><th class="cellrowborder" align="center" valign="top" width="12.821282128212822%" id="mcps1.2.4.2.1"><p id="p6132957115521"><a name="p6132957115521"></a><a name="p6132957115521"></a>头文件</p> 171</th> 172<th class="cellrowborder" align="center" valign="top" width="63.61636163616362%" id="mcps1.2.4.2.2"><p id="p14132125715562"><a name="p14132125715562"></a><a name="p14132125715562"></a>接口名称</p> 173</th> 174<th class="cellrowborder" align="center" valign="top" width="23.562356235623565%" id="mcps1.2.4.2.3"><p id="p18132205755526"><a name="p18132205755526"></a><a name="p18132205755526"></a>功能描述</p> 175</th> 176</tr> 177</thead> 178<tbody><tr id="row1267017500275"><td class="cellrowborder" rowspan="4" align="left" valign="top" width="12.821282128212822%" headers="mcps1.2.4.2.1 "><p id="p15674038923"><a name="p15674038923"></a><a name="p15674038923"></a>codec_component 179_manager.h</p> 180</td> 181<td class="cellrowborder" valign="top" width="63.61636163616362%" headers="mcps1.2.4.2.2 "><p id="p174121125175619"><a name="p174121125175619"></a><a name="p174121125175619"></a>int32_t (*GetComponentNum)();</p> 182</td> 183<td class="cellrowborder" valign="top" width="23.562356235623565%" headers="mcps1.2.4.2.3 "><p id="p114126258569"><a name="p114126258569"></a><a name="p114126258569"></a>获取Codec编解码组件数量</p> 184</td> 185</tr> 186<tr id="row2661171172814"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p1341212595610"><a name="p1341212595610"></a><a name="p1341212595610"></a>int32_t (*GetComponentCapabilityList)(CodecCompCapability *capList, int32_t count);</p> 187</td> 188<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p1341272515610"><a name="p1341272515610"></a><a name="p1341272515610"></a>获取编解码能力集表</p> 189</td> 190</tr> 191<tr id="row4385112822818"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p14413122555620"><a name="p14413122555620"></a><a name="p14413122555620"></a>int32_t (*CreateComponent)(struct CodecComponentType **component, uint32_t *componentId, char *compName, int64_t appData, struct CodecCallbackType *callbacks);</p> 192</td> 193<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p1141372575614"><a name="p1141372575614"></a><a name="p1141372575614"></a>创建Codec组件实例</p> 194</td> 195</tr> 196<tr id="row181371630162816"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p1941362515561"><a name="p1941362515561"></a><a name="p1941362515561"></a>int32_t (*DestroyComponent)(uint32_t componentId);</p> 197</td> 198<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p44131025115619"><a name="p44131025115619"></a><a name="p44131025115619"></a>销毁组件实例</p> 199</td> 200</tr> 201</tbody> 202<tbody><tr id="row1267017500275"><td class="cellrowborder" rowspan="18" align="left" valign="top" width="12.821282128212822%" headers="mcps1.2.4.2.1 "><p id="p15674038923"><a name="p15674038923"></a><a name="p15674038923"></a>codec_component 203_if.h</p> 204</td> 205<td class="cellrowborder" valign="top" width="63.61636163616362%" headers="mcps1.2.4.2.2 "><p id="p174121125175619"><a name="p174121125175619"></a><a name="p174121125175619"></a>int32_t (*GetComponentVersion)(struct CodecComponentType *self, struct CompVerInfo *verInfo);</p> 206</td> 207<td class="cellrowborder" valign="top" width="23.562356235623565%" headers="mcps1.2.4.2.3 "><p id="p114126258569"><a name="p114126258569"></a><a name="p114126258569"></a>获取Codec组件版本号</p> 208</td> 209</tr> 210<tr id="row2661171172814"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p1341212595610"><a name="p1341212595610"></a><a name="p1341212595610"></a>int32_t (*SendCommand)(struct CodecComponentType *self, enum OMX_COMMANDTYPE cmd, uint32_t param, int8_t *cmdData, uint32_t cmdDataLen);</p> 211</td> 212<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p1341272515610"><a name="p1341272515610"></a><a name="p1341272515610"></a>发送命令给组件</p> 213</td> 214</tr> 215<tr id="row4385112822818"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p14413122555620"><a name="p14413122555620"></a><a name="p14413122555620"></a>int32_t (*GetParameter)(struct CodecComponentType *self, uint32_t paramIndex, int8_t *paramStruct, uint32_t paramStructLen);</p> 216</td> 217<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p1141372575614"><a name="p1141372575614"></a><a name="p1141372575614"></a>获取组件参数设置</p> 218</td> 219</tr> 220<tr id="row181371630162816"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p1941362515561"><a name="p1941362515561"></a><a name="p1941362515561"></a>int32_t (*SetParameter)(struct CodecComponentType *self, uint32_t index, int8_t *paramStruct, uint32_t paramStructLen);</p> 221</td> 222<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p44131025115619"><a name="p44131025115619"></a><a name="p44131025115619"></a>设置组件需要的参数</p> 223</td> 224</tr> 225<tr id="row01531026142811"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p241312251562"><a name="p241312251562"></a><a name="p241312251562"></a>int32_t (*GetConfig)(struct CodecComponentType *self, uint32_t index, int8_t *cfgStruct, uint32_t cfgStructLen);</p> 226</td> 227<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p12413525135615"><a name="p12413525135615"></a><a name="p12413525135615"></a>获取组件的配置结构</p> 228</td> 229</tr> 230<tr id="row11460182372815"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p44133252564"><a name="p44133252564"></a><a name="p44133252564"></a>int32_t (*SetConfig)(struct CodecComponentType *self, uint32_t index, int8_t *cfgStruct, uint32_t cfgStructLen);</p> 231</td> 232<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p041392535610"><a name="p041392535610"></a><a name="p041392535610"></a>设置组件的配置</p> 233</td> 234</tr> 235<tr id="row61462216285"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p84134251566"><a name="p84134251566"></a><a name="p84134251566"></a>int32_t (*GetExtensionIndex)(struct CodecComponentType *self, const char *paramName, uint32_t *indexType);</p> 236</td> 237<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p204131258569"><a name="p204131258569"></a><a name="p204131258569"></a>根据字符串获取组件的扩展索引</p> 238</td> 239</tr> 240<tr id="row791355812713"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p10413112575617"><a name="p10413112575617"></a><a name="p10413112575617"></a>int32_t (*GetState)(struct CodecComponentType *self, enum OMX_STATETYPE *state);</p> 241</td> 242<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p94138253562"><a name="p94138253562"></a><a name="p94138253562"></a>获取组件的状态</p> 243</td> 244</tr> 245<tr id="row3731175622711"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p441318251564"><a name="p441318251564"></a><a name="p441318251564"></a>int32_t (*ComponentTunnelRequest)(struct CodecComponentType *self, uint32_t port, int32_t tunneledComp, uint32_t tunneledPort, struct OMX_TUNNELSETUPTYPE *tunnelSetup);</p> 246</td> 247<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p74132257566"><a name="p74132257566"></a><a name="p74132257566"></a>设置组件Tunneled方式通信</p> 248</td> 249</tr> 250<tr id="row131131754172718"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p14132257567"><a name="p14132257567"></a><a name="p14132257567"></a>int32_t (*UseBuffer)(struct CodecComponentType *self, uint32_t portIndex, struct OmxCodecBuffer *buffer);</p> 251</td> 252<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p1741382510566"><a name="p1741382510566"></a><a name="p1741382510566"></a>指定组件端口的buffer</p> 253</td> 254</tr> 255<tr id="row133541652202712"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p11413125185617"><a name="p11413125185617"></a><a name="p11413125185617"></a>int32_t (*AllocateBuffer)(struct CodecComponentType *self, uint32_t portIndex, struct OmxCodecBuffer *buffer);</p> 256</td> 257<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p154137256566"><a name="p154137256566"></a><a name="p154137256566"></a>向组件申请端口buffer</p> 258</td> 259</tr> 260<tr id="row148624820271"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p124141425125610"><a name="p124141425125610"></a><a name="p124141425125610"></a>int32_t (*FreeBuffer)(struct CodecComponentType *self, uint32_t portIndex, const struct OmxCodecBuffer *buffer);</p> 261</td> 262<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p64141258565"><a name="p64141258565"></a><a name="p64141258565"></a>释放buffer</p> 263</td> 264</tr> 265<tr id="row1676314450275"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p144141225165615"><a name="p144141225165615"></a><a name="p144141225165615"></a>int32_t (*EmptyThisBuffer)(struct CodecComponentType *self, const struct OmxCodecBuffer *buffer);</p> 266</td> 267<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p6414182535616"><a name="p6414182535616"></a><a name="p6414182535616"></a>编解码输入待处理buffer</p> 268</td> 269</tr> 270<tr id="row194281341102710"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p15414112510561"><a name="p15414112510561"></a><a name="p15414112510561"></a>int32_t (*FillThisBuffer)(struct CodecComponentType *self, const struct OmxCodecBuffer *buffer);</p> 271</td> 272<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p341492555613"><a name="p341492555613"></a><a name="p341492555613"></a>编解码输出填充buffer</p> 273</td> 274</tr> 275<tr id="row560213915277"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p8414525145610"><a name="p8414525145610"></a><a name="p8414525145610"></a>int32_t (*SetCallbacks)(struct CodecComponentType *self, struct CodecCallbackType *callback, int64_t appData);</p> 276</td> 277<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p1241442513569"><a name="p1241442513569"></a><a name="p1241442513569"></a>设置Codec组件的回调函数</p> 278</td> 279</tr> 280<tr id="row933244161410"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p6414425185619"><a name="p6414425185619"></a><a name="p6414425185619"></a>int32_t (*ComponentDeInit)(struct CodecComponentType *self);</p> 281</td> 282<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p16414112518560"><a name="p16414112518560"></a><a name="p16414112518560"></a>组件去初始化</p> 283</td> 284</tr> 285<tr id="row182432045121416"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p104148252565"><a name="p104148252565"></a><a name="p104148252565"></a>int32_t (*UseEglImage)(struct CodecComponentType *self, struct OmxCodecBuffer *buffer, uint32_t portIndex, int8_t *eglImage, uint32_t eglImageLen);</p> 286</td> 287<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p20414172595617"><a name="p20414172595617"></a><a name="p20414172595617"></a>使用已在ELG中申请的空间</p> 288</td> 289</tr> 290<tr id="row182432045121416"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p104148252565"><a name="p104148252565"></a><a name="p104148252565"></a>int32_t (*ComponentRoleEnum)(struct CodecComponentType *self, uint8_t *role, uint32_t roleLen, uint32_t index);</p> 291</td> 292<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p20414172595617"><a name="p20414172595617"></a><a name="p20414172595617"></a>获取组件角色</p> 293</td> 294</tr> 295</tbody> 296<tbody><tr id="row1267017500275"><td class="cellrowborder" rowspan="3" align="left" valign="top" width="12.821282128212822%" headers="mcps1.2.4.2.1 "><p id="p15674038923"><a name="p15674038923"></a><a name="p15674038923"></a>codec_callback_if.h</p> 297</td> 298<td class="cellrowborder" valign="top" width="63.61636163616362%" headers="mcps1.2.4.2.2 "><p id="p174121125175619"><a name="p174121125175619"></a><a name="p174121125175619"></a>int32_t (*EventHandler)(struct CodecCallbackType *self, enum OMX_EVENTTYPE event, struct EventInfo *info);</p> 299</td> 300<td class="cellrowborder" valign="top" width="23.562356235623565%" headers="mcps1.2.4.2.3 "><p id="p114126258569"><a name="p114126258569"></a><a name="p114126258569"></a>事件上报</p> 301</td> 302</tr> 303<tr id="row2661171172814"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p1341212595610"><a name="p1341212595610"></a><a name="p1341212595610"></a>int32_t (*EmptyBufferDone)(struct CodecCallbackType *self, int64_t appData, const struct OmxCodecBuffer *buffer);</p> 304</td> 305<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p1341272515610"><a name="p1341272515610"></a><a name="p1341272515610"></a>上报输入buffer编码或者解码处理完毕</p> 306</td> 307</tr> 308<tr id="row4385112822818"><td class="cellrowborder" valign="top" headers="mcps1.2.4.2.1 "><p id="p14413122555620"><a name="p14413122555620"></a><a name="p14413122555620"></a>int32_t (*FillBufferDone)(struct CodecCallbackType *self, int64_t appData, const struct OmxCodecBuffer *buffer);</p> 309</td> 310<td class="cellrowborder" valign="top" headers="mcps1.2.4.2.2 "><p id="p1141372575614"><a name="p1141372575614"></a><a name="p1141372575614"></a>上报输出buffer填充完毕</p> 311</td> 312</tr> 313</tbody> 314</table> 315 316### 使用说明<a name="section129654513264"></a> 317 318该仓核心功能包括两个方面: 319 320- 提供Codec HDI接口供framework层调用,实现编码和解码基本功能。 321- 作为标准南向接口,保证南向OEM产商实现HDI-adapter的规范性,保证生态良性演进。 322 323具体接口调用及实现,以接口注释为准。 324 325## 相关仓<a name="section1371113476307"></a> 326 327[驱动子系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/%E9%A9%B1%E5%8A%A8%E5%AD%90%E7%B3%BB%E7%BB%9F.md) 328 329[drivers\_framework](https://gitee.com/openharmony/drivers_framework/blob/master/README_zh.md) 330 331[drivers\_adapter](https://gitee.com/openharmony/drivers_adapter/blob/master/README_zh.md) 332 333[drivers\_adapter\_khdf\_linux](https://gitee.com/openharmony/drivers_adapter_khdf_linux/blob/master/README_zh.md) 334 335[drivers\_peripheral](https://gitee.com/openharmony/drivers_peripheral) 336 337