ReactOS 0.4.17-dev-934-g091855f
dmime_private.h File Reference
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include "windef.h"
#include "winbase.h"
#include "winnt.h"
#include "wingdi.h"
#include "winuser.h"
#include "wine/debug.h"
#include "wine/list.h"
#include "winreg.h"
#include "objbase.h"
#include "dmusici.h"
#include "dmusicf.h"
#include "dmusics.h"
#include "dmusicc.h"
#include "dmobject.h"
Include dependency graph for dmime_private.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _DMUS_PRIVATE_TEMPO_ITEM
 
struct  _DMUS_PRIVATE_TEMPO_PLAY_STATE
 

Macros

#define COBJMACROS
 

Typedefs

typedef struct IDirectMusicAudioPathImpl IDirectMusicAudioPathImpl
 
typedef struct _DMUS_PRIVATE_TEMPO_ITEM DMUS_PRIVATE_TEMPO_ITEM
 
typedef struct _DMUS_PRIVATE_TEMPO_ITEM * LPDMUS_PRIVATE_TEMPO_ITEM
 
typedef struct _DMUS_PRIVATE_TEMPO_PLAY_STATE DMUS_PRIVATE_TEMPO_PLAY_STATE
 
typedef struct _DMUS_PRIVATE_TEMPO_PLAY_STATE * LPDMUS_PRIVATE_TEMPO_PLAY_STATE
 

Functions

HRESULT create_dmperformance (REFIID riid, void **ret_iface)
 
HRESULT create_dmsegment (REFIID riid, void **ret_iface)
 
HRESULT create_dmsegmentstate (REFIID riid, void **ret_iface)
 
HRESULT create_dmgraph (REFIID riid, void **ret_iface)
 
HRESULT create_dmaudiopath (REFIID riid, void **ret_iface)
 
HRESULT create_dmaudiopath_config (REFIID riid, void **ret_iface)
 
HRESULT create_dmlyricstrack (REFIID riid, void **ret_iface)
 
HRESULT create_dmmarkertrack (REFIID riid, void **ret_iface)
 
HRESULT create_dmparamcontroltrack (REFIID riid, void **ret_iface)
 
HRESULT create_dmsegtriggertrack (REFIID riid, void **ret_iface)
 
HRESULT create_dmseqtrack (REFIID riid, void **ret_iface)
 
HRESULT create_dmsysextrack (REFIID riid, void **ret_iface)
 
HRESULT create_dmtempotrack (REFIID riid, void **ret_iface)
 
HRESULT create_dmtimesigtrack (REFIID riid, void **ret_iface)
 
HRESULT create_dmwavetrack (REFIID riid, void **ret_iface)
 
HRESULT parse_midi (IStream *stream, IDirectMusicSegment8 *segment)
 
void set_audiopath_perf_pointer (IDirectMusicAudioPath *, IDirectMusicPerformance8 *)
 
void set_audiopath_dsound_buffer (IDirectMusicAudioPath *, IDirectSoundBuffer *)
 
void set_audiopath_primary_dsound_buffer (IDirectMusicAudioPath *, IDirectSoundBuffer *)
 
HRESULT segment_state_create (IDirectMusicSegment *segment, MUSIC_TIME start_time, IDirectMusicPerformance8 *performance, IDirectMusicSegmentState **ret_iface)
 
HRESULT segment_state_play (IDirectMusicSegmentState *iface, IDirectMusicPerformance8 *performance)
 
HRESULT segment_state_tick (IDirectMusicSegmentState *iface, IDirectMusicPerformance8 *performance)
 
HRESULT segment_state_stop (IDirectMusicSegmentState *iface, IDirectMusicPerformance8 *performance)
 
HRESULT segment_state_end_play (IDirectMusicSegmentState *iface, IDirectMusicPerformance8 *performance)
 
BOOL segment_state_has_segment (IDirectMusicSegmentState *iface, IDirectMusicSegment *segment)
 
BOOL segment_state_has_track (IDirectMusicSegmentState *iface, DWORD track_id)
 
HRESULT wave_track_create_from_chunk (IStream *stream, struct chunk_entry *parent, IDirectMusicTrack8 **ret_iface)
 
void sequence_track_set_items (IDirectMusicTrack8 *track, DMUS_IO_SEQ_ITEM *items, unsigned int count)
 
HRESULT performance_get_dsound (IDirectMusicPerformance8 *iface, IDirectSound **dsound)
 
HRESULT performance_send_segment_start (IDirectMusicPerformance8 *iface, MUSIC_TIME music_time, IDirectMusicSegmentState *state)
 
HRESULT performance_send_segment_tick (IDirectMusicPerformance8 *iface, MUSIC_TIME music_time, IDirectMusicSegmentState *state)
 
HRESULT performance_send_segment_end (IDirectMusicPerformance8 *iface, MUSIC_TIME music_time, IDirectMusicSegmentState *state, BOOL abort)
 
HRESULT path_config_get_audio_path_params (IUnknown *iface, WAVEFORMATEX *format, DSBUFFERDESC *desc, DMUS_PORTPARAMS *params)
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 27 of file dmime_private.h.

Typedef Documentation

◆ DMUS_PRIVATE_TEMPO_ITEM

◆ DMUS_PRIVATE_TEMPO_PLAY_STATE

◆ IDirectMusicAudioPathImpl

◆ LPDMUS_PRIVATE_TEMPO_ITEM

◆ LPDMUS_PRIVATE_TEMPO_PLAY_STATE

Function Documentation

◆ create_dmaudiopath()

HRESULT create_dmaudiopath ( REFIID  riid,
void **  ret_iface 
)

Definition at line 736 of file audiopath.c.

