ReactOS 0.4.17-dev-934-g091855f
segment.c File Reference
#include "dmime_private.h"
Include dependency graph for segment.c:

Go to the source code of this file.

Classes

struct  track_entry
 
struct  segment
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (dmime)
 
static void track_entry_destroy (struct track_entry *entry)
 
static struct segment * segment_create (void)
 
static struct segment * impl_from_IDirectMusicSegment8 (IDirectMusicSegment8 *iface)
 
static HRESULT WINAPI segment_QueryInterface (IDirectMusicSegment8 *iface, REFIID riid, void **ret_iface)
 
static ULONG WINAPI segment_AddRef (IDirectMusicSegment8 *iface)
 
static ULONG WINAPI segment_Release (IDirectMusicSegment8 *iface)
 
static HRESULT WINAPI segment_GetLength (IDirectMusicSegment8 *iface, MUSIC_TIME *length)
 
static HRESULT WINAPI segment_SetLength (IDirectMusicSegment8 *iface, MUSIC_TIME length)
 
static HRESULT WINAPI segment_GetRepeats (IDirectMusicSegment8 *iface, DWORD *repeats)
 
static HRESULT WINAPI segment_SetRepeats (IDirectMusicSegment8 *iface, DWORD repeats)
 
static HRESULT WINAPI segment_GetDefaultResolution (IDirectMusicSegment8 *iface, DWORD *resolution)
 
static HRESULT WINAPI segment_SetDefaultResolution (IDirectMusicSegment8 *iface, DWORD resolution)
 
static HRESULT WINAPI segment_GetTrack (IDirectMusicSegment8 *iface, REFGUID type, DWORD group, DWORD index, IDirectMusicTrack **ret_track)
 
static HRESULT WINAPI segment_GetTrackGroup (IDirectMusicSegment8 *iface, IDirectMusicTrack *track, DWORD *ret_group)
 
static HRESULT segment_append_track (struct segment *This, IDirectMusicTrack *track, DWORD group, DWORD flags)
 
static HRESULT WINAPI segment_InsertTrack (IDirectMusicSegment8 *iface, IDirectMusicTrack *track, DWORD group)
 
static HRESULT WINAPI segment_RemoveTrack (IDirectMusicSegment8 *iface, IDirectMusicTrack *track)
 
static HRESULT WINAPI segment_InitPlay (IDirectMusicSegment8 *iface, IDirectMusicSegmentState **state, IDirectMusicPerformance *performance, DWORD flags)
 
static HRESULT WINAPI segment_GetGraph (IDirectMusicSegment8 *iface, IDirectMusicGraph **graph)
 
static HRESULT WINAPI segment_SetGraph (IDirectMusicSegment8 *iface, IDirectMusicGraph *graph)
 
static HRESULT WINAPI segment_AddNotificationType (IDirectMusicSegment8 *iface, REFGUID rguidNotificationType)
 
static HRESULT WINAPI segment_RemoveNotificationType (IDirectMusicSegment8 *iface, REFGUID rguidNotificationType)
 
static HRESULT WINAPI segment_GetParam (IDirectMusicSegment8 *iface, REFGUID type, DWORD group, DWORD index, MUSIC_TIME time, MUSIC_TIME *next, void *param)
 
static HRESULT WINAPI segment_SetParam (IDirectMusicSegment8 *iface, REFGUID type, DWORD group, DWORD index, MUSIC_TIME music_time, void *param)
 
static HRESULT WINAPI segment_Clone (IDirectMusicSegment8 *iface, MUSIC_TIME start, MUSIC_TIME end, IDirectMusicSegment **segment)
 
static HRESULT WINAPI segment_SetStartPoint (IDirectMusicSegment8 *iface, MUSIC_TIME start)
 
static HRESULT WINAPI segment_GetStartPoint (IDirectMusicSegment8 *iface, MUSIC_TIME *start)
 
static HRESULT WINAPI segment_SetLoopPoints (IDirectMusicSegment8 *iface, MUSIC_TIME start, MUSIC_TIME end)
 
static HRESULT WINAPI segment_GetLoopPoints (IDirectMusicSegment8 *iface, MUSIC_TIME *start, MUSIC_TIME *end)
 
static HRESULT WINAPI segment_SetPChannelsUsed (IDirectMusicSegment8 *iface, DWORD dwNumPChannels, DWORD *paPChannels)
 
static HRESULT WINAPI segment_SetTrackConfig (IDirectMusicSegment8 *iface, REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff)
 
static HRESULT WINAPI segment_GetAudioPathConfig (IDirectMusicSegment8 *iface, IUnknown **ppAudioPathConfig)
 
static HRESULT WINAPI segment_Compose (IDirectMusicSegment8 *iface, MUSIC_TIME mtTime, IDirectMusicSegment *pFromSegment, IDirectMusicSegment *pToSegment, IDirectMusicSegment **ppComposedSegment)
 
static HRESULT WINAPI segment_Download (IDirectMusicSegment8 *iface, IUnknown *audio_path)
 
static HRESULT WINAPI segment_Unload (IDirectMusicSegment8 *iface, IUnknown *audio_path)
 
static HRESULT WINAPI segment_object_ParseDescriptor (IDirectMusicObject *iface, IStream *stream, DMUS_OBJECTDESC *desc)
 
static HRESULT parse_track_form (struct segment *This, IStream *stream, const struct chunk_entry *riff)
 
static HRESULT parse_track_list (struct segment *This, IStream *stream, const struct chunk_entry *trkl)
 
static void dump_segment_header (DMUS_IO_SEGMENT_HEADER *h, DWORD size)
 
static HRESULT parse_dmsg_chunk (struct segment *This, IStream *stream, const struct chunk_entry *riff)
 
static struct segment * impl_from_IPersistStream (IPersistStream *iface)
 
static HRESULT WINAPI segment_persist_stream_Load (IPersistStream *iface, IStream *stream)
 
HRESULT create_dmsegment (REFIID guid, void **ret_iface)
 

Variables

static const IDirectMusicSegment8Vtbl segment_vtbl
 
