AviPlayer.h
上传用户:sesekoo
上传日期:2020-07-18
资源大小:21543k
文件大小:3k
源码类别:

界面编程

开发平台:

Visual C++

  1. // AviPlayer.h: interface for the CAviPlayer class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_AVIPLAYER_H__B07E8928_6A64_4106_97EA_21B8C4089F45__INCLUDED_)
  5. #define AFX_AVIPLAYER_H__B07E8928_6A64_4106_97EA_21B8C4089F45__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #include <Vfw.h>
  10. #include "AviPlayerWnd.h"
  11. class CAviPlayer : public CObject
  12. {
  13. DECLARE_DYNCREATE( CAviPlayer );
  14. public:
  15. CAviPlayer(){
  16. ASSERT(FALSE);
  17. }
  18. CAviPlayer(CWnd *pWndParent);
  19. virtual ~CAviPlayer();
  20. protected:
  21. PAVISTREAM m_pAviStream;
  22. AVISTREAMINFO m_AviInfo;
  23. PGETFRAME m_pGetFrame;
  24. int m_nAviWidth, m_nAviHeight,
  25. m_nRenderWidth, m_nRenderHeight;
  26. HDRAWDIB m_hDrawDib;
  27. BOOL m_bIsPlaying;
  28. BOOL m_bTempPause;
  29. CAviPlayerWnd* m_pAviPlayerWnd;
  30. void Clean();
  31. BOOL Prepare();
  32. public:
  33. DWORD m_nFrameNumber;
  34. DWORD m_nFrameCount;
  35. DWORD m_nFrameSkiped;
  36. BOOL m_nStartFrameNumber;
  37. void SetPlayerWindowPos( int x, int y, int nWidth, int nHeight )
  38. {
  39. if( m_pAviPlayerWnd->GetSafeHwnd() != NULL )
  40. m_pAviPlayerWnd->MoveWindow( x, y, nWidth, nHeight );
  41. }
  42. CSize GetAviRenderSize()
  43. {
  44. return CSize( m_nRenderWidth, m_nRenderHeight );
  45. }
  46. DWORD GetCurrentFrameNumber()
  47. {
  48. return m_nFrameNumber;
  49. }
  50. DWORD GetFrameCount()
  51. {
  52. return m_nFrameCount;
  53. }
  54. DWORD GetFrameSkipped()
  55. {
  56. return m_nFrameSkiped;
  57. }
  58. void SetCurrentFrameNumber( DWORD nFrameNumber )
  59. {
  60. m_nFrameNumber = nFrameNumber;
  61. }
  62. void NextFrame()
  63. {
  64. if( m_nFrameCount == m_nFrameNumber+1)
  65. {
  66. m_nStartFrameNumber = m_nFrameNumber = AVIStreamStart( m_pAviStream );
  67. }
  68. else
  69. {
  70. m_nFrameNumber++;
  71. m_nStartFrameNumber++;
  72. }
  73. }
  74. void Play()
  75. {
  76. ASSERT(m_pAviPlayerWnd && m_hDrawDib);
  77. if(m_pAviPlayerWnd && m_hDrawDib){
  78. m_pAviPlayerWnd->KillTimer(1);
  79. m_pAviPlayerWnd->SetTimer(1, GetTimerSpeed());
  80. m_bIsPlaying = TRUE;
  81. m_nStartFrameNumber = 0;
  82. }
  83. }
  84. void Stop()
  85. {
  86. ASSERT(m_pAviPlayerWnd && m_hDrawDib);
  87. if(m_pAviPlayerWnd && m_hDrawDib){
  88. m_nFrameSkiped = 0;
  89. m_pAviPlayerWnd->KillTimer(1);
  90. m_nFrameNumber = AVIStreamStart( m_pAviStream );
  91. m_bIsPlaying = FALSE;
  92. m_pAviPlayerWnd->Invalidate();
  93. }
  94. }
  95. void Pause()
  96. {
  97. ASSERT(m_pAviPlayerWnd && m_hDrawDib);
  98. if(m_pAviPlayerWnd){
  99. m_pAviPlayerWnd->KillTimer(1);
  100. m_bIsPlaying = FALSE;
  101. }
  102. }
  103. BOOL IsOpen()
  104. return (m_hDrawDib!=NULL);
  105. }
  106. BOOL IsPlaying()
  107. return m_bIsPlaying;
  108. }
  109. int GetTimerSpeed()
  110. {
  111. /* dwRate / dwScale == samples/second */
  112. return MulDiv(1000,m_AviInfo.dwScale, m_AviInfo.dwRate);
  113. }
  114. void SetZoom( int nZoomPercent )
  115. {
  116. m_nRenderWidth = MulDiv(m_nAviWidth, nZoomPercent, 100);
  117. m_nRenderHeight = MulDiv(m_nAviHeight, nZoomPercent, 100);
  118. SetPlayerWindowPos(0, 0, m_nRenderWidth, m_nRenderHeight);
  119. }
  120. void SetTempPause(BOOL bSet)
  121. {
  122. m_bTempPause = bSet;
  123. }
  124. BOOL GetTempPause()
  125. {
  126. return m_bTempPause;
  127. }
  128. BOOL OpenFromFile( LPCTSTR sAviFilePath );
  129. BOOL DrawFrame(
  130. HDC hDC,
  131. int nFrameNumber
  132. );
  133. };
  134. #endif // !defined(AFX_AVIPLAYER_H__B07E8928_6A64_4106_97EA_21B8C4089F45__INCLUDED_)