737{
739 HRESULT hr;
740
741 *ppobj = NULL;
742 if (!(obj = calloc(1, sizeof(*obj)))) return E_OUTOFMEMORY;
743 obj->IDirectMusicAudioPath_iface.lpVtbl = &DirectMusicAudioPathVtbl;
744 obj->ref = 1;
745
746 hr = IDirectMusicAudioPath_QueryInterface(&obj->IDirectMusicAudioPath_iface, riid, ppobj);
747 IDirectMusicAudioPath_Release(&obj->IDirectMusicAudioPath_iface);
748 return hr;
749}
static const IDirectMusicAudioPathVtbl DirectMusicAudioPathVtbl
Definition: audiopath.c:273
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
#define IDirectMusicAudioPath_QueryInterface(p, a, b)
Definition: dmusici.h:1209
#define IDirectMusicAudioPath_Release(p)
Definition: dmusici.h:1211
REFIID riid
Definition: atlbase.h:39
#define calloc
Definition: rosglue.h:14

Referenced by performance_CreateAudioPath(), and performance_CreateStandardAudioPath().

◆ create_dmaudiopath_config()

HRESULT create_dmaudiopath_config ( REFIID  riid,
void **  ret_iface 
)

Definition at line 751 of file audiopath.c.

752{
753 struct audio_path_config *obj;
754 HRESULT hr;
755
756 *ppobj = NULL;
757 if (!(obj = calloc(1, sizeof(*obj)))) return E_OUTOFMEMORY;
758 dmobject_init(&obj->dmobj, &CLSID_DirectMusicAudioPathConfig, &obj->IUnknown_iface);
759 obj->IUnknown_iface.lpVtbl = &path_config_unk_vtbl;
760 obj->dmobj.IDirectMusicObject_iface.lpVtbl = &dmobject_vtbl;
761 obj->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl;
762 obj->ref = 1;
763
764 list_init(&obj->port_config_entries);
765
766 hr = IUnknown_QueryInterface(&obj->IUnknown_iface, riid, ppobj);
767 IUnknown_Release(&obj->IUnknown_iface);
768 return hr;
769}
static const IDirectMusicObjectVtbl dmobject_vtbl
Definition: audiopath.c:317
static const IPersistStreamVtbl persiststream_vtbl
Definition: audiopath.c:574
static const IUnknownVtbl path_config_unk_vtbl
Definition: audiopath.c:645
static void list_init(struct list_entry *head)
Definition: list.h:51
void dmobject_init(struct dmobject *dmobj, const GUID *class, IUnknown *outer_unk)
Definition: dmobject.c:749

◆ create_dmgraph()

HRESULT create_dmgraph ( REFIID  riid,
void **  ret_iface 
)

Definition at line 301 of file graph.c.

302{
303 struct graph *obj;
304 HRESULT hr;
305
306 *ret_iface = NULL;
307 if (!(obj = calloc(1, sizeof(*obj)))) return E_OUTOFMEMORY;
308 obj->IDirectMusicGraph_iface.lpVtbl = &graph_vtbl;
309 obj->ref = 1;
310 dmobject_init(&obj->dmobj, &CLSID_DirectMusicGraph, (IUnknown *)&obj->IDirectMusicGraph_iface);
311 obj->dmobj.IDirectMusicObject_iface.lpVtbl = &dmobject_vtbl;
312 obj->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl;
313 list_init(&obj->tools);
314
315 hr = IDirectMusicGraph_QueryInterface(&obj->IDirectMusicGraph_iface, riid, ret_iface);
316 IDirectMusicGraph_Release(&obj->IDirectMusicGraph_iface);
317
318 return hr;
319}
static const IDirectMusicObjectVtbl dmobject_vtbl
Definition: graph.c:270
static const IDirectMusicGraphVtbl graph_vtbl
Definition: graph.c:226
static const IPersistStreamVtbl persiststream_vtbl
Definition: graph.c:289
#define IDirectMusicGraph_QueryInterface(p, a, b)
Definition: dmusici.h:1470
#define IDirectMusicGraph_Release(p)
Definition: dmusici.h:1472
Definition: graph.c:32

Referenced by IDirectMusicAudioPathImpl_GetObjectInPath().

◆ create_dmlyricstrack()

HRESULT create_dmlyricstrack ( REFIID  riid,
void **  ret_iface 
)

Definition at line 344 of file lyricstrack.c.