static const IDirectMusicObjectVtbl segment_object_vtbl
 
static const IPersistStreamVtbl segment_persist_stream_vtbl
 

Function Documentation

◆ create_dmsegment()

HRESULT create_dmsegment ( REFIID  guid,
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}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
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

◆ dump_segment_header()

static void dump_segment_header ( DMUS_IO_SEGMENT_HEADER *  h,
DWORD  size 
)
inlinestatic

Definition at line 714 of file segment.c.

715{
716 unsigned int dx = 9;
717
718 if (size == offsetof(DMUS_IO_SEGMENT_HEADER, rtLength))
719 dx = 7;
720 else if (size == offsetof(DMUS_IO_SEGMENT_HEADER, rtLoopStart))
721 dx = 8;
722 TRACE("Found DirectX%d DMUS_IO_SEGMENT_HEADER\n", dx);
723 TRACE("\tdwRepeats: %lu\n", h->dwRepeats);
724 TRACE("\tmtLength: %lu\n", h->mtLength);
725 TRACE("\tmtPlayStart: %lu\n", h->mtPlayStart);
726 TRACE("\tmtLoopStart: %lu\n", h->mtLoopStart);
727 TRACE("\tmtLoopEnd: %lu\n", h->mtLoopEnd);
728 TRACE("\tdwResolution: %lu\n", h->dwResolution);
729 if (dx >= 8) {
730 TRACE("\trtLength: %s\n", wine_dbgstr_longlong(h->rtLength));
731 TRACE("\tdwFlags: %lu\n", h->dwFlags);
732 TRACE("\tdwReserved: %lu\n", h->dwReserved);
733 }
734 if (dx == 9) {
735 TRACE("\trtLoopStart: %s\n", wine_dbgstr_longlong(h->rtLoopStart));
736 TRACE("\trtLoopEnd: %s\n", wine_dbgstr_longlong(h->rtLoopEnd));
737 if (size > offsetof(DMUS_IO_SEGMENT_HEADER, rtPlayStart))
738 TRACE("\trtPlayStart: %s\n", wine_dbgstr_longlong(h->rtPlayStart));
739 }
740}
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:49
GLsizeiptr size
Definition: glext.h:5919
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
GLint dx
Definition: linetemp.h:97
#define offsetof(TYPE, MEMBER)
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by parse_dmsg_chunk().

◆ impl_from_IDirectMusicSegment8()

◆ impl_from_IPersistStream()

static struct segment * impl_from_IPersistStream ( IPersistStream *  iface)
inlinestatic

Definition at line 786 of file segment.c.

787{
788 return CONTAINING_RECORD(iface, struct segment, dmobj.IPersistStream_iface);
789}

Referenced by segment_persist_stream_Load().

◆ parse_dmsg_chunk()

static HRESULT parse_dmsg_chunk ( struct segment *  This,
IStream *  stream,
const struct chunk_entry *  riff 
)
static

Definition at line 742 of file segment.c.

743{
744 struct chunk_entry chunk = {.parent = riff};
745 HRESULT hr;
746
747 TRACE("Parsing segment form in %p: %s\n", stream, debugstr_chunk(riff));
748
751 return hr;
752
753 while ((hr = stream_next_chunk(stream, &chunk)) == S_OK) {
754 switch (chunk.id) {
756 /* DX9 without rtPlayStart field */
757 if (chunk.size == offsetof(DMUS_IO_SEGMENT_HEADER, rtPlayStart))
758 WARN("Missing rtPlayStart field in %s\n", debugstr_chunk(&chunk));
759 /* DX7, DX8 and DX9 structure sizes */
760 else if (chunk.size != offsetof(DMUS_IO_SEGMENT_HEADER, rtLength) &&
761 chunk.size != offsetof(DMUS_IO_SEGMENT_HEADER, rtLoopStart) &&
762 chunk.size != sizeof(DMUS_IO_SEGMENT_HEADER)) {
763 WARN("Invalid size of %s\n", debugstr_chunk(&chunk));
764 break;
765 }
766 if (FAILED(hr = stream_chunk_get_data(stream, &chunk, &This->header, chunk.size))) {
767 WARN("Failed to read data of %s\n", debugstr_chunk(&chunk));
768 return hr;
769 }
771 break;
772 case FOURCC_LIST:
773 if (chunk.type == DMUS_FOURCC_TRACK_LIST)
775 return hr;
776 break;
777 case FOURCC_RIFF:
778 FIXME("Loading of embedded RIFF form %s\n", debugstr_fourcc(chunk.type));
779 break;
780 }
781 }
782
783 return SUCCEEDED(hr) ? S_OK : hr;
784}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
HRESULT stream_chunk_get_data(IStream *stream, const struct chunk_entry *chunk, void *data, ULONG size)
Definition: dmobject.c:417
HRESULT stream_next_chunk(IStream *stream, struct chunk_entry *chunk)
Definition: dmobject.c:360
HRESULT dmobj_parsedescriptor(IStream *stream, const struct chunk_entry *riff, DMUS_OBJECTDESC *desc, DWORD supported)
Definition: dmobject.c:591
const char * debugstr_chunk(const struct chunk_entry *chunk)
Definition: dmobject.c:279
static HRESULT stream_reset_chunk_data(IStream *stream, const struct chunk_entry *chunk)
Definition: dmobject.h:50
#define DMUS_FOURCC_SEGMENT_CHUNK
Definition: dmusicf.h:115
#define DMUS_FOURCC_TRACK_LIST
Definition: dmusicf.h:116
#define DMUS_OBJ_NAME
Definition: dmusici.h:267
#define DMUS_OBJ_CATEGORY
Definition: dmusici.h:268
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define FOURCC_RIFF
Definition: mmsystem.h:564
#define FOURCC_LIST
Definition: mmsystem.h:565
static __inline const char * debugstr_fourcc(unsigned int cc)
Definition: debug.h:397
static HRESULT parse_track_list(struct segment *This, IStream *stream, const struct chunk_entry *trkl)
Definition: segment.c:700
static void dump_segment_header(DMUS_IO_SEGMENT_HEADER *h, DWORD size)
Definition: segment.c:714
Definition: dmobject.h:26
uint16_t size
Definition: btrfs_drv.h:563
Definition: parse.h:23

Referenced by segment_persist_stream_Load().

◆ parse_track_form()

static HRESULT parse_track_form ( struct segment *  This,
IStream *  stream,
const struct chunk_entry *  riff 
)
static

Definition at line 624 of file segment.c.

625{
626 struct chunk_entry chunk = {.parent = riff};
627 IDirectMusicTrack *track = NULL;
628 IPersistStream *ps = NULL;
629 IStream *clone;
631 DMUS_IO_TRACK_EXTRAS_HEADER txhdr = {0};
632 HRESULT hr;
633
634 TRACE("Parsing track form in %p: %s\n", stream, debugstr_chunk(riff));
635
636 /* First chunk must be the track header */
638 return hr;
641 if (FAILED(hr = stream_chunk_get_data(stream, &chunk, &thdr, sizeof(thdr))))
642 return hr;
643 TRACE("Found DMUS_IO_TRACK_HEADER\n");
644 TRACE("\tclass: %s\n", debugstr_guid (&thdr.guidClassID));
645 TRACE("\tdwGroup: %#lx\n", thdr.dwGroup);
646 TRACE("\tckid: %s\n", debugstr_fourcc (thdr.ckid));
647 TRACE("\tfccType: %s\n", debugstr_fourcc (thdr.fccType));
648
649 if (!!thdr.ckid == !!thdr.fccType) {
650 WARN("One and only one of the ckid (%s) and fccType (%s) need to be set\n",
653 }
654
655 /* Optional chunks */
656 while ((hr = stream_next_chunk(stream, &chunk)) == S_OK) {
657 if ((thdr.ckid && chunk.id == thdr.ckid) ||
658 (!thdr.ckid && (chunk.id == FOURCC_LIST || chunk.id == FOURCC_RIFF) &&
659 chunk.type == thdr.fccType))
660 break;
661
663 SUCCEEDED(stream_chunk_get_data(stream, &chunk, &txhdr, sizeof(txhdr)))) {
664 FIXME("DMUS_IO_TRACK_EXTRAS_HEADER chunk not fully handled\n");
665 TRACE("dwFlags: %#lx, dwPriority: %lu\n", txhdr.dwFlags, txhdr.dwPriority);
666 }
667 }
668 if (hr != S_OK)
669 return hr == S_FALSE ? DMUS_E_TRACK_NOT_FOUND : hr;
670
671 /* Some DirectMusicTrack implementation expect the stream to start with their data chunk */
672 if (FAILED(hr = IStream_Clone(stream, &clone)))
673 return hr;
675
676 /* Load the track */
677 hr = CoCreateInstance(&thdr.guidClassID, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicTrack,
678 (void **)&track);
679 if (FAILED(hr))
680 goto done;
682 if (FAILED(hr))
683 goto done;
684 hr = IPersistStream_Load(ps, clone);
685 if (FAILED(hr))
686 goto done;
687
688 hr = segment_append_track(This, track, thdr.dwGroup, txhdr.dwFlags);
689
690done:
691 if (ps)
692 IPersistStream_Release(ps);
693 if (track)
695 IStream_Release(clone);
696
697 return hr;
698}
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685
#define DMUS_E_TRACK_HDR_NOT_FIRST_CK
Definition: dmerror.h:103
#define DMUS_E_INVALID_TRACK_HDR
Definition: dmerror.h:105
#define DMUS_E_TRACK_NOT_FOUND
Definition: dmerror.h:114
HRESULT stream_get_chunk(IStream *stream, struct chunk_entry *chunk)
Definition: dmobject.c:307
static HRESULT stream_reset_chunk_start(IStream *stream, const struct chunk_entry *chunk)
Definition: dmobject.h:61
#define IDirectMusicTrack_Release(p)
Definition: dmplugin.h:226
#define IDirectMusicTrack_QueryInterface(p, a, b)
Definition: dmplugin.h:224
#define DMUS_FOURCC_TRACK_EXTRAS_CHUNK
Definition: dmusicf.h:143
#define DMUS_FOURCC_TRACK_CHUNK
Definition: dmusicf.h:142
#define debugstr_guid
Definition: kernel32.h:35
const GUID IID_IPersistStream
Definition: proxy.cpp:13
static HRESULT segment_append_track(struct segment *This, IDirectMusicTrack *track, DWORD group, DWORD flags)
Definition: segment.c:246
#define S_FALSE
Definition: winerror.h:3451

Referenced by parse_track_list().

◆ parse_track_list()

static HRESULT parse_track_list ( struct segment *  This,
IStream *  stream,
const struct chunk_entry *  trkl 
)
static

Definition at line 700 of file segment.c.

701{
702 struct chunk_entry chunk = {.parent = trkl};
703 HRESULT hr;
704
705 TRACE("Parsing track list in %p: %s\n", stream, debugstr_chunk(trkl));
706
707 while ((hr = stream_next_chunk(stream, &chunk)) == S_OK)
708 if (chunk.id == FOURCC_RIFF && chunk.type == DMUS_FOURCC_TRACK_FORM)
710
711 return SUCCEEDED(hr) ? S_OK : hr;
712}
#define DMUS_FOURCC_TRACK_FORM
Definition: dmusicf.h:141
static HRESULT parse_track_form(struct segment *This, IStream *stream, const struct chunk_entry *riff)
Definition: segment.c:624

Referenced by parse_dmsg_chunk().

◆ segment_AddNotificationType()

static HRESULT WINAPI segment_AddNotificationType ( IDirectMusicSegment8 *  iface,
REFGUID  rguidNotificationType 
)
static

Definition at line 339 of file segment.c.

340{
342 FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType));
343 return S_OK;
344}
const char * debugstr_dmguid(const GUID *id)
Definition: dmobject.c:36
static struct segment * impl_from_IDirectMusicSegment8(IDirectMusicSegment8 *iface)
Definition: segment.c:56

◆ segment_AddRef()

static ULONG WINAPI segment_AddRef ( IDirectMusicSegment8 *  iface)
static

Definition at line 86 of file segment.c.

87{
90
91 TRACE("(%p) ref=%ld\n", This, ref);
92
93 return ref;
94}
#define InterlockedIncrement
Definition: armddk.h:53
long LONG
Definition: pedump.c:60
Definition: send.c:48
LONG ref
Definition: segment.c:48

◆ segment_append_track()

static HRESULT segment_append_track ( struct segment *  This,
IDirectMusicTrack *  track,
DWORD  group,
DWORD  flags 
)
static

Definition at line 246 of file segment.c.

247{
248 struct track_entry *entry;
249 HRESULT hr;
250
251 if (!(entry = calloc(1, sizeof(*entry)))) return E_OUTOFMEMORY;
252 entry->dwGroupBits = group;
253 entry->flags = flags;
254 entry->pTrack = track;
256
257 hr = IDirectMusicTrack_Init(track, (IDirectMusicSegment *)&This->IDirectMusicSegment8_iface);
259 else list_add_tail(&This->tracks, &entry->entry);
260
261 return hr;
262}
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
#define IDirectMusicTrack_Init(p, a)
Definition: dmplugin.h:228
#define IDirectMusicTrack_AddRef(p)
Definition: dmplugin.h:225
GLbitfield flags
Definition: glext.h:7161
GLboolean GLuint group
Definition: glext.h:11120
uint32_t entry
Definition: isohybrid.c:63
#define calloc
Definition: rosglue.h:14
static void track_entry_destroy(struct track_entry *entry)
Definition: segment.c:33
Definition: segment.c:26
IDirectMusicTrack * track
Definition: segmentstate.c:29

Referenced by parse_track_form(), segment_Clone(), segment_InsertTrack(), and segment_persist_stream_Load().

◆ segment_Clone()

static HRESULT WINAPI segment_Clone ( IDirectMusicSegment8 *  iface,
MUSIC_TIME  start,
MUSIC_TIME  end,
IDirectMusicSegment **  segment 
)
static

Definition at line 415 of file segment.c.

417{
419 struct segment *clone;
420 IDirectMusicTrack *track;
421 struct track_entry *entry;
422 HRESULT hr = S_OK;
423
424 TRACE("(%p, %ld, %ld, %p)\n", This, start, end, segment);
425
426 if (!segment) return E_POINTER;
427
428 if (!(clone = segment_create()))
429 {
430 *segment = NULL;
431 return E_OUTOFMEMORY;
432 }
433
434 clone->header = This->header;
435 if ((clone->pGraph = This->pGraph)) IDirectMusicGraph_AddRef(clone->pGraph);
436
438 {
439 if (FAILED(hr = IDirectMusicTrack_Clone(entry->pTrack, start, end, &track))) break;
440 hr = segment_append_track(clone, track, entry->dwGroupBits, entry->flags);
442 if (FAILED(hr)) break;
443 }
444
445 *segment = (IDirectMusicSegment *)&clone->IDirectMusicSegment8_iface;
446 return FAILED(hr) ? S_FALSE : S_OK;
447}
#define IDirectMusicTrack_Clone(p, a, b, c)
Definition: dmplugin.h:237
#define IDirectMusicGraph_AddRef(p)
Definition: dmusici.h:1471
GLuint start
Definition: gl.h:1545
GLuint GLuint end
Definition: gl.h:1545
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:236
IDirectMusicSegment8 IDirectMusicSegment8_iface
Definition: segment.c:46
DMUS_IO_SEGMENT_HEADER header
Definition: segment.c:49
IDirectMusicGraph * pGraph
Definition: segment.c:50
#define E_POINTER
Definition: winerror.h:3480

◆ segment_Compose()

static HRESULT WINAPI segment_Compose ( IDirectMusicSegment8 *  iface,
MUSIC_TIME  mtTime,
IDirectMusicSegment *  pFromSegment,
IDirectMusicSegment *  pToSegment,
IDirectMusicSegment **  ppComposedSegment 
)
static

Definition at line 522 of file segment.c.

524{
526 FIXME("(%p, %ld, %p, %p, %p): stub\n", This, mtTime, pFromSegment, pToSegment, ppComposedSegment);
527 return S_OK;
528}

◆ segment_create()

static struct segment * segment_create ( void  )
static

Definition at line 860 of file segment.c.

861{
862 struct segment *obj;
863
864 if (!(obj = calloc(1, sizeof(*obj)))) return NULL;
865 obj->IDirectMusicSegment8_iface.lpVtbl = &segment_vtbl;
866 obj->ref = 1;
867 dmobject_init(&obj->dmobj, &CLSID_DirectMusicSegment, (IUnknown *)&obj->IDirectMusicSegment8_iface);
868 obj->dmobj.IDirectMusicObject_iface.lpVtbl = &segment_object_vtbl;
869 obj->dmobj.IPersistStream_iface.lpVtbl = &segment_persist_stream_vtbl;
870 list_init(&obj->tracks);
871
872 return obj;
873}
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
static const IDirectMusicSegment8Vtbl segment_vtbl
Definition: segment.c:544
static const IPersistStreamVtbl segment_persist_stream_vtbl
Definition: segment.c:848
static const IDirectMusicObjectVtbl segment_object_vtbl
Definition: segment.c:614

Referenced by create_dmsegment(), and segment_Clone().

◆ segment_Download()

static HRESULT WINAPI segment_Download ( IDirectMusicSegment8 *  iface,
IUnknown *  audio_path 
)
static

Definition at line 530 of file segment.c.

531{
533 TRACE("(%p, %p)\n", This, audio_path);
534 return IDirectMusicSegment8_SetParam(iface, &GUID_DownloadToAudioPath, -1, DMUS_SEG_ALLTRACKS, 0, audio_path);
535}
#define DMUS_SEG_ALLTRACKS
Definition: dmusici.h:317
#define IDirectMusicSegment8_SetParam(p, a, b, c, d, e)
Definition: dmusici.h:1101

