video_sampler.h 1002 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #pragma once
  2. #include "defs.h"
  3. namespace ffmpeg {
  4. /**
  5. * Class transcode video frames from one format into another
  6. */
  7. class VideoSampler : public MediaSampler {
  8. public:
  9. VideoSampler(int swsFlags = SWS_AREA, int64_t loggingUuid = 0);
  10. ~VideoSampler() override;
  11. // MediaSampler overrides
  12. bool init(const SamplerParameters& params) override;
  13. int sample(const ByteStorage* in, ByteStorage* out) override;
  14. void shutdown() override;
  15. // returns number processed/scaling bytes
  16. int sample(AVFrame* frame, ByteStorage* out);
  17. int getImageBytes() const;
  18. private:
  19. // close resources
  20. void cleanUp();
  21. // helper functions for rescaling, cropping, etc.
  22. int sample(
  23. const uint8_t* const srcSlice[],
  24. int srcStride[],
  25. ByteStorage* out);
  26. private:
  27. VideoFormat scaleFormat_;
  28. SwsContext* scaleContext_{nullptr};
  29. SwsContext* cropContext_{nullptr};
  30. int swsFlags_{SWS_AREA};
  31. std::vector<uint8_t> scaleBuffer_;
  32. int64_t loggingUuid_{0};
  33. };
  34. } // namespace ffmpeg