VVenC 编码器源码结构与接口函数介绍

VVenC

VVenC(Fraunhofer Versatile Video Encoder)是由德国弗劳恩霍夫海因里希研究所(Fraunhofer Heinrich Hertz Institute, HHI)开发的一个开源的高效视频编码器。它实现了最新的视频编码标准——Versatile Video Coding (VVC),也被称为H.266。VVC是高效视频编码(HEVC,即H.265)的后继者,其目标是在相同视觉质量下将比特率降低50%。

VVenC的主要特点包括:

  • 高效编码:VVenC提供了快速且高效的编码实现,能够在较低的比特率下实现较高的视频质量。
  • 感知优化:基于XPSNR视觉模型的感知优化,以提高主观视频质量。
  • 并行化支持:支持广泛的帧级和任务级并行化,具有良好的扩展性。
  • 速率控制:支持帧级的单遍和双遍速率控制,支持可变比特率(VBR)编码。
  • 易用性:提供了五种预定义的质量/速度配置文件,以满足不同应用场景的需求。

VVenC的开发旨在提供一个公开可用、快速且有效的VVC编码器实现,适用于各种实际应用场景。它在处理高分辨率视频(如4K和8K)时表现出色,能够有效降低文件大小,同时保持良好的压缩效果。

VVenC源码结构

在这里插入图片描述

VVenC 接口函数