◆ segment_GetAudioPathConfig()

static HRESULT WINAPI segment_GetAudioPathConfig ( IDirectMusicSegment8 *  iface,
IUnknown **  ppAudioPathConfig 
)
static

Definition at line 515 of file segment.c.

516{
518 FIXME("(%p, %p): stub\n", This, ppAudioPathConfig);
519 return S_OK;
520}

◆ segment_GetDefaultResolution()

static HRESULT WINAPI segment_GetDefaultResolution ( IDirectMusicSegment8 *  iface,
DWORD *  resolution 
)
static

Definition at line 162 of file segment.c.

163{
165
166 TRACE("(%p, %p)\n", This, resolution);
167
168 if (!resolution) return E_POINTER;
169 *resolution = This->header.dwResolution;
170
171 return S_OK;
172}

◆ segment_GetGraph()

static HRESULT WINAPI segment_GetGraph ( IDirectMusicSegment8 *  iface,
IDirectMusicGraph **  graph 
)
static

Definition at line 314 of file segment.c.

315{
317
318 FIXME("(%p, %p): semi-stub\n", This, graph);
319
320 if (!graph) return E_POINTER;
321 if (!(*graph = This->pGraph)) return DMUS_E_NOT_FOUND;
323
324 return S_OK;
325}
#define DMUS_E_NOT_FOUND
Definition: dmerror.h:109
Definition: graph.c:32

◆ segment_GetLength()

static HRESULT WINAPI segment_GetLength ( IDirectMusicSegment8 *  iface,
MUSIC_TIME *  length 
)
static

Definition at line 117 of file segment.c.

118{
120
121 TRACE("(%p, %p)\n", This, length);
122
123 if (!length) return E_POINTER;
124 *length = This->header.mtLength;
125
126 return S_OK;
127}
GLuint GLsizei GLsizei * length
Definition: glext.h:6040

◆ segment_GetLoopPoints()

static HRESULT WINAPI segment_GetLoopPoints ( IDirectMusicSegment8 *  iface,
MUSIC_TIME *  start,
MUSIC_TIME *  end 
)
static

Definition at line 486 of file segment.c.

487{
489
490 TRACE("(%p, %p, %p)\n", This, start, end);
491
492 if (!start || !end) return E_POINTER;
493 *start = This->header.mtLoopStart;
494 *end = This->header.mtLoopEnd;
495
496 return S_OK;
497}

◆ segment_GetParam()

static HRESULT WINAPI segment_GetParam ( IDirectMusicSegment8 *  iface,
REFGUID  type,
DWORD  group,
DWORD  index,
MUSIC_TIME  time,
MUSIC_TIME *  next,
void *  param 
)
static

Definition at line 353 of file segment.c.

355{
357 IDirectMusicTrack *track;
358 unsigned int i, count;
360
361 TRACE("(%p, %s, %#lx, %lu, %ld, %p, %p)\n", This, debugstr_dmguid(type), group, index, time,
362 next, param);
363
364 if (!type)
365 return E_POINTER;
366
367 /* Index is relative to the search pattern: group bits and supported param type */
368 for (i = 0, count = 0; i < DMUS_SEG_ANYTRACK && count <= index; i++) {
369 if (FAILED(segment_GetTrack(iface, &GUID_NULL, group, i, &track))) break;
371 {
373 continue;
374 }
375 if (index == count || index == DMUS_SEG_ANYTRACK)
378
379 if (SUCCEEDED(hr))
380 return hr;
381 count++;
382 }
383
384 TRACE("(%p): not found\n", This);
385
386 return hr;
387}
#define index(s, c)
Definition: various.h:29
#define IDirectMusicTrack_GetParam(p, a, b, c, d)
Definition: dmplugin.h:232
#define IDirectMusicTrack_IsParamSupported(p, a)
Definition: dmplugin.h:234
#define DMUS_SEG_ANYTRACK
Definition: dmusici.h:318
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLuint index
Definition: glext.h:6031
GLfloat param
Definition: glext.h:5796
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
#define GUID_NULL
Definition: ks.h:106
__u16 time
Definition: mkdosfs.c:8
static unsigned __int64 next
Definition: rand_nt.c:6
static HRESULT WINAPI segment_GetTrack(IDirectMusicSegment8 *iface, REFGUID type, DWORD group, DWORD index, IDirectMusicTrack **ret_track)
Definition: segment.c:184

◆ segment_GetRepeats()

static HRESULT WINAPI segment_GetRepeats ( IDirectMusicSegment8 *  iface,
DWORD *  repeats 
)
static

Definition at line 140 of file segment.c.

141{
143
144 TRACE("(%p, %p)\n", This, repeats);
145
146 if (!repeats) return E_POINTER;
147 *repeats = This->header.dwRepeats;
148
149 return S_OK;
150}

◆ segment_GetStartPoint()

static HRESULT WINAPI segment_GetStartPoint ( IDirectMusicSegment8 *  iface,
MUSIC_TIME *  start 
)
static

Definition at line 461 of file segment.c.

462{
464
465 TRACE("(%p, %p)\n", This, start);
466 if (!start) return E_POINTER;
467 *start = This->header.mtPlayStart;
468
469 return S_OK;
470}

◆ segment_GetTrack()

static HRESULT WINAPI segment_GetTrack ( IDirectMusicSegment8 *  iface,
REFGUID  type,
DWORD  group,
DWORD  index,
IDirectMusicTrack **  ret_track 
)
static

Definition at line 184 of file segment.c.

