Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

170 lines
3.5 KiB

  1. /* - - - - - - - - */
  2. /*
  3. ** Copyright (C) Microsoft Corporation 1993 - 1995. All rights reserved.
  4. */
  5. /* - - - - - - - - */
  6. #include <win32.h>
  7. #include <vfw.h>
  8. #include "avifilei.h"
  9. #include "avicmprs.h"
  10. #include "acmcmprs.h"
  11. #include "wavefile.h"
  12. #ifdef CHICAGO
  13. #include "unmarsh.h"
  14. #endif
  15. #include "editstrm.h"
  16. /* - - - - - - - - */
  17. HRESULT CAVIFileCF::Create(
  18. const CLSID FAR& rclsid,
  19. REFIID riid,
  20. LPVOID FAR* ppv)
  21. {
  22. CAVIFileCF FAR* pAVIFileCF;
  23. IUnknown FAR* pUnknown;
  24. HRESULT hresult;
  25. pAVIFileCF = new FAR CAVIFileCF(rclsid, &pUnknown);
  26. if (pAVIFileCF == NULL)
  27. return ResultFromScode(E_OUTOFMEMORY);
  28. hresult = pUnknown->QueryInterface(riid, ppv);
  29. if (FAILED(GetScode(hresult)))
  30. delete pAVIFileCF;
  31. return hresult;
  32. }
  33. /* - - - - - - - - */
  34. CAVIFileCF::CAVIFileCF(
  35. const CLSID FAR& rclsid,
  36. IUnknown FAR* FAR* ppUnknown) :
  37. m_Unknown(this),
  38. m_Factory(this)
  39. {
  40. m_clsid = rclsid;
  41. *ppUnknown = &m_Unknown;
  42. }
  43. /* - - - - - - - - */
  44. CAVIFileCF::CUnknownImpl::CUnknownImpl(
  45. CAVIFileCF FAR* pAVIFileCF)
  46. {
  47. m_pAVIFileCF = pAVIFileCF;
  48. m_refs = 0;
  49. }
  50. /* - - - - - - - - */
  51. STDMETHODIMP CAVIFileCF::CUnknownImpl::QueryInterface(
  52. REFIID iid,
  53. LPVOID FAR* ppv)
  54. {
  55. if (iid == IID_IUnknown)
  56. *ppv = &m_pAVIFileCF->m_Unknown;
  57. else if (iid == IID_IClassFactory)
  58. *ppv = &m_pAVIFileCF->m_Factory;
  59. else {
  60. *ppv = NULL;
  61. return ResultFromScode(E_NOINTERFACE);
  62. }
  63. AddRef();
  64. return AVIERR_OK;
  65. }
  66. /* - - - - - - - - */
  67. STDMETHODIMP_(ULONG) CAVIFileCF::CUnknownImpl::AddRef()
  68. {
  69. return ++m_refs;
  70. }
  71. /* - - - - - - - - */
  72. STDMETHODIMP_(ULONG) CAVIFileCF::CUnknownImpl::Release()
  73. {
  74. if (!--m_refs) {
  75. delete this;
  76. return 0;
  77. }
  78. return m_refs;
  79. }
  80. /* - - - - - - - - */
  81. CAVIFileCF::CFactoryImpl::CFactoryImpl(
  82. CAVIFileCF FAR* pAVIFileCF)
  83. {
  84. m_pAVIFileCF = pAVIFileCF;
  85. }
  86. /* - - - - - - - - */
  87. STDMETHODIMP CAVIFileCF::CFactoryImpl::QueryInterface(
  88. REFIID iid,
  89. LPVOID FAR* ppv)
  90. {
  91. return m_pAVIFileCF->m_Unknown.QueryInterface(iid, ppv);
  92. }
  93. /* - - - - - - - - */
  94. STDMETHODIMP_(ULONG) CAVIFileCF::CFactoryImpl::AddRef()
  95. {
  96. return m_pAVIFileCF->m_Unknown.AddRef();
  97. }
  98. /* - - - - - - - - */
  99. STDMETHODIMP_(ULONG) CAVIFileCF::CFactoryImpl::Release()
  100. {
  101. return m_pAVIFileCF->m_Unknown.Release();
  102. }
  103. /* - - - - - - - - */
  104. STDMETHODIMP CAVIFileCF::CFactoryImpl::CreateInstance(
  105. IUnknown FAR* pUnknownOuter,
  106. REFIID riid,
  107. LPVOID FAR* ppv)
  108. {
  109. if (IsEqualCLSID(m_pAVIFileCF->m_clsid, CLSID_AVIFile)) {
  110. return CAVIFile::Create(pUnknownOuter, riid, ppv);
  111. } else
  112. if (IsEqualCLSID(m_pAVIFileCF->m_clsid, CLSID_AVICmprsStream)) {
  113. return CAVICmpStream::Create(pUnknownOuter, riid, ppv);
  114. } else
  115. if (IsEqualCLSID(m_pAVIFileCF->m_clsid, CLSID_ACMCmprs)) {
  116. return CACMCmpStream::MakeInst(pUnknownOuter, riid, ppv);
  117. } else
  118. #ifdef CUSTOMMARSHAL
  119. if (IsEqualCLSID(m_pAVIFileCF->m_clsid, CLSID_AVISimpleUnMarshal)) {
  120. return CUnMarshal::Create(pUnknownOuter, riid, ppv);
  121. } else
  122. #endif
  123. if (IsEqualCLSID(m_pAVIFileCF->m_clsid, CLSID_AVIWaveFileReader)) {
  124. return WaveFileCreate(pUnknownOuter, riid, ppv);
  125. } else
  126. if (IsEqualCLSID(m_pAVIFileCF->m_clsid, CLSID_EditStream)) {
  127. return CEditStream::NewInstance(pUnknownOuter, riid, ppv);
  128. } else {
  129. return ResultFromScode(CO_E_CANTDETERMINECLASS); // !!!
  130. }
  131. }
  132. /* - - - - - - - - */
  133. STDMETHODIMP CAVIFileCF::CFactoryImpl::LockServer(
  134. BOOL fLock)
  135. {
  136. fLocked = fLock;
  137. return AVIERR_OK;
  138. }
  139. /* - - - - - - - - */