README.md
1# Format<a name="EN-US_TOPIC_0000001131858907"></a>
2
3- [Introduction](#section11660541593)
4- [Directory Structure](#section161941989596)
5 - [Available APIs](#section1551164914237)
6 - [Usage](#section129654513264)
7
8- [Repositories Involved](#section1371113476307)
9
10## Introduction<a name="section11660541593"></a>
11
12This repository mainly defines and implements the Hardware Driver Interfaces \(HDIs\) of the format module, allowing upper-layer services to perform the following operations for media files:
13
14- Creating and destroying a muxer and demuxer
15- Starting and stopping a muxer and demuxer
16- Obtaining the attributes of a media file
17- Obtaining the data frame information of a media file
18- Adding data streams and frames to a muxer
19
20## Directory Structure<a name="section161941989596"></a>
21
22The source code directory structure is as follows:
23
24```
25/drivers/peripheral/format
26├── interfaces # Driver capability APIs provided for upper-layer services
27│ └── include # APIs exposed externally
28```
29
30### Available APIs<a name="section1551164914237"></a>
31
32The format module provides APIs that can be directly called by the framework layer to create or destroy a muxer and demuxer, start or stop a muxer and demuxer, obtain the attributes of a media file, read data frames from a media file, add data streams and frames to a muxer component, and set a callback.
33
34[Table 1](#table1513255710559) describes major HDI APIs provided by the format module.
35
36**Table 1** Major HDI APIs of the format module
37
38<a name="table1513255710559"></a>
39<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>
40</th>
41<th class="cellrowborder" align="center" valign="top" width="62.16621662166217%" id="mcps1.2.4.1.2"><p id="p14132125715552"><a name="p14132125715552"></a><a name="p14132125715552"></a>API</p>
42</th>
43<th class="cellrowborder" align="center" valign="top" width="25.012501250125013%" id="mcps1.2.4.1.3"><p id="p18132205755516"><a name="p18132205755516"></a><a name="p18132205755516"></a>Description</p>
44</th>
45</tr>
46</thead>
47<tbody><tr id="row1267017500274"><td class="cellrowborder" rowspan="34" 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>
48<p id="p169466917181"><a name="p169466917181"></a><a name="p169466917181"></a></p>
49<p id="p12106161012185"><a name="p12106161012185"></a><a name="p12106161012185"></a></p>
50<p id="p7255161017181"><a name="p7255161017181"></a><a name="p7255161017181"></a></p>
51<p id="p1839901041815"><a name="p1839901041815"></a><a name="p1839901041815"></a></p>
52<p id="p4540171015188"><a name="p4540171015188"></a><a name="p4540171015188"></a></p>
53<p id="p368816102189"><a name="p368816102189"></a><a name="p368816102189"></a></p>
54<p id="p679481051814"><a name="p679481051814"></a><a name="p679481051814"></a></p>
55<p id="p7399191241817"><a name="p7399191241817"></a><a name="p7399191241817"></a></p>
56<p id="p11902121271818"><a name="p11902121271818"></a><a name="p11902121271818"></a></p>
57<p id="p1296415129182"><a name="p1296415129182"></a><a name="p1296415129182"></a></p>
58<p id="p1742101311180"><a name="p1742101311180"></a><a name="p1742101311180"></a></p>
59<p id="p171041613101815"><a name="p171041613101815"></a><a name="p171041613101815"></a></p>
60<p id="p10172141314183"><a name="p10172141314183"></a><a name="p10172141314183"></a></p>
61<p id="p723216132180"><a name="p723216132180"></a><a name="p723216132180"></a></p>
62<p id="p825185015460"><a name="p825185015460"></a><a name="p825185015460"></a>format_interface.h</p>
63<p id="p2133757135510"><a name="p2133757135510"></a><a name="p2133757135510"></a></p>
64<p id="p14171441118"><a name="p14171441118"></a><a name="p14171441118"></a></p>
65<p id="p57063567463"><a name="p57063567463"></a><a name="p57063567463"></a></p>
66<p id="p1285144710118"><a name="p1285144710118"></a><a name="p1285144710118"></a></p>
67<p id="p854114711117"><a name="p854114711117"></a><a name="p854114711117"></a></p>
68<p id="p15741647517"><a name="p15741647517"></a><a name="p15741647517"></a></p>
69<p id="p7909447418"><a name="p7909447418"></a><a name="p7909447418"></a></p>
70<p id="p12525910165811"><a name="p12525910165811"></a><a name="p12525910165811"></a></p>
71<p id="p942322013262"><a name="p942322013262"></a><a name="p942322013262"></a></p>
72<p id="p1040515339526"><a name="p1040515339526"></a><a name="p1040515339526"></a></p>
73<p id="p19405533115216"><a name="p19405533115216"></a><a name="p19405533115216"></a></p>
74</td>
75<td class="cellrowborder" valign="top" width="62.16621662166217%" headers="mcps1.2.4.1.2 "><p id="p6264341172811"><a name="p6264341172811"></a><a name="p6264341172811"></a>void FormatInit(void);</p>
76</td>
77<td class="cellrowborder" valign="top" width="25.012501250125013%" headers="mcps1.2.4.1.3 "><p id="p13264114182817"><a name="p13264114182817"></a><a name="p13264114182817"></a>Initializes the format.</p>
78</td>
79</tr>
80<tr id="row2661171172814"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p126514172811"><a name="p126514172811"></a><a name="p126514172811"></a>void FormatDeInit(void);</p>
81</td>
82<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p15265164122819"><a name="p15265164122819"></a><a name="p15265164122819"></a>Deinitializes the format.</p>
83</td>
84</tr>
85<tr id="row4385112822818"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p10265134111284"><a name="p10265134111284"></a><a name="p10265134111284"></a>int32_t FormatDemuxerCreate(const FormatSource *source, FormatHandle * const handle);</p>
86</td>
87<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p726554110289"><a name="p726554110289"></a><a name="p726554110289"></a>Creates a demuxer and returns its context handle.</p>
88</td>
89</tr>
90<tr id="row181371630162816"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p426517411284"><a name="p426517411284"></a><a name="p426517411284"></a>int32_t FormatDemuxerSetParameter(const FormatHandle handle, int32_t trackId, const ParameterItem *metaData, int32_t metaDataCnt);</p>
91</td>
92<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1926512413287"><a name="p1926512413287"></a><a name="p1926512413287"></a>Sets demuxer attributes.</p>
93</td>
94</tr>
95<tr id="row01531026142811"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p182651741162812"><a name="p182651741162812"></a><a name="p182651741162812"></a>int32_t FormatDemuxerGetParameter(const FormatHandle handle, int32_t trackId, ParameterItem *metaData);</p>
96</td>
97<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p142651241152813"><a name="p142651241152813"></a><a name="p142651241152813"></a>Obtains demuxer attributes.</p>
98</td>
99</tr>
100<tr id="row11460182372815"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1626534118284"><a name="p1626534118284"></a><a name="p1626534118284"></a>int32_t FormatDemuxerSetCallBack(const FormatHandle handle, const FormatCallback *callBack);</p>
101</td>
102<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p72661241112817"><a name="p72661241112817"></a><a name="p72661241112817"></a>Sets a callback for the demuxer.</p>
103</td>
104</tr>
105<tr id="row61462216285"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p526624122817"><a name="p526624122817"></a><a name="p526624122817"></a>int32_t FormatDemuxerSetBufferConfig(const FormatHandle handle, const FormatBufferSetting *setting);</p>
106</td>
107<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p14266114119283"><a name="p14266114119283"></a><a name="p14266114119283"></a>(Optional) Sets buffer information for the demuxer.</p>
108</td>
109</tr>
110<tr id="row791355812713"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p15266144111283"><a name="p15266144111283"></a><a name="p15266144111283"></a>int32_t FormatDemuxerGetBufferConfig(const FormatHandle handle, FormatBufferSetting *setting);</p>
111</td>
112<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p162661841172812"><a name="p162661841172812"></a><a name="p162661841172812"></a>(Optional) Obtains the buffer information of the demuxer.</p>
113</td>
114</tr>
115<tr id="row3731175622711"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1526664162814"><a name="p1526664162814"></a><a name="p1526664162814"></a>int32_t FormatDemuxerPrepare(const FormatHandle handle);</p>
116</td>
117<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p6266941142816"><a name="p6266941142816"></a><a name="p6266941142816"></a>Makes preparations for the demuxer.</p>
118</td>
119</tr>
120<tr id="row131131754172718"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p5266104113281"><a name="p5266104113281"></a><a name="p5266104113281"></a>int32_t FormatDemuxerGetFileInfo(const FormatHandle handle, FileInfo *info);</p>
121</td>
122<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p13266341202815"><a name="p13266341202815"></a><a name="p13266341202815"></a>Obtains the attributes of a media file.</p>
123</td>
124</tr>
125<tr id="row133541652202712"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1826619419281"><a name="p1826619419281"></a><a name="p1826619419281"></a>int32_t FormatDemuxerSelectTrack(const FormatHandle handle, int32_t programId, int32_t trackId);</p>
126</td>
127<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p182671341102811"><a name="p182671341102811"></a><a name="p182671341102811"></a>Selects a specified media track from which the demuxer reads data frames by calling <strong id="b0679191319363"><a name="b0679191319363"></a><a name="b0679191319363"></a>FormatDemuxerReadFrame</strong>.)</p>
128</td>
129</tr>
130<tr id="row148624820271"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p17267341102812"><a name="p17267341102812"></a><a name="p17267341102812"></a>int32_t FormatDemuxerUnselectTrack(const FormatHandle handle, int32_t programId, int32_t trackId);</p>
131</td>
132<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1267141192812"><a name="p1267141192812"></a><a name="p1267141192812"></a>Unselects a specified media track from which the demuxer will not read data frames when calling <strong id="b183885214111"><a name="b183885214111"></a><a name="b183885214111"></a>FormatDemuxerReadFrame</strong>.</p>
133</td>
134</tr>
135<tr id="row1676314450275"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p02671641122810"><a name="p02671641122810"></a><a name="p02671641122810"></a>int32_t FormatDemuxerStart(const FormatHandle handle);</p>
136</td>
137<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p3267104112289"><a name="p3267104112289"></a><a name="p3267104112289"></a>Starts the demuxer. After being started, the caller can read data frames from the demuxer.</p>
138</td>
139</tr>
140<tr id="row194281341102710"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1526719418280"><a name="p1526719418280"></a><a name="p1526719418280"></a>int32_t FormatDemuxerGetSelectedTrack(const FormatHandle handle, int32_t *programId, int32_t trackId[], int32_t *nums);</p>
141</td>
142<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p142671441122820"><a name="p142671441122820"></a><a name="p142671441122820"></a>Obtains the ID of the media track selected by the demuxer for output.</p>
143</td>
144</tr>
145<tr id="row560213915277"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1268641112812"><a name="p1268641112812"></a><a name="p1268641112812"></a>int32_t FormatDemuxerReadFrame(const FormatHandle handle, FormatFrame *frame, int32_t timeOutMs);</p>
146</td>
147<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p18268174192819"><a name="p18268174192819"></a><a name="p18268174192819"></a>Reads data frames.</p>
148</td>
149</tr>
150<tr id="row933244161410"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p15483141102218"><a name="p15483141102218"></a><a name="p15483141102218"></a>int32_t FormatDemuxerFreeFrame(const FormatHandle handle, FormatFrame *frame);</p>
151</td>
152<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p15484194152211"><a name="p15484194152211"></a><a name="p15484194152211"></a>Frees data frames.</p>
153</td>
154</tr>
155<tr id="row182432045121416"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p0484241102215"><a name="p0484241102215"></a><a name="p0484241102215"></a>int32_t FormatDemuxerSeek(const FormatHandle handle, int32_t streamIndex, int64_t timeStampUs, FormatSeekMode mode);</p>
156</td>
157<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p10484641162215"><a name="p10484641162215"></a><a name="p10484641162215"></a>Seeks for a specified position for the demuxer.</p>
158</td>
159</tr>
160<tr id="row122643187161"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p14842418228"><a name="p14842418228"></a><a name="p14842418228"></a>int32_t FormatDemuxerStop(const FormatHandle handle);</p>
161</td>
162<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p9484124132212"><a name="p9484124132212"></a><a name="p9484124132212"></a>Stops the demuxer from working.</p>
163</td>
164</tr>
165<tr id="row1168154414167"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p948418417222"><a name="p948418417222"></a><a name="p948418417222"></a>int32_t FormatDemuxerDestory(const FormatHandle handle);</p>
166</td>
167<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p6484174172215"><a name="p6484174172215"></a><a name="p6484174172215"></a>Destroys demuxer resources.</p>
168</td>
169</tr>
170<tr id="row565634691619"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p124840414221"><a name="p124840414221"></a><a name="p124840414221"></a>int32_t FormatMuxerCreate(FormatHandle * const handle, const FormatOutputConfig *outputConfig);</p>
171</td>
172<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p184841741192215"><a name="p184841741192215"></a><a name="p184841741192215"></a>Creates a muxer and returns its context handle.</p>
173</td>
174</tr>
175<tr id="row1586205081614"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1348474117228"><a name="p1348474117228"></a><a name="p1348474117228"></a>int32_t FormatMuxerDestory(const FormatHandle handle);</p>
176</td>
177<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p848464120229"><a name="p848464120229"></a><a name="p848464120229"></a>Destroys a muxer and releases its resources created by calling <strong id="b454274814618"><a name="b454274814618"></a><a name="b454274814618"></a>FormatMuxerCreate</strong>.</p>
178</td>
179</tr>
180<tr id="row1815361272220"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1948574113229"><a name="p1948574113229"></a><a name="p1948574113229"></a>int32_t FormatMuxerAddTrack(const FormatHandle handle, const TrackSource *trackSource);</p>
181</td>
182<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1248524162220"><a name="p1248524162220"></a><a name="p1248524162220"></a>Adds a media track source for the muxer.</p>
183</td>
184</tr>
185<tr id="row14720016182214"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p12485184152211"><a name="p12485184152211"></a><a name="p12485184152211"></a>int32_t FormatMuxerSetCallBack(const FormatHandle handle, const FormatCallback *callBack);</p>
186</td>
187<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p5485114114229"><a name="p5485114114229"></a><a name="p5485114114229"></a>Sets a callback for the muxer.</p>
188</td>
189</tr>
190<tr id="row1466424191620"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p164854415224"><a name="p164854415224"></a><a name="p164854415224"></a>int32_t FormatMuxerSetOrientation(const FormatHandle handle, int degrees);</p>
191</td>
192<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p948534113222"><a name="p948534113222"></a><a name="p948534113222"></a>Sets the orientation of the video track for the muxer.</p>
193</td>
194</tr>
195<tr id="row99291794226"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p10485154119227"><a name="p10485154119227"></a><a name="p10485154119227"></a>int32_t FormatMuxerSetLocation(const FormatHandle handle, int latitude, int longitude);</p>
196</td>
197<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p144851241102210"><a name="p144851241102210"></a><a name="p144851241102210"></a>Sets the geographical information for the output file of the muxer.</p>
198</td>
199</tr>
200<tr id="row21561639131614"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p24851941172211"><a name="p24851941172211"></a><a name="p24851941172211"></a>int32_t FormatMuxerSetMaxFileSize(const FormatHandle handle, int64_t bytes);</p>
201</td>
202<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p12485124132219"><a name="p12485124132219"></a><a name="p12485124132219"></a>Sets the maximum size (in bytes) for the output file of the muxer.</p>
203</td>
204</tr>
205<tr id="row1024914496149"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p9485164152218"><a name="p9485164152218"></a><a name="p9485164152218"></a>int32_t FormatMuxerSetMaxFileDuration(const FormatHandle handle, int64_t durationUs);</p>
206</td>
207<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1548519411228"><a name="p1548519411228"></a><a name="p1548519411228"></a>Sets the maximum duration (in seconds) for the output file.</p>
208</td>
209</tr>
210<tr id="row5647191181614"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p948515417222"><a name="p948515417222"></a><a name="p948515417222"></a>int32_t FormatMuxerSetFileSplitDuration(const FormatHandle handle, ManualSplitType type, int64_t timestampUs, uint32_t durationUs);</p>
211</td>
212<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p9486441142216"><a name="p9486441142216"></a><a name="p9486441142216"></a>Manually splits a file.</p>
213</td>
214</tr>
215<tr id="row96242146164"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1448614116229"><a name="p1448614116229"></a><a name="p1448614116229"></a>int32_t FormatMuxerStart(const FormatHandle handle);</p>
216</td>
217<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p448624162217"><a name="p448624162217"></a><a name="p448624162217"></a>Starts the muxer.</p>
218</td>
219</tr>
220<tr id="row4719558166"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p448664112224"><a name="p448664112224"></a><a name="p448664112224"></a>int32_t FormatMuxerWriteFrame(const FormatHandle handle, const FormatFrame *frameData);</p>
221</td>
222<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p114869411222"><a name="p114869411222"></a><a name="p114869411222"></a>Writes data frames into the muxer.</p>
223</td>
224</tr>
225<tr id="row18785159171611"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p148624112222"><a name="p148624112222"></a><a name="p148624112222"></a>int32_t FormatMuxerSetNextOutputFile(const FormatHandle handle, int32_t fd);</p>
226</td>
227<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p6486164113221"><a name="p6486164113221"></a><a name="p6486164113221"></a>Sets the descriptor for the next output file.</p>
228</td>
229</tr>
230<tr id="row119401052191419"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p14486204116224"><a name="p14486204116224"></a><a name="p14486204116224"></a>int32_t FormatMuxerStop(const FormatHandle handle, bool block);</p>
231</td>
232<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p648612417226"><a name="p648612417226"></a><a name="p648612417226"></a>Stops the muxer that was started by calling <strong id="b934812298562"><a name="b934812298562"></a><a name="b934812298562"></a>FormatMuxerStart</strong>.</p>
233</td>
234</tr>
235<tr id="row1244610316169"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p14861341192214"><a name="p14861341192214"></a><a name="p14861341192214"></a>int32_t FormatMuxerSetParameter(const FormatHandle handle, int32_t trackId, const ParameterItem *item, int32_t itemNum);</p>
236</td>
237<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1486134102210"><a name="p1486134102210"></a><a name="p1486134102210"></a>Sets muxer attributes.</p>
238</td>
239</tr>
240<tr id="row17305165551410"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1448654102214"><a name="p1448654102214"></a><a name="p1448654102214"></a>int32_t FormatMuxerGetParameter(const FormatHandle handle, int32_t trackId, ParameterItem *item, int32_t itemNum);</p>
241</td>
242<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p348617419229"><a name="p348617419229"></a><a name="p348617419229"></a>Obtains muxer attributes.</p>
243</td>
244</tr>
245</tbody>
246</table>
247
248### Usage<a name="section129654513264"></a>
249
250The core functionalities of this repository are as follows:
251
252- Provides format HDIs that can be directly called by the framework layer to perform muxer and demuxer-related operations.
253- 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.
254
255For details about the invocation and implementation, see the API reference.
256
257## Repositories Involved<a name="section1371113476307"></a>
258
259[Driver subsystem](https://gitee.com/openharmony/docs/blob/master/en/readme/driver.md)
260
261[drivers\_framework](https://gitee.com/openharmony/drivers_framework/blob/master/README.md)
262
263[drivers\_adapter](https://gitee.com/openharmony/drivers_adapter/blob/master/README.md)
264
265[drivers\_adapter\_khdf\_linux](https://gitee.com/openharmony/drivers_adapter_khdf_linux/blob/master/README.md)
266
267[drivers\_peripheral](https://gitee.com/openharmony/drivers_peripheral)
268
269
README_zh.md
1# Format<a name="ZH-CN_TOPIC_0000001131858907"></a>
2
3- [简介](#section11660541593)
4- [目录](#section161941989596)
5 - [接口说明](#section1551164914237)
6 - [使用说明](#section129654513264)
7
8- [相关仓](#section1371113476307)
9
10## 简介<a name="section11660541593"></a>
11
12该仓下主要包含Format模块HDI(Hardware Driver Interface)接口定义及其实现,对上层提供媒体文件复用和解复用的驱动能力接口,HDI接口主要提供如下功能:
13
14- 创建、销毁复用和解复用器对象;
15- 启停复用和解复用器
16- 获取片源属性;
17- 获取片源流数据帧信息
18- 添加流和数据帧到复用器。
19
20## 目录<a name="section161941989596"></a>
21
22该仓下源代码目录结构如下所示
23
24```
25/drivers/peripheral/format
26├── interfaces # format模块对上层服务提供的驱动能力接口
27│ └── include # format模块对外提供的接口定义
28```
29
30### 接口说明<a name="section1551164914237"></a>
31
32Format驱动提供给framework层可直接调用的能力接口,主要功能有:创建、销毁复用器和解复用器对象,启停复用和解复用操作、获取片源属性、从片源读取数据帧处理、添加流和数据帧到复用器、事件上报等
33
34提供的部分接口说明如[表1 Format HDI接口列表](#table1513255710559)所示:
35
36**表 1** Format HDI接口列表
37
38<a name="table1513255710559"></a>
39<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>
40</th>
41<th class="cellrowborder" align="center" valign="top" width="62.16621662166217%" id="mcps1.2.4.1.2"><p id="p14132125715552"><a name="p14132125715552"></a><a name="p14132125715552"></a>接口名称</p>
42</th>
43<th class="cellrowborder" align="center" valign="top" width="25.012501250125013%" id="mcps1.2.4.1.3"><p id="p18132205755516"><a name="p18132205755516"></a><a name="p18132205755516"></a>功能描述</p>
44</th>
45</tr>
46</thead>
47<tbody><tr id="row1267017500274"><td class="cellrowborder" rowspan="34" 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>
48<p id="p169466917181"><a name="p169466917181"></a><a name="p169466917181"></a></p>
49<p id="p12106161012185"><a name="p12106161012185"></a><a name="p12106161012185"></a></p>
50<p id="p7255161017181"><a name="p7255161017181"></a><a name="p7255161017181"></a></p>
51<p id="p1839901041815"><a name="p1839901041815"></a><a name="p1839901041815"></a></p>
52<p id="p4540171015188"><a name="p4540171015188"></a><a name="p4540171015188"></a></p>
53<p id="p368816102189"><a name="p368816102189"></a><a name="p368816102189"></a></p>
54<p id="p679481051814"><a name="p679481051814"></a><a name="p679481051814"></a></p>
55<p id="p7399191241817"><a name="p7399191241817"></a><a name="p7399191241817"></a></p>
56<p id="p11902121271818"><a name="p11902121271818"></a><a name="p11902121271818"></a></p>
57<p id="p1296415129182"><a name="p1296415129182"></a><a name="p1296415129182"></a></p>
58<p id="p1742101311180"><a name="p1742101311180"></a><a name="p1742101311180"></a></p>
59<p id="p171041613101815"><a name="p171041613101815"></a><a name="p171041613101815"></a></p>
60<p id="p10172141314183"><a name="p10172141314183"></a><a name="p10172141314183"></a></p>
61<p id="p723216132180"><a name="p723216132180"></a><a name="p723216132180"></a></p>
62<p id="p825185015460"><a name="p825185015460"></a><a name="p825185015460"></a>format_interface.h</p>
63<p id="p2133757135510"><a name="p2133757135510"></a><a name="p2133757135510"></a></p>
64<p id="p14171441118"><a name="p14171441118"></a><a name="p14171441118"></a></p>
65<p id="p57063567463"><a name="p57063567463"></a><a name="p57063567463"></a></p>
66<p id="p1285144710118"><a name="p1285144710118"></a><a name="p1285144710118"></a></p>
67<p id="p854114711117"><a name="p854114711117"></a><a name="p854114711117"></a></p>
68<p id="p15741647517"><a name="p15741647517"></a><a name="p15741647517"></a></p>
69<p id="p7909447418"><a name="p7909447418"></a><a name="p7909447418"></a></p>
70<p id="p12525910165811"><a name="p12525910165811"></a><a name="p12525910165811"></a></p>
71<p id="p942322013262"><a name="p942322013262"></a><a name="p942322013262"></a></p>
72<p id="p1040515339526"><a name="p1040515339526"></a><a name="p1040515339526"></a></p>
73<p id="p19405533115216"><a name="p19405533115216"></a><a name="p19405533115216"></a></p>
74</td>
75<td class="cellrowborder" valign="top" width="62.16621662166217%" headers="mcps1.2.4.1.2 "><p id="p6264341172811"><a name="p6264341172811"></a><a name="p6264341172811"></a>void FormatInit(void);</p>
76</td>
77<td class="cellrowborder" valign="top" width="25.012501250125013%" headers="mcps1.2.4.1.3 "><p id="p13264114182817"><a name="p13264114182817"></a><a name="p13264114182817"></a>模块初始化处理</p>
78</td>
79</tr>
80<tr id="row2661171172814"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p126514172811"><a name="p126514172811"></a><a name="p126514172811"></a>void FormatDeInit(void);</p>
81</td>
82<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p15265164122819"><a name="p15265164122819"></a><a name="p15265164122819"></a>模块去初始化处理</p>
83</td>
84</tr>
85<tr id="row4385112822818"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p10265134111284"><a name="p10265134111284"></a><a name="p10265134111284"></a>int32_t FormatDemuxerCreate(const FormatSource *source, FormatHandle * const handle);</p>
86</td>
87<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p726554110289"><a name="p726554110289"></a><a name="p726554110289"></a>创建解复用器对象</p>
88</td>
89</tr>
90<tr id="row181371630162816"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p426517411284"><a name="p426517411284"></a><a name="p426517411284"></a>int32_t FormatDemuxerSetParameter(const FormatHandle handle, int32_t trackId, const ParameterItem *metaData, int32_t metaDataCnt);</p>
91</td>
92<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1926512413287"><a name="p1926512413287"></a><a name="p1926512413287"></a>扩展接口,设置解复用器属性信息</p>
93</td>
94</tr>
95<tr id="row01531026142811"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p182651741162812"><a name="p182651741162812"></a><a name="p182651741162812"></a>int32_t FormatDemuxerGetParameter(const FormatHandle handle, int32_t trackId, ParameterItem *metaData);</p>
96</td>
97<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p142651241152813"><a name="p142651241152813"></a><a name="p142651241152813"></a>扩展接口,获取解复用器属性信息</p>
98</td>
99</tr>
100<tr id="row11460182372815"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1626534118284"><a name="p1626534118284"></a><a name="p1626534118284"></a>int32_t FormatDemuxerSetCallBack(const FormatHandle handle, const FormatCallback *callBack);</p>
101</td>
102<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p72661241112817"><a name="p72661241112817"></a><a name="p72661241112817"></a>设置回调函数接口,用于事件上报</p>
103</td>
104</tr>
105<tr id="row61462216285"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p526624122817"><a name="p526624122817"></a><a name="p526624122817"></a>int32_t FormatDemuxerSetBufferConfig(const FormatHandle handle, const FormatBufferSetting *setting);</p>
106</td>
107<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p14266114119283"><a name="p14266114119283"></a><a name="p14266114119283"></a>设置解复用器数据帧缓存大小信息(可选)</p>
108</td>
109</tr>
110<tr id="row791355812713"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p15266144111283"><a name="p15266144111283"></a><a name="p15266144111283"></a>int32_t FormatDemuxerGetBufferConfig(const FormatHandle handle, FormatBufferSetting *setting);</p>
111</td>
112<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p162661841172812"><a name="p162661841172812"></a><a name="p162661841172812"></a>获取解复用器数据帧缓存大小信息(可选)</p>
113</td>
114</tr>
115<tr id="row3731175622711"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1526664162814"><a name="p1526664162814"></a><a name="p1526664162814"></a>int32_t FormatDemuxerPrepare(const FormatHandle handle);</p>
116</td>
117<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p6266941142816"><a name="p6266941142816"></a><a name="p6266941142816"></a>准备工作处理,完成片源属性探测处理</p>
118</td>
119</tr>
120<tr id="row131131754172718"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p5266104113281"><a name="p5266104113281"></a><a name="p5266104113281"></a>int32_t FormatDemuxerGetFileInfo(const FormatHandle handle, FileInfo *info);</p>
121</td>
122<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p13266341202815"><a name="p13266341202815"></a><a name="p13266341202815"></a>获取片源属性。</p>
123</td>
124</tr>
125<tr id="row133541652202712"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1826619419281"><a name="p1826619419281"></a><a name="p1826619419281"></a>int32_t FormatDemuxerSelectTrack(const FormatHandle handle, int32_t programId, int32_t trackId);</p>
126</td>
127<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p182671341102811"><a name="p182671341102811"></a><a name="p182671341102811"></a>选择某个轨道。(通过FormatDemuxerReadFrame接口可以读取到对应轨道数据帧)</p>
128</td>
129</tr>
130<tr id="row148624820271"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p17267341102812"><a name="p17267341102812"></a><a name="p17267341102812"></a>int32_t FormatDemuxerUnselectTrack(const FormatHandle handle, int32_t programId, int32_t trackId);</p>
131</td>
132<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1267141192812"><a name="p1267141192812"></a><a name="p1267141192812"></a>不选择某个轨道。(通过FormatDemuxerReadFrame接口不会读取到对应轨道数据帧)</p>
133</td>
134</tr>
135<tr id="row1676314450275"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p02671641122810"><a name="p02671641122810"></a><a name="p02671641122810"></a>int32_t FormatDemuxerStart(const FormatHandle handle);</p>
136</td>
137<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p3267104112289"><a name="p3267104112289"></a><a name="p3267104112289"></a>启动工作。调用该接口后可读取到数据帧处理</p>
138</td>
139</tr>
140<tr id="row194281341102710"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1526719418280"><a name="p1526719418280"></a><a name="p1526719418280"></a>int32_t FormatDemuxerGetSelectedTrack(const FormatHandle handle, int32_t *programId, int32_t trackId[], int32_t *nums);</p>
141</td>
142<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p142671441122820"><a name="p142671441122820"></a><a name="p142671441122820"></a>获取当前已选择的轨道</p>
143</td>
144</tr>
145<tr id="row560213915277"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1268641112812"><a name="p1268641112812"></a><a name="p1268641112812"></a>int32_t FormatDemuxerReadFrame(const FormatHandle handle, FormatFrame *frame, int32_t timeOutMs);</p>
146</td>
147<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p18268174192819"><a name="p18268174192819"></a><a name="p18268174192819"></a>读取数据帧</p>
148</td>
149</tr>
150<tr id="row933244161410"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p15483141102218"><a name="p15483141102218"></a><a name="p15483141102218"></a>int32_t FormatDemuxerFreeFrame(const FormatHandle handle, FormatFrame *frame);</p>
151</td>
152<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p15484194152211"><a name="p15484194152211"></a><a name="p15484194152211"></a>释放数据帧</p>
153</td>
154</tr>
155<tr id="row182432045121416"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p0484241102215"><a name="p0484241102215"></a><a name="p0484241102215"></a>int32_t FormatDemuxerSeek(const FormatHandle handle, int32_t streamIndex, int64_t timeStampUs, FormatSeekMode mode);</p>
156</td>
157<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p10484641162215"><a name="p10484641162215"></a><a name="p10484641162215"></a>拖动到指定位置附近</p>
158</td>
159</tr>
160<tr id="row122643187161"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p14842418228"><a name="p14842418228"></a><a name="p14842418228"></a>int32_t FormatDemuxerStop(const FormatHandle handle);</p>
161</td>
162<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p9484124132212"><a name="p9484124132212"></a><a name="p9484124132212"></a>解复用器停止工作</p>
163</td>
164</tr>
165<tr id="row1168154414167"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p948418417222"><a name="p948418417222"></a><a name="p948418417222"></a>int32_t FormatDemuxerDestory(const FormatHandle handle);</p>
166</td>
167<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p6484174172215"><a name="p6484174172215"></a><a name="p6484174172215"></a>销毁解复用器对象</p>
168</td>
169</tr>
170<tr id="row565634691619"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p124840414221"><a name="p124840414221"></a><a name="p124840414221"></a>int32_t FormatMuxerCreate(FormatHandle * const handle, const FormatOutputConfig *outputConfig);</p>
171</td>
172<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p184841741192215"><a name="p184841741192215"></a><a name="p184841741192215"></a>创建复用器对象</p>
173</td>
174</tr>
175<tr id="row1586205081614"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1348474117228"><a name="p1348474117228"></a><a name="p1348474117228"></a>int32_t FormatMuxerDestory(const FormatHandle handle);</p>
176</td>
177<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p848464120229"><a name="p848464120229"></a><a name="p848464120229"></a>销毁复用器对象</p>
178</td>
179</tr>
180<tr id="row1815361272220"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1948574113229"><a name="p1948574113229"></a><a name="p1948574113229"></a>int32_t FormatMuxerAddTrack(const FormatHandle handle, const TrackSource *trackSource);</p>
181</td>
182<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1248524162220"><a name="p1248524162220"></a><a name="p1248524162220"></a>添加复用器流</p>
183</td>
184</tr>
185<tr id="row14720016182214"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p12485184152211"><a name="p12485184152211"></a><a name="p12485184152211"></a>int32_t FormatMuxerSetCallBack(const FormatHandle handle, const FormatCallback *callBack);</p>
186</td>
187<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p5485114114229"><a name="p5485114114229"></a><a name="p5485114114229"></a>设置复用器回调函数</p>
188</td>
189</tr>
190<tr id="row1466424191620"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p164854415224"><a name="p164854415224"></a><a name="p164854415224"></a>int32_t FormatMuxerSetOrientation(const FormatHandle handle, int degrees);</p>
191</td>
192<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p948534113222"><a name="p948534113222"></a><a name="p948534113222"></a>设置视频角度信息</p>
193</td>
194</tr>
195<tr id="row99291794226"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p10485154119227"><a name="p10485154119227"></a><a name="p10485154119227"></a>int32_t FormatMuxerSetLocation(const FormatHandle handle, int latitude, int longitude);</p>
196</td>
197<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p144851241102210"><a name="p144851241102210"></a><a name="p144851241102210"></a>设置地理位置信息</p>
198</td>
199</tr>
200<tr id="row21561639131614"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p24851941172211"><a name="p24851941172211"></a><a name="p24851941172211"></a>int32_t FormatMuxerSetMaxFileSize(const FormatHandle handle, int64_t bytes);</p>
201</td>
202<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p12485124132219"><a name="p12485124132219"></a><a name="p12485124132219"></a>设置复用器生成文件最大SIZE</p>
203</td>
204</tr>
205<tr id="row1024914496149"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p9485164152218"><a name="p9485164152218"></a><a name="p9485164152218"></a>int32_t FormatMuxerSetMaxFileDuration(const FormatHandle handle, int64_t durationUs);</p>
206</td>
207<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1548519411228"><a name="p1548519411228"></a><a name="p1548519411228"></a>设置复用器生成文件最大时长</p>
208</td>
209</tr>
210<tr id="row5647191181614"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p948515417222"><a name="p948515417222"></a><a name="p948515417222"></a>int32_t FormatMuxerSetFileSplitDuration(const FormatHandle handle, ManualSplitType type, int64_t timestampUs, uint32_t durationUs);</p>
211</td>
212<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p9486441142216"><a name="p9486441142216"></a><a name="p9486441142216"></a>设置手动切分片信息</p>
213</td>
214</tr>
215<tr id="row96242146164"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1448614116229"><a name="p1448614116229"></a><a name="p1448614116229"></a>int32_t FormatMuxerStart(const FormatHandle handle);</p>
216</td>
217<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p448624162217"><a name="p448624162217"></a><a name="p448624162217"></a>复用器启动工作</p>
218</td>
219</tr>
220<tr id="row4719558166"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p448664112224"><a name="p448664112224"></a><a name="p448664112224"></a>int32_t FormatMuxerWriteFrame(const FormatHandle handle, const FormatFrame *frameData);</p>
221</td>
222<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p114869411222"><a name="p114869411222"></a><a name="p114869411222"></a>写入数据帧</p>
223</td>
224</tr>
225<tr id="row18785159171611"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p148624112222"><a name="p148624112222"></a><a name="p148624112222"></a>int32_t FormatMuxerSetNextOutputFile(const FormatHandle handle, int32_t fd);</p>
226</td>
227<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p6486164113221"><a name="p6486164113221"></a><a name="p6486164113221"></a>设置下一个输出文件句柄fd</p>
228</td>
229</tr>
230<tr id="row119401052191419"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p14486204116224"><a name="p14486204116224"></a><a name="p14486204116224"></a>int32_t FormatMuxerStop(const FormatHandle handle, bool block);</p>
231</td>
232<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p648612417226"><a name="p648612417226"></a><a name="p648612417226"></a>复用器停止工作</p>
233</td>
234</tr>
235<tr id="row1244610316169"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p14861341192214"><a name="p14861341192214"></a><a name="p14861341192214"></a>int32_t FormatMuxerSetParameter(const FormatHandle handle, int32_t trackId, const ParameterItem *item, int32_t itemNum);</p>
236</td>
237<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1486134102210"><a name="p1486134102210"></a><a name="p1486134102210"></a>扩展接口,设置复用器属性</p>
238</td>
239</tr>
240<tr id="row17305165551410"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1448654102214"><a name="p1448654102214"></a><a name="p1448654102214"></a>int32_t FormatMuxerGetParameter(const FormatHandle handle, int32_t trackId, ParameterItem *item, int32_t itemNum);</p>
241</td>
242<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p348617419229"><a name="p348617419229"></a><a name="p348617419229"></a>扩展接口,获取复用器属性</p>
243</td>
244</tr>
245</tbody>
246</table>
247
248### 使用说明<a name="section129654513264"></a>
249
250该仓核心功能包括两个方面:
251
252- 提供Format HDI接口供framework层调用,实现片源复用与解复用功能。
253- 作为标准南向接口,保证南向OEM产商实现HDI-adapter的规范性,保证生态良性演进。
254
255具体接口调用及实现,以接口注释为准。
256
257## 相关仓<a name="section1371113476307"></a>
258
259[驱动子系统](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)
260
261[drivers\_framework](https://gitee.com/openharmony/drivers_framework/blob/master/README_zh.md)
262
263[drivers\_adapter](https://gitee.com/openharmony/drivers_adapter/blob/master/README_zh.md)
264
265[drivers\_adapter\_khdf\_linux](https://gitee.com/openharmony/drivers_adapter_khdf_linux/blob/master/README_zh.md)
266
267[drivers\_peripheral](https://gitee.com/openharmony/drivers_peripheral)
268
269