⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wavenum.cpp

📁 NERO sdk,可以对光盘进行编程,刻录
💻 CPP
字号:
/******************************************************************************
|* THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
|* ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
|* PARTICULAR PURPOSE.
|* 
|* Copyright 1995-2003 Ahead Software AG. All Rights Reserved.
|*-----------------------------------------------------------------------------
|* PROJECT: Nero Plugin Manager Example
|*
|* FILE: WavEnum.cpp
|*
|* PURPOSE: Implementation of the factory enumerator class
******************************************************************************/


#include "stdafx.h"
#include "WavEnum.h"

// wave target factory 
#include "WavTgtFactory.h"

// wave source factory
#include "WavSrcFactory.h"

// globals, defined in the main module
extern IAudioPluginMgr* g_pPluginMgr;
extern CWavTgtFactory   g_TgtFactory;
extern CWavSrcFactory   g_SrcFactory;

// {D8E76911-E1D2-4560-8E28-F953D6E1BC56}
EXTERN_GUID(COMPID_WavEnum, 0xd8e76911, 0xe1d2, 0x4560, 0x8e, 0x28, 0xf9, 0x53, 0xd6, 0xe1, 0xbc, 0x56);

// QueryInterface returns either IUnknown, IAudioComponent or IComponentEnum
STDMETHODIMP CWavEnum::QueryInterface(REFIID riid, void __RPC_FAR *__RPC_FAR *ppObj)
{
  // ppObj must not be NULL
  if(NULL == ppObj)
  {
    ASSERT(FALSE);
    
    return E_INVALIDARG;
  }

  *ppObj = NULL;

  if(IsEqualIID(riid, IID_IUnknown))
    *ppObj = static_cast<IUnknown*>(static_cast<IAudioComponent*>(this));
  else
  if(IsEqualIID(riid, IID_IIdentifiable))
    *ppObj = static_cast<IIdentifiable*>(this);
  else
  if(IsEqualIID(riid, IID_IAudioComponent))
    *ppObj = static_cast<IAudioComponent*>(this);
  else
  if(IsEqualIID(riid, IID_IComponentEnum))
    *ppObj = static_cast<IComponentEnum*>(this);

  if(*ppObj)
    AddRef();

  if (NULL != *ppObj)
  {
    return S_OK;
  }
  else
  {
    return E_NOINTERFACE;
  }
}

// Increase the reference counter and return the number of references
STDMETHODIMP_(ULONG) CWavEnum::AddRef()
{
  InterlockedIncrement(&m_lRef);

  return m_lRef;
}

// Decrease the reference counter and return the number of references
STDMETHODIMP_(ULONG) CWavEnum::Release()
{
  InterlockedDecrement(&m_lRef);

  return m_lRef;
}

void CWavEnum::GetID(GUID *pGUID)
{
   ASSERT(pGUID);
   if(pGUID) 
      memcpy(pGUID, &COMPID_WavEnum, sizeof(GUID));
}

// IAudioComponent
const char* CWavEnum::GetName()
{
  return "wav enum";
}

EAudioComponentType CWavEnum::GetType()
{
  return ACT_ComponentEnumerator;
}

bool CWavEnum::Init(IAudioPluginMgr* pMgr, IStatus** ppStatus)
{
  if(ppStatus)
  {
    *ppStatus = NULL;
  }

  // set the global pointer to the Audio Plugin Manager
  g_pPluginMgr = pMgr;

  return true;
}

bool CWavEnum::Done()
{
  return true;
}

// IComponentEnum

// Return the number of supported components
int CWavEnum::GetCount()
{
  // PCM reader, ADPCM reader and PCM writer
  return 3;
}

// return a pointer to a factory object
bool CWavEnum::GetComponent(int iNum, IAudioComponent** ppComp)
{
  *ppComp = NULL;

  if(iNum == 0)
  {
    *ppComp = &g_SrcFactory;
  }
  else if(iNum == 1)
  {
    *ppComp = &g_TgtFactory;
  }
  else if(iNum == 2)
  {
    // not implemented
    //  *ppComp = &g_ADPCMSrcFactory;
  }

  if(*ppComp)
  {
    (*ppComp)->AddRef();
  }

  if (NULL != *ppComp)
  {
    return true;
  }
  else
  {
    return false;
  }
}

long CWavEnum::GetRefCount()
{
  return m_lRef;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -