65 *ret_iface = &
This->dmobj.IPersistStream_iface;
71 IUnknown_AddRef((
IUnknown*)*ret_iface);
126 FIXME(
"(%p, %p, %p, %p, %ld, %lx): semi-stub\n",
This,
segment_state,
performance, state_data, virtual_track8id,
flags);
130 if (
This->header.bAutoDownload)
148 FIXME(
"(%p, %p): semi-stub\n",
This, state_data);
150 if (
This->header.bAutoDownload)
167 IDirectMusicGraph *
graph;
171 TRACE(
"(%p, %p, %ld, %ld, %ld, %#lx, %p, %p, %ld)\n",
This, state_data, start_time, end_time,
176 if (track_flags)
FIXME(
"track_flags %#lx not implemented\n", track_flags);
180 &IID_IDirectMusicGraph, (
void **)&
graph)))
187 else if (music_time != -1)
189 if (music_time < start_time || music_time >= end_time)
continue;
190 music_time += time_offset;
218 if (out_next) *out_next = 0;
225 if (
band->entry.next == &
This->bands)
break;
250 if (!band_param || !band_param->
pBand)
252 if (!(new_entry =
calloc(1,
sizeof(*new_entry))))
263 if (
entry->entry.next == &
This->bands || next_entry->head.lBandTimeLogical >
time)
271 FIXME(
"GUID_Clear_All_Bands not handled yet\n");
282 FIXME(
"GUID_Download not handled yet\n");
286 IDirectMusicAudioPath *audio_path;
295 &GUID_All_Objects, 0, &IID_IDirectMusicPerformance8, (
void **)&
performance);
301 WARN(
"Failed to get IDirectMusicPerformance from param %p\n",
param);
313 FIXME(
"GUID_IDirectMusicBand not handled yet\n");
315 FIXME(
"GUID_StandardMIDIFile not handled yet\n");
339 ||
IsEqualGUID (rguidType, &GUID_ConnectToDLSCollection)
340 ||
IsEqualGUID (rguidType, &GUID_Disable_Auto_Download)
342 ||
IsEqualGUID (rguidType, &GUID_DownloadToAudioPath)
343 ||
IsEqualGUID (rguidType, &GUID_Enable_Auto_Download)
347 ||
IsEqualGUID (rguidType, &GUID_UnloadFromAudioPath)) {
348 TRACE(
"param supported\n");
352 TRACE(
"param unsupported\n");
374 MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
377 FIXME(
"(%p, %ld, %ld, %p): stub\n",
This, mtStart, mtEnd, ppTrack);
388 FIXME(
"(%p, %p, 0x%s, 0x%s, 0x%s, %lx, %p, %p, %ld): stub\n",
This, state_data,
wine_dbgstr_longlong(rtStart),
418 DWORD trackgroup, IDirectMusicTrack **track)
422 TRACE(
"(%p, %p, %ld, %p): method not implemented\n",
This,
context, trackgroup, track);
428 IDirectMusicTrack **ppResultTrack)
431 FIXME(
"(%p, %p, %ld, %p, %ld, %p): stub\n",
This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
462 IDirectMusicBand *
band;
491 &IID_IDirectMusicBand, (
void **)&
band)))
497 hr = IPersistStream_Load(persist,
stream);
498 IPersistStream_Release(persist);
515 entry->head = header2;
622 TRACE(
"Loaded DirectMusicBandTrack %p\n",
This);
625 TRACE(
" - header:\n");
626 TRACE(
" - bAutoDownload: %u\n",
This->header.bAutoDownload);
628 TRACE(
" - bands:\n");
632 TRACE(
" - lBandTimeLogical: %ld\n",
entry->head.lBandTimeLogical);
633 TRACE(
" - lBandTimePhysical: %ld\n",
entry->head.lBandTimePhysical);
#define InterlockedIncrement
#define InterlockedDecrement
HRESULT band_connect_to_collection(IDirectMusicBand *iface, IDirectMusicCollection *collection)
HRESULT band_send_messages(IDirectMusicBand *iface, IDirectMusicPerformance *performance, IDirectMusicGraph *graph, MUSIC_TIME time, DWORD track_id)
static HRESULT WINAPI band_track_AddNotificationType(IDirectMusicTrack8 *iface, REFGUID notiftype)
static HRESULT WINAPI band_track_SetParamEx(IDirectMusicTrack8 *iface, REFGUID rguidType, REFERENCE_TIME rtTime, void *param, void *state_data, DWORD flags)
static struct band_track * impl_from_IPersistStream(IPersistStream *iface)
static HRESULT WINAPI band_track_IsParamSupported(IDirectMusicTrack8 *iface, REFGUID rguidType)
static HRESULT WINAPI band_track_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, void **ret_iface)
static void band_entry_destroy(struct band_entry *entry)
static HRESULT WINAPI band_track_Init(IDirectMusicTrack8 *iface, IDirectMusicSegment *segment)
static struct band_track * impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface)
static HRESULT WINAPI band_track_persist_stream_Load(IPersistStream *iface, IStream *stream)
static HRESULT WINAPI band_track_EndPlay(IDirectMusicTrack8 *iface, void *state_data)
static HRESULT WINAPI band_track_Join(IDirectMusicTrack8 *iface, IDirectMusicTrack *pNewTrack, MUSIC_TIME mtJoin, IUnknown *pContext, DWORD dwTrackGroup, IDirectMusicTrack **ppResultTrack)
static ULONG WINAPI band_track_AddRef(IDirectMusicTrack8 *iface)
static HRESULT WINAPI band_track_InitPlay(IDirectMusicTrack8 *iface, IDirectMusicSegmentState *segment_state, IDirectMusicPerformance *performance, void **state_data, DWORD virtual_track8id, DWORD flags)
static ULONG WINAPI band_track_Release(IDirectMusicTrack8 *iface)
static HRESULT WINAPI band_track_GetParam(IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME time, MUSIC_TIME *out_next, void *param)
static HRESULT parse_lbdl_list(struct band_track *This, IStream *stream, struct chunk_entry *parent)
static HRESULT WINAPI band_track_SetParam(IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME time, void *param)
static HRESULT WINAPI band_track_PlayEx(IDirectMusicTrack8 *iface, void *state_data, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD flags, IDirectMusicPerformance *performance, IDirectMusicSegmentState *segment_state, DWORD virtual_id)
static const IDirectMusicTrack8Vtbl band_track_vtbl
HRESULT create_dmbandtrack(REFIID lpcGUID, void **ppobj)
static const IPersistStreamVtbl band_track_persist_stream_vtbl
static HRESULT parse_dmbt_chunk(struct band_track *This, IStream *stream, struct chunk_entry *parent)
static HRESULT WINAPI band_track_RemoveNotificationType(IDirectMusicTrack8 *iface, REFGUID notiftype)
static HRESULT parse_lbnd_list(struct band_track *This, IStream *stream, struct chunk_entry *parent)
static HRESULT WINAPI band_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 WINAPI band_track_Compose(IDirectMusicTrack8 *iface, IUnknown *context, DWORD trackgroup, IDirectMusicTrack **track)
static HRESULT WINAPI band_track_GetParamEx(IDirectMusicTrack8 *iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *rtNext, void *param, void *state_data, DWORD flags)
static HRESULT WINAPI band_track_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static void list_remove(struct list_entry *entry)
static int list_empty(struct list_entry *head)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
#define DMUS_E_GET_UNSUPPORTED
#define DMUS_E_UNSUPPORTED_STREAM
#define DMUS_E_TYPE_UNSUPPORTED
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 dmobj_parsedescriptor(IStream *stream, const struct chunk_entry *riff, DMUS_OBJECTDESC *desc, DWORD supported)
HRESULT WINAPI unimpl_IPersistStream_GetSizeMax(IPersistStream *iface, ULARGE_INTEGER *size)
void dump_DMUS_OBJECTDESC(DMUS_OBJECTDESC *desc)
HRESULT WINAPI dmobj_IPersistStream_GetClassID(IPersistStream *iface, CLSID *class)
ULONG WINAPI dmobj_IPersistStream_AddRef(IPersistStream *iface)
const char * debugstr_dmguid(const GUID *id)
HRESULT WINAPI dmobj_IPersistStream_QueryInterface(IPersistStream *iface, REFIID riid, void **ret_iface)
HRESULT stream_skip_chunk(IStream *stream, const struct chunk_entry *chunk)
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)
static HRESULT stream_reset_chunk_data(IStream *stream, const struct chunk_entry *chunk)
#define DMUS_OBJ_NAME_INAM
static HRESULT stream_reset_chunk_start(IStream *stream, const struct chunk_entry *chunk)
#define MAKE_IDTYPE(id, type)
#define IDirectMusicTrack8_Release(p)
#define IDirectMusicTrack8_IsParamSupported(p, a)
#define IDirectMusicTrack_Release(p)
#define IDirectMusicTrack8_QueryInterface(p, a, b)
#define DMUS_FOURCC_BAND_FORM
#define DMUS_FOURCC_GUID_CHUNK
#define DMUS_FOURCC_BANDTRACK_CHUNK
#define DMUS_FOURCC_VERSION_CHUNK
#define DMUS_FOURCC_BANDS_LIST
#define DMUS_FOURCC_BANDTRACK_FORM
#define DMUS_FOURCC_UNFO_LIST
#define DMUS_FOURCC_BANDITEM_CHUNK2
#define DMUS_FOURCC_BANDITEM_CHUNK
#define DMUS_FOURCC_BAND_LIST
#define IDirectMusicBand_Download(p, a)
#define IDirectMusicBand_Unload(p, a)
#define IDirectMusicBand_AddRef(p)
#define IDirectMusicBand_QueryInterface(p, a, b)
#define IDirectMusicPerformance_QueryInterface(p, a, b)
#define IDirectMusicAudioPath_QueryInterface(p, a, b)
#define IDirectMusicAudioPath_GetObjectInPath(p, a, b, c, d, e, f, g)
#define IDirectMusicGraph_Release(p)
#define IDirectMusicPerformance_Release(p)
#define IDirectMusicAudioPath_Release(p)
#define DMUS_PATH_PERFORMANCE
#define DMUS_PCHANNEL_ALL
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
const GUID IID_IPersistStream
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
static unsigned __int64 next
static __inline const char * debugstr_fourcc(unsigned int cc)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
__WINE_SERVER_LIST_INLINE void list_add_after(struct list *elem, struct list *to_add)
MUSIC_TIME mtTimePhysical
struct IDirectMusicBand * pBand
MUSIC_TIME lBandTimeLogical
MUSIC_TIME lBandTimePhysical
DMUS_IO_BAND_ITEM_HEADER2 head
IDirectMusicTrack8 IDirectMusicTrack8_iface
DMUS_IO_BAND_TRACK_HEADER header
#define CONTAINING_RECORD(address, type, field)