70 *ret_iface = &
This->dmobj.IPersistStream_iface;
76 IUnknown_AddRef((
IUnknown*)*ret_iface);
125 FIXME(
"(%p, %p): stub\n",
This, pSegment);
130 IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance,
134 FIXME(
"(%p, %p, %p, %p, %ld, %ld): stub\n",
This, pSegmentState, pPerformance, ppStateData,
142 FIXME(
"(%p, %p): stub\n",
This, pStateData);
153 IDirectMusicGraph *
graph;
158 TRACE(
"(%p, %p, %ld, %ld, %ld, %#lx, %p, %p, %ld)\n",
This, state_data, start_time, end_time,
161 if (track_flags & ~handled_track_flags)
162 FIXME(
"track_flags %#lx not implemented\n", track_flags & ~handled_track_flags);
166 &IID_IDirectMusicGraph, (
void **)&
graph)) &&
168 &IID_IDirectMusicGraph, (
void **)&
graph)))
179 if (!
item->buffer)
continue;
180 if (
item->header.rtTime < start_time)
continue;
181 if (
item->header.rtTime >= end_time)
continue;
187 msg->mtTime =
item->header.rtTime + time_offset;
190 msg->dwVirtualTrackID = track_id;
195 msg->rtStartOffset =
item->header.rtStartOffset;
196 msg->rtDuration =
item->header.rtDuration;
198 msg->lPitch =
item->header.lPitch;
232 FIXME(
"GUID_Disable_Auto_Download not handled yet\n");
236 FIXME(
"GUID_Download not handled yet\n");
242 IDirectMusicAudioPath *audio_path;
246 IDirectSound *dsound;
253 &GUID_All_Objects, 0, &IID_IDirectMusicPerformance8, (
void **)&
performance);
263 WARN(
"Failed to get direct sound from param %p, hr %#lx\n",
param,
hr);
271 if (
item->buffer)
continue;
274 WARN(
"Failed to download wave %p to direct sound, hr %#lx\n",
item->object,
hr);
283 FIXME(
"GUID_Enable_Auto_Download not handled yet\n");
287 FIXME(
"GUID_Unload not handled yet\n");
299 if (!
item->buffer)
continue;
315 &GUID_Disable_Auto_Download,
317 &GUID_DownloadToAudioPath,
318 &GUID_Enable_Auto_Download,
320 &GUID_UnloadFromAudioPath
330 TRACE(
"param unsupported\n");
352 MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
355 FIXME(
"(%p, %ld, %ld, %p): stub\n",
This, mtStart, mtEnd, ppTrack);
361 IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt,
DWORD dwVirtualID)
364 FIXME(
"(%p, %p, 0x%s, 0x%s, 0x%s, %ld, %p, %p, %ld): stub\n",
This, pStateData,
390 DWORD trackgroup, IDirectMusicTrack **track)
394 TRACE(
"(%p, %p, %ld, %p): method not implemented\n",
This,
context, trackgroup, track);
402 TRACE(
"(%p, %p, %ld, %p, %ld, %p): method not implemented\n",
This, newtrack,
join,
context,
403 trackgroup, resulttrack);
456 TRACE(
"Found DMUS_IO_WAVE_ITEM_HEADER\n");
457 TRACE(
"\tlVolume %ld\n",
item->header.lVolume);
458 TRACE(
"\tdwVariations %ld\n",
item->header.dwVariations);
463 TRACE(
"\tdwLoopStart %ld\n",
item->header.dwLoopStart);
464 TRACE(
"\tdwLoopEnd %ld\n",
item->header.dwLoopEnd);
465 TRACE(
"\tdwFlags %#08lx\n",
item->header.dwFlags);
466 TRACE(
"\twVolumeRange %d\n",
item->header.wVolumeRange);
467 TRACE(
"\twPitchRange %d\n",
item->header.wPitchRange);
507 TRACE(
"Found DMUS_IO_WAVE_PART_HEADER\n");
560 TRACE(
"Found DMUS_IO_WAVE_TRACK_HEADER\n");
561 TRACE(
"\tlVolume %ld\n",
This->header.lVolume);
562 TRACE(
"\tdwFlags %#08lx\n",
This->header.dwFlags);
606 IDirectMusicTrack8 **ret_iface)
608 IDirectMusicTrack8 *iface;
617 if (!(part =
calloc(1,
sizeof(*part))))
633 WARN(
"Failed to get wave duration, hr %#lx\n",
hr);
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static void list_remove(struct list_entry *entry)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
#define DMUS_E_GET_UNSUPPORTED
#define DMUS_E_UNSUPPORTED_STREAM
#define DMUS_E_TYPE_UNSUPPORTED
HRESULT performance_get_dsound(IDirectMusicPerformance8 *iface, IDirectSound **dsound)
void dmobject_init(struct dmobject *dmobj, const GUID *class, IUnknown *outer_unk)
HRESULT stream_chunk_get_data(IStream *stream, const struct chunk_entry *chunk, void *data, ULONG size)
HRESULT stream_next_chunk(IStream *stream, struct chunk_entry *chunk)
ULONG WINAPI dmobj_IPersistStream_Release(IPersistStream *iface)
HRESULT WINAPI unimpl_IPersistStream_GetSizeMax(IPersistStream *iface, ULARGE_INTEGER *size)
const char * debugstr_chunk(const struct chunk_entry *chunk)
HRESULT WINAPI dmobj_IPersistStream_GetClassID(IPersistStream *iface, CLSID *class)
ULONG WINAPI dmobj_IPersistStream_AddRef(IPersistStream *iface)
const char * debugstr_dmguid(const GUID *id)
HRESULT dmobj_parsereference(IStream *stream, const struct chunk_entry *list, IDirectMusicObject **dmobj)
HRESULT WINAPI dmobj_IPersistStream_QueryInterface(IPersistStream *iface, REFIID riid, void **ret_iface)
HRESULT stream_get_chunk(IStream *stream, struct chunk_entry *chunk)
HRESULT WINAPI unimpl_IPersistStream_IsDirty(IPersistStream *iface)
HRESULT WINAPI unimpl_IPersistStream_Save(IPersistStream *iface, IStream *stream, BOOL clear_dirty)
#define IDirectMusicTrack8_Release(p)
#define IDirectMusicTrack8_QueryInterface(p, a, b)
HRESULT wave_get_duration(IDirectMusicObject *iface, REFERENCE_TIME *duration)
HRESULT wave_download_to_dsound(IDirectMusicObject *iface, IDirectSound *dsound, IDirectSoundBuffer **ret_iface)
HRESULT wave_create_from_chunk(IStream *stream, struct chunk_entry *parent, IDirectMusicObject **out)
#define DMUS_FOURCC_WAVE_LIST
#define DMUS_FOURCC_WAVETRACK_LIST
#define DMUS_FOURCC_WAVETRACK_CHUNK
#define DMUS_FOURCC_REF_LIST
#define DMUS_FOURCC_WAVEITEM_LIST
#define DMUS_FOURCC_WAVEPART_LIST
#define DMUS_FOURCC_WAVEITEM_CHUNK
#define DMUS_FOURCC_WAVEPART_CHUNK
#define IDirectMusicObject_Release(p)
#define IDirectMusicPerformance_QueryInterface(p, a, b)
#define IDirectMusicSegmentState_QueryInterface(p, a, b)
#define IDirectMusicAudioPath_QueryInterface(p, a, b)
#define IDirectMusicPerformance_SendPMsg(p, a)
#define IDirectMusicAudioPath_GetObjectInPath(p, a, b, c, d, e, f, g)
#define IDirectMusicGraph_Release(p)
#define IDirectMusicPerformance_Release(p)
#define IDirectMusicAudioPath_Release(p)
#define IDirectMusicPerformance_FreePMsg(p, a)
#define IDirectMusicGraph_StampPMsg(p, a)
#define DMUS_PATH_PERFORMANCE
#define DMUS_PCHANNEL_ALL
#define IDirectMusicPerformance_AllocPMsg(p, a, b)
#define IDirectSoundBuffer_AddRef(p)
#define IDirectSoundBuffer_Release(p)
GLuint GLuint GLsizei GLenum type
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
const GUID IID_IPersistStream
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
static unsigned __int64 next
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
IDirectSoundBuffer * buffer
IDirectMusicObject * object
DMUS_IO_WAVE_ITEM_HEADER header
DMUS_IO_WAVE_PART_HEADER header
IDirectMusicTrack8 IDirectMusicTrack8_iface
DMUS_IO_WAVE_TRACK_HEADER header
#define CONTAINING_RECORD(address, type, field)
HRESULT create_dmwavetrack(REFIID lpcGUID, void **ppobj)
static HRESULT WINAPI wave_track_RemoveNotificationType(IDirectMusicTrack8 *iface, REFGUID notiftype)
static HRESULT WINAPI wave_track_PlayEx(IDirectMusicTrack8 *iface, void *pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
static HRESULT WINAPI wave_track_Compose(IDirectMusicTrack8 *iface, IUnknown *context, DWORD trackgroup, IDirectMusicTrack **track)
static HRESULT WINAPI wave_track_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, void **ret_iface)
static ULONG WINAPI wave_track_AddRef(IDirectMusicTrack8 *iface)
static HRESULT WINAPI wave_track_SetParam(IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME time, void *param)
static HRESULT WINAPI wave_track_InitPlay(IDirectMusicTrack8 *iface, IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
static HRESULT WINAPI wave_track_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
static HRESULT parse_wave_item(struct wave_part *part, IStream *stream, struct chunk_entry *wavi)
static struct wave_track * impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface)
static HRESULT WINAPI wave_track_EndPlay(IDirectMusicTrack8 *iface, void *pStateData)
static ULONG WINAPI wave_track_Release(IDirectMusicTrack8 *iface)
static HRESULT WINAPI wave_track_Init(IDirectMusicTrack8 *iface, IDirectMusicSegment *pSegment)
static HRESULT WINAPI wave_track_Join(IDirectMusicTrack8 *iface, IDirectMusicTrack *newtrack, MUSIC_TIME join, IUnknown *context, DWORD trackgroup, IDirectMusicTrack **resulttrack)
static HRESULT WINAPI wave_track_AddNotificationType(IDirectMusicTrack8 *iface, REFGUID notiftype)
static const IPersistStreamVtbl persiststream_vtbl
static HRESULT WINAPI wave_track_IsParamSupported(IDirectMusicTrack8 *iface, REFGUID type)
HRESULT wave_track_create_from_chunk(IStream *stream, struct chunk_entry *parent, IDirectMusicTrack8 **ret_iface)
static HRESULT WINAPI wave_track_GetParamEx(IDirectMusicTrack8 *iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, void *pStateData, DWORD dwFlags)
static HRESULT WINAPI wave_IPersistStream_Load(IPersistStream *iface, IStream *stream)
static const IDirectMusicTrack8Vtbl dmtrack8_vtbl
static HRESULT WINAPI wave_track_SetParamEx(IDirectMusicTrack8 *iface, REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags)
static HRESULT WINAPI wave_track_Play(IDirectMusicTrack8 *iface, void *state_data, MUSIC_TIME start_time, MUSIC_TIME end_time, MUSIC_TIME time_offset, DWORD track_flags, IDirectMusicPerformance *performance, IDirectMusicSegmentState *segment_state, DWORD track_id)
static HRESULT parse_wave_part(struct wave_track *This, IStream *stream, struct chunk_entry *wavp)
static HRESULT WINAPI wave_track_GetParam(IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME time, MUSIC_TIME *next, void *param)
static struct wave_track * impl_from_IPersistStream(IPersistStream *iface)