vvenc.h

  1. VVENC_DECL vvencYUVBuffer* vvenc_YUVBuffer_alloc( void ):用于分配一个 vvencYUVBuffer 类型的实例;该函数只分配 vvencYUVBuffer 结构本身,而不分配用于存储图像数据的内存(payload)。所以需要使用另一个函数 vvenc_YUVBuffer_alloc_buffer 来单独分配存储图像数据的内存。
  2. VVENC_DECL void vvenc_YUVBuffer_free(vvencYUVBuffer *yuvBuffer, bool freePicBuffer ):用于释放 vvencYUVBuffer 类型实例的内存;如果 freePicBuffer 参数被设置为 true,则函数不仅会释放 vvencYUVBuffer 结构本身的内存,还会释放与之关联的图像数据(payload)内存。如果 freePicBuffer 参数被设置为 false,则函数只会释放 vvencYUVBuffer 结构本身的内存,而不会释放与之关联的图像数据内存。
  3. VVENC_DECL void vvenc_YUVBuffer_default(vvencYUVBuffer *yuvBuffer ):该函数将传入的 vvencYUVBuffer 结构体的所有成员变量设置为默认值。
  4. VVENC_DECL void vvenc_YUVBuffer_alloc_buffer( vvencYUVBuffer *yuvBuffer, const vvencChromaFormat chFmt, const int frameWidth, const int frameHeight ):该函数为 vvencYUVBuffer 实例分配存储图像数据的内存缓冲区;当不再需要 payload 缓冲区时,应使用 vvenc_YUVBuffer_free_buffer 函数来释放分配的内存。在调用 vvenc_YUVBuffer_alloc_buffer 之前,确保 yuvBuffer 指向的是一个有效的 vvencYUVBuffer 实例,并且该实例已经通过 vvenc_YUVBuffer_alloc 或 vvenc_YUVBuffer_default 进行了初始化。这个函数只负责分配 payload 缓冲区的内存,不负责释放 vvencYUVBuffer 结构体本身的内存。
  5. VVENC_DECL void vvenc_YUVBuffer_free_buffer( vvencYUVBuffer *yuvBuffer ):这个函数用于释放 vvencYUVBuffer 实例中的 payload 缓冲区所占用的存储空间;在调用 vvenc_YUVBuffer_free_buffer 之前,确保 yuvBuffer 指向的是一个有效的 vvencYUVBuffer 实例,并且该实例的 payload 缓冲区已经被分配。释放 payload 缓冲区后,yuvBuffer 实例将不再包含指向有效图像数据的指针,因此不应再访问这些数据。这个函数只负责释放 payload 缓冲区的内存,不负责释放 vvencYUVBuffer 结构体本身的内存。如果需要释放整个 vvencYUVBuffer 实例,应该使用 vvenc_YUVBuffer_free 函数,并根据需要设置 freePicBuffer 参数。
  6. VVENC_DECL vvencAccessUnit* vvenc_accessUnit_alloc( void ):该函数用于分配一个 vvencAccessUnit 实例,并将其初始化为默认值;该函数只分配 vvencAccessUnit 结构体本身,而不分配用于存储实际数据的 payload 内存。需要使用另一个函数 vvenc_accessUnit_alloc_payload 来单独分配 payload 内存。当不再需要 vvencAccessUnit 实例时,应使用 vvenc_accessUnit_free 函数来释放分配的内存。
  7. VVENC_DECL void vvenc_accessUnit_free(vvencAccessUnit *accessUnit, bool freePayload ):该函数用于释放 vvencAccessUnit 实例的内存;如果 freePayload 参数为 true,则函数会释放 accessUnit 实例的 payload 内存(如果尚未释放)。无论 freePayload 的值如何,函数都会释放 accessUnit 实例本身所占用的内存。
  8. VVENC_DECL void vvenc_accessUnit_alloc_payload(vvencAccessUnit *accessUnit, int payload_size ):这个函数用于为 vvencAccessUnit 实例分配 payload 内存。当不再需要 payload 内存时,可以使用 vvenc_accessUnit_free_payload 函数来单独释放 payload 内存。当 vvencAccessUnit 实例的内存被释放时(例如通过 vvenc_accessUnit_free 函数),payload 内存也会被自动释放。
  9. VVENC_DECL void vvenc_accessUnit_free_payload(vvencAccessUnit *accessUnit ):释放vvencAccessUnit 实例中 payload 内存
  10. VVENC_DECL void vvenc_accessUnit_reset(vvencAccessUnit *accessUnit ):该函数将 accessUnit 结构体的所有成员变量(除了 payload 数据)设置为默认值。
  11. VVENC_DECL void vvenc_accessUnit_default(vvencAccessUnit *accessUnit ):该函数将 accessUnit 结构体的所有成员变量,包括 payload 数据,设置为默认值。
  12. VVENC_DECL const char* vvenc_get_version( void ):该方法返回编码器版本号作为一个字符串。
  13. VVENC_DECL vvencEncoder* vvenc_encoder_create( void ):该方法创建 vvenc 编码器实例;创建后,编码器实例需要进一步配置和初始化才能使用
  14. VVENC_DECL int vvenc_encoder_open( vvencEncoder*, vvenc_config* ): 该方法初始化编码器实例;在创建编码器实例后,通常需要调用此函数来设置编码器的参数,如编码格式、分辨率、码率等。
  15. VVENC_DECL int vvenc_encoder_close(vvencEncoder *):该方法重置编码器实例,在编码任务完成后,或者在需要重置编码器状态以进行新的编码任务时,可以使用此函数。释放编码器占用的内存资源,确保系统资源的有效管理。
  16. typedef void (vvencRecYUVBufferCallback)(void, vvencYUVBuffer* ):回调函数,接受一个已经编码图像的重建 YUV 数据
  17. VVENC_DECL int vvenc_encoder_set_RecYUVBufferCallback(vvencEncoder *, void * ctx, vvencRecYUVBufferCallback callback ):该方法设置回调获取重建 YUV 内存
  18. VVENC_DECL int vvenc_init_pass( vvencEncoder *, int pass, const char * statsFName ):这个函数用于根据编码器的编码阶段(pass)来初始化编码器实例。
  19. VVENC_DECL int vvenc_encode( vvencEncoder , vvencYUVBuffer YUVBuffer, vvencAccessUnit* accessUnit, bool* encodeDone ):该方法编码一个图像,并将压缩后的比特流返回到指定的 vvencAccessUnit 结构体中。
  20. VVENC_DECL int vvenc_get_config( vvencEncoder *,vvenc_config * ):该方法抓取当前编码器配置,如果编码器没有初始化,该方法失败。
  21. VVENC_DECL int vvenc_reconfig( vvencEncoder *, const vvenc_config * ):该方法重新配置编码器实例,该方法用于在编码器编码过程中动态更改编码器参数;提供了一种灵活的方式来适应编码环境的变化,而无需重新初始化整个编码器。
  22. VVENC_DECL int vvenc_check_config( vvencEncoder *, const vvenc_config * ):该函数对传入的 vvenc_config 结构体中的参数进行一致性检查和有效性验证;如果编码器未初始化,则函数将失败。
  23. VVENC_DECL int vvenc_get_headers(vvencEncoder *, vvencAccessUnit * ):该方法返回使用的头信息(SPS、PPS 等),填充到 accessUnit 结构体中。这些头部信息是编码过程中必须的,用于解码器正确解析和解码视频数据。
  24. VVENC_DECL const char* vvenc_get_last_error( vvencEncoder * ):该方法返回最近出现的 error 作为字符串。
  25. VVENC_DECL const char* vvenc_get_enc_information( vvencEncoder * ):该方法返回编码器信息作为字符串。
  26. VVENC_DECL int vvenc_get_num_lead_frames( vvencEncoder * ):该函数用于获取编码器需要的前导帧数量,通常用于运动补偿时间滤波(MCTF)等处理。
  27. VVENC_DECL int vvenc_get_num_trail_frames( vvencEncoder * ):该函数用于获取编码器需要的尾随帧数量,通常用于运动补偿时间滤波(MCTF)等处理。
  28. VVENC_DECL int vvenc_print_summary( vvencEncoder * ):该方法打印编码器运行的总结信息。
  29. VVENC_DECL const char* vvenc_get_error_msg( int nRet ):该函数用于根据传入的错误代码返回相应的错误消息字符串。
  30. VVENC_DECL int vvenc_set_logging_callback( void * ctx, vvencLoggingCallback callback ):已废弃,这个函数用于注册一个全局的日志消息回调函数到编码器库中。
  31. VVENC_DECL const char* vvenc_get_compile_info_string( void ):该函数用于生成一个包含编译信息的字符串,包括操作系统、编译器和位深度(例如32位或64位)。
  32. VVENC_DECL const char* vvenc_set_SIMD_extension( const char* simdId ):该函数用于设置编码器使用的 SIMD(单指令多数据)扩展,并返回当前使用的 SIMD 扩展。
  33. VVENC_DECL int vvenc_get_width_of_component( const vvencChromaFormat chFmt, const int frameWidth, const int compId ):用于获取视频帧中特定色度格式(Chroma Format)下某个分量(component)的宽度。
  34. VVENC_DECL int vvenc_get_height_of_component( const vvencChromaFormat chFmt, const int frameHeight, const int compId ):用于获取视频帧中特定色度格式(Chroma Format)下某个分量(component)的高度。
  35. VVENC_DECL bool vvenc_is_tracing_enabled( void ):该函数用于检查编码器库是否支持跟踪功能(tracing)。跟踪功能通常用于调试和性能分析,可以帮助开发者了解编码器的内部行为和性能表现。
  36. VVENC_DECL int vvenc_decode_bitstream( const char* FileName, const char* trcFile, const char* trcRule):废弃,用于解码比特流文件。
  37. 源码:
