abstract_encoder.h 701 B

12345678910111213141516171819202122232425262728293031
  1. #ifndef __BASIC_ENCODER_H__
  2. #define __BASIC_ENCODER_H__
  3. #include "basic/basic.h"
  4. class AbstractEncoder
  5. {
  6. public:
  7. AbstractEncoder() { _packet = av_packet_alloc(); }
  8. AVCodecContext* GetCtx() const { return _codecCtx; }
  9. virtual bool PushFrame(AVFrame* frame, bool isEnd, uint64_t pts) = 0;
  10. AVPacket* Encode();
  11. virtual void AfterEncode() {};
  12. virtual void Close() = 0;
  13. virtual ~AbstractEncoder()
  14. {
  15. Free(_packet, [this] { av_packet_free(&_packet); });
  16. }
  17. protected:
  18. bool _isOpen = false;
  19. AVPacket* _packet = nullptr;
  20. const AVCodec* _codec = nullptr;
  21. AVCodecContext* _codecCtx = nullptr;
  22. };
  23. template<MediaType mediaType>
  24. class Encoder;
  25. #endif