186{
188 struct track_entry *entry;
189 HRESULT hr = S_OK;
190
191 TRACE("(%p, %s, %#lx, %#lx, %p)\n", This, debugstr_dmguid(type), group, index, ret_track);
192
193 if (!ret_track) return E_POINTER;
194
196 {
197 if (group != -1 && !(entry->dwGroupBits & group)) continue;
198
199 if (!IsEqualGUID(&GUID_NULL, type))
200 {
201 CLSID entry_type = GUID_NULL;
202 IPersistStream *persist;
203
204 if (SUCCEEDED(hr = IDirectMusicTrack_QueryInterface(entry->pTrack, &IID_IPersistStream, (void **)&persist)))
205 {
206 hr = IPersistStream_GetClassID(persist, &entry_type);
207 if (SUCCEEDED(hr)) TRACE(" - %p -> %s\n", entry, debugstr_dmguid(&entry_type));
208 IPersistStream_Release(persist);
209 }
210
211 if (!IsEqualGUID(&entry_type, type)) continue;
212 }
213
214 if (!index--)
215 {
216 *ret_track = entry->pTrack;
218 return S_OK;
219 }
220 }
221
222 return DMUS_E_NOT_FOUND;
223}
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147

Referenced by segment_GetParam().

◆ segment_GetTrackGroup()

static HRESULT WINAPI segment_GetTrackGroup ( IDirectMusicSegment8 *  iface,
IDirectMusicTrack *  track,
DWORD *  ret_group 
)
static

Definition at line 225 of file segment.c.

226{
228 struct track_entry *entry;
229
230 TRACE("(%p, %p, %p)\n", This, track, ret_group);
231
232 if (!ret_group) return E_POINTER;
233
235 {
236 if (entry->pTrack == track)
237 {
238 *ret_group = entry->dwGroupBits;
239 return S_OK;
240 }
241 }
242
243 return DMUS_E_NOT_FOUND;
244}

◆ segment_InitPlay()

static HRESULT WINAPI segment_InitPlay ( IDirectMusicSegment8 *  iface,
IDirectMusicSegmentState **  state,
IDirectMusicPerformance *  performance,
DWORD  flags 
)
static

Definition at line 299 of file segment.c.

301{
303 HRESULT hr;
304
305 FIXME("(%p, %p, %p, %ld): semi-stub\n", This, state, performance, flags);
306
307 if (!state) return E_POINTER;
308 if (FAILED(hr = create_dmsegmentstate(&IID_IDirectMusicSegmentState, (void **)state))) return hr;
309
310 /* TODO: DMUS_SEGF_FLAGS */
311 return S_OK;
312}
static int state
Definition: maze.c:121
HRESULT create_dmsegmentstate(REFIID riid, void **ret_iface)
Definition: segmentstate.c:293

◆ segment_InsertTrack()

static HRESULT WINAPI segment_InsertTrack ( IDirectMusicSegment8 *  iface,
IDirectMusicTrack *  track,
DWORD  group 
)
static

Definition at line 264 of file segment.c.

265{
267 struct track_entry *entry;
268
269 TRACE("(%p, %p, %#lx)\n", This, track, group);
270
271 if (!group) return E_INVALIDARG;
272
274 if (entry->pTrack == track) return E_FAIL;
275
277}
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_FAIL
Definition: ddrawi.h:102

◆ segment_object_ParseDescriptor()

static HRESULT WINAPI segment_object_ParseDescriptor ( IDirectMusicObject *  iface,
IStream *  stream,
DMUS_OBJECTDESC *  desc 
)
static

Definition at line 579 of file segment.c.

580{
581 struct chunk_entry riff = {0};
583 HRESULT hr;
584
585 TRACE("(%p, %p, %p)\n", iface, stream, desc);
586
587 if (!stream || !desc)
588 return E_POINTER;
589
590 if ((hr = stream_get_chunk(stream, &riff)) != S_OK)
591 return hr;
592 if (riff.id != FOURCC_RIFF || !(riff.type == DMUS_FOURCC_SEGMENT_FORM ||
593 riff.type == mmioFOURCC('W','A','V','E'))) {
594 TRACE("loading failed: unexpected %s\n", debugstr_chunk(&riff));
596 return E_FAIL;
597 }
598
599 if (riff.type == DMUS_FOURCC_SEGMENT_FORM)
600 supported |= DMUS_OBJ_NAME | DMUS_OBJ_CATEGORY;
601 else
602 supported |= DMUS_OBJ_NAME_INFO;
603 hr = dmobj_parsedescriptor(stream, &riff, desc, supported);
604 if (FAILED(hr))
605 return hr;
606
607 desc->guidClass = CLSID_DirectMusicSegment;
608 desc->dwValidData |= DMUS_OBJ_CLASS;
609
611 return S_OK;
612}
void dump_DMUS_OBJECTDESC(DMUS_OBJECTDESC *desc)
Definition: dmobject.c:222
HRESULT stream_skip_chunk(IStream *stream, const struct chunk_entry *chunk)
Definition: dmobject.c:351
#define DMUS_OBJ_NAME_INFO
Definition: dmobject.h:97
#define DMUS_FOURCC_SEGMENT_FORM
Definition: dmusicf.h:114
#define DMUS_OBJ_CLASS
Definition: dmusici.h:266
#define DMUS_OBJ_VERSION
Definition: dmusici.h:272
#define DMUS_OBJ_OBJECT
Definition: dmusici.h:265
unsigned long DWORD
Definition: ntddk_ex.h:95
#define mmioFOURCC(c0, c1, c2, c3)
Definition: mmsystem.h:38
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1683
FOURCC id
Definition: dmobject.h:27
FOURCC type
Definition: dmobject.h:29

◆ segment_persist_stream_Load()

static HRESULT WINAPI segment_persist_stream_Load ( IPersistStream *  iface,
IStream *  stream 
)
static

Definition at line 791 of file segment.c.