/* vvenc_YUVBuffer_alloc:Allocates an vvencYUVBuffer instance.The returned vvencYUVBuffer is set to default values.The payload memory must be allocated seperately by using vvenc_YUVBuffer_alloc_buffer.To free the memory use vvenc_YUVBuffer_free.
*/
VVENC_DECL vvencYUVBuffer* vvenc_YUVBuffer_alloc( void );/* vvenc_YUVBuffer_free:release storage of an vvencYUVBuffer instance.The payload memory is also released if the flag freePicBuffer is set.
*/
VVENC_DECL void vvenc_YUVBuffer_free(vvencYUVBuffer *yuvBuffer, bool freePicBuffer );/* vvenc_YUVBuffer_default:Initialize vvencYUVBuffer structure to default values
*/
VVENC_DECL void vvenc_YUVBuffer_default(vvencYUVBuffer *yuvBuffer );/* vvenc_YUVBuffer_alloc_buffer:Allocates the payload buffer of a vvencYUVBuffer instance.To free the buffer memory use vvenc_YUVBuffer_free_buffer.
*/
VVENC_DECL void vvenc_YUVBuffer_alloc_buffer( vvencYUVBuffer *yuvBuffer, const vvencChromaFormat chFmt, const int frameWidth, const int frameHeight );/* vvenc_YUVBuffer_free_buffer:release storage of the payload in a vvencYUVBuffer instance.
*/
VVENC_DECL void vvenc_YUVBuffer_free_buffer( vvencYUVBuffer *yuvBuffer );// ----------------------------------------/* vvenc_accessUnit_alloc:Allocates a vvencAccessUnit instance.The returned accessUnit is set to default values.The payload memory must be allocated seperately by using vvenc_accessUnit_alloc_payload.To free the memory use vvenc_accessUnit_free.
*/
VVENC_DECL vvencAccessUnit* vvenc_accessUnit_alloc( void );/* vvenc_accessUnit_free:release storage of a vvencAccessUnit instance.The payload memory is also released if not done yet.
*/
VVENC_DECL void vvenc_accessUnit_free(vvencAccessUnit *accessUnit, bool freePayload );/* vvenc_accessUnit_alloc_payload:Allocates the memory for a vvencAccessUnit payload.To free the memory use vvenc_accessUnit_free_payload.When the vvencAccessUnit memory is released the payload memory is also released.
*/
VVENC_DECL void vvenc_accessUnit_alloc_payload(vvencAccessUnit *accessUnit, int payload_size );/* vvenc_accessUnit_free_payload:release storage of the payload in a vvencAccessUnit instance.
*/
VVENC_DECL void vvenc_accessUnit_free_payload(vvencAccessUnit *accessUnit );/* vvenc_accessUnit_reset:resets vvencAccessUnit structure to its default values. payload data will not be reset.
*/
VVENC_DECL void vvenc_accessUnit_reset(vvencAccessUnit *accessUnit );/* vvenc_accessUnit_default:Initialize vvencAccessUnit structure to default values (including au payload)
*/
VVENC_DECL void vvenc_accessUnit_default(vvencAccessUnit *accessUnit );/*This method returns the encoder version number as a string.\param      None\retval     std::string returns the version number
*/
VVENC_DECL const char* vvenc_get_version( void );/* vvenc_encoder_createThis method creates a vvenc encoder instance.\param[in]  none.\retval     vvencEncoder pointer of the encoder handler if successful, otherwise NULL\pre        The encoder must not be initialized (pointer of decoder handler must be null).
*/
VVENC_DECL vvencEncoder* vvenc_encoder_create( void );/* vvenc_encoder_openThis method initializes the encoder instance.This method is used to initially set up the encoder with the assigned encoder parameter struct.The method fails if the encoder is already initialized or if the assigned parameter structdoes not pass the consistency check. Other possibilities for an unsuccessful call are missing encoder license, or a machine withinsufficient CPU capabilities.\param[in]  vvencEncoder pointer to opaque handler.\param[in]  vvenc_config* pointer to vvenc_config struct that holds initial encoder parameters.\retval     int  if non-zero an error occurred (see ErrorCodes), otherwise the return value indicates success VVENC_OK\pre        The encoder must not be initialized.
*/
VVENC_DECL int vvenc_encoder_open( vvencEncoder*, vvenc_config* );/* vvenc_encoder_closeThis method resets the encoder instance.This method clears the encoder and releases all internally allocated memory.Calling uninit cancels all pending encoding calls. In order to finish pending input pictures use the flush method.\param[in]  vvencEncoder pointer to opaque handler.\retval     int if non-zero an error occurred (see ErrorCodes), otherwise VVENC_OK indicates success.\pre        None
*/
VVENC_DECL int vvenc_encoder_close(vvencEncoder *);/* vvencRecYUVBufferCallback:callback function to receive reconstructed yuv data of an encoded picture
*/
typedef void (*vvencRecYUVBufferCallback)(void*, vvencYUVBuffer* );/* vvenc_encoder_set_RecYUVBufferCallbackThis method sets the callback to get the reconstructed YUV buffer.\param[in]  vvencEncoder pointer to opaque handler\param[in]  ctx pointer of the caller, if not needed set it to null\param[in]  implementation of the callback\retval     int if non-zero an error occurred (see ErrorCodes), otherwise VVENC_OK indicates success.\pre        None
*/
VVENC_DECL int vvenc_encoder_set_RecYUVBufferCallback(vvencEncoder *, void * ctx, vvencRecYUVBufferCallback callback );/* vvenc_init_passThis method initializes the encoder instance in dependency to the encoder pass.\param[in]  vvencEncoder pointer to opaque handler\param[in]  pass number of current pass to init (0: first pass, 1: second pass )\param[in]  rate control statistics file name\retval     int if non-zero an error occurred (see ErrorCodes), otherwise VVENC_OK indicates success.\pre        None
*/
VVENC_DECL int vvenc_init_pass( vvencEncoder *, int pass, const char * statsFName );/* vvenc_encodeThis method encodes a picture.Uncompressed input pictures are passed to the encoder in display order. A compressed bitstream chunk is returned by filling the assigned AccessUnit struct.Data in AcccessUnit struct is valid if the encoder call returns success and the UsedSize attribute is non-zero.If the input parameter YUVBuffer is NULL, the encoder just returns a pending bitstream chunk if available.If the call returns VVENC_NOT_ENOUGH_MEM, the payloadSize attribute in AccessUnit struct indicates that the buffer is to small to retrieve the compressed data waiting for delivery.In this case the UsedSize attribute returns the minimum buffersize required to fetch the pending chunk. After allocating sufficient memory the encoder can retry the last call with the parameter pcInputPicture set to NULL to prevent encoding the last picture twice.\param[in]  vvencEncoder pointer to opaque handler\param[in]  pcYUVBuffer pointer to vvencYUVBuffer structure containing uncompressed picture data and meta information, to flush the encoder YUVBuffer must be NULL.\param[out] accessUnit pointer to vvencAccessUnit that retrieves compressed access units and side information, data is valid if UsedSize attribute is non-zero and the call was successful.\param[out] encodeDone pointer to flag that indicates that the encoder completed the last frame after flushing.\retval     int if non-zero an error occurred, otherwise the retval indicates success VVENC_OK\pre        The encoder has to be initialized successfully.
*/
VVENC_DECL int vvenc_encode( vvencEncoder *, vvencYUVBuffer* YUVBuffer, vvencAccessUnit* accessUnit, bool* encodeDone );/* vvenc_get_configThis method fetches the current encoder configuration.The method fails if the encoder is not initialized.\param[in]  vvencEncoder pointer to opaque handler\param[in]  vvenc_config reference to a vvenc_config struct that returns the current encoder setup.\retval     int VVENC_ERR_INITIALIZE indicates the encoder was not successfully initialized in advance, otherwise the return value VVENC_OK indicates success.\pre        The encoder has to be initialized.
*/
VVENC_DECL int vvenc_get_config( vvencEncoder *,vvenc_config * );/* vvenc_reconfigThis method reconfigures the encoder instance.This method is used to change encoder settings during the encoding process when the encoder was already initialized.Some parameter changes might require an internal encoder restart, especially when previously used parameter sets VPS, SPS or PPSbecome invalid after the parameter change. If changes are limited to TargetBitRate or QP changes then the encoder continues encodingwithout interruption, using the new parameters. Some parameters e.g. NumTheads, are not reconfigurable - in this case the encoder returns an Error.The method fails if the encoder is not initialized or if the assigned parameter set given in vvenc_config structdoes not pass the consistency and parameter check.\param[in]  vvencEncoder pointer to opaque handler\param[in]  vvenc_config const reference to vvenc_config struct that holds the new encoder parameters.\retval     int if non-zero an error occurred (see ErrorCodes), otherwise VVENC_OK indicates success.\pre        The encoder has to be initialized successfully.
*/
VVENC_DECL int vvenc_reconfig( vvencEncoder *, const vvenc_config * );/* vvenc_check_configThis method checks the passed configuration.The method fails if the encoder is not initialized.\param[in]  vvencEncoder pointer to opaque handler\param[in]  rcVVCEncParameter reference to an VVCEncParameter struct that returns the current encoder setup.\retval     int VVENC_ERR_PARAMETER indicates a parameter error, otherwise the return value VVENC_OK indicates success.
*/
VVENC_DECL int vvenc_check_config( vvencEncoder *, const vvenc_config * );/* vvenc_get_headersThis method returns the headers (SPS,PPS,...) that are used.All init calls (vvenc_encoder_open, vvenc_init_pass) must be called in advance.\param[in]  vvencEncoder pointer to opaque handler\param[out] accessUnit pointer to vvencAccessUnit that retrieves compressed access units containing all headers.    \retval     int negative indicates an error, otherwise the return value VVENC_OK indicates success.
*/
VVENC_DECL int vvenc_get_headers(vvencEncoder *, vvencAccessUnit * );/* vvenc_get_last_errorThis method returns the last occurred error as a string.\param[in]  vvencEncoder pointer to opaque handler\retval     const char empty string for no error assigned
*/
VVENC_DECL const char* vvenc_get_last_error( vvencEncoder * );/* vvenc_get_enc_informationThis method returns information about the encoder as a string.\param[in]  vvencEncoder pointer to opaque handler\retval     const char* encoder information
*/
VVENC_DECL const char* vvenc_get_enc_information( vvencEncoder * );/* vvenc_get_num_lead_framesThis method the number of needed lead frames (used for MCTF)\param[in]  vvencEncoder pointer to opaque handler\retval     number of leading frames
*/
VVENC_DECL int vvenc_get_num_lead_frames( vvencEncoder * );/* vvenc_get_num_trail_framesThis method the number of needed trailing frames (used for MCTF)\param[in]  vvencEncoder pointer to opaque handler\retval     number of trailing frames
*/
VVENC_DECL int vvenc_get_num_trail_frames( vvencEncoder * );/* vvenc_print_summaryThis method prints the summary of a encoder run.\param[in]  vvencEncoder pointer to opaque handler\retval     int VVENC_ERR_INITIALIZE indicates the encoder was not successfully initialized in advance, otherwise the return value VVENC_OK indicates success.
*/
VVENC_DECL int vvenc_print_summary( vvencEncoder * );/* vvenc_get_error_msgThis static function returns a string according to the passed parameter nRet.\param[in]  nRet return value code to translate\retval[ ]  const char*  empty string for no error
*/
VVENC_DECL const char* vvenc_get_error_msg( int nRet );/* vvenc_set_logging_callback *deprecated*This method registers a global log message callback function to the encoder library.If no such function has been registered, the library will omit all messages.*deprecated* - This method is deprecated since it uses a global logger and will be removed in the next major version.Please use the method vvenc_set_logging_callback(vvenc_config,void *,vvencLoggingCallback) to register a thread safe local looger\param[in]  ctx pointer of the caller, if not needed set it to null\paramin]   Log message callback function.\retval     int VVENC_ERR_INITIALIZE indicates the encoder was not successfully initialized in advance, otherwise the return value VVENC_OK indicates success.
*/
VVENC_DECL int vvenc_set_logging_callback( void * ctx, vvencLoggingCallback callback );/* vvenc_get_compile_info_stringcreates compile info string containing OS, Compiler and Bit-depth (e.g. 32 or 64 bit).\retval[ ]  const char* compiler infoa as string
*/
VVENC_DECL const char* vvenc_get_compile_info_string( void );/* vvenc_set_SIMD_extensiontries to set given simd extensions used. if not supported by CPU, highest possible extension level will be set and returned.\param      const char* simdId: empty string to set highest possible extension, otherwise set simd extension\retval[ ]  const char* current simd exentsion
*/
VVENC_DECL const char* vvenc_set_SIMD_extension( const char* simdId );/* vvenc_get_height_of_component\param      chFmt  Chroma Format\param      frameWidth width\param      compId component ID\retval[ ]  width of component
*/
VVENC_DECL int  vvenc_get_width_of_component( const vvencChromaFormat chFmt, const int frameWidth, const int compId );/* vvenc_get_height_of_component\param      chFmt Chroma Format\param      frameHeight\param      compId component ID\retval[ ]  height of component
*/
VVENC_DECL int  vvenc_get_height_of_component( const vvencChromaFormat chFmt, const int frameHeight, const int compId );/* Debug section *//* vvenc_is_tracing_enabledchecks if library has tracing supported enabled (see ENABLE_TRACING).\retval[ ]  true if tracing is enabled, else false
*/
VVENC_DECL bool  vvenc_is_tracing_enabled( void );/* vvenc_decode_bitstream
* @deprecated\param[in]  FileName of bitstream that should be decoded\param[in]  trcFile filename of a trace rule file\param[in]  trcRule trace rules\retval     int VVENC_ERR_INITIALIZE indicates the encoder was not successfully initialized in advance, otherwise the return value VVENC_OK indicates success.
*/
attribute_deprecated
VVENC_DECL int   vvenc_decode_bitstream( const char* FileName, const char* trcFile, const char* trcRule);

