objmovie.hpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #ifndef _HPP_OBJMOVIE
  2. #define _HPP_OBJMOVIE
  3. #include <sys/stat.h>
  4. #include <fstream>
  5. #include <string>
  6. #include <vector>
  7. #include "gslsingleton.h"
  8. using namespace std;
  9. /////////InputObjects///////////////////////////////////////////////////
  10. // aus mindvideo.h
  11. // ToDo: mit idlmovierecorder gemeinsame Bibliothek verwenden
  12. // (ohne code-Duplikationen)
  13. typedef struct _mindfileheader
  14. {
  15. char finfo[12]; // "MindVideo" + \0
  16. char version[5]; // "0.05" + \0
  17. int width;
  18. int height;
  19. } mindfileheader;
  20. typedef struct _mindframeheader
  21. {
  22. char info[12];
  23. } mindframeheader;
  24. typedef struct _MovieFilterHeader
  25. {
  26. int width, height, wshift, hshift, outputwidth, outputheight;
  27. } MovieFilterHeader;
  28. class MovieFilter2d
  29. {
  30. int FrameSize;
  31. public:
  32. MovieFilterHeader Header;
  33. float *LastShiftedFrame; //!< pointer to shifted bitmap data
  34. float *LastFrame; //!< pointer to bitmap data
  35. MovieFilter2d();
  36. MovieFilter2d(FILE *fw);
  37. ~MovieFilter2d();
  38. bool LoadFromFile(FILE *fw);
  39. bool LoadFilterFrame(FILE *fw);
  40. int GetFrameSize();
  41. float* GetFramePointer();
  42. float* GetShiftedFramePointer();
  43. bool GetMinMaxValue(float &MinValue, float &MaxValue);
  44. int GetOutputWidth();
  45. int GetOutputHeight();
  46. void SetFrameShift(float x, float y);
  47. };
  48. /*! \brief Klasse zum Einlesen eines MovieMetaFiles
  49. *
  50. */
  51. class MovieMetaFile
  52. {
  53. protected:
  54. string MovieMetaFileName; // directory and filename
  55. public:
  56. MovieMetaFile(const char* FileName="/tmp/gauss.meta.xml");
  57. ~MovieMetaFile();
  58. bool Load();
  59. bool Loaded;
  60. int Save();
  61. void Print();
  62. int NXParas, NYParas;
  63. string MovieFileName;
  64. };
  65. // forward declaration
  66. class input;
  67. /*! \brief Klasse zum Einlesen eines mit CrystalSpace oder IDL erzeugten Movie-Files
  68. *
  69. */
  70. class ObjMovie
  71. {
  72. protected:
  73. string MovieFileName; // directory and filename
  74. mindfileheader MHeader;
  75. mindframeheader MFrameHeader;
  76. int NFilters;
  77. vector<MovieFilter2d*> FilterList;
  78. FILE *fw;
  79. bool SwitchMaster;
  80. fpos_t FilePos_FirstFrame, CurFramePos;
  81. int FrameNumber;
  82. int NFrames;
  83. vector<fpos_t> FrameIndex;
  84. input* SwitchMasterObj;
  85. gsl_rng* gslr;
  86. public:
  87. ObjMovie();
  88. ObjMovie(const char* FileName);
  89. ~ObjMovie();
  90. int LoadMovieFile(const char* _FileName);
  91. int InitializeFrameIndex();
  92. float* GetFramePointer(int FilterNr);
  93. float* GetShiftedFramePointer(int FilterNr);
  94. int GetFrameSize(int FilterNr);
  95. int GetOutputWidth(int FilterNr);
  96. int GetOutputHeight(int FilterNr);
  97. bool GetSwitchMaster();
  98. input* GetSwitchMaster(input*);
  99. void ResetSwitchMaster();
  100. int NextFrame();
  101. int GetFrameNumber();
  102. int NextRandomFrame();
  103. int GotoFrameNr(int _FrameNr);
  104. int SetFrameShift(float RelXShift, float RelYShift);
  105. int SetRandomShift();
  106. int GetNFrames();
  107. int GetNFilters();
  108. float GetMinValue(int FilterNr);
  109. };
  110. std::string GetDefaultMovieDir();
  111. ObjMovie* LoadObjMovie(const string& FileName, int & Width, int & Height, int & NFilters, int & NFrames, string MovieDir="");
  112. #endif // _HPP_OBJMOVIE