792{
793 struct segment *This = impl_from_IPersistStream(iface);
794 struct chunk_entry chunk = {0};
795 HRESULT hr;
796
797 TRACE("(%p, %p): Loading\n", This, stream);
798
799 if (!stream) return E_POINTER;
800
801 if ((hr = stream_get_chunk(stream, &chunk)) == S_OK)
802 {
803 switch (MAKE_IDTYPE(chunk.id, chunk.type))
804 {
807 break;
808
809 case mmioFOURCC('M','T','h','d'):
810 hr = parse_midi(stream, &This->IDirectMusicSegment8_iface);
811 break;
812
813 case MAKE_IDTYPE(FOURCC_RIFF, mmioFOURCC('W','A','V','E')):
814 {
815 IDirectMusicTrack8 *track;
816
817 TRACE("Loading segment %p from wave file\n", This);
818
819 This->header.mtLength = 1;
820 if (FAILED(hr = wave_track_create_from_chunk(stream, &chunk, &track))) break;
821 hr = segment_append_track(This, (IDirectMusicTrack *)track, 1, 0);
823 break;
824 }
825
826 default:
827 WARN("Invalid segment chunk %s %s\n", debugstr_fourcc(chunk.id), debugstr_fourcc(chunk.type));
829 break;
830 }
831 }
832
833 if (chunk.id != mmioFOURCC('M', 'T', 'h', 'd'))
835
836 if (FAILED(hr))
837 {
838 WARN("Failed to load segment from stream %p, hr %#lx\n", stream, hr);
840 }
841
842 This->dmobj.desc.guidClass = CLSID_DirectMusicSegment;
843 This->dmobj.desc.dwValidData |= DMUS_OBJ_CLASS;
844
845 return S_OK;
846}
#define DMUS_E_UNSUPPORTED_STREAM
Definition: dmerror.h:100
HRESULT parse_midi(IStream *stream, IDirectMusicSegment8 *segment)
Definition: midi.c:483
HRESULT wave_track_create_from_chunk(IStream *stream, struct chunk_entry *parent, IDirectMusicTrack8 **ret_iface)
Definition: wavetrack.c:605
#define MAKE_IDTYPE(id, type)
Definition: dmobject.h:33
#define IDirectMusicTrack8_Release(p)
Definition: dmplugin.h:275
static HRESULT parse_dmsg_chunk(struct segment *This, IStream *stream, const struct chunk_entry *riff)
Definition: segment.c:742
static struct segment * impl_from_IPersistStream(IPersistStream *iface)
Definition: segment.c:786

◆ segment_QueryInterface()

static HRESULT WINAPI segment_QueryInterface ( IDirectMusicSegment8 *  iface,
REFIID  riid,
void **  ret_iface 
)
static

Definition at line 61 of file segment.c.

62{
64
65 TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface);
66
67 *ret_iface = NULL;
68
69 if (IsEqualIID (riid, &IID_IUnknown) || IsEqualIID (riid, &IID_IDirectMusicSegment) ||
70 IsEqualIID(riid, &IID_IDirectMusicSegment2) ||
71 IsEqualIID (riid, &IID_IDirectMusicSegment8))
72 *ret_iface = iface;
73 else if (IsEqualIID (riid, &IID_IDirectMusicObject))
74 *ret_iface = &This->dmobj.IDirectMusicObject_iface;
76 *ret_iface = &This->dmobj.IPersistStream_iface;
77 else {
78 WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface);
79 return E_NOINTERFACE;
80 }
81
82 IUnknown_AddRef((IUnknown*)*ret_iface);
83 return S_OK;
84}
const GUID IID_IUnknown
REFIID riid
Definition: atlbase.h:39
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ segment_Release()

static ULONG WINAPI segment_Release ( IDirectMusicSegment8 *  iface)
static

Definition at line 96 of file segment.c.

97{
100
101 TRACE("(%p) ref=%ld\n", This, ref);
102
103 if (!ref) {
104 struct track_entry *entry, *next;
105
107 {
108 list_remove(&entry->entry);
110 }
111 free(This);
112 }
113
114 return ref;
115}
#define InterlockedDecrement
Definition: armddk.h:52
static void list_remove(struct list_entry *entry)
Definition: list.h:90
#define free
Definition: debug_ros.c:5
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:242

◆ segment_RemoveNotificationType()

static HRESULT WINAPI segment_RemoveNotificationType ( IDirectMusicSegment8 *  iface,
REFGUID  rguidNotificationType 
)
static

Definition at line 346 of file segment.c.

347{
349 FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType));
350 return S_OK;
351}

◆ segment_RemoveTrack()

static HRESULT WINAPI segment_RemoveTrack ( IDirectMusicSegment8 *  iface,
IDirectMusicTrack *  track 
)
static

Definition at line 279 of file segment.c.

280{
282 struct track_entry *entry;
283
284 TRACE("(%p, %p)\n", This, track);
285
287 {
288 if (entry->pTrack == track)
289 {
290 list_remove(&entry->entry);
292 return S_OK;
293 }
294 }
295
296 return S_FALSE;
297}

◆ segment_SetDefaultResolution()

static HRESULT WINAPI segment_SetDefaultResolution ( IDirectMusicSegment8 *  iface,
DWORD  resolution 
)
static

Definition at line 174 of file segment.c.

175{
177
178 TRACE("(%p, %ld)\n", This, resolution);
179 This->header.dwResolution = resolution;
180
181 return S_OK;
182}

◆ segment_SetGraph()

static HRESULT WINAPI segment_SetGraph ( IDirectMusicSegment8 *  iface,
IDirectMusicGraph *  graph 
)
static

Definition at line 327 of file segment.c.

328{
330
331 FIXME("(%p, %p): to complete\n", This, graph);
332
333 if (This->pGraph) IDirectMusicGraph_Release(This->pGraph);
334 if ((This->pGraph = graph)) IDirectMusicGraph_AddRef(This->pGraph);
335
336 return S_OK;
337}
#define IDirectMusicGraph_Release(p)
Definition: dmusici.h:1472

◆ segment_SetLength()

static HRESULT WINAPI segment_SetLength ( IDirectMusicSegment8 *  iface,
MUSIC_TIME  length 
)
static

Definition at line 129 of file segment.c.

130{
132
133 TRACE("(%p, %ld)\n", This, length);
134
135 This->header.mtLength = length;
136
137 return S_OK;
138}

◆ segment_SetLoopPoints()

static HRESULT WINAPI segment_SetLoopPoints ( IDirectMusicSegment8 *  iface,
MUSIC_TIME  start,
MUSIC_TIME  end 
)
static

Definition at line 472 of file segment.c.