vvencCfg.h

  1. VVENC_DECL void vvenc_config_default( vvenc_config *cfg ):这个函数用于将 vvenc_config 结构体的参数初始化为默认值。
  2. VVENC_DECL int vvenc_init_default( vvenc_config *cfg, int width, int height, int framerate, int targetbitrate, int qp, vvencPresetMode preset ):这个方法使用所有必要的参数(尺寸、帧率、比特率、量化参数和预设)来将 vvenc_config 参数初始化为默认值。
  3. VVENC_DECL int vvenc_init_preset( vvenc_config *cfg, vvencPresetMode preset ):通过使用 preset 覆盖编码器参数;在它之前vvenc_config_default 或 vvenc_init_default 函数必须首先被调用。
  4. VVENC_DECL void vvenc_set_msg_callback( vvenc_config *cfg, void * msgCtx, vvencLoggingCallback msgFnc ):该方法注册日志信息回调函数。
  5. VVENC_DECL bool vvenc_init_config_parameter( vvenc_config *cfg ):该方法用于初始化编码参数,并将所有还未初始化的参数设置为有效值。在它之前vvenc_config_default 或 vvenc_init_default 函数必须首先被调用。
  6. VVENC_DECL int vvenc_set_param(vvenc_config *cfg, const char *name, const char *value):通过参数名称设置单个编码器参数;必须先调用 vvenc_config_default() 或 vvenc_init_default() 来初始化配置结构体的基本参数。
  7. VVENC_DECL int vvenc_set_param_list(vvenc_config c, int argc, char argv[] ):通过名称设置一组参数;必须先调用 vvenc_config_default() 或 vvenc_init_default() 来初始化配置结构体的基本参数。
  8. VVENC_DECL const char* vvenc_get_config_as_string( vvenc_config *cfg, vvencMsgLevel eMsgLevel ):返回编码器配置作为字符串,必须先调用 vvenc_config_default() 或 vvenc_init_default() 来初始化配置结构体的基本参数。
  9. 源码:
