AviWriter.hh 886 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // Code based on DOSBox-0.65
  2. #ifndef AVIWRITER_HH
  3. #define AVIWRITER_HH
  4. #include "ZMBVEncoder.hh"
  5. #include "File.hh"
  6. #include "endian.hh"
  7. #include <cstdint>
  8. #include <vector>
  9. namespace openmsx {
  10. class Filename;
  11. class FrameSource;
  12. class AviWriter
  13. {
  14. public:
  15. AviWriter(const Filename& filename, unsigned width, unsigned height,
  16. unsigned bpp, unsigned channels, unsigned freq);
  17. ~AviWriter();
  18. void addFrame(FrameSource* frame, unsigned samples, int16_t* sampleData);
  19. void setFps(float fps_) { fps = fps_; }
  20. private:
  21. void addAviChunk(const char* tag, unsigned size, void* data, unsigned flags);
  22. File file;
  23. ZMBVEncoder codec;
  24. std::vector<Endian::L32> index;
  25. float fps;
  26. const unsigned width;
  27. const unsigned height;
  28. const unsigned channels;
  29. const unsigned audiorate;
  30. unsigned frames;
  31. unsigned audiowritten;
  32. unsigned written;
  33. };
  34. } // namespace openmsx
  35. #endif