CVideoHandler.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #include "stdafx.h"
  2. #include "CVideoHandler.h"
  3. void DLLHandler::Instantiate(const char *filename)
  4. {
  5. dll = LoadLibraryA(filename);
  6. }
  7. const char *DLLHandler::GetLibExtension()
  8. {
  9. #ifdef WIN32
  10. return "dll";
  11. #elif defined(__APPLE__)
  12. return "dylib";
  13. #else
  14. return "so";
  15. #endif
  16. }
  17. void *DLLHandler::FindAddress(const char *symbol)
  18. {
  19. return (void*) GetProcAddress(dll,symbol);
  20. }
  21. DLLHandler::~DLLHandler()
  22. {
  23. FreeLibrary(dll);
  24. }
  25. CBIKHandler::CBIKHandler()
  26. {
  27. ourLib.Instantiate("BINKW32.DLL");
  28. newmode=-1;
  29. ///waveOutOpen = ourLib.FindAddress("_BinkOpenWaveOut@4");
  30. }
  31. int readNormalNr2 (unsigned char* bufor, int &iter, int bytCon)
  32. {
  33. int ret=0;
  34. int amp=1;
  35. for (int i=iter; i<iter+bytCon; i++)
  36. {
  37. ret+=bufor[i]*amp;
  38. amp*=256;
  39. }
  40. iter+=bytCon;
  41. return ret;
  42. }
  43. void CBIKHandler::open(std::string name)
  44. {
  45. unsigned char * fdata = new unsigned char[400];
  46. unsigned char * fdata2 = new unsigned char[400];
  47. for (int i=0;i<400;i++) fdata[i]=0;
  48. //str.open(name.c_str(),std::ios::binary);
  49. BinkGetError = ourLib.FindAddress("_BinkGetError@0");
  50. BinkOpen = ourLib.FindAddress("_BinkOpen@8");
  51. BinkSetSoundSystem = ourLib.FindAddress("_BinkSetSoundSystem@8");
  52. //((void(*)(void*,void*)) BinkSetSoundSystem)(waveOutOpen,NULL);
  53. while (!fdata)
  54. fdata = ((unsigned char *(*)(const char *)) BinkOpen)("CSECRET.BIK");
  55. fdata2 = ((unsigned char *(*)()) BinkGetError)();
  56. int it = 0;
  57. data.width = readNormalNr2(fdata,it,4);
  58. data.height = readNormalNr2(fdata,it,4);
  59. data.frameCount = readNormalNr2(fdata,it,4);
  60. data.currentFrame = readNormalNr2(fdata,it,4);
  61. data.lastFrame = readNormalNr2(fdata,it,4);
  62. //FData:= BinkOpen(FileHandle);
  63. //if FData = nil then
  64. // raise ERSRADException.Create(BinkGetError);
  65. //Width:= @FData^.Width;
  66. //Height:= @FData^.Height;
  67. }
  68. void CBIKHandler::close()
  69. {
  70. str.close();
  71. void *binkClose;
  72. binkClose = ourLib.FindAddress("_BinkClose@4");
  73. (( void(*)() ) binkClose )();
  74. }