/* vvenc_config_defaultThis method initializes the vvenc_config parameters to default values (constructor).\param[in]  vvenc_config* pointer to vvenc_config struct that contains encoder parameters\retval     none\pre        None
*/
VVENC_DECL void vvenc_config_default( vvenc_config *cfg );/* vvenc_init_defaultThis method initializes the vvenc_config parameters to default values by using all requiredparameters size, framerate, bitrate, qp, preset.\param[in]  vvenc_config* pointer to vvenc_config struct that contains encoder parameters\param[in]  width  source width in pixel\param[in]  height source height in pixel\param[in]  framerate source frame-rates (Hz)\param[in]  targetbitrate bitrate in bps (0: use fix qp, >0: enable rate control)\param[in]  qp QP value of key-picture (integer in range 0 to 63, default: 32)\param[in]  preset enum of used preset (default: VVENC_MEDIUM)\retval     int if non-zero an error occurred (see ErrorCodes), otherwise VVENC_OK indicates success.\pre        None
*/
VVENC_DECL int vvenc_init_default( vvenc_config *cfg, int width, int height, int framerate, int targetbitrate, int qp, vvencPresetMode preset );/* vvenc_init_presetThis method overwrites encoder parameter by using a preset.\param[in]  vvenc_config* pointer to vvenc_config struct that contains encoder parameters\param[in]  preset enum of used preset (default: VVENC_MEDIUM)\retval     int if non-zero an error occurred (see ErrorCodes), otherwise VVENC_OK indicates success.\pre        vvenc_config_default() or vvenc_init_default() must be called first 
*/
VVENC_DECL int vvenc_init_preset( vvenc_config *cfg, vvencPresetMode preset );/* vvenc_set_logging_callbackThis method registers a log message callback function.This callback is automatically used when calling vvenc_encoder_open().If no such function has been registered, the library will omit all messages.\param[in]  vvenc_config* pointer to vvenc_config struct that contains encoder parameters\param[in]  msgCtx pointer of the caller, if not needed set it to null\param[in]  msgFnc Log message callback function.\retval     none
*/
VVENC_DECL void vvenc_set_msg_callback( vvenc_config *cfg, void * msgCtx, vvencLoggingCallback msgFnc );/* vvenc_init_config_parameter (optional)This method initialize the encoder parameter and sets all parameter the are not initialized yet.All not initialized parameters are set to valid values.Is automatically called in vvenc_encoder_open().\param[in]  vvenc_config* pointer to vvenc_config struct that contains encoder parameters\retval    bool if true an error occurred, otherwise false.\pre        vvenc_config_default() or vvenc_init_default() must be called first 
*/
VVENC_DECL bool vvenc_init_config_parameter( vvenc_config *cfg );/* vvenc_set_param (optional)This method sets one parameter by name.numerical range is not checked until vvenc_init_config_parameter()\param[in]  vvenc_config* pointer to vvenc_config struct that contains encoder parameters\param[in]  name option name as stringuse "help", "longhelp", "fullhelp" to print available options\param[in]  value option value as stringvalue=NULL means "true" for boolean options, but is a BAD_VALUE for non-booleans.\retval    returns 0 on success, or returns one of the following values:VVENC_BAD_VALUE occurs only if it can't even parse the value,VVENC_PARAM_INFO occurs when a information should be printed (e.g. help, version)\pre       vvenc_config_default() or vvenc_init_default() must be called first 
*/
#define VVENC_PARAM_BAD_NAME  (-1)
#define VVENC_PARAM_BAD_VALUE (-2)
#define VVENC_PARAM_INFO      (1)
VVENC_DECL int vvenc_set_param(vvenc_config *cfg, const char *name, const char *value);/* vvenc_set_param_list (optional)This method sets a list of parameters by name.arguments must be separated as would be used in command line. e.g.: --bitrate 500000 --framerate 50numerical range is not checked until vvenc_init_config_parameter()\param[in]  vvenc_config* pointer to vvenc_config struct that contains encoder parameters\param[in]  argc number or arguments in argv string list\param[in]  argv list of char* (argv[]); option name must be defined by prefix -- or -\retval     returns 0 on success, > 0 if an information was printed (help), -1 on failure.\pre        vvenc_config_default() or vvenc_init_default() must be called first 
*/
VVENC_DECL int vvenc_set_param_list(vvenc_config *c, int argc, char* argv[] );/* vvenc_get_config_as_string (optional)This method returns the encoder configuration as string.\param[in]  vvenc_config* pointer to vvenc_config struct that contains encoder parameters\param[in]  eMsgLevel verbosity level\retval     const char* encoder configuration as string\pre        vvenc_config_default() or vvenc_init_default() must be called first 
*/
VVENC_DECL const char* vvenc_get_config_as_string( vvenc_config *cfg, vvencMsgLevel eMsgLevel );