345{
347 HRESULT hr;
348
349 *ppobj = NULL;
350 if (!(track = calloc(1, sizeof(*track)))) return E_OUTOFMEMORY;
352 track->ref = 1;
353 dmobject_init(&track->dmobj, &CLSID_DirectMusicLyricsTrack,
355 track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl;
356
359
360 return hr;
361}
#define IDirectMusicTrack8_Release(p)
Definition: dmplugin.h:275
#define IDirectMusicTrack8_QueryInterface(p, a, b)
Definition: dmplugin.h:273
static const IPersistStreamVtbl persiststream_vtbl
Definition: lyricstrack.c:332
static const IDirectMusicTrack8Vtbl dmtrack8_vtbl
Definition: lyricstrack.c:221
IDirectMusicTrack8 IDirectMusicTrack8_iface
Definition: lyricstrack.c:28
struct dmobject dmobj
Definition: lyricstrack.c:29

◆ create_dmmarkertrack()

HRESULT create_dmmarkertrack ( REFIID  riid,
void **  ret_iface 
)

Definition at line 222 of file markertrack.c.

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 IDirectMusicTrack_Release(p)
Definition: dmplugin.h:226
#define IDirectMusicTrack_QueryInterface(p, a, b)
Definition: dmplugin.h:224
static const IDirectMusicTrackVtbl dmtrack_vtbl
Definition: markertrack.c:188
static const IPersistStreamVtbl persiststream_vtbl
Definition: markertrack.c:210
IDirectMusicTrack IDirectMusicTrack_iface
Definition: markertrack.c:28
struct dmobject dmobj
Definition: markertrack.c:29

◆ create_dmparamcontroltrack()

HRESULT create_dmparamcontroltrack ( REFIID  riid,
void **  ret_iface 
)

Definition at line 258 of file paramcontroltrack.c.

259{
261 HRESULT hr;
262
263 *ppobj = NULL;
264 if (!(track = calloc(1, sizeof(*track)))) return E_OUTOFMEMORY;
266 track->ref = 1;
267 dmobject_init(&track->dmobj, &CLSID_DirectMusicParamControlTrack,
269 track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl;
270
273
274 return hr;
275}
static const IPersistStreamVtbl persiststream_vtbl
static const IDirectMusicTrack8Vtbl dmtrack8_vtbl
IDirectMusicTrack8 IDirectMusicTrack8_iface

◆ create_dmperformance()

HRESULT create_dmperformance ( REFIID  riid,
void **  ret_iface 
)

Definition at line 2279 of file performance.c.

2280{
2281 struct performance *obj;
2282 HRESULT hr;
2283
2284 TRACE("(%s, %p)\n", debugstr_guid(iid), ret_iface);
2285
2286 *ret_iface = NULL;
2287 if (!(obj = calloc(1, sizeof(*obj)))) return E_OUTOFMEMORY;
2288 obj->IDirectMusicPerformance8_iface.lpVtbl = &performance_vtbl;
2289 obj->IDirectMusicGraph_iface.lpVtbl = &performance_graph_vtbl;
2290 obj->IDirectMusicTool_iface.lpVtbl = &performance_tool_vtbl;
2291 obj->ref = 1;
2292
2293 obj->pDefaultPath = NULL;
2295 obj->safe.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": performance->safe");
2296 wine_rb_init(&obj->channel_blocks, channel_block_compare);
2297
2298 list_init(&obj->messages);
2299 list_init(&obj->notifications);
2300
2301 obj->latency_offset = 50;
2302 obj->dwBumperLength = 50; /* 50 ms default */
2303 obj->dwPrepareTime = 1000; /* 1000 ms default */
2304
2305 hr = IDirectMusicPerformance8_QueryInterface(&obj->IDirectMusicPerformance8_iface, iid, ret_iface);
2306 IDirectMusicPerformance_Release(&obj->IDirectMusicPerformance8_iface);
2307 return hr;
2308}
static const IDirectMusicGraphVtbl performance_graph_vtbl
Definition: performance.c:1993
static const IDirectMusicPerformance8Vtbl performance_vtbl
Definition: performance.c:1851
static int channel_block_compare(const void *key, const struct wine_rb_entry *entry)
Definition: performance.c:257
static const IDirectMusicToolVtbl performance_tool_vtbl
Definition: performance.c:2265
BOOL WINAPI InitializeCriticalSectionEx(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount, IN DWORD flags)
Definition: sync.c:107
#define IDirectMusicPerformance8_QueryInterface(p, a, b)
Definition: dmusici.h:1392
#define IDirectMusicPerformance_Release(p)
Definition: dmusici.h:1279
#define debugstr_guid
Definition: kernel32.h:35
#define wine_rb_init
Definition: rbtree.h:406
#define TRACE(s)
Definition: solgame.cpp:4
#define DWORD_PTR
Definition: treelist.c:76
#define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO
Definition: winnt_old.h:1156

◆ create_dmsegment()

HRESULT create_dmsegment ( REFIID  riid,
void **  ret_iface 
)

Definition at line 876 of file segment.c.

877{
878 struct segment *obj;
879 HRESULT hr;
880
881 if (!(obj = segment_create()))
882 {
883 *ret_iface = NULL;
884 return E_OUTOFMEMORY;
885 }
886
887 hr = IDirectMusicSegment8_QueryInterface(&obj->IDirectMusicSegment8_iface, guid, ret_iface);
888 IDirectMusicSegment8_Release(&obj->IDirectMusicSegment8_iface);
889
890 return hr;
891}
GUID guid
Definition: version.c:147
#define IDirectMusicSegment8_Release(p)
Definition: dmusici.h:1083
#define IDirectMusicSegment8_QueryInterface(p, a, b)
Definition: dmusici.h:1081
static struct segment * segment_create(void)
Definition: segment.c:860

◆ create_dmsegmentstate()

HRESULT create_dmsegmentstate ( REFIID  riid,
void **  ret_iface 
)

Definition at line 293 of file segmentstate.c.

294{
295 struct segment_state *obj;
296 HRESULT hr;
297
298 *ret_iface = NULL;
299 if (!(obj = calloc(1, sizeof(*obj)))) return E_OUTOFMEMORY;
300 obj->IDirectMusicSegmentState8_iface.lpVtbl = &segment_state_vtbl;
301 obj->IDirectMusicGraph_iface.lpVtbl = &segment_state_graph_vtbl;
302 obj->ref = 1;
303 obj->start_time = -1;
304 list_init(&obj->tracks);
305
306 TRACE("Created IDirectMusicSegmentState %p\n", obj);
307 hr = IDirectMusicSegmentState8_QueryInterface(&obj->IDirectMusicSegmentState8_iface, riid, ret_iface);
308 IDirectMusicSegmentState8_Release(&obj->IDirectMusicSegmentState8_iface);
309 return hr;
310}
#define IDirectMusicSegmentState8_Release(p)
Definition: dmusici.h:1176
#define IDirectMusicSegmentState8_QueryInterface(p, a, b)
Definition: dmusici.h:1174
static const IDirectMusicGraphVtbl segment_state_graph_vtbl
Definition: segmentstate.c:281
static const IDirectMusicSegmentState8Vtbl segment_state_vtbl
Definition: segmentstate.c:194

Referenced by segment_InitPlay(), and segment_state_create().

◆ create_dmsegtriggertrack()

HRESULT create_dmsegtriggertrack ( REFIID  riid,
void **  ret_iface 
)

Definition at line 380 of file segtriggertrack.c.

381{
383 HRESULT hr;
384
385 *ppobj = NULL;
386 if (!(track = calloc(1, sizeof(*track)))) return E_OUTOFMEMORY;
388 track->ref = 1;
389 dmobject_init(&track->dmobj, &CLSID_DirectMusicSegTriggerTrack,
391 track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl;
392 list_init(&track->Items);
393
396
397 return hr;
398}
static const IPersistStreamVtbl persiststream_vtbl
static const IDirectMusicTrack8Vtbl dmtrack8_vtbl
IDirectMusicTrack8 IDirectMusicTrack8_iface

◆ create_dmseqtrack()

HRESULT create_dmseqtrack ( REFIID  riid,
void **  ret_iface 
)

Definition at line 488 of file seqtrack.c.

489{
490 struct sequence_track *track;
491 HRESULT hr;
492
493 *ppobj = NULL;
494 if (!(track = calloc(1, sizeof(*track)))) return E_OUTOFMEMORY;
496 track->ref = 1;
497 dmobject_init(&track->dmobj, &CLSID_DirectMusicSeqTrack,
499 track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl;
500
503
504 return hr;
505}
static const IPersistStreamVtbl persiststream_vtbl
Definition: seqtrack.c:476
static const IDirectMusicTrack8Vtbl dmtrack8_vtbl
Definition: seqtrack.c:327
IDirectMusicTrack8 IDirectMusicTrack8_iface
Definition: seqtrack.c:26
struct dmobject dmobj
Definition: seqtrack.c:27

◆ create_dmsysextrack()

HRESULT create_dmsysextrack ( REFIID  riid,
void **  ret_iface 
)

Definition at line 257 of file sysextrack.c.

258{
260 HRESULT hr;
261
262 *ppobj = NULL;
263 if (!(track = calloc(1, sizeof(*track)))) return E_OUTOFMEMORY;
265 track->ref = 1;
266 dmobject_init(&track->dmobj, &CLSID_DirectMusicSysExTrack,
268 track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl;
269
272
273 return hr;
274}
IDirectMusicTrack8 IDirectMusicTrack8_iface
Definition: sysextrack.c:28
struct dmobject dmobj
Definition: sysextrack.c:29
static const IPersistStreamVtbl persiststream_vtbl
Definition: sysextrack.c:245
static const IDirectMusicTrack8Vtbl dmtrack8_vtbl
Definition: sysextrack.c:218

◆ create_dmtempotrack()

HRESULT create_dmtempotrack ( REFIID  riid,
void **  ret_iface 
)

Definition at line 402 of file tempotrack.c.

403{
405 HRESULT hr;
406
407 *ppobj = NULL;
408 if (!(track = calloc(1, sizeof(*track)))) return E_OUTOFMEMORY;
410 track->ref = 1;
411 dmobject_init(&track->dmobj, &CLSID_DirectMusicTempoTrack,
413 track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl;
414 list_init(&track->items);
415
418
419 return hr;
420}
IDirectMusicTrack8 IDirectMusicTrack8_iface
Definition: tempotrack.c:37
struct dmobject dmobj
Definition: tempotrack.c:38
static const IPersistStreamVtbl persiststream_vtbl
Definition: tempotrack.c:390
static const IDirectMusicTrack8Vtbl dmtrack8_vtbl
Definition: tempotrack.c:319

◆ create_dmtimesigtrack()

HRESULT create_dmtimesigtrack ( REFIID  riid,
void **  ret_iface 
)

Definition at line 285 of file timesigtrack.c.

286{
288 HRESULT hr;
289
290 *ppobj = NULL;
291 if (!(track = calloc(1, sizeof(*track)))) return E_OUTOFMEMORY;
292 track->IDirectMusicTrack_iface.lpVtbl = &dmtack_vtbl;
293 track->ref = 1;
294 dmobject_init(&track->dmobj, &CLSID_DirectMusicTimeSigTrack,
296 track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl;
297
300
301 return hr;
302}
IDirectMusicTrack IDirectMusicTrack_iface
Definition: timesigtrack.c:28
struct dmobject dmobj
Definition: timesigtrack.c:29
static const IPersistStreamVtbl persiststream_vtbl
Definition: timesigtrack.c:273
static const IDirectMusicTrackVtbl dmtack_vtbl
Definition: timesigtrack.c:201

◆ create_dmwavetrack()

HRESULT create_dmwavetrack ( REFIID  riid,
void **  ret_iface 
)

Definition at line 585 of file wavetrack.c.

586{
587 struct wave_track *track;
588 HRESULT hr;
589
590 *ppobj = NULL;
591 if (!(track = calloc(1, sizeof(*track)))) return E_OUTOFMEMORY;
593 track->ref = 1;
594 dmobject_init(&track->dmobj, &CLSID_DirectMusicWaveTrack,
596 track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl;
597 list_init(&track->parts);
598
601
602 return hr;
603}
struct dmobject dmobj
Definition: wavetrack.c:40
IDirectMusicTrack8 IDirectMusicTrack8_iface
Definition: wavetrack.c:39
struct list parts
Definition: wavetrack.c:43
LONG ref
Definition: wavetrack.c:41
static const IPersistStreamVtbl persiststream_vtbl
Definition: wavetrack.c:573
static const IDirectMusicTrack8Vtbl dmtrack8_vtbl
Definition: wavetrack.c:407

Referenced by wave_track_create_from_chunk().

◆ parse_midi()

HRESULT parse_midi ( IStream *  stream,
IDirectMusicSegment8 *  segment 
)

Definition at line 483 of file midi.c.

484{
485 struct midi_parser *parser;
486 HRESULT hr;
487
488 if (FAILED(hr = midi_parser_new(stream, &parser))) return hr;
491 return hr;
492}
static void midi_parser_destroy(struct midi_parser *parser)
Definition: midi.c:413
static HRESULT midi_parser_new(IStream *stream, struct midi_parser **out_parser)
Definition: midi.c:429
static HRESULT midi_parser_parse(struct midi_parser *parser, IDirectMusicSegment8 *segment)
Definition: midi.c:323
#define FAILED(hr)
Definition: intsafe.h:51
Definition: import.c:81
Definition: parse.h:23

Referenced by segment_persist_stream_Load().

◆ path_config_get_audio_path_params()

HRESULT path_config_get_audio_path_params ( IUnknown *  iface,
WAVEFORMATEX *  format,
DSBUFFERDESC *  desc,
DMUS_PORTPARAMS *  params 
)

Definition at line 652 of file audiopath.c.

653{
655 struct list *first_port_config, *first_pchannel_to_buffer;
656 struct audio_path_port_config *port_config;
657 struct audio_path_pchannel_to_buffer *pchannel_to_buffer;
658 GUID *guids;
659
660 first_port_config = list_head(&This->port_config_entries);
661 if (list_next(&This->port_config_entries, first_port_config))
662 FIXME("Only one port config supported. %p -> %p\n", first_port_config, list_next(&This->port_config_entries, first_port_config));
663 port_config = LIST_ENTRY(first_port_config, struct audio_path_port_config, entry);
664 first_pchannel_to_buffer = list_head(&port_config->pchannel_to_buffer_entries);
665 if (list_next(&port_config->pchannel_to_buffer_entries, first_pchannel_to_buffer))
666 FIXME("Only one pchannel to buffer entry supported.\n");
667 pchannel_to_buffer = LIST_ENTRY(first_pchannel_to_buffer, struct audio_path_pchannel_to_buffer, entry);
668
669 /* Secondary buffer description */
670 memset(format, 0, sizeof(*format));
671 format->wFormatTag = WAVE_FORMAT_PCM;
672 format->nChannels = 1;
673 format->nSamplesPerSec = 44000;
674 format->nAvgBytesPerSec = 44000 * 2;
675 format->nBlockAlign = 2;
676 format->wBitsPerSample = 16;
677 format->cbSize = 0;
678
679 memset(desc, 0, sizeof(*desc));
680 desc->dwSize = sizeof(*desc);
682 desc->dwBufferBytes = DSBSIZE_MIN;
683 desc->dwReserved = 0;
684 desc->lpwfxFormat = format;
685 desc->guid3DAlgorithm = GUID_NULL;
686
687 guids = pchannel_to_buffer->guids;
688 if (pchannel_to_buffer->header.dwBufferCount == 2)
689 {
690 if ((!IsEqualGUID(&guids[0], &GUID_Buffer_Reverb) && !IsEqualGUID(&guids[0], &GUID_Buffer_Stereo)) ||
691 (!IsEqualGUID(&guids[1], &GUID_Buffer_Reverb) && !IsEqualGUID(&guids[1], &GUID_Buffer_Stereo)) ||
692 IsEqualGUID(&guids[0], &guids[1]))
693 FIXME("Only a stereo plus reverb buffer is supported\n");
694 else
695 {
697 format->nChannels = 2;
698 format->nBlockAlign *= 2;
699 format->nAvgBytesPerSec *= 2;
700 }
701 }
702 else if (pchannel_to_buffer->header.dwBufferCount == 1)
703 {
704 if (IsEqualGUID(guids, &GUID_Buffer_Stereo))
705 {
707 format->nChannels = 2;
708 format->nBlockAlign *= 2;
709 format->nAvgBytesPerSec *= 2;
710 }
711 else if (IsEqualGUID(guids, &GUID_Buffer_3D_Dry))
713 else if (IsEqualGUID(guids, &GUID_Buffer_Mono))
715 else
716 FIXME("Unsupported buffer guid %s\n", debugstr_dmguid(guids));
717 }
718 else
719 FIXME("Multiple buffers not supported\n");
720
721 *params = port_config->params;
722 if (!(params->dwValidParams & DMUS_PORTPARAMS_CHANNELGROUPS))
723 {
725 params->dwChannelGroups = (port_config->header.dwPChannelCount + 15) / 16;
726 }
727 if (!(params->dwValidParams & DMUS_PORTPARAMS_AUDIOCHANNELS))
728 {
729 params->dwValidParams |= DMUS_PORTPARAMS_AUDIOCHANNELS;
730 params->dwAudioChannels = format->nChannels;
731 }
732 return S_OK;
733}
static struct audio_path_config * impl_from_IUnknown(IUnknown *iface)
Definition: audiopath.c:585
#define WAVE_FORMAT_PCM
Definition: constants.h:425
#define FIXME(fmt,...)
Definition: precomp.h:53
Definition: list.h:39
const struct sortguid * guids
Definition: locale.c:422
const char * debugstr_dmguid(const GUID *id)
Definition: dmobject.c:36
#define DMUS_PORTPARAMS_CHANNELGROUPS
Definition: dmusicc.h:206
#define DMUS_PORTPARAMS_AUDIOCHANNELS
Definition: dmusicc.h:207
#define DSBCAPS_GLOBALFOCUS
Definition: dsound.h:219
#define DSBCAPS_CTRLVOLUME
Definition: dsound.h:213
#define DSBCAPS_MUTE3DATMAXDISTANCE
Definition: dsound.h:221
#define DSBCAPS_CTRLPAN
Definition: dsound.h:212
#define DSBCAPS_CTRLFX
Definition: dsound.h:216
#define DSBSIZE_MIN
Definition: dsound.h:224
#define DSBCAPS_CTRLFREQUENCY
Definition: dsound.h:211
#define DSBCAPS_CTRL3D
Definition: dsound.h:210
GLenum const GLfloat * params
Definition: glext.h:5645
#define S_OK
Definition: intsafe.h:52
uint32_t entry
Definition: isohybrid.c:63
#define GUID_NULL
Definition: ks.h:106
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1683
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
__WINE_SERVER_LIST_INLINE struct list * list_next(const struct list *list, const struct list *elem)
Definition: list.h:117
#define memset(x, y, z)
Definition: compat.h:39
DWORD dwValidParams
Definition: dmusicc.h:316
DMUS_IO_PCHANNELTOBUFFER_HEADER header
Definition: audiopath.c:38
DMUS_IO_PORTCONFIG_HEADER header
Definition: audiopath.c:51
DMUS_PORTPARAMS8 params
Definition: audiopath.c:52
struct list pchannel_to_buffer_entries
Definition: audiopath.c:54
Definition: list.h:15
#define LIST_ENTRY(type)
Definition: queue.h:175

Referenced by performance_CreateAudioPath().

◆ performance_get_dsound()

HRESULT performance_get_dsound ( IDirectMusicPerformance8 *  iface,
IDirectSound **  dsound 
)

Definition at line 2316 of file performance.c.

2317{
2319 if (!This || !(*dsound = This->dsound)) return E_FAIL;
2321 return S_OK;
2322}
#define E_FAIL
Definition: ddrawi.h:102
static struct performance * unsafe_impl_from_IDirectMusicPerformance8(IDirectMusicPerformance8 *iface)
Definition: performance.c:2310
#define IDirectSound_AddRef(p)
Definition: dsound.h:452
IDirectSound * dsound
Definition: performance.c:56

Referenced by wave_track_SetParam().

◆ performance_send_segment_end()

HRESULT performance_send_segment_end ( IDirectMusicPerformance8 *  iface,
MUSIC_TIME  music_time,
IDirectMusicSegmentState *  state,
BOOL  abort 
)

Definition at line 355 of file performance.c.

357{
359 HRESULT hr;
360
361 if (!abort)
362 {
363 if (FAILED(hr = performance_send_notification_pmsg(This, music_time - 1450, This->notification_segment,
364 GUID_NOTIFICATION_SEGMENT, DMUS_NOTIFICATION_SEGALMOSTEND, (IUnknown *)state)))
365 return hr;
366 if (FAILED(hr = performance_send_notification_pmsg(This, music_time, This->notification_segment,
367 GUID_NOTIFICATION_SEGMENT, DMUS_NOTIFICATION_SEGEND, (IUnknown *)state)))
368 return hr;
369 }
370
373 return hr;
374 if (FAILED(hr = performance_send_notification_pmsg(This, music_time, This->notification_performance,
375 GUID_NOTIFICATION_PERFORMANCE, DMUS_NOTIFICATION_MUSICSTOPPED, NULL)))
376 return hr;
379 return hr;
380
381 return S_OK;
382}
static int state
Definition: maze.c:121
@ DMUS_PMSGT_INTERNAL_SEGMENT_END
Definition: performance.c:31
static HRESULT performance_send_notification_pmsg(struct performance *This, MUSIC_TIME music_time, BOOL stamp, GUID type, DWORD option, IUnknown *object)
Definition: performance.c:231
static struct performance * impl_from_IDirectMusicPerformance8(IDirectMusicPerformance8 *iface)
Definition: performance.c:313
static HRESULT performance_send_pmsg(struct performance *This, MUSIC_TIME music_time, DWORD flags, DWORD type, IUnknown *object)
Definition: performance.c:208
#define DMUS_NOTIFICATION_MUSICSTOPPED
Definition: dmusici.h:257
@ DMUS_PMSGF_TOOL_ATTIME
Definition: dmusici.h:449
@ DMUS_PMSGF_TOOL_IMMEDIATE
Definition: dmusici.h:447
#define DMUS_NOTIFICATION_SEGEND
Definition: dmusici.h:252
#define DMUS_NOTIFICATION_SEGALMOSTEND
Definition: dmusici.h:253
@ DMUS_PMSGT_DIRTY
Definition: dmusici.h:467
#define abort()
Definition: i386-dis.c:34

Referenced by segment_state_play_chunk(), and segment_state_stop().

◆ performance_send_segment_start()

HRESULT performance_send_segment_start ( IDirectMusicPerformance8 *  iface,
MUSIC_TIME  music_time,
IDirectMusicSegmentState *  state 
)

Definition at line 318 of file performance.c.

320{
322 HRESULT hr;
323
324 if (FAILED(hr = performance_send_notification_pmsg(This, music_time, This->notification_performance,
325 GUID_NOTIFICATION_PERFORMANCE, DMUS_NOTIFICATION_MUSICSTARTED, NULL)))
326 return hr;
327 if (FAILED(hr = performance_send_notification_pmsg(This, music_time, This->notification_segment,
328 GUID_NOTIFICATION_SEGMENT, DMUS_NOTIFICATION_SEGSTART, (IUnknown *)state)))
329 return hr;
332 return hr;
333
334 return S_OK;
335}
#define DMUS_NOTIFICATION_MUSICSTARTED
Definition: dmusici.h:256
#define DMUS_NOTIFICATION_SEGSTART
Definition: dmusici.h:251

Referenced by segment_state_play().

◆ performance_send_segment_tick()

HRESULT performance_send_segment_tick ( IDirectMusicPerformance8 *  iface,
MUSIC_TIME  music_time,
IDirectMusicSegmentState *  state 
)

Definition at line 337 of file performance.c.

339{
342 HRESULT hr;
343
345 return hr;
346 if (FAILED(hr = IDirectMusicPerformance8_ReferenceToMusicTime(iface, time + 2000000, &music_time)))
347 return hr;
350 return hr;
351
352 return S_OK;
353}
@ DMUS_PMSGT_INTERNAL_SEGMENT_TICK
Definition: performance.c:32
#define IDirectMusicPerformance8_ReferenceToMusicTime(p, a, b)
Definition: dmusici.h:1406
@ DMUS_PMSGF_TOOL_QUEUE
Definition: dmusici.h:448
#define IDirectMusicPerformance8_MusicToReferenceTime(p, a, b)
Definition: dmusici.h:1405
LONGLONG REFERENCE_TIME
Definition: dmusicks.h:9
__u16 time
Definition: mkdosfs.c:8

Referenced by segment_state_play().

◆ segment_state_create()

HRESULT segment_state_create ( IDirectMusicSegment *  segment,
MUSIC_TIME  start_time,
IDirectMusicPerformance8 *  performance,
IDirectMusicSegmentState **  ret_iface 
)

Definition at line 312 of file segmentstate.c.

314{
315 IDirectMusicSegmentState *iface;
316 struct segment_state *This;
317 IDirectMusicGraph *graph;
318 IDirectMusicTrack *track;
319 HRESULT hr;
320 UINT i;
321
322 TRACE("(%p, %lu, %p)\n", segment, start_time, ret_iface);
323
324 if (FAILED(hr = create_dmsegmentstate(&IID_IDirectMusicSegmentState, (void **)&iface))) return hr;
325 This = impl_from_IDirectMusicSegmentState8((IDirectMusicSegmentState8 *)iface);
326
327 This->segment = segment;
329
330 hr = IDirectMusicPerformance8_QueryInterface(performance, &IID_IDirectMusicGraph, (void **)&graph);
331
332 if (SUCCEEDED(hr) &&
334 &This->auto_download, sizeof(This->auto_download))) && This->auto_download)
335 hr = IDirectMusicSegment_SetParam(segment, &GUID_DownloadToAudioPath, -1,
337
338 This->start_time = start_time;
342 if (SUCCEEDED(hr)) This->actual_repeats = This->repeats;
343
344 for (i = 0; SUCCEEDED(hr); i++)
345 {
346 DWORD track_id = ++next_track_id;
347 struct track_entry *entry;
348
350 {
351 if (hr == DMUS_E_NOT_FOUND) hr = S_OK;
352 break;
353 }
354
355 if (!(entry = malloc(sizeof(*entry))))
357 else if (SUCCEEDED(hr = IDirectMusicTrack_InitPlay(track, iface, (IDirectMusicPerformance *)performance,
358 &entry->state_data, track_id, 0)))
359 {
360 entry->track = track;
361 entry->track_id = track_id;
362 list_add_tail(&This->tracks, &entry->entry);
363 }
364
365 if (FAILED(hr))
366 {
367 WARN("Failed to initialize track %p, hr %#lx\n", track, hr);
369 free(entry);
370 }
371 }
372
373 if (SUCCEEDED(hr))
374 {
375 *ret_iface = iface;
376 This->parent_graph = graph;
377 }
378 else
379 {
382 }
383
384 return hr;
385}
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
#define WARN(fmt,...)
Definition: precomp.h:61
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
#define DMUS_E_NOT_FOUND
Definition: dmerror.h:109
#define IDirectMusicTrack_InitPlay(p, a, b, c, d, e)
Definition: dmplugin.h:229
#define IDirectMusicSegment_GetLength(p, a)
Definition: dmusici.h:1010
#define DMUS_SEG_ALLTRACKS
Definition: dmusici.h:317
#define IDirectMusicPerformance8_GetGlobalParam(p, a, b, c)
Definition: dmusici.h:1426
#define IDirectMusicSegment_GetRepeats(p, a)
Definition: dmusici.h:1012
#define IDirectMusicSegment_SetParam(p, a, b, c, d, e)
Definition: dmusici.h:1026
#define IDirectMusicSegment_AddRef(p)
Definition: dmusici.h:1007
#define IDirectMusicSegment_GetStartPoint(p, a)
Definition: dmusici.h:1029
#define IDirectMusicSegmentState_Release(p)
Definition: dmusici.h:1140
#define IDirectMusicSegment_GetTrack(p, a, b, c, d)
Definition: dmusici.h:1016
unsigned long DWORD
Definition: ntddk_ex.h:95
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
Definition: glfuncs.h:248
unsigned int UINT
Definition: sysinfo.c:13
#define SUCCEEDED(hr)
Definition: intsafe.h:50
static DWORD next_track_id
Definition: segmentstate.c:23
static struct segment_state * impl_from_IDirectMusicSegmentState8(IDirectMusicSegmentState8 *iface)
Definition: segmentstate.c:68
HRESULT create_dmsegmentstate(REFIID riid, void **ret_iface)
Definition: segmentstate.c:293
MUSIC_TIME start_time
Definition: segmentstate.c:53
IDirectMusicSegment * segment
Definition: segmentstate.c:52
Definition: segment.c:26
IDirectMusicTrack * track
Definition: segmentstate.c:29
DWORD track_id
Definition: segmentstate.c:31

Referenced by performance_PlaySegmentEx().

◆ segment_state_end_play()

HRESULT segment_state_end_play ( IDirectMusicSegmentState *  iface,
IDirectMusicPerformance8 *  performance 
)

Definition at line 512 of file segmentstate.c.

513{
514 struct segment_state *This = impl_from_IDirectMusicSegmentState8((IDirectMusicSegmentState8 *)iface);
515 struct track_entry *entry, *next;
516 HRESULT hr;
517
519 {
520 list_remove(&entry->entry);
522 }
523
524 if (performance && This->auto_download && FAILED(hr = IDirectMusicSegment_SetParam(This->segment,
525 &GUID_UnloadFromAudioPath, -1, DMUS_SEG_ALLTRACKS, 0, performance)))
526 ERR("Failed to unload segment from performance, hr %#lx\n", hr);
527
528 return S_OK;
529}
static void list_remove(struct list_entry *entry)
Definition: list.h:90
#define ERR(fmt,...)
Definition: precomp.h:57
static unsigned __int64 next
Definition: rand_nt.c:6
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:242
static void track_entry_destroy(struct track_entry *entry)
Definition: segmentstate.c:34

Referenced by performance_CloseDown(), performance_tool_ProcessPMsg(), and segment_state_Release().

◆ segment_state_has_segment()

BOOL segment_state_has_segment ( IDirectMusicSegmentState *  iface,
IDirectMusicSegment *  segment 
)

Definition at line 531 of file segmentstate.c.

532{
533 struct segment_state *This = impl_from_IDirectMusicSegmentState8((IDirectMusicSegmentState8 *)iface);
534 return !segment || This->segment == segment;
535}

Referenced by enum_segment_states().

◆ segment_state_has_track()

BOOL segment_state_has_track ( IDirectMusicSegmentState *  iface,
DWORD  track_id 
)

Definition at line 537 of file segmentstate.c.

538{
539 struct segment_state *This = impl_from_IDirectMusicSegmentState8((IDirectMusicSegmentState8 *)iface);
540 struct track_entry *entry;
541
543 if (entry->track_id == track_id) return TRUE;
544
545 return FALSE;
546}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:236

Referenced by message_needs_flushing().

◆ segment_state_play()

HRESULT segment_state_play ( IDirectMusicSegmentState *  iface,
IDirectMusicPerformance8 *  performance 
)

Definition at line 472 of file segmentstate.c.

473{
474 struct segment_state *This = impl_from_IDirectMusicSegmentState8((IDirectMusicSegmentState8 *)iface);
475 HRESULT hr;
476
477 TRACE("%p %p\n", iface, performance);
478
479 if (FAILED(hr = performance_send_segment_start(performance, This->start_time, iface)))
480 {
481 ERR("Failed to send segment start, hr %#lx\n", hr);
482 return hr;
483 }
484
487 return hr;
488
489 if (hr == S_FALSE) return S_OK;
490 return performance_send_segment_tick(performance, This->start_time, iface);
491}
HRESULT performance_send_segment_tick(IDirectMusicPerformance8 *iface, MUSIC_TIME music_time, IDirectMusicSegmentState *state)
Definition: performance.c:337
HRESULT performance_send_segment_start(IDirectMusicPerformance8 *iface, MUSIC_TIME music_time, IDirectMusicSegmentState *state)
Definition: performance.c:318
@ DMUS_TRACKF_SEEK
Definition: dmplugin.h:111
@ DMUS_TRACKF_START
Definition: dmplugin.h:113
@ DMUS_TRACKF_DIRTY
Definition: dmplugin.h:115
static HRESULT segment_state_play_chunk(struct segment_state *This, IDirectMusicPerformance8 *performance, REFERENCE_TIME duration)
Definition: segmentstate.c:418
#define S_FALSE
Definition: winerror.h:3451

Referenced by performance_PlaySegmentEx().

◆ segment_state_stop()

HRESULT segment_state_stop ( IDirectMusicSegmentState *  iface,
IDirectMusicPerformance8 *  performance 
)

Definition at line 502 of file segmentstate.c.

503{
504 struct segment_state *This = impl_from_IDirectMusicSegmentState8((IDirectMusicSegmentState8 *)iface);
505
506 TRACE("%p %p\n", iface, performance);
507
508 This->played = This->end_point - This->start_point;
509 return performance_send_segment_end(performance, This->start_time + This->played, iface, TRUE);
510}
HRESULT performance_send_segment_end(IDirectMusicPerformance8 *iface, MUSIC_TIME music_time, IDirectMusicSegmentState *state, BOOL abort)
Definition: performance.c:355

Referenced by performance_Stop().

◆ segment_state_tick()

HRESULT segment_state_tick ( IDirectMusicSegmentState *  iface,
IDirectMusicPerformance8 *  performance 
)

Definition at line 493 of file segmentstate.c.

494{
495 struct segment_state *This = impl_from_IDirectMusicSegmentState8((IDirectMusicSegmentState8 *)iface);
496
497 TRACE("%p %p\n", iface, performance);
498
499 return segment_state_play_chunk(This, performance, 10000000);
500}

Referenced by performance_tool_ProcessPMsg().

◆ sequence_track_set_items()

void sequence_track_set_items ( IDirectMusicTrack8 *  track,
DMUS_IO_SEQ_ITEM *  items,
unsigned int  count 
)

Definition at line 507 of file seqtrack.c.

508{
510 free(This->items);
511 This->items = items;
512 This->count = count;
513}
GLuint GLuint GLsizei count
Definition: gl.h:1545
static TCHAR * items[]
Definition: page1.c:45
static struct sequence_track * impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface)
Definition: seqtrack.c:37

Referenced by midi_parser_parse().

◆ set_audiopath_dsound_buffer()

void set_audiopath_dsound_buffer ( IDirectMusicAudioPath *  iface,
IDirectSoundBuffer *  buffer 
)

Definition at line 82 of file audiopath.c.

83{
85 This->pDSBuffer = buffer;
86}
static struct IDirectMusicAudioPathImpl * impl_from_IDirectMusicAudioPath(IDirectMusicAudioPath *iface)
Definition: audiopath.c:66
GLuint buffer
Definition: glext.h:5915

Referenced by performance_CreateAudioPath(), and performance_CreateStandardAudioPath().

◆ set_audiopath_perf_pointer()

void set_audiopath_perf_pointer ( IDirectMusicAudioPath *  iface,
IDirectMusicPerformance8 *  performance 
)

◆ set_audiopath_primary_dsound_buffer()

void set_audiopath_primary_dsound_buffer ( IDirectMusicAudioPath *  iface,
IDirectSoundBuffer *  buffer 
)

Definition at line 88 of file audiopath.c.

89{
91 This->pPrimary = buffer;
92}

Referenced by performance_CreateAudioPath(), and performance_CreateStandardAudioPath().

◆ wave_track_create_from_chunk()

HRESULT wave_track_create_from_chunk ( IStream *  stream,
struct chunk_entry *  parent,
IDirectMusicTrack8 **  ret_iface 
)

Definition at line 605 of file wavetrack.c.

607{
608 IDirectMusicTrack8 *iface;
609 struct wave_track *This;
610 struct wave_item *item;
611 struct wave_part *part;
612 HRESULT hr;
613
614 if (FAILED(hr = create_dmwavetrack(&IID_IDirectMusicTrack8, (void **)&iface))) return hr;
616
617 if (!(part = calloc(1, sizeof(*part))))
618 {
620 return E_OUTOFMEMORY;
621 }
622 list_init(&part->items);
623 list_add_tail(&This->parts, &part->entry);
624
625 if (!(item = calloc(1, sizeof(*item)))
627 {
629 free(item);
630 return hr;
631 }
632 if (FAILED(hr = wave_get_duration(item->object, &item->header.rtDuration)))
633 WARN("Failed to get wave duration, hr %#lx\n", hr);
634 list_add_tail(&part->items, &item->entry);
635
636 *ret_iface = iface;
637 return S_OK;
638}
HRESULT wave_get_duration(IDirectMusicObject *iface, REFERENCE_TIME *duration)
Definition: wave.c:521
HRESULT wave_create_from_chunk(IStream *stream, struct chunk_entry *parent, IDirectMusicObject **out)
Definition: wave.c:292
r parent
Definition: btrfs.c:3010
struct list entry
Definition: wavetrack.c:32
struct list items
Definition: wavetrack.c:34
HRESULT create_dmwavetrack(REFIID lpcGUID, void **ppobj)
Definition: wavetrack.c:585
static struct wave_track * impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface)
Definition: wavetrack.c:47

Referenced by segment_persist_stream_Load().