video_encoder_api.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #include "video_encoder_api.h"
  2. #include "video_stream_encoder.h"
  3. #include "base/video_coding_log.h"
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7. struct _VideoEncoderApi {
  8. video_coding::VideoStreamEncoder *encoder_;
  9. };
  10. VideoEncoderApi *video_encoder_api_new(
  11. VideoEncoderObserver *encoder_stats_observer, VideoCodingLogCallBack* log_func){
  12. video_coding_setup_log(log_func);
  13. video_coding_debug(VIDEO_CODING_DEBUG_ENABLE, "video_encoder_api_new");
  14. VideoEncoderApi *obj = (VideoEncoderApi *)malloc(sizeof(VideoEncoderApi));
  15. memset(obj, 0, sizeof(VideoEncoderApi));
  16. obj->encoder_ = video_coding::video_stream_encoder_new(encoder_stats_observer);
  17. return obj;
  18. }
  19. void video_encoder_api_destroy(VideoEncoderApi *obj){
  20. if (obj != NULL){
  21. video_stream_encoder_destroy(obj->encoder_);
  22. obj->encoder_ = NULL;
  23. free(obj);
  24. video_coding_debug(VIDEO_CODING_DEBUG_ENABLE, "video_encoder_api_destroy");
  25. }
  26. video_coding_unsetup_log();
  27. }
  28. void video_encoder_api_configure_encoder(VideoEncoderApi *obj, VideoEncoderConfig *config,
  29. size_t max_data_payload_length){
  30. if (obj != NULL){
  31. video_coding_debug(VIDEO_CODING_DEBUG_ENCODER_API, "video_encoder_api_configure_encoder max_data_payload_length: %d",
  32. max_data_payload_length);
  33. video_stream_encoder_configure_encoder(obj->encoder_, config, max_data_payload_length);
  34. }
  35. }
  36. void video_encoder_api_stop(VideoEncoderApi *obj){
  37. if (obj != NULL){
  38. video_stream_encoder_stop(obj->encoder_);
  39. video_coding_debug(VIDEO_CODING_DEBUG_ENCODER_API, "video_encoder_api_stop.");
  40. }
  41. }
  42. void video_encoder_api_send_key_frame(VideoEncoderApi *obj){
  43. if (obj != NULL){
  44. video_coding_debug(VIDEO_CODING_DEBUG_ENCODER_API, "video_encoder_api_send_key_frame.");
  45. video_stream_encoder_send_key_frame(obj->encoder_);
  46. }
  47. }
  48. void video_encoder_api_on_bitrate_updated(VideoEncoderApi *obj, uint32_t target_bitrate,
  49. uint8_t fraction_lost,
  50. int64_t round_trip_time_ms){
  51. if (obj != NULL){
  52. video_coding_debug(VIDEO_CODING_DEBUG_ENCODER_API, "video_encoder_api_on_bitrate_updated target_bitrate: %d fraction_lost: %d round_trip_time_ms: %d.",
  53. target_bitrate, fraction_lost, round_trip_time_ms);
  54. video_stream_encoder_on_bitrate_updated(obj->encoder_, target_bitrate, target_bitrate, fraction_lost, round_trip_time_ms);
  55. }
  56. }
  57. void video_encoder_api_on_frame(VideoEncoderApi *obj, unsigned pt, const video_frame *frame){
  58. if (obj != NULL){
  59. video_coding_debug(VIDEO_CODING_DEBUG_ENCODER_API, "video_encoder_api_on_frame width: %d height: %d format: %d.",
  60. frame->width, frame->height, frame->format);
  61. video_stream_encoder_on_frame(obj->encoder_, pt, frame);
  62. }
  63. }
  64. void video_encoder_api_on_discarded_frame(VideoEncoderApi *obj){
  65. if (obj != NULL){
  66. video_coding_debug(VIDEO_CODING_DEBUG_ENCODER_API, "video_encoder_api_on_discarded_frame.");
  67. video_stream_encoder_on_discarded_frame(obj->encoder_);
  68. }
  69. }
  70. #ifdef __cplusplus
  71. }
  72. #endif /* end of __cplusplus */