VVenC 编码器接口应用

  1. 可执行程序工具梳理图:
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/66497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

耗时一天,我用AI开发了AI小程序

小码哥从事前后端开发近十年,但是随着技术的更新迭代,有时候没有时间和精力去优化UI、实现一些前后端功能,以及解决一些bug。特别是我想开发小码哥AI的移动端,但觉得自己没有那么多时间去研究移动端了,准备放弃了&…

C#中的关键字out和ref的区别

目录 一、out 二、ref 三、拓展 一、out 在 C# 中,out 是一个关键字,通常用于方法参数,表示该参数是输出参数。使用 out 关键字的参数要求在方法内部必须被赋值,而这个参数的值会在方法返回时传递给调用者。可以理解为&#xf…

SpringBootWeb案例-1(day10)

准备工作 需求 & 环境搭建 需求说明 环境搭建 步骤: 准备数据库表(dept、emp)创建 springboot 工程,引入对应的起步依赖(web、mybatis、mysql 驱动、lombok)配置文件 application.properties 中引入 mybatis 的配置信息&…

VUE条件树查询 自定义条件节点

之前实现过的简单的条件树功能如下图&#xff1a; 经过最新客户需求确认&#xff0c;上述条件树还需要再次改造&#xff0c;以满足正常需要&#xff01; 最新暴改后的功能如下红框所示&#xff1a; 页面功能 主页面逻辑代码&#xff1a; <template><div class"…

