1fa7767c5Sopenharmony_ci/*
2fa7767c5Sopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd.
3fa7767c5Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4fa7767c5Sopenharmony_ci * you may not use this file except in compliance with the License.
5fa7767c5Sopenharmony_ci * You may obtain a copy of the License at
6fa7767c5Sopenharmony_ci *
7fa7767c5Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8fa7767c5Sopenharmony_ci *
9fa7767c5Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10fa7767c5Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11fa7767c5Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12fa7767c5Sopenharmony_ci * See the License for the specific language governing permissions and
13fa7767c5Sopenharmony_ci * limitations under the License.
14fa7767c5Sopenharmony_ci */
15fa7767c5Sopenharmony_ci
16fa7767c5Sopenharmony_ci#ifndef NATIVE_AVFORMAT_H
17fa7767c5Sopenharmony_ci#define NATIVE_AVFORMAT_H
18fa7767c5Sopenharmony_ci
19fa7767c5Sopenharmony_ci#include <stdint.h>
20fa7767c5Sopenharmony_ci#include <stdbool.h>
21fa7767c5Sopenharmony_ci#include <stdio.h>
22fa7767c5Sopenharmony_ci
23fa7767c5Sopenharmony_ci#ifdef __cplusplus
24fa7767c5Sopenharmony_ciextern "C" {
25fa7767c5Sopenharmony_ci#endif
26fa7767c5Sopenharmony_ci
27fa7767c5Sopenharmony_citypedef struct OH_AVFormat OH_AVFormat;
28fa7767c5Sopenharmony_ci
29fa7767c5Sopenharmony_ci/**
30fa7767c5Sopenharmony_ci * @brief Enumerates AVPixel Format.
31fa7767c5Sopenharmony_ci * @syscap SystemCapability.Multimedia.Media.Core
32fa7767c5Sopenharmony_ci * @since 9
33fa7767c5Sopenharmony_ci * @version 1.0
34fa7767c5Sopenharmony_ci */
35fa7767c5Sopenharmony_citypedef enum OH_AVPixelFormat {
36fa7767c5Sopenharmony_ci    /**
37fa7767c5Sopenharmony_ci     * yuv 420 planar.
38fa7767c5Sopenharmony_ci     */
39fa7767c5Sopenharmony_ci    AV_PIXEL_FORMAT_YUVI420 = 1,
40fa7767c5Sopenharmony_ci    /**
41fa7767c5Sopenharmony_ci     *  NV12. yuv 420 semiplanar.
42fa7767c5Sopenharmony_ci     */
43fa7767c5Sopenharmony_ci    AV_PIXEL_FORMAT_NV12 = 2,
44fa7767c5Sopenharmony_ci    /**
45fa7767c5Sopenharmony_ci     *  NV21. yvu 420 semiplanar.
46fa7767c5Sopenharmony_ci     */
47fa7767c5Sopenharmony_ci    AV_PIXEL_FORMAT_NV21 = 3,
48fa7767c5Sopenharmony_ci    /**
49fa7767c5Sopenharmony_ci     * format from surface.
50fa7767c5Sopenharmony_ci     */
51fa7767c5Sopenharmony_ci    AV_PIXEL_FORMAT_SURFACE_FORMAT = 4,
52fa7767c5Sopenharmony_ci    /**
53fa7767c5Sopenharmony_ci     * RGBA8888
54fa7767c5Sopenharmony_ci     */
55fa7767c5Sopenharmony_ci    AV_PIXEL_FORMAT_RGBA = 5,
56fa7767c5Sopenharmony_ci} OH_AVPixelFormat;
57fa7767c5Sopenharmony_ci
58fa7767c5Sopenharmony_ci/**
59fa7767c5Sopenharmony_ci * @briefCreate an OH_AVFormat handle pointer to read and write data
60fa7767c5Sopenharmony_ci * @syscap SystemCapability.Multimedia.Media.Core
61fa7767c5Sopenharmony_ci * @return Returns a pointer to an OH_AVFormat instance
62fa7767c5Sopenharmony_ci * @since 9
63fa7767c5Sopenharmony_ci * @version 1.0
64fa7767c5Sopenharmony_ci */
65fa7767c5Sopenharmony_cistruct OH_AVFormat *OH_AVFormat_Create(void);
66fa7767c5Sopenharmony_ci
67fa7767c5Sopenharmony_ci/**
68fa7767c5Sopenharmony_ci * @briefCreate an audio OH_AVFormat handle pointer to read and write data
69fa7767c5Sopenharmony_ci * @syscap SystemCapability.Multimedia.Media.Core
70fa7767c5Sopenharmony_ci * @param mimeType mime type
71fa7767c5Sopenharmony_ci * @param sampleRate sample rate
72fa7767c5Sopenharmony_ci * @param channelCount channel count
73fa7767c5Sopenharmony_ci * @return Returns a pointer to an OH_AVFormat instance
74fa7767c5Sopenharmony_ci * @since 10
75fa7767c5Sopenharmony_ci * @version 1.0
76fa7767c5Sopenharmony_ci */
77fa7767c5Sopenharmony_cistruct OH_AVFormat *OH_AVFormat_CreateAudioFormat(const char *mimeType,
78fa7767c5Sopenharmony_ci                                                  int32_t sampleRate,
79fa7767c5Sopenharmony_ci                                                  int32_t channelCount);
80fa7767c5Sopenharmony_ci
81fa7767c5Sopenharmony_ci/**
82fa7767c5Sopenharmony_ci * @briefCreate an video OH_AVFormat handle pointer to read and write data
83fa7767c5Sopenharmony_ci * @syscap SystemCapability.Multimedia.Media.Core
84fa7767c5Sopenharmony_ci * @param mimeType mime type
85fa7767c5Sopenharmony_ci * @param width width
86fa7767c5Sopenharmony_ci * @param height height
87fa7767c5Sopenharmony_ci * @return Returns a pointer to an OH_AVFormat instance
88fa7767c5Sopenharmony_ci * @since 10
89fa7767c5Sopenharmony_ci * @version 1.0
90fa7767c5Sopenharmony_ci */
91fa7767c5Sopenharmony_cistruct OH_AVFormat *OH_AVFormat_CreateVideoFormat(const char *mimeType,
92fa7767c5Sopenharmony_ci                                                  int32_t width,
93fa7767c5Sopenharmony_ci                                                  int32_t height);
94fa7767c5Sopenharmony_ci
95fa7767c5Sopenharmony_ci/**
96fa7767c5Sopenharmony_ci * @brief Destroy the specified OH_AVFormat handle resource
97fa7767c5Sopenharmony_ci * @syscap SystemCapability.Multimedia.Media.Core
98fa7767c5Sopenharmony_ci * @param format pointer to an OH_AVFormat instance
99fa7767c5Sopenharmony_ci * @return void
100fa7767c5Sopenharmony_ci * @since 9
101fa7767c5Sopenharmony_ci * @version 1.0
102fa7767c5Sopenharmony_ci */
103fa7767c5Sopenharmony_civoid OH_AVFormat_Destroy(struct OH_AVFormat *format);
104fa7767c5Sopenharmony_ci
105fa7767c5Sopenharmony_ci/**
106fa7767c5Sopenharmony_ci * @brief Copy OH_AVFormat handle resource
107fa7767c5Sopenharmony_ci * @syscap SystemCapability.Multimedia.Media.Core
108fa7767c5Sopenharmony_ci * @param to OH_AVFormat handle pointer to receive data
109fa7767c5Sopenharmony_ci * @param from pointer to the OH_AVFormat handle of the copied data
110fa7767c5Sopenharmony_ci * @return The return value is TRUE for success, FALSE for failure
111fa7767c5Sopenharmony_ci * @since 9
112fa7767c5Sopenharmony_ci * @version 1.0
113fa7767c5Sopenharmony_ci */
114fa7767c5Sopenharmony_cibool OH_AVFormat_Copy(struct OH_AVFormat *to, struct OH_AVFormat *from);
115fa7767c5Sopenharmony_ci
116fa7767c5Sopenharmony_ci/**
117fa7767c5Sopenharmony_ci * @brief Write Int data to OH_AVFormat
118fa7767c5Sopenharmony_ci * @syscap SystemCapability.Multimedia.Media.Core
119fa7767c5Sopenharmony_ci * @param format pointer to an OH_AVFormat instance
120fa7767c5Sopenharmony_ci * @param key key to write data
121fa7767c5Sopenharmony_ci * @param value written data
122fa7767c5Sopenharmony_ci * @return The return value is TRUE for success, FALSE for failure
123fa7767c5Sopenharmony_ci * @since 9
124fa7767c5Sopenharmony_ci * @version 1.0
125fa7767c5Sopenharmony_ci */
126fa7767c5Sopenharmony_cibool OH_AVFormat_SetIntValue(struct OH_AVFormat *format, const char *key, int32_t value);
127fa7767c5Sopenharmony_ci
128fa7767c5Sopenharmony_ci/**
129fa7767c5Sopenharmony_ci * @brief Write Long data to OH_AVFormat
130fa7767c5Sopenharmony_ci * @syscap SystemCapability.Multimedia.Media.Core
131fa7767c5Sopenharmony_ci * @param format pointer to an OH_AVFormat instance
132fa7767c5Sopenharmony_ci * @param key key to write data
133fa7767c5Sopenharmony_ci * @param value written data
134fa7767c5Sopenharmony_ci * @return The return value is TRUE for success, FALSE for failure
135fa7767c5Sopenharmony_ci * @since 9
136fa7767c5Sopenharmony_ci * @version 1.0
137fa7767c5Sopenharmony_ci */
138fa7767c5Sopenharmony_cibool OH_AVFormat_SetLongValue(struct OH_AVFormat *format, const char *key, int64_t value);
139fa7767c5Sopenharmony_ci
140fa7767c5Sopenharmony_ci/**
141fa7767c5Sopenharmony_ci * @brief Write Float data to OH_AVFormat
142fa7767c5Sopenharmony_ci * @syscap SystemCapability.Multimedia.Media.Core
143fa7767c5Sopenharmony_ci * @param format pointer to an OH_AVFormat instance
144fa7767c5Sopenharmony_ci * @param key key to write data
145fa7767c5Sopenharmony_ci * @param value written data
146fa7767c5Sopenharmony_ci * @return The return value is TRUE for success, FALSE for failure
147fa7767c5Sopenharmony_ci * @since 9
148fa7767c5Sopenharmony_ci * @version 1.0
149fa7767c5Sopenharmony_ci */
150fa7767c5Sopenharmony_cibool OH_AVFormat_SetFloatValue(struct OH_AVFormat *format, const char *key, float value);
151fa7767c5Sopenharmony_ci
152fa7767c5Sopenharmony_ci/**
153fa7767c5Sopenharmony_ci * @brief Write Double data to OH_AVFormat
154fa7767c5Sopenharmony_ci * @syscap SystemCapability.Multimedia.Media.Core
155fa7767c5Sopenharmony_ci * @param format pointer to an OH_AVFormat instance
156fa7767c5Sopenharmony_ci * @param key key to write data
157fa7767c5Sopenharmony_ci * @param value written data
158fa7767c5Sopenharmony_ci * @return The return value is TRUE for success, FALSE for failure
159fa7767c5Sopenharmony_ci * @since 9
160fa7767c5Sopenharmony_ci * @version 1.0
161fa7767c5Sopenharmony_ci */
162fa7767c5Sopenharmony_cibool OH_AVFormat_SetDoubleValue(struct OH_AVFormat *format, const char *key, double value);
163fa7767c5Sopenharmony_ci
164fa7767c5Sopenharmony_ci/**
165fa7767c5Sopenharmony_ci * @brief Write String data to OH_AVFormat
166fa7767c5Sopenharmony_ci * @syscap SystemCapability.Multimedia.Media.Core
167fa7767c5Sopenharmony_ci * @param format pointer to an OH_AVFormat instance
168fa7767c5Sopenharmony_ci * @param key key to write data
169fa7767c5Sopenharmony_ci * @param value written data
170fa7767c5Sopenharmony_ci * @return The return value is TRUE for success, FALSE for failure
171fa7767c5Sopenharmony_ci * @since 9
172fa7767c5Sopenharmony_ci * @version 1.0
173fa7767c5Sopenharmony_ci */
174fa7767c5Sopenharmony_cibool OH_AVFormat_SetStringValue(struct OH_AVFormat *format, const char *key, const char *value);
175fa7767c5Sopenharmony_ci
176fa7767c5Sopenharmony_ci/**
177fa7767c5Sopenharmony_ci * @brief Write a block of data of a specified length to OH_AVFormat
178fa7767c5Sopenharmony_ci * @syscap SystemCapability.Multimedia.Media.Core
179fa7767c5Sopenharmony_ci * @param format pointer to an OH_AVFormat instance
180fa7767c5Sopenharmony_ci * @param key key to write data
181fa7767c5Sopenharmony_ci * @param addr written data addr
182fa7767c5Sopenharmony_ci * @param size written data length
183fa7767c5Sopenharmony_ci * @return The return value is TRUE for success, FALSE for failure
184fa7767c5Sopenharmony_ci * @since 9
185fa7767c5Sopenharmony_ci * @version 1.0
186fa7767c5Sopenharmony_ci */
187fa7767c5Sopenharmony_cibool OH_AVFormat_SetBuffer(struct OH_AVFormat *format, const char *key, const uint8_t *addr, size_t size);
188fa7767c5Sopenharmony_ci
189fa7767c5Sopenharmony_ci/**
190fa7767c5Sopenharmony_ci * @brief Read Int data from OH_AVFormat
191fa7767c5Sopenharmony_ci * @syscap SystemCapability.Multimedia.Media.Core
192fa7767c5Sopenharmony_ci * @param format pointer to an OH_AVFormat instance
193fa7767c5Sopenharmony_ci * @param key read key value
194fa7767c5Sopenharmony_ci * @param out read data
195fa7767c5Sopenharmony_ci * @return The return value is TRUE for success, FALSE for failure
196fa7767c5Sopenharmony_ci * @since 9
197fa7767c5Sopenharmony_ci * @version 1.0
198fa7767c5Sopenharmony_ci */
199fa7767c5Sopenharmony_cibool OH_AVFormat_GetIntValue(struct OH_AVFormat *format, const char *key, int32_t *out);
200fa7767c5Sopenharmony_ci
201fa7767c5Sopenharmony_ci/**
202fa7767c5Sopenharmony_ci * @brief Read Long data from OH_AVFormat
203fa7767c5Sopenharmony_ci * @syscap SystemCapability.Multimedia.Media.Core
204fa7767c5Sopenharmony_ci * @param format pointer to an OH_AVFormat instance
205fa7767c5Sopenharmony_ci * @param key read key value
206fa7767c5Sopenharmony_ci * @param out read data
207fa7767c5Sopenharmony_ci * @return The return value is TRUE for success, FALSE for failure
208fa7767c5Sopenharmony_ci * @since 9
209fa7767c5Sopenharmony_ci * @version 1.0
210fa7767c5Sopenharmony_ci */
211fa7767c5Sopenharmony_cibool OH_AVFormat_GetLongValue(struct OH_AVFormat *format, const char *key, int64_t *out);
212fa7767c5Sopenharmony_ci
213fa7767c5Sopenharmony_ci/**
214fa7767c5Sopenharmony_ci * @brief Read Float data from OH_AVFormat
215fa7767c5Sopenharmony_ci * @syscap SystemCapability.Multimedia.Media.Core
216fa7767c5Sopenharmony_ci * @param format pointer to an OH_AVFormat instance
217fa7767c5Sopenharmony_ci * @param key read key value
218fa7767c5Sopenharmony_ci * @param out read data
219fa7767c5Sopenharmony_ci * @return The return value is TRUE for success, FALSE for failure
220fa7767c5Sopenharmony_ci * @since 9
221fa7767c5Sopenharmony_ci * @version 1.0
222fa7767c5Sopenharmony_ci */
223fa7767c5Sopenharmony_cibool OH_AVFormat_GetFloatValue(struct OH_AVFormat *format, const char *key, float *out);
224fa7767c5Sopenharmony_ci
225fa7767c5Sopenharmony_ci/**
226fa7767c5Sopenharmony_ci * @brief Read Double data from OH_AVFormat
227fa7767c5Sopenharmony_ci * @syscap SystemCapability.Multimedia.Media.Core
228fa7767c5Sopenharmony_ci * @param format pointer to an OH_AVFormat instance
229fa7767c5Sopenharmony_ci * @param key read key value
230fa7767c5Sopenharmony_ci * @param out read data
231fa7767c5Sopenharmony_ci * @return The return value is TRUE for success, FALSE for failure
232fa7767c5Sopenharmony_ci * @since 9
233fa7767c5Sopenharmony_ci * @version 1.0
234fa7767c5Sopenharmony_ci */
235fa7767c5Sopenharmony_cibool OH_AVFormat_GetDoubleValue(struct OH_AVFormat *format, const char *key, double *out);
236fa7767c5Sopenharmony_ci
237fa7767c5Sopenharmony_ci/**
238fa7767c5Sopenharmony_ci * @brief Read String data from OH_AVFormat
239fa7767c5Sopenharmony_ci * @syscap SystemCapability.Multimedia.Media.Core
240fa7767c5Sopenharmony_ci * @param format pointer to an OH_AVFormat instance
241fa7767c5Sopenharmony_ci * @param key read key value
242fa7767c5Sopenharmony_ci * @param out The read string pointer, the data life cycle pointed to is updated with GetString,
243fa7767c5Sopenharmony_ci * and Format is destroyed. If the caller needs to hold it for a long time, it must copy the memory
244fa7767c5Sopenharmony_ci * @return The return value is TRUE for success, FALSE for failure
245fa7767c5Sopenharmony_ci * @since 9
246fa7767c5Sopenharmony_ci * @version 1.0
247fa7767c5Sopenharmony_ci */
248fa7767c5Sopenharmony_cibool OH_AVFormat_GetStringValue(struct OH_AVFormat *format, const char *key, const char **out);
249fa7767c5Sopenharmony_ci
250fa7767c5Sopenharmony_ci/**
251fa7767c5Sopenharmony_ci * @brief Read a block of data of specified length from OH_AVFormat
252fa7767c5Sopenharmony_ci * @syscap SystemCapability.Multimedia.Media.Core
253fa7767c5Sopenharmony_ci * @param format pointer to an OH_AVFormat instance
254fa7767c5Sopenharmony_ci * @param key Key value for reading and writing data
255fa7767c5Sopenharmony_ci * @param addr The life cycle is held by the format, with the destruction of the format,
256fa7767c5Sopenharmony_ci * if the caller needs to hold it for a long time, it must copy the memory
257fa7767c5Sopenharmony_ci * @param size Length of read and write data
258fa7767c5Sopenharmony_ci * @return The return value is TRUE for success, FALSE for failure
259fa7767c5Sopenharmony_ci * @since 9
260fa7767c5Sopenharmony_ci * @version 1.0
261fa7767c5Sopenharmony_ci */
262fa7767c5Sopenharmony_cibool OH_AVFormat_GetBuffer(struct OH_AVFormat *format, const char *key, uint8_t **addr, size_t *size);
263fa7767c5Sopenharmony_ci
264fa7767c5Sopenharmony_ci/**
265fa7767c5Sopenharmony_ci * @brief Output the information contained in OH_AVFormat as a string.
266fa7767c5Sopenharmony_ci * @syscap SystemCapability.Multimedia.Media.Core
267fa7767c5Sopenharmony_ci * @param format pointer to an OH_AVFormat instance
268fa7767c5Sopenharmony_ci * @return Returns a string consisting of key and data
269fa7767c5Sopenharmony_ci * @since 9
270fa7767c5Sopenharmony_ci * @version 1.0
271fa7767c5Sopenharmony_ci */
272fa7767c5Sopenharmony_ciconst char *OH_AVFormat_DumpInfo(struct OH_AVFormat *format);
273fa7767c5Sopenharmony_ci
274fa7767c5Sopenharmony_ci#ifdef __cplusplus
275fa7767c5Sopenharmony_ci}
276fa7767c5Sopenharmony_ci#endif
277fa7767c5Sopenharmony_ci
278fa7767c5Sopenharmony_ci#endif // NATIVE_AVFORMAT_H