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