39 WARN(
"track %p EndPlay failed, hr %#lx\n",
entry->track,
hr);
89 *ppobj = &
This->IDirectMusicSegmentState8_iface;
95 *ppobj = &
This->IDirectMusicGraph_iface;
163 FIXME(
"(%p, %p): semi-stub\n",
This, seek_time);
182 FIXME(
"(%p, %s, %ld, %ld, %ld, %ld): stub\n",
This,
debugstr_dmguid(rguidTrackClassID), dwGroupBits, dwIndex, dwFlagsOn, dwFlagsOff);
190 FIXME(
"(%p, %ld, %ld, %ld, %s, %ld, %s, %p): stub\n",
This, dwPChannel, dwStage, dwBuffer,
debugstr_dmguid(guidObject), dwIndex,
debugstr_dmguid(iidInterface), ppObject);
303 obj->start_time = -1;
306 TRACE(
"Created IDirectMusicSegmentState %p\n",
obj);
313 IDirectMusicPerformance8 *
performance, IDirectMusicSegmentState **ret_iface)
315 IDirectMusicSegmentState *iface;
317 IDirectMusicGraph *
graph;
318 IDirectMusicTrack *track;
334 &
This->auto_download,
sizeof(
This->auto_download))) &&
This->auto_download)
367 WARN(
"Failed to initialize track %p, hr %#lx\n",
track,
hr);
390 IDirectMusicSegmentState *iface = (IDirectMusicSegmentState *)&
This->IDirectMusicSegmentState8_iface;
395 played =
min(end_time -
This->start_time,
This->end_point -
This->start_point);
398 This->actual_duration = 0;
403 This->start_point +
This->played,
This->start_point + played,
405 iface,
entry->track_id)))
407 WARN(
"Failed to play track %p, hr %#lx\n",
entry->track,
hr);
412 This->played = played;
421 IDirectMusicSegmentState *iface = (IDirectMusicSegmentState *)&
This->IDirectMusicSegmentState8_iface;
430 time + duration, &next_time)))
435 if (!
This->actual_repeats)
441 ERR(
"Failed to send segment end, hr %#lx\n",
hr);
451 if (!
This->played && !
This->end_point)
453 if (!
This->actual_end_point &&
This->actual_duration)
456 This->actual_end_point -=
This->start_time +
This->played;
458 This->end_point =
This->actual_end_point;
459 if (next_time < This->start_time +
This->end_point)
460 next_time +=
This->end_point -
This->start_point;
462 This->start_time +=
This->end_point -
This->start_point;
463 This->actual_repeats--;
466 if (next_time <= This->start_time ||
This->end_point <=
This->start_point)
break;
481 ERR(
"Failed to send segment start, hr %#lx\n",
hr);
526 ERR(
"Failed to unload segment from performance, 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)
HRESULT performance_send_segment_tick(IDirectMusicPerformance8 *iface, MUSIC_TIME music_time, IDirectMusicSegmentState *state)
HRESULT performance_send_segment_start(IDirectMusicPerformance8 *iface, MUSIC_TIME music_time, IDirectMusicSegmentState *state)
HRESULT performance_send_segment_end(IDirectMusicPerformance8 *iface, MUSIC_TIME music_time, IDirectMusicSegmentState *state, BOOL abort)
const char * debugstr_dmguid(const GUID *id)
#define IDirectMusicTrack_Release(p)
#define IDirectMusicTrack_Play(p, a, b, c, d, e, f, g, h)
#define IDirectMusicTrack_InitPlay(p, a, b, c, d, e)
#define IDirectMusicTrack_EndPlay(p, a)
#define IDirectMusicPerformance8_QueryInterface(p, a, b)
#define IDirectMusicPerformance8_ReferenceToMusicTime(p, a, b)
#define IDirectMusicSegment_GetLength(p, a)
#define IDirectMusicSegment_GetLoopPoints(p, a, b)
#define IDirectMusicSegmentState8_Release(p)
#define IDirectMusicSegmentState8_AddRef(p)
#define DMUS_SEG_ALLTRACKS
#define IDirectMusicPerformance8_GetGlobalParam(p, a, b, c)
#define IDirectMusicSegment_GetRepeats(p, a)
#define IDirectMusicSegmentState8_QueryInterface(p, a, b)
#define IDirectMusicSegment_Release(p)
#define IDirectMusicPerformance8_MusicToReferenceTime(p, a, b)
#define IDirectMusicSegment_SetParam(p, a, b, c, d, e)
#define IDirectMusicSegment_AddRef(p)
#define IDirectMusicSegment_GetStartPoint(p, a)
#define IDirectMusicSegmentState_Release(p)
#define IDirectMusicSegment_GetTrack(p, a, b, c, d)
#define IDirectMusicGraph_Release(p)
#define IDirectMusicGraph_StampPMsg(p, a)
#define IDirectMusicPerformance_ReferenceToMusicTime(p, a, b)
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
#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)
static HRESULT segment_state_play_until(struct segment_state *This, IDirectMusicPerformance8 *performance, MUSIC_TIME end_time, DWORD track_flags)
static const IDirectMusicGraphVtbl segment_state_graph_vtbl
HRESULT segment_state_create(IDirectMusicSegment *segment, MUSIC_TIME start_time, IDirectMusicPerformance8 *performance, IDirectMusicSegmentState **ret_iface)
static HRESULT WINAPI segment_state_graph_QueryInterface(IDirectMusicGraph *iface, REFIID riid, void **ret_iface)
static HRESULT WINAPI segment_state_graph_GetTool(IDirectMusicGraph *iface, DWORD index, IDirectMusicTool **tool)
static ULONG WINAPI segment_state_graph_Release(IDirectMusicGraph *iface)
static ULONG WINAPI segment_state_Release(IDirectMusicSegmentState8 *iface)
static HRESULT WINAPI segment_state_GetRepeats(IDirectMusicSegmentState8 *iface, DWORD *repeats)
static ULONG WINAPI segment_state_graph_AddRef(IDirectMusicGraph *iface)
HRESULT segment_state_stop(IDirectMusicSegmentState *iface, IDirectMusicPerformance8 *performance)
static HRESULT WINAPI segment_state_graph_RemoveTool(IDirectMusicGraph *iface, IDirectMusicTool *tool)
BOOL segment_state_has_track(IDirectMusicSegmentState *iface, DWORD track_id)
static HRESULT WINAPI segment_state_SetTrackConfig(IDirectMusicSegmentState8 *iface, REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff)
static void track_entry_destroy(struct track_entry *entry)
static HRESULT WINAPI segment_state_graph_StampPMsg(IDirectMusicGraph *iface, DMUS_PMSG *msg)
static HRESULT segment_state_play_chunk(struct segment_state *This, IDirectMusicPerformance8 *performance, REFERENCE_TIME duration)
static HRESULT WINAPI segment_state_GetObjectInPath(IDirectMusicSegmentState8 *iface, DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, DWORD dwIndex, REFGUID iidInterface, void **ppObject)
static DWORD next_track_id
static HRESULT WINAPI segment_state_graph_InsertTool(IDirectMusicGraph *iface, IDirectMusicTool *tool, DWORD *channels, DWORD channels_count, LONG index)
static HRESULT WINAPI segment_state_QueryInterface(IDirectMusicSegmentState8 *iface, REFIID riid, void **ppobj)
static struct segment_state * impl_from_IDirectMusicSegmentState8(IDirectMusicSegmentState8 *iface)
static HRESULT WINAPI segment_state_GetStartPoint(IDirectMusicSegmentState8 *iface, MUSIC_TIME *start_point)
HRESULT segment_state_end_play(IDirectMusicSegmentState *iface, IDirectMusicPerformance8 *performance)
BOOL segment_state_has_segment(IDirectMusicSegmentState *iface, IDirectMusicSegment *segment)
HRESULT create_dmsegmentstate(REFIID riid, void **ret_iface)
static struct segment_state * impl_from_IDirectMusicGraph(IDirectMusicGraph *iface)
static const IDirectMusicSegmentState8Vtbl segment_state_vtbl
static HRESULT WINAPI segment_state_GetStartTime(IDirectMusicSegmentState8 *iface, MUSIC_TIME *start_time)
HRESULT segment_state_tick(IDirectMusicSegmentState *iface, IDirectMusicPerformance8 *performance)
static HRESULT WINAPI segment_state_GetSegment(IDirectMusicSegmentState8 *iface, IDirectMusicSegment **segment)
static HRESULT WINAPI segment_state_GetSeek(IDirectMusicSegmentState8 *iface, MUSIC_TIME *seek_time)
static ULONG WINAPI segment_state_AddRef(IDirectMusicSegmentState8 *iface)
HRESULT segment_state_play(IDirectMusicSegmentState *iface, IDirectMusicPerformance8 *performance)
IDirectMusicSegment * segment
REFERENCE_TIME actual_duration
IDirectMusicGraph IDirectMusicGraph_iface
IDirectMusicSegmentState8 IDirectMusicSegmentState8_iface
IDirectMusicGraph * parent_graph
MUSIC_TIME actual_end_point
IDirectMusicTrack * track
#define CONTAINING_RECORD(address, type, field)