• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020-2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 /**
17  * @addtogroup format
18  * @{
19  *
20  * @brief Defines format-related APIs.
21  *
22  * For example, you use this module to define custom data types and to initialize, create,
23  * destroy the muxer and demuxer, and set their parameters. Also, you can read demuxer data frames,
24  * select demuxer tracks, add muxer tracks, and write data frames into a container.
25  *
26  * @since 1.0
27  * @version 1.0
28  */
29 
30 /**
31  * @file format_interface.h
32  *
33  * @brief Declares format-related APIs.
34  *
35  * For example, you use the functions provided in this file to define custom data types and to initialize,
36  * create, destroy the muxer and demuxer, and set their parameters. Also, you can read demuxer data frames,
37  * select demuxer tracks, add muxer tracks, and write data frames into a container.
38  *
39  * @since 1.0
40  * @version 1.0
41  */
42 
43 #ifndef FORMAT_INTERFACE_H
44 #define FORMAT_INTERFACE_H
45 
46 #include "format_type.h"
47 
48 #ifdef __cplusplus
49 #if __cplusplus
50 extern "C" {
51 #endif
52 #endif /* __cplusplus */
53 
54 /**
55  * @brief Initializes the format.
56  *
57  * You can call this function to initialize the demuxer and muxer.
58  * This function should always be called before other format-specific functions,
59  * and it can be called only once within a process.
60  *
61  * @since 1.0
62  * @version 1.0
63  */
64 void FormatInit(void);
65 
66 /**
67  * @brief Deinitializes the format.
68  *
69  * You can call this function to deinitialize the demuxer and muxer.
70  * This function works in pair with {@link FormatInit}.
71  *
72  * @since 1.0
73  * @version 1.0
74  */
75 void FormatDeInit(void);
76 
77 /**
78  * @brief Creates a demuxer component and returns its context handle.
79  *
80  * This function returns the demuxer context handle without probing the container format or
81  * obtaining stream information.
82  *
83  * @param source Indicates the pointer to the format source of the demuxer. For details, see {@link FormatSource}.
84  * @param handle Indicates the double pointer to the demuxer context handle.
85  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
86  */
87 int32_t FormatDemuxerCreate(const FormatSource *source, FormatHandle * const handle);
88 
89 /**
90  * @brief Sets demuxer attributes.
91  *
92  * You can call this function to set the HTTP header, HTTP referer, and other extension items for the demuxer
93  * after {@link FormatDemuxerCreate} is called.
94  *
95  * @param handle Indicates the pointer to the demuxer context handle.
96  * @param trackId Identifies the track. If the value is an invalid value (<b>-1</b>),
97  * this parameter identifies the file or program.
98  * @param metaData Indicates the pointer to an array of key-value pairs representing parameter names and values.
99  * For details, see {@link ParameterItem}.
100  * @param metaDataCnt Indicates the number of key-value pairs in the array.
101  * This parameter works in pair with <b>metaData</b>.
102  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
103  * @since 1.0
104  * @version 1.0
105  */
106 int32_t FormatDemuxerSetParameter(const FormatHandle handle, int32_t trackId,
107     const ParameterItem *metaData, int32_t metaDataCnt);
108 
109 /**
110  * @brief Obtains demuxer attributes.
111  *
112  * You can call this function to obtain the HTTP header, HTTP referer, and other extension items for the demuxer
113  * after {@link FormatDemuxerCreate} is called. The demuxer will store the value in the <b>metaData</b>
114  * based on the key.If the demuxer has allocated memory for the <b>metaData</b> to store the value,
115  * the caller should manually free the memory.
116  *
117  * @param handle Indicates the pointer to the demuxer context handle.
118  * @param trackId Identifies the track. If the value is an invalid value (<b>-1</b>),
119  * this parameter identifies the file or program.
120  * @param metaData Indicates the pointer to the buffer for storing the parameters values
121  * that the demuxer has searched for based on the input key. For details, see {@link ParameterItem}.
122  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
123  * @since 1.0
124  * @version 1.0
125  */
126 int32_t FormatDemuxerGetParameter(const FormatHandle handle, int32_t trackId, ParameterItem *metaData);
127 
128 /**
129  * @brief Sets a callback for the demuxer.
130  *
131  * The callback will be invoked to notify the upper layer of internal events of the demuxer.
132  *
133  * @param handle Indicates the pointer to the demuxer context handle.
134  * @param callBack Indicates the pointer to the callback, as defined in {@link FormatCallback}.
135  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
136  * @since 1.0
137  * @version 1.0
138  */
139 int32_t FormatDemuxerSetCallBack(const FormatHandle handle, const FormatCallback *callBack);
140 
141 /**
142  * @brief Sets buffer information for the demuxer.
143  *
144  * If there is a buffer mechanism in the demuxer, you can call this function to set the maximum buffer size and time.
145  * Alternatively, you can disable the buffer mechanism by setting the buffer size and time to <b>0</b> in
146  * the <b>setting</b> parameter. If there is no buffer mechanism or the default setting is retained,
147  * you can skip this function.
148  *
149  * @param handle Indicates the pointer to the demuxer context handle.
150  * @param setting Indicates the pointer to the maximum demuxer buffer size and time,
151  * as defined in {@link FormatBufferSetting}.
152  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
153  */
154 int32_t FormatDemuxerSetBufferConfig(const FormatHandle handle, const FormatBufferSetting *setting);
155 
156 /**
157  * @brief Obtains the buffer information of the demuxer.
158  *
159  * If there is a buffer mechanism in the demuxer, you can call this function to obtain the maximum buffer size and time.
160  *
161  * @param handle Indicates the pointer to the demuxer context handle.
162  * @param setting Indicates the pointer to the maximum demuxer buffer size and time,
163  * as defined in {@link FormatBufferSetting}.
164  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
165  * @since 1.0
166  * @version 1.0
167  */
168 int32_t FormatDemuxerGetBufferConfig(const FormatHandle handle, FormatBufferSetting *setting);
169 
170 /**
171  * @brief Makes preparations for the demuxer.
172  *
173  * This function triggers the demuxer to probe the media file container format and parse stream information.
174  * You can obtain media file attributes only after this function is called.
175  *
176  * @param handle Indicates the pointer to the demuxer context handle.
177  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
178  * @since 1.0
179  * @version 1.0
180  */
181 int32_t FormatDemuxerPrepare(const FormatHandle handle);
182 
183 /**
184  * @brief Obtains the attributes of a media file.
185  *
186  * The attributes contain file, program, and stream attributes.
187  * This function should be called after {@link FormatDemuxerPrepare} is called.
188  *
189  * @param handle Indicates the pointer to the demuxer context handle.
190  * @param info Indicates the pointer to the source attributes, as defined in {@link FileInfo}.
191  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
192  * @since 1.0
193  * @version 1.0
194  */
195 int32_t FormatDemuxerGetFileInfo(const FormatHandle handle, FileInfo *info);
196 
197 /**
198  * @brief Selects a specified media track.
199  *
200  * The media tracks to select must belong to the same program.
201  * If you do not call this function, the default media tracks of the default program are selected.
202  * If <b>programId</b> is valid but <b>trackId</b> is invalid, the default media track of the specified program is used.
203  *
204  * @param handle Indicates the pointer to the demuxer context handle.
205  * @param programId Identifies the program.
206  * @param trackId Identifies the media track. If a valid value is passed, the media track must belong to
207  * the specified program. If an invalid value is passed, the default media track of the specified program is used.
208  * If multiple audio tracks are specified, the player determines which audio track to use.
209  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
210  * @since 1.0
211  * @version 1.0
212  */
213 int32_t FormatDemuxerSelectTrack(const FormatHandle handle, int32_t programId, int32_t trackId);
214 
215 /**
216  * @brief Unselects a specified media track from which the demuxer reads data frames.
217  *
218  * The demuxer can read all media tracks of the default program. You can call this function to
219  * unselect all or certain tracks of a specified program that the demuxer is expected not to read.
220  * If <b>trackId</b> is invalid, the demuxer will read none of the tracks of the specified program.
221  *
222  * @param handle Indicates the pointer to the demuxer context handle.
223  * @param programId Identifies the program.
224  * @param trackId Identifies the media track that the demuxer will unselect.
225  * This parameter works in pair with <b>programId</b>. If a valid value is passed, the media track must belong to
226  * the program specified by <b>programId</b>. If an invalid value is passed, and all media tracks of the specified
227  * program are unselected.
228  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
229  * @since 1.0
230  * @version 1.0
231  */
232 int32_t FormatDemuxerUnselectTrack(const FormatHandle handle, int32_t programId, int32_t trackId);
233 
234 /**
235  * @brief Starts the demuxer.
236  *
237  * After being started, the caller can read data frames from the demuxer.
238  * This function should be called after {@link FormatDemuxerPrepare} is called.
239  *
240  * @param handle Indicates the pointer to the demuxer context handle.
241  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
242  * @since 1.0
243  * @version 1.0
244  */
245 int32_t FormatDemuxerStart(const FormatHandle handle);
246 
247 /**
248  * @brief Obtains the ID of the media track selected by the demuxer for output.
249  *
250  * The demuxer automatically selects the default program and its media tracks.
251  * However, if the program and media tracks have changed after {@link FormatDemuxerSelectTrack} and
252  * {@link FormatDemuxerUnselectTrack} are called, you can obtain the currently selected program and media tracks
253  * by calling this function (<b>FormatDemuxerGetSelectedTrack</b>.
254  *
255  * @param handle Indicates the pointer to the demuxer context handle.
256  * @param programId Identifies the pointer to the program.
257  * @param trackId Identifies the array of selected media tracks. This parameter works in pair with <b>nums</b>.
258  * @param nums Indicates the pointer to the total number of selected media tracks.
259  * This parameter works in pair with <b>trackId</b>.
260  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
261  * @since 1.0
262  * @version 1.0
263  */
264 int32_t FormatDemuxerGetSelectedTrack(const FormatHandle handle, int32_t *programId, int32_t trackId[], int32_t *nums);
265 
266 /**
267  * @brief Reads data frames.
268  *
269  * After the data frames are read,
270  * you need to call {@link FormatDemuxerFreeFame} to free them.
271  *
272  * @param handle Indicates the pointer to the demuxer context handle.
273  * @param frame Indicates the pointer to the data structure {@link FormatFrame}.
274  * @param timeOutMs Indicates the time required for waiting data frame read.
275  * The value <b>0</b> indicates that data frames are immediately read without any wait.
276  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
277  * @since 1.0
278  * @version 1.0
279  */
280 int32_t FormatDemuxerReadFrame(const FormatHandle handle, FormatFrame *frame, int32_t timeOutMs);
281 
282 /**
283  * @brief Frees data frames.
284  *
285  * You can call this function to free the data frames obtained by calling {@link FormatDemuxerReadFrame}.
286  *
287  * @param handle Indicates the pointer to the demuxer context handle.
288  * @param frame Indicates the pointer to the data structure {@link FormatFrame}.
289  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
290  * @since 1.0
291  * @version 1.0
292  */
293 int32_t FormatDemuxerFreeFrame(const FormatHandle handle, FormatFrame *frame);
294 
295 /**
296  * @brief Seeks for a specified position for the demuxer.
297  *
298  * After being started, the demuxer seeks for a specified position to read data frames.
299  * You can specify the position close to the time specified by <b>streamIndex</b>.
300  *
301  * @param handle Indicates the pointer to the demuxer context handle.
302  * @param streamIndex Identifies the stream in the media file.
303  * @param timeStampUs Indicates the target position, in microseconds.
304  * @param mode Indicates the seek mode, as defined in {@link FormatSeekMode}.
305  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
306  * @since 1.0
307  * @version 1.0
308  */
309 int32_t FormatDemuxerSeek(const FormatHandle handle, int32_t streamIndex, int64_t timeStampUs, FormatSeekMode mode);
310 
311 /**
312  * @brief Stops the demuxer from working.
313  *
314  * After this function is called, the demuxer cannot resume decapsulation.
315  *
316  * @param handle Indicates the pointer to the demuxer context handle.
317  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
318  * @since 1.0
319  * @version 1.0
320  */
321 int32_t FormatDemuxerStop(const FormatHandle handle);
322 
323 /**
324  * @brief Destroys demuxer resources.
325  *
326  * This function works in pair with {@link FormatDemuxerCreate}.
327  * If you do not call this function, resource leakage may occur.
328  *
329  * @param handle Indicates the pointer to the demuxer context handle.
330  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
331  * @since 1.0
332  * @version 1.0
333  */
334 int32_t FormatDemuxerDestroy(const FormatHandle handle);
335 
336 /**
337  * @brief Creates a muxer and returns its context handle.
338  *
339  * @param handle Indicates the double pointer to the muxer context handle.
340  * @param outputConfig Indicates the pointer to the muxer output configuration,
341  * as defined in {@link FormatOutputConfig}.
342  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
343  * @since 1.0
344  * @version 1.0
345  */
346 int32_t FormatMuxerCreate(FormatHandle * const handle, const FormatOutputConfig *outputConfig);
347 
348 /**
349  * @brief Destroys a muxer and releases its resources created by calling {@link FormatMuxerCreate}.
350  *
351  * @param handle Indicates the pointer to the muxer context handle.
352  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
353  * @since 1.0
354  * @version 1.0
355  */
356 int32_t FormatMuxerDestroy(const FormatHandle handle);
357 
358 /**
359  * @brief Adds a media track source for the muxer. For details about track sources, see {@link TrackSource}.
360  *
361  * This function must be called after {@link FormatMuxerCreate} is successfully called and
362  * before {@link FormatMuxerStart} is called.
363  *
364  * @param handle Indicates the pointer to the muxer context handle.
365  * @param trackSource Indicates the pointer to the track source.
366  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
367  * @since 1.0
368  * @version 1.0
369  */
370 int32_t FormatMuxerAddTrack(const FormatHandle handle, const TrackSource *trackSource);
371 
372 /**
373  * @brief Sets a callback for the muxer. For details about the callback, see {@link FormatCallback}.
374  *
375  * This function should be called after {@link FormatMuxerCreate} is successfully called.
376  *
377  * @param handle Indicates the pointer to the muxer context handle.
378  * @param FormatCallback Indicates the pointer to the muxer callback to set.
379  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
380  * @since 1.0
381  * @version 1.0
382  */
383 int32_t FormatMuxerSetCallBack(const FormatHandle handle, const FormatCallback *callBack);
384 
385 /**
386  * @brief Sets the orientation of the video track for the muxer.
387  *
388  * This function should be called after {@link FormatMuxerAddTrack} is successfully called.
389  * The following degrees are supported: 0, 90, 180, and 270.
390  *
391  * @param handle Indicates the pointer to the muxer context handle.
392  * @param degrees Indicates the clockwise angle of the video track.
393  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
394  * @since 1.0
395  * @version 1.0
396  */
397 int32_t FormatMuxerSetOrientation(const FormatHandle handle, int degrees);
398 
399 /**
400  * @brief Sets the geographical information for the output file of the muxer.
401  *
402  * This function should be called after {@link FormatMuxerCreate} is successfully called.
403  *
404  * @param handle Indicates the pointer to the muxer context handle.
405  * @param latitude Indicates the latitude, within the range [-90,90].
406  * @param longitude Indicates the longitude, within the range [-180,180].
407  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
408  * @since 1.0
409  * @version 1.0
410  */
411 int32_t FormatMuxerSetLocation(const FormatHandle handle, int latitude, int longitude);
412 
413 /**
414  * @brief Sets the maximum size (in bytes) for the output file of the muxer.
415  *
416  * This function should be called after {@link FormatMuxerCreate} is successfully called.
417  *
418  * @param handle Indicates the pointer to the muxer context handle.
419  * @param bytes Indicates the maximum size of a file, in bytes. If the value is <b>0</b> or negative,
420  * the operation fails and the maximum size does not take effect. In this case, the maximum size of a single file
421  * supported by the current file system is used as the value of this parameter.
422  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
423  * @since 1.0
424  * @version 1.0
425  */
426 int32_t FormatMuxerSetMaxFileSize(const FormatHandle handle, int64_t bytes);
427 
428 /**
429  * @brief Sets the maximum duration (in seconds) for the output file.
430  *
431  * You need to call this function before calling {@link FormatMuxerStart}. If the maximum duration you set is valid
432  * and capturing is approaching 90% of that duration or the remaining duration is 1s, the message
433  * {@link MUXER_INFO_MAX_DURATION_APPROACHING} is reported via {@link OnInfo} of {@link FormatCallback}. If the output
434  * file has been set by calling {@link FormatMuxerCreate}, you need to call {@link FormatMuxerSetNextOutputFile}
435  * to set the next output file. Otherwise, the current output file will be overwritten when the capturing reaches
436  * the maximum duration you set.
437  *
438  * @param handle Indicates the pointer to the muxer context handle.
439  * @param duration Indicates the maximum duration to set, in seconds. If the value is <b>0</b> or negative,
440  * the operation fails. In this case, the default duration (60 seconds) will be used.
441  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
442  * @since 1.0
443  * @version 1.0
444  */
445 int32_t FormatMuxerSetMaxFileDuration(const FormatHandle handle, int64_t durationUs);
446 
447 /**
448  * @brief Manually splits a file.
449  *
450  * This function can be called after {@link FormatMuxerStart} is called. Once this function is called,
451  * the file is split based on the manual split type. After manual split is complete, file split will proceed to
452  * use the initially set split type. You can call this function again only after
453  * the {@link MUXER_INFO_FILE_SPLIT_FINISHED} event is reported.
454  *
455  * @param handle Indicates the pointer to the muxer context handle.
456  * @param type Indicates the file split type, as defined in {@link FileSplitType}.
457  * @param timestamp Indicates the file split timestamp. This parameter is not supported currently.
458  * The value <b>¨C1</b> indicates that the file is split at the time this function is called.
459  * @param duration Indicates the period from the file split time to the time the next output file starts.
460  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
461  * @since 1.0
462  * @version 1.0
463  */
464 int32_t FormatMuxerSetFileSplitDuration(const FormatHandle handle, ManualSplitType type,
465                                         int64_t timestampUs, uint32_t durationUs);
466 
467 /**
468  * @brief Starts the muxer.
469  *
470  * You can call this function to encapsulate media data after the muxer is created, media tracks are added,
471  * and related parameters are set.
472  *
473  * @param handle Indicates the pointer to the muxer context handle.
474  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
475  * @since 1.0
476  * @version 1.0
477  */
478 int32_t FormatMuxerStart(FormatHandle handle);
479 
480 /**
481  * @brief Writes data frames into the muxer.
482  *
483  * This function should be called after {@link FormatMuxerCreate} is successfully called.
484  *
485  * @param handle Indicates the pointer to the muxer context handle.
486  * @param frameData Indicates the pointer to the data structure {@link FormatFrame}.
487  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
488  * @since 1.0
489  * @version 1.0
490  */
491 int32_t FormatMuxerWriteFrame(const FormatHandle handle, const FormatFrame *frameData);
492 
493 /**
494  * @brief Sets the descriptor for the next output file.
495  *
496  * If {@link FormatMuxerCreate} is successfully called and the file descriptor involved is valid, you can call
497  * this function (<b>FormatMuxerSetNextOutputFile</b>) upon receiving the message
498  * {@link MUXER_INFO_MAX_FILESIZE_APPROACHING} or {@link MUXER_INFO_MAX_DURATION_APPROACHING}.
499  *
500  * @param handle Indicates the pointer to the muxer context handle.
501  * @param fd Indicates the file descriptor to set.
502  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
503  * @since 1.0
504  * @version 1.0
505  */
506 int32_t FormatMuxerSetNextOutputFile(const FormatHandle handle, int32_t fd);
507 
508 /**
509  * @brief Stops the muxer that was started by calling {@link FormatMuxerStart}.
510  *
511  * @param handle Indicates the pointer to the muxer context handle.
512  * @param block Indicates how to stop the muxer. The value <b>true</b> indicates that the muxer is stopped
513  * after all buffered data is processed, and <b>false</b> indicates that the buffered data is discarded and
514  * the muxer is immediately stopped.
515  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
516  * @since 1.0
517  * @version 1.0
518  */
519 int32_t FormatMuxerStop(const FormatHandle handle, bool block);
520 
521 /**
522  * @brief Sets muxer attributes.
523  *
524  * This is an extended function that can be used to add MP4-dedicated boxes and tags (such as <b>exif</b>).
525  *
526  * @param handle Indicates the pointer to the muxer context handle.
527  * @param trackId Identifies the media track. If the value is {@link FORMAT_INVALID_TRACK_ID},
528  * this function sets the muxer attributes.
529  * @param item Indicates the pointer to the items carrying muxer attributes. You can specify multiple items at a time
530  * in this parameter, which works in pair with <b>itemNum</b>.
531  * @param itemNum Indicates the number of attributes set at a time.
532  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value otherwise.
533  * @since 1.0
534  * @version 1.0
535  */
536 int32_t FormatMuxerSetParameter(const FormatHandle handle, int32_t trackId, const ParameterItem *item,
537     int32_t itemNum);
538 
539 /**
540  * @brief Obtains muxer attributes.
541  *
542  * This is an extended function that can be used to obtain muxer or track attributes.
543  * The demuxer then obtains the muxer attributes based on the key contained in <b>item</b>.
544  *
545  * @param handle Indicates the pointer to the muxer context handle.
546  * @param trackId Identifies the media track. If the value is {@link FORMAT_INVALID_TRACK_ID},
547  * this function obtains the muxer attributes.
548  * @param item Indicates the pointer to the items carrying muxer attributes. You can specify multiple items at a time
549  * in this parameter, which works in pair with <b>itemNum</b>.
550  * @param itemNum Indicates the number of attributes set at a time.
551  * @return Returns <b>0</b> if the operation is successful; returns a non-zero value if any requested attribute
552  * fails to be obtained or is not found.
553  * @since 1.0
554  * @version 1.0
555  */
556 int32_t FormatMuxerGetParameter(const FormatHandle handle, int32_t trackId, ParameterItem *item, int32_t itemNum);
557 
558 #ifdef __cplusplus
559 #if __cplusplus
560 }
561 #endif
562 #endif /* __cplusplus */
563 
564 #endif  // FORMAT_INTERFACE_H
565 /** @} */