obs-ffmpeg-video-encoders.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #pragma once
  2. #include <util/platform.h>
  3. #include <util/darray.h>
  4. #include <util/dstr.h>
  5. #include <util/base.h>
  6. #include <media-io/video-io.h>
  7. #include <opts-parser.h>
  8. #include <obs-module.h>
  9. #include <libavutil/opt.h>
  10. #include <libavutil/pixdesc.h>
  11. #include <libavformat/avformat.h>
  12. #include "obs-ffmpeg-formats.h"
  13. typedef void (*init_error_cb)(void *data, int ret);
  14. typedef void (*first_packet_cb)(void *data, AVPacket *pkt, struct darray *out);
  15. struct ffmpeg_video_encoder {
  16. obs_encoder_t *encoder;
  17. const char *enc_name;
  18. AVCodec *avcodec;
  19. AVCodecContext *context;
  20. int64_t start_ts;
  21. bool first_packet;
  22. AVFrame *vframe;
  23. DARRAY(uint8_t) buffer;
  24. int height;
  25. bool initialized;
  26. void *parent;
  27. init_error_cb on_init_error;
  28. first_packet_cb on_first_packet;
  29. };
  30. extern bool ffmpeg_video_encoder_init(struct ffmpeg_video_encoder *enc,
  31. void *parent, obs_data_t *settings,
  32. obs_encoder_t *encoder,
  33. const char *enc_lib, const char *enc_lib2,
  34. const char *enc_name,
  35. init_error_cb on_init_error,
  36. first_packet_cb on_first_packet);
  37. extern void ffmpeg_video_encoder_free(struct ffmpeg_video_encoder *enc);
  38. extern bool ffmpeg_video_encoder_init_codec(struct ffmpeg_video_encoder *enc);
  39. extern void ffmpeg_video_encoder_update(struct ffmpeg_video_encoder *enc,
  40. int bitrate, int keyint_sec,
  41. const struct video_output_info *voi,
  42. const struct video_scale_info *info,
  43. const char *ffmpeg_opts);
  44. extern bool ffmpeg_video_encode(struct ffmpeg_video_encoder *enc,
  45. struct encoder_frame *frame,
  46. struct encoder_packet *packet,
  47. bool *received_packet);