MergeAvi.cpp
Upload User: bossts
Upload Date: 2017-06-05
Package Size: 78k
Code Size: 3k
Development Platform:

Visual C++

  1. #include "StdAfx.h"
  2. #include "MergeAvi.h"
  3. CMergeAvi::CMergeAvi(void)
  4. {
  5. CoInitialize(0);
  6. AVIFileInit();
  7. }
  8. CMergeAvi::~CMergeAvi(void)
  9. {
  10. AVIStreamRelease(m_Stream[0]);
  11. AVIStreamRelease(m_Stream[1]);
  12. AVIFileExit();
  13. CoUninitialize();
  14. }
  15. HRESULT CMergeAvi::CreateStream(LPCSTR pFileName)
  16. {
  17. HRESULT hr;
  18. PAVIFILE pFile1;
  19. PAVISTREAM pStream,pStreamAudio;
  20.  
  21. hr=AVIFileOpen(&pFile1,pFileName,OF_READWRITE,NULL);
  22. if(hr!= AVIERR_OK)
  23. return hr;
  24. //read video stream
  25. hr=AVIFileGetStream(pFile1,&pStream,streamtypeVIDEO,NULL);
  26. if(hr!= AVIERR_OK)
  27. {
  28. AVIFileRelease(pFile1);
  29. return hr;
  30. }
  31. //read audio stream
  32. hr=AVIFileGetStream(pFile1,&pStreamAudio,streamtypeAUDIO,NULL);
  33. if(hr!=AVIERR_OK)
  34. {
  35. AVIStreamRelease(pStream);
  36. AVIFileRelease(pFile1);
  37. return hr;
  38. }
  39. //create editable stream
  40. hr=CreateEditableStream(&m_Stream[0],pStream);
  41. if(hr!=AVIERR_OK)
  42. {
  43. AVIStreamRelease(pStream);
  44. AVIStreamRelease(pStreamAudio);
  45. AVIFileRelease(pFile1);
  46. return hr;
  47. }
  48. hr=CreateEditableStream(&m_Stream[1],pStreamAudio);
  49. if(hr!=AVIERR_OK)
  50. {
  51. AVIStreamRelease(pStream);
  52. AVIStreamRelease(pStreamAudio);
  53. AVIStreamRelease(m_Stream[0]);
  54. AVIFileRelease(pFile1);
  55. return hr;
  56. }
  57. AVIStreamRelease(pStream);
  58. AVIStreamRelease(pStreamAudio);
  59. AVIFileRelease(pFile1);
  60. return hr;
  61. }
  62. HRESULT CMergeAvi::MergeFileToStream(LPCSTR pSourceFileName)
  63. {
  64. HRESULT hr;
  65. PAVIFILE sourceFile;
  66. PAVISTREAM pStreamVideo,pStreamAudio;
  67.  
  68. LONG   plPos;     
  69. LONG   plLength;    
  70. LONG   lStart;     
  71. LONG   lLength; 
  72. hr=AVIFileOpen(&sourceFile,pSourceFileName,OF_READ,NULL);
  73. if(hr!= AVIERR_OK)
  74. {
  75. return hr;
  76. }
  77. //read video stream
  78. hr=AVIFileGetStream(sourceFile,&pStreamVideo,streamtypeVIDEO,NULL);
  79. if(hr!=AVIERR_OK)
  80. {
  81. AVIStreamRelease(pStreamVideo);
  82. AVIFileRelease(sourceFile);
  83. return hr;
  84. }
  85. //read audio stream
  86. hr=AVIFileGetStream(sourceFile,&pStreamAudio,streamtypeAUDIO,NULL);
  87. if(hr!=AVIERR_OK)
  88. {
  89. AVIStreamRelease(pStreamVideo);
  90. AVIStreamRelease(pStreamAudio);
  91. AVIFileRelease(sourceFile);
  92. return hr;
  93. }
  94. //Copy video
  95. plPos=AVIStreamStart(m_Stream[0])+AVIStreamLength(m_Stream[0]);
  96. plLength=AVIStreamLength(pStreamVideo);
  97. lStart=AVIStreamStart(pStreamVideo);
  98. lLength=AVIStreamLength(pStreamVideo);
  99. hr=EditStreamPaste(m_Stream[0],&plPos,&plLength,pStreamVideo,lStart,lLength);
  100. if(hr!=AVIERR_OK)
  101. {
  102. goto Cleaning;
  103. }
  104. //Copy audio
  105. plPos=AVIStreamStart(m_Stream[1])+AVIStreamLength(m_Stream[1]);
  106. plLength=AVIStreamLength(pStreamAudio);
  107. lStart=AVIStreamStart(pStreamAudio);
  108. lLength=AVIStreamLength(pStreamAudio);
  109. hr=EditStreamPaste(m_Stream[1],&plPos,&plLength,pStreamAudio,lStart,lLength);
  110. if(hr!=AVIERR_OK)
  111. {
  112. goto Cleaning;
  113. }
  114. Cleaning:
  115. AVIStreamRelease(pStreamVideo);
  116. AVIStreamRelease(pStreamAudio);
  117. AVIFileRelease(sourceFile);
  118. return hr;
  119. }
  120. HRESULT CMergeAvi::SaveStream(LPCSTR pFileName,AVISAVECALLBACK lpfnCallBack)
  121. {
  122. HRESULT hr;
  123. hr=AVISaveV(pFileName,NULL,lpfnCallBack,2,m_Stream,NULL);
  124. return hr;
  125. }