473{
475
476 TRACE("(%p, %ld, %ld)\n", This, start, end);
477
478 if ((end || start) && (start >= This->header.mtLength || end > This->header.mtLength || start > end))
479 return DMUS_E_OUT_OF_RANGE;
480 This->header.mtLoopStart = start;
481 This->header.mtLoopEnd = end;
482
483 return S_OK;
484}
#define DMUS_E_OUT_OF_RANGE
Definition: dmerror.h:126

◆ segment_SetParam()

static HRESULT WINAPI segment_SetParam ( IDirectMusicSegment8 *  iface,
REFGUID  type,
DWORD  group,
DWORD  index,
MUSIC_TIME  music_time,
void *  param 
)
static

Definition at line 389 of file segment.c.

391{
393 struct track_entry *entry;
394 HRESULT hr;
395
396 TRACE("(%p, %s, %#lx, %ld, %ld, %p)\n", This, debugstr_dmguid(type), group,
397 index, music_time, param);
398
400 {
401 if (group != -1)
402 {
403 if (!(group & entry->dwGroupBits)) continue;
404 if (index != DMUS_SEG_ALLTRACKS && index--) continue;
405 }
406
408 && FAILED(hr = IDirectMusicTrack_SetParam(entry->pTrack, type, music_time, param)))
409 WARN("SetParam for track %p failed, hr %#lx\n", entry->pTrack, hr);
410 }
411
412 return S_OK;
413}
#define IDirectMusicTrack_SetParam(p, a, b, c)
Definition: dmplugin.h:233

◆ segment_SetPChannelsUsed()

static HRESULT WINAPI segment_SetPChannelsUsed ( IDirectMusicSegment8 *  iface,
DWORD  dwNumPChannels,
DWORD *  paPChannels 
)
static

Definition at line 499 of file segment.c.

500{
502 FIXME("(%p, %ld, %p): stub\n", This, dwNumPChannels, paPChannels);
503 return S_OK;
504}

◆ segment_SetRepeats()

static HRESULT WINAPI segment_SetRepeats ( IDirectMusicSegment8 *  iface,
DWORD  repeats 
)
static

Definition at line 152 of file segment.c.

153{
155
156 TRACE("(%p, %ld)\n", This, repeats);
157 This->header.dwRepeats = repeats;
158
159 return S_OK;
160}

◆ segment_SetStartPoint()

static HRESULT WINAPI segment_SetStartPoint ( IDirectMusicSegment8 *  iface,
MUSIC_TIME  start 
)
static

Definition at line 449 of file segment.c.

450{
452
453 TRACE("(%p, %ld)\n", This, start);
454
455 if (start >= This->header.mtLength) return DMUS_E_OUT_OF_RANGE;
456 This->header.mtPlayStart = start;
457
458 return S_OK;
459}

◆ segment_SetTrackConfig()

static HRESULT WINAPI segment_SetTrackConfig ( IDirectMusicSegment8 *  iface,
REFGUID  rguidTrackClassID,
DWORD  dwGroupBits,
DWORD  dwIndex,
DWORD  dwFlagsOn,
DWORD  dwFlagsOff 
)
static

Definition at line 506 of file segment.c.

508{
510 FIXME("(%p, %s, %#lx, %ld, %ld, %ld): stub\n", This, debugstr_dmguid(rguidTrackClassID),
511 dwGroupBits, dwIndex, dwFlagsOn, dwFlagsOff);
512 return S_OK;
513}

◆ segment_Unload()

static HRESULT WINAPI segment_Unload ( IDirectMusicSegment8 *  iface,
IUnknown *  audio_path 
)
static

Definition at line 537 of file segment.c.

538{
540 TRACE("(%p, %p)\n", This, audio_path);
541 return IDirectMusicSegment8_SetParam(iface, &GUID_UnloadFromAudioPath, -1, DMUS_SEG_ALLTRACKS, 0, audio_path);
542}

◆ track_entry_destroy()

static void track_entry_destroy ( struct track_entry *  entry)
static

Definition at line 33 of file segment.c.

34{
35 HRESULT hr;
36
37 if (FAILED(hr = IDirectMusicTrack_Init(entry->pTrack, NULL)))
38 WARN("Failed to de-init track %p, hr %#lx\n", entry->pTrack, hr);
40
41 free(entry);
42}

Referenced by segment_append_track(), segment_Release(), and segment_RemoveTrack().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( dmime  )

Variable Documentation

◆ segment_object_vtbl

const IDirectMusicObjectVtbl segment_object_vtbl
static
Initial value:
=
{
}
HRESULT WINAPI dmobj_IDirectMusicObject_GetDescriptor(IDirectMusicObject *iface, DMUS_OBJECTDESC *desc)
Definition: dmobject.c:503
ULONG WINAPI dmobj_IDirectMusicObject_Release(IDirectMusicObject *iface)
Definition: dmobject.c:497
HRESULT WINAPI dmobj_IDirectMusicObject_QueryInterface(IDirectMusicObject *iface, REFIID riid, void **ret_iface)
Definition: dmobject.c:484
HRESULT WINAPI dmobj_IDirectMusicObject_SetDescriptor(IDirectMusicObject *iface, DMUS_OBJECTDESC *desc)
Definition: dmobject.c:518
ULONG WINAPI dmobj_IDirectMusicObject_AddRef(IDirectMusicObject *iface)
Definition: dmobject.c:491
static HRESULT WINAPI segment_object_ParseDescriptor(IDirectMusicObject *iface, IStream *stream, DMUS_OBJECTDESC *desc)
Definition: segment.c:579

Definition at line 614 of file segment.c.

Referenced by segment_create().

◆ segment_persist_stream_vtbl

const IPersistStreamVtbl segment_persist_stream_vtbl
static
Initial value:
=
{
}
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
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
static HRESULT WINAPI segment_persist_stream_Load(IPersistStream *iface, IStream *stream)
Definition: segment.c:791

Definition at line 848 of file segment.c.

Referenced by segment_create().

◆ segment_vtbl

const IDirectMusicSegment8Vtbl segment_vtbl
static

Definition at line 544 of file segment.c.

Referenced by segment_create().