windows-nt/Source/XPSP1/NT/multimedia/directx/dxvb/dx8vb/dmussongobj.cpp
2020-09-26 16:20:57 +08:00

191 lines
4.1 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1998 - 1998
//
// File: dmussongobj.cpp
//
//--------------------------------------------------------------------------
#include "dmusici.h"
#include "stdafx.h"
#include "Direct.h"
#include "dms.h"
#include "dmusSongObj.h"
#include "dmSegmentObj.h"
extern void *g_dxj_DirectMusicSong;
extern void *g_dxj_DirectMusicSegment;
extern HRESULT BSTRtoGUID(LPGUID,BSTR);
extern BOOL IsEmptyString(BSTR szString);
CONSTRUCTOR(_dxj_DirectMusicSong, {});
DESTRUCTOR(_dxj_DirectMusicSong, {});
GETSET_OBJECT(_dxj_DirectMusicSong);
HRESULT C_dxj_DirectMusicSongObject::Compose()
{
HRESULT hr;
__try {
if (FAILED (hr = m__dxj_DirectMusicSong->Compose() ) )
return hr;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
return E_FAIL;
}
return S_OK;
}
HRESULT C_dxj_DirectMusicSongObject::GetSegment(BSTR Name, I_dxj_DirectMusicSegment **ret)
{
WCHAR wszSegName[MAX_PATH];
HRESULT hr;
IDirectMusicSegment *lpOldSeg = NULL;
IDirectMusicSegment8 *lpSeg = NULL;
__try {
if (!IsEmptyString(Name))
{
wcscpy(wszSegName, Name);
if (FAILED( hr = m__dxj_DirectMusicSong->GetSegment(wszSegName, &lpOldSeg) ) )
return hr;
}
else
{
if (FAILED( hr = m__dxj_DirectMusicSong->GetSegment(NULL, &lpOldSeg) ) )
return hr;
}
hr = lpOldSeg->QueryInterface(IID_IDirectMusicSegment8, (void**) &lpSeg);
lpOldSeg->Release();
if (FAILED(hr))
return hr;
INTERNAL_CREATE(_dxj_DirectMusicSegment, lpSeg, ret)
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
return E_FAIL;
}
return S_OK;
}
HRESULT C_dxj_DirectMusicSongObject::GetAudioPathConfig(IUnknown **ret)
{
HRESULT hr;
__try {
if (FAILED(hr = m__dxj_DirectMusicSong->GetAudioPathConfig(ret) ))
return hr;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
return E_FAIL;
}
return S_OK;
}
HRESULT C_dxj_DirectMusicSongObject::Download(IUnknown *downloadpath)
{
if (!downloadpath) return E_INVALIDARG;
HRESULT hr;
I_dxj_DirectMusicSegment *lpSeg = NULL;
I_dxj_DirectMusicAudioPath *lpPath = NULL;
__try {
hr = downloadpath->QueryInterface(IID_I_dxj_DirectMusicSegment, (void**)&lpSeg);
if (SUCCEEDED(hr) )
{
DO_GETOBJECT_NOTNULL(IDirectMusicPerformance8*,pPer,lpSeg);
hr=m__dxj_DirectMusicSong->Download(pPer);
return hr;
}
else
{
hr = downloadpath->QueryInterface(IID_I_dxj_DirectMusicAudioPath, (void**)&lpPath);
if (SUCCEEDED(hr) )
{
DO_GETOBJECT_NOTNULL(IDirectMusicAudioPath*,pPer,lpPath);
hr=m__dxj_DirectMusicSong->Download(pPer);
return hr;
}
else
return E_INVALIDARG;
}
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
return E_FAIL;
}
return S_OK;
}
HRESULT C_dxj_DirectMusicSongObject::Unload(IUnknown *downloadpath)
{
if (!downloadpath) return E_INVALIDARG;
HRESULT hr;
I_dxj_DirectMusicSegment *lpSeg = NULL;
I_dxj_DirectMusicAudioPath *lpPath = NULL;
__try {
hr = downloadpath->QueryInterface(IID_I_dxj_DirectMusicSegment, (void**)&lpSeg);
if (SUCCEEDED(hr) )
{
DO_GETOBJECT_NOTNULL(IDirectMusicPerformance8*,pPer,lpSeg);
hr=m__dxj_DirectMusicSong->Unload(pPer);
return hr;
}
else
{
hr = downloadpath->QueryInterface(IID_I_dxj_DirectMusicAudioPath, (void**)&lpPath);
if (SUCCEEDED(hr) )
{
DO_GETOBJECT_NOTNULL(IDirectMusicAudioPath*,pPer,lpPath);
hr=m__dxj_DirectMusicSong->Unload(pPer);
return hr;
}
else
return E_INVALIDARG;
}
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
return E_FAIL;
}
return S_OK;
}
HRESULT C_dxj_DirectMusicSongObject::EnumSegment(long lSegmentID, [out,retval] I_dxj_DirectMusicSegment **ret)
{
HRESULT hr;
IDirectMusicSegment *lpOldSeg = NULL;
IDirectMusicSegment8 *lpSeg = NULL;
__try {
if (FAILED( hr = m__dxj_DirectMusicSong->EnumSegment((DWORD) lSegmentID, &lpOldSeg) ) )
hr = lpOldSeg->QueryInterface(IID_IDirectMusicSegment8, (void**) &lpSeg);
lpOldSeg->Release();
if (FAILED(hr))
return hr;
INTERNAL_CREATE(_dxj_DirectMusicSegment, lpSeg, ret)
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
return E_FAIL;
}
return S_OK;
}