1 /*
2  * Copyright (C) 2023 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 #ifndef NATIVE_AVCODEC_VIDEOENCODER_H
17 #define NATIVE_AVCODEC_VIDEOENCODER_H
18 
19 #include <stdint.h>
20 #include <stdio.h>
21 #include "native_avcodec_base.h"
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /**
28  * @brief When OH_AVCodec needs new input parameter during the running process, the function pointer will be called and
29  * carry an available OH_AVFormat to fill in the new input parameter. This parameter takes effect immediately with the
30  * frame.
31  *
32  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
33  * @param codec OH_AVCodec instance
34  * @param index The index corresponding to the new OH_AVFormat instance
35  * @param parameter Parameter containing the new OH_AVFormat instance
36  * @param userData specified data
37  * @since 12
38  */
39 typedef void (*OH_VideoEncoder_OnNeedInputParameter)(OH_AVCodec *codec, uint32_t index, OH_AVFormat *parameter,
40                                                      void *userData);
41 
42 /**
43  * @brief Creates a video encoder instance from the mime type, which is recommended in most cases.
44  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
45  * @param mime mime type description string, refer to {@link AVCODEC_MIME_TYPE}
46  * @return Returns a Pointer to an OH_AVCodec instance.
47  * Return nullptr if memory ran out or the mime type is not supported.
48  * @since 9
49  * @version 1.0
50  */
51 OH_AVCodec *OH_VideoEncoder_CreateByMime(const char *mime);
52 
53 /**
54  * @brief Create a video encoder instance through the video encoder name. The premise of using this interface is to
55  * know the exact name of the encoder.
56  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
57  * @param name Video encoder name
58  * @return Returns a Pointer to an OH_AVCodec instance.
59  * Return nullptr if memory ran out or the encoder name is not supported.
60  * @since 9
61  * @version 1.0
62  */
63 OH_AVCodec *OH_VideoEncoder_CreateByName(const char *name);
64 
65 /**
66  * @brief Clear the internal resources of the encoder and destroy the encoder instance
67  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
68  * @param codec Pointer to an OH_AVCodec instance
69  * @return Returns AV_ERR_OK if the execution is successful,
70  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
71  * {@link AV_ERR_NO_MEMORY}, inner resource has already released.
72  * {@link AV_ERR_INVALID_VAL}, the encoder is nullptr or invalid.
73  * {@link AV_ERR_UNKNOWN}, unknown error.
74  * {@link AV_ERR_SERVICE_DIED}, avcodec service is died.
75  * @since 9
76  * @version 1.0
77  */
78 OH_AVErrCode OH_VideoEncoder_Destroy(OH_AVCodec *codec);
79 
80 /**
81  * @brief Set the asynchronous callback function so that your application can respond to the events generated by the
82  * video encoder. This interface must be called before Prepare is called.
83  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
84  * @param codec Pointer to an OH_AVCodec instance
85  * @param callback A collection of all callback functions, see {@link OH_AVCodecAsyncCallback}
86  * @param userData User specific data
87  * @return Returns AV_ERR_OK if the execution is successful,
88  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
89  * {@link AV_ERR_NO_MEMORY}, inner resource has already released.
90  * {@link AV_ERR_INVALID_VAL}, the encoder is nullptr or invalid.
91  * {@link AV_ERR_UNKNOWN}, unknown error.
92  * {@link AV_ERR_SERVICE_DIED}, avcodec service is died.
93  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state, must be called before Prepare.
94  * @deprecated since 11
95  * @useinstead OH_VideoEncoder_RegisterCallback
96  * @since 9
97  * @version 1.0
98  */
99 OH_AVErrCode OH_VideoEncoder_SetCallback(OH_AVCodec *codec, OH_AVCodecAsyncCallback callback, void *userData);
100 
101 /**
102  * @brief Set the asynchronous callback function so that your application can respond to the events generated by the
103  * video encoder. This interface must be called before Prepare is called.
104  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
105  * @param codec Pointer to an OH_AVCodec instance
106  * @param callback A collection of all callback functions, see {@link OH_AVCodecCallback}
107  * @param userData User specific data
108  * @return Returns AV_ERR_OK if the execution is successful,
109  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
110  * {@link AV_ERR_NO_MEMORY}, inner resource has already released.
111  * {@link AV_ERR_INVALID_VAL}, the encoder is nullptr or invalid.
112  * {@link AV_ERR_UNKNOWN}, unknown error.
113  * {@link AV_ERR_SERVICE_DIED}, avcodec service is died.
114  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state, must be called before Prepare.
115  * @since 11
116  */
117 OH_AVErrCode OH_VideoEncoder_RegisterCallback(OH_AVCodec *codec, OH_AVCodecCallback callback, void *userData);
118 
119 /**
120  * @brief Set the asynchronous callback function so that your application can respond to the events generated by the
121  * video encoder. This interface is optional only for input surface. If this interface is used, it must be invoked
122  * before {@link OH_VideoEncoder_Configure}.
123  *
124  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
125  * @param codec Pointer to an OH_AVCodec instance
126  * @param onInputParameter A callback functions, see {@link OH_VideoEncoder_OnNeedInputParameter}
127  * @param userData User specific data
128  * @return Returns AV_ERR_OK if the execution is successful,
129  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
130  * {@link AV_ERR_NO_MEMORY}, inner resource has already released.
131  * {@link AV_ERR_INVALID_VAL}, the encoder is nullptr or invalid.
132  * {@link AV_ERR_UNKNOWN}, unknown error.
133  * {@link AV_ERR_SERVICE_DIED}, avcodec service is died.
134  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state, must be called before Prepare.
135  * @since 12
136  */
137 OH_AVErrCode OH_VideoEncoder_RegisterParameterCallback(OH_AVCodec *codec,
138                                                        OH_VideoEncoder_OnNeedInputParameter onInputParameter,
139                                                        void *userData);
140 
141 /**
142  * @brief To configure the video encoder, typically, you need to configure the description information of the
143  * encoded video track. This interface must be called before Prepare is called.
144  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
145  * @param codec Pointer to an OH_AVCodec instance
146  * @param format A pointer to an OH_AVFormat that gives the description of the video track to be encoded
147  * @return Returns AV_ERR_OK if the execution is successful,
148  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
149  * {@link AV_ERR_NO_MEMORY}, instance has already released.
150  * {@link AV_ERR_INVALID_VAL}, the encoder is nullptr or invalid. Invalid param in format.
151  * {@link AV_ERR_UNKNOWN}, unknown error.
152  * {@link AV_ERR_SERVICE_DIED}, avcodec service is died.
153  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state, must be called before Prepare.
154  * @since 9
155  * @version 1.0
156  */
157 OH_AVErrCode OH_VideoEncoder_Configure(OH_AVCodec *codec, OH_AVFormat *format);
158 
159 /**
160  * @brief To prepare the internal resources of the encoder, the Configure interface must be called before
161  * calling this interface.
162  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
163  * @param codec Pointer to an OH_AVCodec instance
164  * @return Returns AV_ERR_OK if the execution is successful,
165  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
166  * {@link AV_ERR_NO_MEMORY}, instance has already released.
167  * {@link AV_ERR_INVALID_VAL}, the encoder is nullptr or invalid.
168  * {@link AV_ERR_UNKNOWN}, unknown error.
169  * {@link AV_ERR_SERVICE_DIED}, avcodec service is died.
170  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
171  * @since 9
172  * @version 1.0
173  */
174 OH_AVErrCode OH_VideoEncoder_Prepare(OH_AVCodec *codec);
175 
176 /**
177  * @brief Start the encoder, this interface must be called after the Prepare is successful. After being
178  * successfully started, the encoder will start reporting NeedInputData events.
179  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
180  * @param codec Pointer to an OH_AVCodec instance
181  * @return Returns AV_ERR_OK if the execution is successful,
182  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
183  * {@link AV_ERR_NO_MEMORY}, instance has already released.
184  * {@link AV_ERR_INVALID_VAL}, the encoder is nullptr or invalid.
185  * {@link AV_ERR_UNKNOWN}, unknown error.
186  * {@link AV_ERR_SERVICE_DIED}, avcodec service is died.
187  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
188  * @since 9
189  * @version 1.0
190  */
191 OH_AVErrCode OH_VideoEncoder_Start(OH_AVCodec *codec);
192 
193 /**
194  * @brief Stop the encoder. After stopping, you can re-enter the Started state through Start.
195  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
196  * @param codec Pointer to an OH_AVCodec instance
197  * @return Returns AV_ERR_OK if the execution is successful,
198  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
199  * {@link AV_ERR_NO_MEMORY}, instance has already released.
200  * {@link AV_ERR_INVALID_VAL}, the encoder is nullptr or invalid.
201  * {@link AV_ERR_UNKNOWN}, unknown error.
202  * {@link AV_ERR_SERVICE_DIED}, avcodec service is died.
203  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
204  * @since 9
205  * @version 1.0
206  */
207 OH_AVErrCode OH_VideoEncoder_Stop(OH_AVCodec *codec);
208 
209 /**
210  * @brief Clear the input and output data buffered in the encoder. After this interface is called, all the Buffer
211  * indexes previously reported through the asynchronous callback will be invalidated, make sure not to access the
212  * Buffers corresponding to these indexes.
213  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
214  * @param codec Pointer to an OH_AVCodec instance
215  * @return Returns AV_ERR_OK if the execution is successful,
216  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
217  * {@link AV_ERR_NO_MEMORY}, instance has already released.
218  * {@link AV_ERR_INVALID_VAL}, the encoder is nullptr or invalid.
219  * {@link AV_ERR_UNKNOWN}, unknown error.
220  * {@link AV_ERR_SERVICE_DIED}, avcodec service is died.
221  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
222  * @since 9
223  * @version 1.0
224  */
225 OH_AVErrCode OH_VideoEncoder_Flush(OH_AVCodec *codec);
226 
227 /**
228  * @brief Reset the encoder. To continue coding, you need to call the Configure interface again to
229  * configure the encoder instance.
230  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
231  * @param codec Pointer to an OH_AVCodec instance
232  * @return Returns AV_ERR_OK if the execution is successful,
233  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
234  * {@link AV_ERR_NO_MEMORY}, instance has already released.
235  * {@link AV_ERR_INVALID_VAL}, the encoder is nullptr or invalid.
236  * {@link AV_ERR_UNKNOWN}, unknown error.
237  * {@link AV_ERR_SERVICE_DIED}, avcodec service is died.
238  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
239  * @since 9
240  * @version 1.0
241  */
242 OH_AVErrCode OH_VideoEncoder_Reset(OH_AVCodec *codec);
243 
244 /**
245  * @brief Get the description information of the output data of the encoder, refer to {@link OH_AVFormat} for details.
246  * It should be noted that the life cycle of the OH_AVFormat instance pointed to by the return value * needs to
247  * be manually released by the caller.
248  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
249  * @param codec Pointer to an OH_AVCodec instance
250  * @return Returns a pointer to an OH_AVFormat instance.
251  * Return nullptr if the codec is nullptr or invaild.
252  * @since 9
253  * @version 1.0
254  */
255 OH_AVFormat *OH_VideoEncoder_GetOutputDescription(OH_AVCodec *codec);
256 
257 /**
258  * @brief Set dynamic parameters to the encoder. Note: This interface can only be called after the encoder is started.
259  * At the same time, incorrect parameter settings may cause the encoding to fail.
260  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
261  * @param codec Pointer to an OH_AVCodec instance
262  * @param format OH_AVFormat handle pointer
263  * @return Returns AV_ERR_OK if the execution is successful,
264  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
265  * {@link AV_ERR_NO_MEMORY}, instance has already released.
266  * {@link AV_ERR_INVALID_VAL}, the encoder is nullptr or invalid. Invalid param in format.
267  * {@link AV_ERR_UNKNOWN}, unknown error.
268  * {@link AV_ERR_SERVICE_DIED}, avcodec service is died.
269  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
270  * @since 9
271  * @version 1.0
272  */
273 OH_AVErrCode OH_VideoEncoder_SetParameter(OH_AVCodec *codec, OH_AVFormat *format);
274 
275 /**
276  * @brief Get the input Surface from the video encoder, this interface must be called before Prepare is called.
277  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
278  * @param codec Pointer to an OH_AVCodec instance
279  * @param window A pointer to a OHNativeWindow instance, see {@link OHNativeWindow}, the application is responsible for
280  * managing the life cycle of the window, call OH_NativeWindow_DestroyNativeWindow() when done.
281  * @return Returns AV_ERR_OK if the execution is successful,
282  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
283  * {@link AV_ERR_NO_MEMORY}, inner resource has already released.
284  * {@link AV_ERR_INVALID_VAL}, the encoder is nullptr or invalid.
285  * {@link AV_ERR_UNKNOWN}, unknown error.
286  * {@link AV_ERR_SERVICE_DIED}, avcodec service is died.
287  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
288  * @since 9
289  * @version 1.0
290  */
291 OH_AVErrCode OH_VideoEncoder_GetSurface(OH_AVCodec *codec, OHNativeWindow **window);
292 
293 /**
294  * @brief Return the processed output Buffer to the encoder.
295  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
296  * @param codec Pointer to an OH_AVCodec instance
297  * @param index The index value corresponding to the output Buffer
298  * @return Returns AV_ERR_OK if the execution is successful,
299  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
300  * {@link AV_ERR_NO_MEMORY}, instance has already released.
301  * {@link AV_ERR_INVALID_VAL}, the encoder is nullptr or invalid.
302  * Buffer index should be given by {@link OH_AVCodecOnNewOutputData}.
303  * {@link AV_ERR_UNKNOWN}, unknown error.
304  * {@link AV_ERR_SERVICE_DIED}, avcodec service is died.
305  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
306  * @deprecated since 11
307  * @useinstead OH_VideoEncoder_FreeOutputBuffer
308  * @since 9
309  * @version 1.0
310  */
311 OH_AVErrCode OH_VideoEncoder_FreeOutputData(OH_AVCodec *codec, uint32_t index);
312 
313 /**
314  * @brief Notifies the video encoder that the input stream has ended. It is recommended to use this interface to notify
315  * the encoder of the end of the stream in surface mode
316  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
317  * @param codec Pointer to an OH_AVCodec instance
318  * @return Returns AV_ERR_OK if the execution is successful,
319  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
320  * {@link AV_ERR_NO_MEMORY}, instance has already released.
321  * {@link AV_ERR_INVALID_VAL}, the encoder is nullptr or invalid.
322  * {@link AV_ERR_UNKNOWN}, unknown error.
323  * {@link AV_ERR_SERVICE_DIED}, avcodec service is died.
324  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
325  * @since 9
326  * @version 1.0
327  */
328 OH_AVErrCode OH_VideoEncoder_NotifyEndOfStream(OH_AVCodec *codec);
329 
330 /**
331  * @brief Submit the input buffer filled with data to the video encoder.
332  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
333  * @param codec Pointer to an OH_AVCodec instance
334  * @param index Enter the index value corresponding to the Buffer
335  * @param attr Information describing the data contained in the Buffer
336  * @return Returns AV_ERR_OK if the execution is successful,
337  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
338  * {@link AV_ERR_NO_MEMORY}, instance has already released.
339  * {@link AV_ERR_INVALID_VAL}, the encoder is nullptr or invalid.
340  * Buffer index should be given by {@link OH_AVCodecOnNeedInputData}.
341  * {@link AV_ERR_UNKNOWN}, unknown error.
342  * {@link AV_ERR_SERVICE_DIED}, avcodec service is died.
343  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
344  * @deprecated since 11
345  * @useinstead OH_VideoEncoder_PushInputBuffer
346  * @since 10
347  */
348 OH_AVErrCode OH_VideoEncoder_PushInputData(OH_AVCodec *codec, uint32_t index, OH_AVCodecBufferAttr attr);
349 
350 /**
351  * @brief Submit the input buffer filled with data to the video encoder.
352  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
353  * @param codec Pointer to an OH_AVCodec instance
354  * @param index Enter the index value corresponding to the Buffer
355  * @return Returns AV_ERR_OK if the execution is successful,
356  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
357  * {@link AV_ERR_NO_MEMORY}, instance has already released.
358  * {@link AV_ERR_INVALID_VAL}, the encoder is nullptr or invalid.
359  * Buffer index should be given by {@link OH_AVCodecOnNeedInputBuffer}.
360  * {@link AV_ERR_UNKNOWN}, unknown error.
361  * {@link AV_ERR_SERVICE_DIED}, avcodec service is died.
362  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
363 
364  * @since 11
365  */
366 OH_AVErrCode OH_VideoEncoder_PushInputBuffer(OH_AVCodec *codec, uint32_t index);
367 
368 /**
369  * @brief Submit the input parameter filled with data to the video encoder.
370  *
371  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
372  * @param codec Pointer to an OH_AVCodec instance
373  * @param index Enter the index value corresponding to the input parameter
374  * @return Returns AV_ERR_OK if the execution is successful,
375  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
376  * {@link AV_ERR_NO_MEMORY}, instance has already released.
377  * {@link AV_ERR_INVALID_VAL}, the encoder is nullptr or invalid.
378  * Index should be given by {@link OH_VideoEncoder_OnNeedInputParameter}.
379  * {@link AV_ERR_UNKNOWN}, unknown error.
380  * {@link AV_ERR_SERVICE_DIED}, avcodec service is died.
381  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
382  * @since 12
383  */
384 OH_AVErrCode OH_VideoEncoder_PushInputParameter(OH_AVCodec *codec, uint32_t index);
385 
386 /**
387  * @brief Return the processed output Buffer to the encoder.
388  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
389  * @param codec Pointer to an OH_AVCodec instance
390  * @param index The index value corresponding to the output Buffer
391  * @return Returns AV_ERR_OK if the execution is successful,
392  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
393  * {@link AV_ERR_NO_MEMORY}, instance has already released.
394  * {@link AV_ERR_INVALID_VAL}, the encoder is nullptr or invalid.
395  * Buffer index should be given by {@link OH_AVCodecOnNewOutputBuffer}.
396  * {@link AV_ERR_UNKNOWN}, unknown error.
397  * {@link AV_ERR_SERVICE_DIED}, avcodec service is died.
398  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
399  * @since 11
400  */
401 OH_AVErrCode OH_VideoEncoder_FreeOutputBuffer(OH_AVCodec *codec, uint32_t index);
402 
403 /**
404  * @brief Get the input data description of the encoder after call {@OH_VideoEncoder_Configure},
405  * refer to {@link OH_AVFormat} for details. It should be noted that the life cycle of the OH_AVFormat
406  * instance pointed to by the return value needs to be manually released by the caller.
407  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
408  * @param codec Pointer to an OH_AVCodec instance
409  * @return Returns a pointer to an OH_AVFormat instance.
410  * Return nullptr if the encoder is nullptr or invaild.
411  * @since 10
412  */
413 OH_AVFormat *OH_VideoEncoder_GetInputDescription(OH_AVCodec *codec);
414 
415 /**
416  * @brief Check whether the current codec instance is valid. It can be used fault recovery or app
417  * switchback from the background
418  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
419  * @param codec Pointer to an OH_AVCodec instance
420  * @param isValid Output Parameter. A pointer to a boolean instance, it is true if the codec instance is valid,
421  * false if the codec instance is invalid
422  * @return Returns AV_ERR_OK if the execution is successful,
423  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
424  * {@link AV_ERR_NO_MEMORY}, instance has already released.
425  * {@link AV_ERR_INVALID_VAL}, the encoder is nullptr or invalid.
426  * {@link AV_ERR_UNKNOWN}, unknown error.
427  * {@link AV_ERR_SERVICE_DIED}, avcodec service is died.
428  * @since 10
429  */
430 OH_AVErrCode OH_VideoEncoder_IsValid(OH_AVCodec *codec, bool *isValid);
431 
432 /**
433  * @brief The bitrate mode of video encoder.
434  * @syscap SystemCapability.Multimedia.Media.VideoEncoder
435  * @since 9
436  * @version 1.0
437  */
438 typedef enum OH_VideoEncodeBitrateMode {
439     /* constant bit rate mode. */
440     CBR = 0,
441     /* variable bit rate mode. */
442     VBR = 1,
443     /* constant quality mode. */
444     CQ = 2,
445 } OH_VideoEncodeBitrateMode;
446 
447 #ifdef __cplusplus
448 }
449 #endif
450 
451 #endif // NATIVE_AVCODEC_VIDEOENCODER_H