CReportFile.cpp
上传用户:tuheem
上传日期:2007-05-01
资源大小:21889k
文件大小:3k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. // CReportFile.cpp: implementation of the CReportFile class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "XvidQuantsParser.h"
  6. #include "CReportFile.h"
  7. #ifdef _DEBUG
  8. #undef THIS_FILE
  9. static char THIS_FILE[]=__FILE__;
  10. #define new DEBUG_NEW
  11. #endif
  12. //////////////////////////////////////////////////////////////////////
  13. // Construction/Destruction
  14. //////////////////////////////////////////////////////////////////////
  15. CReportFile::CReportFile()
  16. {
  17. //data = NULL;
  18. }
  19. CReportFile::~CReportFile()
  20. {
  21. //if (data != NULL) delete[] data;
  22. }
  23. //-----------------------------------------------------------------------------------------------
  24. bool CReportFile::Save(CString filepath, CXvid &xvid, int start, int stop)
  25. {
  26. CFile rfile;
  27. //File header
  28. fileHdr.rtyp = 0x08;
  29. fileHdr.rmajor = 1;
  30. fileHdr.rminor = 1;
  31. //Info header
  32. infoHdr.fps = xvid.GetRate();
  33. infoHdr.width = xvid.GetWidth();
  34. infoHdr.height = xvid.GetHeight();
  35. infoHdr.nframes = stop-start;
  36. infoHdr.nmax = xvid.GetMaxQuant();
  37. infoHdr.nmin = xvid.GetMinQuant();
  38. infoHdr.navg = xvid.GetAvgQuants();
  39. infoHdr.icount = xvid.GetIFrameCount();
  40. infoHdr.iavg = xvid.GetIAvgQuants();
  41. infoHdr.pcount = xvid.GetPFrameCount();
  42. infoHdr.pavg = xvid.GetPAvgQuants();
  43. infoHdr.nfsmax = xvid.GetMaxFrameSize();
  44. infoHdr.nfsmin = xvid.GetMinFrameSize();
  45. infoHdr.ifsmax = xvid.GetIMaxFrameSize();
  46. infoHdr.ifsmin = xvid.GetIMinFrameSize();
  47. infoHdr.pfsmax = xvid.GetPMaxFrameSize();
  48. infoHdr.pfsmin = xvid.GetPMinFrameSize();
  49. //save file...
  50. if (!rfile.Open(filepath, CFile::modeCreate|CFile::modeWrite))
  51. {
  52. return false;
  53. }
  54. rfile.Write(&fileHdr, sizeof(REPORTFILEHEADER));
  55. rfile.Write(&infoHdr, sizeof(REPORTINFOHEADER));
  56. rfile.Write(xvid.GetQuantsArray(), sizeof(CXvid::QUANTS)*infoHdr.nframes);
  57. //cleanup
  58. rfile.Close();
  59. return true;
  60. }
  61. //-----------------------------------------------------------------------------------------------
  62. bool CReportFile::Load(CString filepath, CXvid &xvid)
  63. {
  64. CFile rfile;
  65. CXvid::QUANTS* databuf=NULL;
  66. //load file...
  67. if (!rfile.Open(filepath, CFile::modeRead))
  68. {
  69. return false;
  70. }
  71. //Check file header
  72. rfile.Read(&fileHdr, sizeof(REPORTFILEHEADER));
  73. if (fileHdr.rtyp != 0x08)
  74. {
  75. return false;
  76. }
  77. if (fileHdr.rminor != 1)
  78. {
  79. AfxMessageBox("Wrong report file version!");
  80. return false;
  81. }
  82. //load info header
  83. rfile.Read(&infoHdr, sizeof(REPORTINFOHEADER));
  84. xvid.SetRate(infoHdr.fps);
  85. xvid.SetWidth(infoHdr.width);
  86. xvid.SetHeight(infoHdr.height);
  87. xvid.SetFrameCount(infoHdr.nframes);
  88. xvid.SetMaxQuant(infoHdr.nmax);
  89. xvid.SetMinQuant(infoHdr.nmin);
  90. xvid.SetAvgQuants(infoHdr.navg);
  91. xvid.SetIFrameCount(infoHdr.icount);
  92. xvid.SetIAvgQuants(infoHdr.iavg);
  93. xvid.SetPFrameCount(infoHdr.pcount);
  94. xvid.SetPAvgQuants(infoHdr.pavg);
  95. xvid.SetMaxFrameSize(infoHdr.nfsmax);
  96. xvid.SetMinFrameSize(infoHdr.nfsmin);
  97. xvid.SetIMaxFrameSize(infoHdr.ifsmax);
  98. xvid.SetIMinFrameSize(infoHdr.ifsmin);
  99. xvid.SetPMaxFrameSize(infoHdr.pfsmax);
  100. xvid.SetPMinFrameSize(infoHdr.pfsmin);
  101. //load quants data
  102. databuf = new CXvid::QUANTS[infoHdr.nframes];
  103. rfile.Read(databuf, sizeof(CXvid::QUANTS)*infoHdr.nframes);
  104. xvid.SetQuantsArray(databuf, infoHdr.nframes);
  105. //cleanup
  106. rfile.Close();
  107. xvid.SetOpened(true);
  108. xvid.SetAnalysed(true);
  109. return true;
  110. }