保险丝驱动电路·保险丝有什么用应该如何选型详解文章!!!

目录 保险丝基础知识 保险丝常见类型 保险丝功能讲解 保险丝驱动电路 ​​​​​​​ ​​​​​​​ 编写不易&#xff0c;仅供学习&#xff0c;请勿搬运&#xff0c;感谢理解 常见元器件驱动电路文章专栏连接 LM7805系列降压芯片驱动电路降压芯片驱动电…

李宏毅机器学习课程笔记02 | 机器学习任务攻略General Guide

第一步&#xff1a;分析loss on training data 先检查在训练数据上模型是否很好的学习 情况1&#xff1a;如果在训练集上&#xff0c;loss很大&#xff0c;说明在训练资料上没有训练好 可能性1&#xff1a;设置的模型太简单了&#xff0c;模型存在model bias模型偏差&#x…

Gitlab-runner 修改默认的builds_dir并使用custom_build_dir配置

gitlab-runner 修改默认的builds_dir并使用custom_build_dir配置 1. 说明2. 实操&#xff08;以docker执行器为例&#xff09;2.1 修改默认的builds_dir2.1.1 调整gitlab-runner的配置文件2.1.2 CI文件 2.2 启用custom_build_dir2.2.1 调整gitlab-runner的配置文件2.2.2 CI文件…

