ReactOS 0.4.17-dev-934-g091855f
markertrack.c
Go to the documentation of this file.
1/* IDirectMusicMarkerTrack Implementation
2 *
3 * Copyright (C) 2003-2004 Rok Mandeljc
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18 */
19
20#include "dmime_private.h"
21
23
24/*****************************************************************************
25 * IDirectMusicMarkerTrack implementation
26 */
28 IDirectMusicTrack IDirectMusicTrack_iface;
29 struct dmobject dmobj; /* IPersistStream only */
32
33/* IDirectMusicMarkerTrack IDirectMusicTrack8 part: */
34static inline IDirectMusicMarkerTrack *impl_from_IDirectMusicTrack(IDirectMusicTrack *iface)
35{
36 return CONTAINING_RECORD(iface, IDirectMusicMarkerTrack, IDirectMusicTrack_iface);
37}
38
40 void **ret_iface)
41{
43
44 TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface);
45
46 *ret_iface = NULL;
47
48 if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack))
49 *ret_iface = iface;
51 *ret_iface = &This->dmobj.IPersistStream_iface;
52 else {
53 WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface);
54 return E_NOINTERFACE;
55 }
56
57 IUnknown_AddRef((IUnknown*)*ret_iface);
58 return S_OK;
59}
60
61static ULONG WINAPI IDirectMusicTrackImpl_AddRef(IDirectMusicTrack *iface)
62{
65
66 TRACE("(%p) ref=%ld\n", This, ref);
67
68 return ref;
69}
70
71static ULONG WINAPI IDirectMusicTrackImpl_Release(IDirectMusicTrack *iface)
72{
75
76 TRACE("(%p) ref=%ld\n", This, ref);
77
78 if (!ref) {
79 free(This);
80 }
81
82 return ref;
83}
84
85static HRESULT WINAPI IDirectMusicTrackImpl_Init(IDirectMusicTrack *iface,
86 IDirectMusicSegment *pSegment)
87{
89 FIXME("(%p, %p): stub\n", This, pSegment);
90 return S_OK;
91}
92
93static HRESULT WINAPI IDirectMusicTrackImpl_InitPlay(IDirectMusicTrack *iface,
94 IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance,
95 void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
96{
98 FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
99 return S_OK;
100}
101
102static HRESULT WINAPI IDirectMusicTrackImpl_EndPlay(IDirectMusicTrack *iface, void *pStateData)
103{
105 FIXME("(%p, %p): stub\n", This, pStateData);
106 return S_OK;
107}
108
109static HRESULT WINAPI IDirectMusicTrackImpl_Play(IDirectMusicTrack *iface, void *pStateData,
110 MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags,
111 IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
112{
114 FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
115 return S_OK;
116}
117
120{
122
123 TRACE("(%p, %s, %ld, %p, %p)\n", This, debugstr_dmguid(type), time, next, param);
124
125 if (!param)
126 return E_POINTER;
127
128 if (IsEqualGUID(type, &GUID_Play_Marker)) {
129 FIXME("GUID_Play_Marker not handled yet\n");
130 return S_FALSE;
131 }
132 if (IsEqualGUID(type, &GUID_Valid_Start_Time)) {
133 FIXME("GUID_Valid_Start_Time not handled yet\n");
134 return DMUS_E_NOT_FOUND;
135 }
136
138}
139
141 MUSIC_TIME time, void *param)
142{
144
145 TRACE("(%p, %s, %ld, %p): not supported\n", This, debugstr_dmguid(type), time, param);
147}
148
150 REFGUID rguidType)
151{
153
154 TRACE("(%p, %s)\n", This, debugstr_dmguid(rguidType));
155 if (IsEqualGUID (rguidType, &GUID_Play_Marker)
156 || IsEqualGUID (rguidType, &GUID_Valid_Start_Time)) {
157 TRACE("param supported\n");
158 return S_OK;
159 }
160 TRACE("param unsupported\n");
162}
163
165 REFGUID rguidNotificationType)
166{
168 FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType));
169 return S_OK;
170}
171
173 REFGUID rguidNotificationType)
174{
176 FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType));
177 return S_OK;
178}
179
180static HRESULT WINAPI IDirectMusicTrackImpl_Clone(IDirectMusicTrack *iface, MUSIC_TIME mtStart,
181 MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
182{
184 FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
185 return S_OK;
186}
187
188static const IDirectMusicTrackVtbl dmtrack_vtbl = {
202};
203
205{
206 FIXME(": Loading not implemented yet\n");
207 return S_OK;
208}
209
210static const IPersistStreamVtbl persiststream_vtbl = {
219};
220
221/* for ClassFactory */
222HRESULT create_dmmarkertrack(REFIID lpcGUID, void **ppobj)
223{
225 HRESULT hr;
226
227 *ppobj = NULL;
228 if (!(track = calloc(1, sizeof(*track)))) return E_OUTOFMEMORY;
229 track->IDirectMusicTrack_iface.lpVtbl = &dmtrack_vtbl;
230 track->ref = 1;
231 dmobject_init(&track->dmobj, &CLSID_DirectMusicMarkerTrack,
233 track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl;
234
237
238 return hr;
239}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define free
Definition: debug_ros.c:5
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
#define DMUS_E_GET_UNSUPPORTED
Definition: dmerror.h:72
#define DMUS_E_NOT_FOUND
Definition: dmerror.h:109
#define DMUS_E_TYPE_UNSUPPORTED
Definition: dmerror.h:112
#define DMUS_E_SET_UNSUPPORTED
Definition: dmerror.h:71
void dmobject_init(struct dmobject *dmobj, const GUID *class, IUnknown *outer_unk)
Definition: dmobject.c:749
ULONG WINAPI dmobj_IPersistStream_Release(IPersistStream *iface)
Definition: dmobject.c:702
HRESULT WINAPI unimpl_IPersistStream_GetSizeMax(IPersistStream *iface, ULARGE_INTEGER *size)
Definition: dmobject.c:742
HRESULT WINAPI dmobj_IPersistStream_GetClassID(IPersistStream *iface, CLSID *class)
Definition: dmobject.c:708
ULONG WINAPI dmobj_IPersistStream_AddRef(IPersistStream *iface)
Definition: dmobject.c:696
const char * debugstr_dmguid(const GUID *id)
Definition: dmobject.c:36
HRESULT WINAPI dmobj_IPersistStream_QueryInterface(IPersistStream *iface, REFIID riid, void **ret_iface)
Definition: dmobject.c:689
HRESULT WINAPI unimpl_IPersistStream_IsDirty(IPersistStream *iface)
Definition: dmobject.c:729
HRESULT WINAPI unimpl_IPersistStream_Save(IPersistStream *iface, IStream *stream, BOOL clear_dirty)
Definition: dmobject.c:735
#define IDirectMusicTrack_Release(p)
Definition: dmplugin.h:226
LONG MUSIC_TIME
Definition: dmplugin.h:95
#define IDirectMusicTrack_QueryInterface(p, a, b)
Definition: dmplugin.h:224
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLfloat param
Definition: glext.h:5796
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
static const IDirectMusicTrackVtbl dmtrack_vtbl
Definition: markertrack.c:188
static HRESULT WINAPI IDirectMusicTrackImpl_Play(IDirectMusicTrack *iface, void *pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
Definition: markertrack.c:109
static HRESULT WINAPI IDirectMusicTrackImpl_EndPlay(IDirectMusicTrack *iface, void *pStateData)
Definition: markertrack.c:102
static HRESULT WINAPI IDirectMusicTrackImpl_SetParam(IDirectMusicTrack *iface, REFGUID type, MUSIC_TIME time, void *param)
Definition: markertrack.c:140
static ULONG WINAPI IDirectMusicTrackImpl_Release(IDirectMusicTrack *iface)
Definition: markertrack.c:71
static ULONG WINAPI IDirectMusicTrackImpl_AddRef(IDirectMusicTrack *iface)
Definition: markertrack.c:61
static HRESULT WINAPI IDirectMusicTrackImpl_QueryInterface(IDirectMusicTrack *iface, REFIID riid, void **ret_iface)
Definition: markertrack.c:39
static HRESULT WINAPI IDirectMusicTrackImpl_Init(IDirectMusicTrack *iface, IDirectMusicSegment *pSegment)
Definition: markertrack.c:85
static HRESULT WINAPI IDirectMusicTrackImpl_InitPlay(IDirectMusicTrack *iface, IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
Definition: markertrack.c:93
static HRESULT WINAPI IDirectMusicTrackImpl_IsParamSupported(IDirectMusicTrack *iface, REFGUID rguidType)
Definition: markertrack.c:149
static const IPersistStreamVtbl persiststream_vtbl
Definition: markertrack.c:210
static IDirectMusicMarkerTrack * impl_from_IDirectMusicTrack(IDirectMusicTrack *iface)
Definition: markertrack.c:34
static HRESULT WINAPI marker_IPersistStream_Load(IPersistStream *iface, IStream *stream)
Definition: markertrack.c:204
static HRESULT WINAPI IDirectMusicTrackImpl_RemoveNotificationType(IDirectMusicTrack *iface, REFGUID rguidNotificationType)
Definition: markertrack.c:172
static HRESULT WINAPI IDirectMusicTrackImpl_AddNotificationType(IDirectMusicTrack *iface, REFGUID rguidNotificationType)
Definition: markertrack.c:164
HRESULT create_dmmarkertrack(REFIID lpcGUID, void **ppobj)
Definition: markertrack.c:222
static HRESULT WINAPI IDirectMusicTrackImpl_Clone(IDirectMusicTrack *iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
Definition: markertrack.c:180
static HRESULT WINAPI IDirectMusicTrackImpl_GetParam(IDirectMusicTrack *iface, REFGUID type, MUSIC_TIME time, MUSIC_TIME *next, void *param)
Definition: markertrack.c:118
__u16 time
Definition: mkdosfs.c:8
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
long LONG
Definition: pedump.c:60
const GUID IID_IPersistStream
Definition: proxy.cpp:13
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
static unsigned __int64 next
Definition: rand_nt.c:6
#define calloc
Definition: rosglue.h:14
#define TRACE(s)
Definition: solgame.cpp:4
IDirectMusicTrack IDirectMusicTrack_iface
Definition: markertrack.c:28
struct dmobject dmobj
Definition: markertrack.c:29
Definition: scsiwmi.h:51
Definition: send.c:48
Definition: parse.h:23
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:3451
#define E_NOINTERFACE
Definition: winerror.h:3479
#define E_POINTER
Definition: winerror.h:3480