概率基本概念 --- 离散型随机变量实例

条件概率&独立事件 随机变量 - 离散型随机变量 - 非离散型随机变量 连续型随机变量奇异性型随机变量 概率表示 概率分布函数概率密度函数概率质量函数全概率公式贝叶斯公式 概率计算 数学期望方差协方差 计算实例 假设有两个离散型随机变量X和Y&#xff0c;它们代…

QT RC_FILE 应用程序图标设置

1.先做一个app.ico 文件&#xff0c;并将文件放入资源文件夹中 2.打开QT项目的.pro文件在最下面增加 RC_FILE $$PWD/res/app.rc 3.在资源文件夹中创建一个app.rc文件。在QT开发工具中编辑并输入下在内容 IDI_ICON1 ICON "app.ico" 4.测试效果

SQLark:高效数据库连接管理的新篇章

在我们日常工作中&#xff0c;不同的项目使用的数据库不同&#xff0c;比如我这边涉及的数据库就有达梦、Oracle、Mysql&#xff0c;每种数据库都有自己的数据库连接工具&#xff0c;我们不得不在电脑上针对每个数据库都装一个客户端&#xff0c;使用时还得在不同数据库连接工具…

Minio-Linux-安装

文章目录 1.Linux安装1.下载源码包2.上传到/usr/local/minio1.进入目录2.上传 3.开放执行权限4.创建minio文件存储目录及日志目录5.编写启动的shell脚本1.脚本编写2.赋予执行权限 6.启动&#xff01;1.执行run脚本2.查看日志3.开放9001和9000端口1.服务器2.安全组3.访问&#x…

基于Springboot + vue实现的小型养老院管理系统

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…

大模型思维链推理的进展、前沿和未来分析

大模型思维链推理的综述&#xff1a;进展、前沿和未来 "Chain of Thought Reasoning: A State-of-the-Art Analysis, Exploring New Horizons and Predicting Future Directions." 思维链推理的综述&#xff1a;进展、前沿和未来 摘要&#xff1a;思维链推理&#…

下载ffmpeg执行文件

打开网址&#xff1a;Download FFmpeg 按下面步骤操作 解压文件就可以看到ffmpeg的执行文件了&#xff0c;需要通过命令行进行使用&#xff1a; ffmpeg命令行使用参考&#xff1a; ffmpeg 常用命令-CSDN博客

Ardupilot开源无人机之Geek SDK进展2024

Ardupilot开源无人机之Geek SDK进展202501 1. 源由2. 状态3. TODO3.1 跟踪目标框3.2 onnxruntime版本3.3 CUDA 11.8版本3.4 pytorch v2.5.1版本3.5 Inference性能3.6 特定目标集Training 4. 参考资料 1. 源由 前期搭建《Ardupilot开源无人机之Geek SDK》&#xff0c;主要目的是…

【跨域问题】

跨域问题 官方概念&#xff1a; 当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域本质来说&#xff0c;是前端请求给到后端时候&#xff0c;请求头里面&#xff0c;有一个 Origin &#xff0c;会带上 协议域名端口号等&#xff1b;后端接受到请求&…

STLG_01_19_程序设计C语言 - 总结

为了让刚上大一的大千金在IT征途中打下坚实的基础&#xff0c;闲暇之余重新梳理一遍C语言的知识结构&#xff0c;整理了一下学习C语言的纲要笔记。 IT学习首先要了解其过往、现状、未来发展趋势&#xff1b;其次要建立前、后端、应用的技术知识体系&#xff1b;还要学会具体应用…

2024网络安全运营方案概述(附实践资料合集)

以下是网络安全运营方案的详细内容&#xff1a; 一、目标与原则 目标&#xff1a;建立一套安全高效、灵活性强的网络安全运营体系&#xff0c;实现对网络安全的全面监控、防护和应急响应。原则&#xff1a; 全员参与&#xff1a;网络安全是全员共同的责任&#xff0c;所有员工…

“转移”的理解

“转移”的理解 一般情况下指令是顺序执行的&#xff0c;而在实际工程中&#xff0c;需要改变程序的执行流程。 操作符offset 用操作符offset取得标号的偏移地址

Windows搭建RTMP服务器

目录 一、Nginx-RTMP服务器搭建1、下载Nginx2、下载Nginx的RTMP扩展包3、修改配置文件4、启动服务器5、查看服务器状态6、其它ngnix命令 二、OBS推流1 、推流设置2、查看服务器状态 三、VLC拉流四、补充 本文转载自&#xff1a;Windows搭建RTMP服务器OBS推流VLC拉流_浏览器查看…