Signed-off-by: Alistair Leslie-Hughes leslie_alistair@hotmail.com --- dlls/dmime/dmime_private.h | 2 ++ dlls/dmime/segment.c | 11 +++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/dlls/dmime/dmime_private.h b/dlls/dmime/dmime_private.h index 576ebc1ae8..020c1660cb 100644 --- a/dlls/dmime/dmime_private.h +++ b/dlls/dmime/dmime_private.h @@ -77,6 +77,8 @@ extern void set_audiopath_primary_dsound_buffer(IDirectMusicAudioPath*,IDirectSo typedef struct _DMUS_PRIVATE_SEGMENT_TRACK { struct list entry; /* for listing elements */ DWORD dwGroupBits; + DWORD flags; + DWORD priority; IDirectMusicTrack* pTrack; } DMUS_PRIVATE_SEGMENT_TRACK, *LPDMUS_PRIVATE_SEGMENT_TRACK;
diff --git a/dlls/dmime/segment.c b/dlls/dmime/segment.c index cfc67a7757..0fdfb2a10a 100644 --- a/dlls/dmime/segment.c +++ b/dlls/dmime/segment.c @@ -630,7 +630,8 @@ static HRESULT parse_track_form(IDirectMusicSegment8Impl *This, IStream *stream, IPersistStream *ps = NULL; IStream *clone; DMUS_IO_TRACK_HEADER thdr; - DMUS_IO_TRACK_EXTRAS_HEADER txhdr; + DMUS_IO_TRACK_EXTRAS_HEADER txhdr = {0}; + LPDMUS_PRIVATE_SEGMENT_TRACK item; HRESULT hr;
TRACE("Parsing track form in %p: %s\n", stream, debugstr_chunk(riff)); @@ -663,7 +664,6 @@ static HRESULT parse_track_form(IDirectMusicSegment8Impl *This, IStream *stream,
if (chunk.id == DMUS_FOURCC_TRACK_EXTRAS_CHUNK && SUCCEEDED(stream_chunk_get_data(stream, &chunk, &txhdr, sizeof(txhdr)))) { - FIXME("DMUS_IO_TRACK_EXTRAS_HEADER chunk not handled\n"); TRACE("dwFlags: %#x, dwPriority: %u\n", txhdr.dwFlags, txhdr.dwPriority); } } @@ -688,7 +688,14 @@ static HRESULT parse_track_form(IDirectMusicSegment8Impl *This, IStream *stream, goto done;
hr = IDirectMusicSegment8_InsertTrack(&This->IDirectMusicSegment8_iface, track, thdr.dwGroup); + if (FAILED(hr)) + goto done;
+ item = get_track_entry(This, &thdr.guidClassID, thdr.dwGroup, 0); + if (item) { + item->flags = txhdr.dwFlags; + item->priority = txhdr.dwPriority; + } done: if (ps) IPersistStream_Release(ps);
Hello AListair,
do you have more in this series? I had looked into this and it didn't seem that simple so I have settled to just do commit 4ccdf3e58a8.
Most likely the flags should be set with IDirectMusicSegment8::SetTrackConfig() as the documentation of DMUS_IO_TRACK_EXTRAS_HEADER alludes too. Also while that stuff is for a track it needs to be duplicated to a SegmentState; see the Remarks in http://doc.51windows.net/Directx9_SDK/htm/idirectmusicsegment8settrackconfig... And there's http://doc.51windows.net/directx9_sdk/htm/idirectmusicsegmentstate8settrackc...
And no clue what the dwPriority is for. The only priority stuff I can find is for the channels.
So most likely we will need a helper for InsertTrack() that either returns the index in the corresponding group or a LPDMUS_PRIVATE_SEGMENT_TRACK. But I wouldn't bother to store the info if we don't know how to use it.
bye michael
On 3/25/20 12:17 PM, Alistair Leslie-Hughes wrote:
Signed-off-by: Alistair Leslie-Hughes leslie_alistair@hotmail.com
dlls/dmime/dmime_private.h | 2 ++ dlls/dmime/segment.c | 11 +++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/dlls/dmime/dmime_private.h b/dlls/dmime/dmime_private.h index 576ebc1ae8..020c1660cb 100644 --- a/dlls/dmime/dmime_private.h +++ b/dlls/dmime/dmime_private.h @@ -77,6 +77,8 @@ extern void set_audiopath_primary_dsound_buffer(IDirectMusicAudioPath*,IDirectSo typedef struct _DMUS_PRIVATE_SEGMENT_TRACK { struct list entry; /* for listing elements */ DWORD dwGroupBits;
- DWORD flags;
- DWORD priority; IDirectMusicTrack* pTrack;
} DMUS_PRIVATE_SEGMENT_TRACK, *LPDMUS_PRIVATE_SEGMENT_TRACK;
diff --git a/dlls/dmime/segment.c b/dlls/dmime/segment.c index cfc67a7757..0fdfb2a10a 100644 --- a/dlls/dmime/segment.c +++ b/dlls/dmime/segment.c @@ -630,7 +630,8 @@ static HRESULT parse_track_form(IDirectMusicSegment8Impl *This, IStream *stream, IPersistStream *ps = NULL; IStream *clone; DMUS_IO_TRACK_HEADER thdr;
- DMUS_IO_TRACK_EXTRAS_HEADER txhdr;
DMUS_IO_TRACK_EXTRAS_HEADER txhdr = {0};
LPDMUS_PRIVATE_SEGMENT_TRACK item; HRESULT hr;
TRACE("Parsing track form in %p: %s\n", stream, debugstr_chunk(riff));
@@ -663,7 +664,6 @@ static HRESULT parse_track_form(IDirectMusicSegment8Impl *This, IStream *stream,
if (chunk.id == DMUS_FOURCC_TRACK_EXTRAS_CHUNK && SUCCEEDED(stream_chunk_get_data(stream, &chunk, &txhdr, sizeof(txhdr)))) {
}FIXME("DMUS_IO_TRACK_EXTRAS_HEADER chunk not handled\n"); TRACE("dwFlags: %#x, dwPriority: %u\n", txhdr.dwFlags, txhdr.dwPriority); }
@@ -688,7 +688,14 @@ static HRESULT parse_track_form(IDirectMusicSegment8Impl *This, IStream *stream, goto done;
hr = IDirectMusicSegment8_InsertTrack(&This->IDirectMusicSegment8_iface, track, thdr.dwGroup);
if (FAILED(hr))
goto done;
item = get_track_entry(This, &thdr.guidClassID, thdr.dwGroup, 0);
if (item) {
item->flags = txhdr.dwFlags;
item->priority = txhdr.dwPriority;
}
done: if (ps) IPersistStream_Release(ps);
On 3/25/20 10:44 PM, Michael Stefaniuc wrote:
Hello AListair,
do you have more in this series? I had looked into this and it didn't seem that simple so I have settled to just do commit 4ccdf3e58a8.
Most likely the flags should be set with IDirectMusicSegment8::SetTrackConfig() as the documentation of DMUS_IO_TRACK_EXTRAS_HEADER alludes too. Also while that stuff is for a track it needs to be duplicated to a SegmentState; see the Remarks in http://doc.51windows.net/Directx9_SDK/htm/idirectmusicsegment8settrackconfig... And there's http://doc.51windows.net/directx9_sdk/htm/idirectmusicsegmentstate8settrackc...
And no clue what the dwPriority is for. The only priority stuff I can find is for the channels.
So most likely we will need a helper for InsertTrack() that either returns the index in the corresponding group or a LPDMUS_PRIVATE_SEGMENT_TRACK.
Scratch that, just to a list_tail(&This->Tracks). Less ugly and more correct then the alternatives if you need the LPDMUS_PRIVATE_SEGMENT_TRACK.
But I wouldn't bother to store the info if we don't know how to use it.
This still remains valid.
bye michael
On 3/25/20 12:17 PM, Alistair Leslie-Hughes wrote:
Signed-off-by: Alistair Leslie-Hughes leslie_alistair@hotmail.com
dlls/dmime/dmime_private.h | 2 ++ dlls/dmime/segment.c | 11 +++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/dlls/dmime/dmime_private.h b/dlls/dmime/dmime_private.h index 576ebc1ae8..020c1660cb 100644 --- a/dlls/dmime/dmime_private.h +++ b/dlls/dmime/dmime_private.h @@ -77,6 +77,8 @@ extern void set_audiopath_primary_dsound_buffer(IDirectMusicAudioPath*,IDirectSo typedef struct _DMUS_PRIVATE_SEGMENT_TRACK { struct list entry; /* for listing elements */ DWORD dwGroupBits;
- DWORD flags;
- DWORD priority; IDirectMusicTrack* pTrack;
} DMUS_PRIVATE_SEGMENT_TRACK, *LPDMUS_PRIVATE_SEGMENT_TRACK;
diff --git a/dlls/dmime/segment.c b/dlls/dmime/segment.c index cfc67a7757..0fdfb2a10a 100644 --- a/dlls/dmime/segment.c +++ b/dlls/dmime/segment.c @@ -630,7 +630,8 @@ static HRESULT parse_track_form(IDirectMusicSegment8Impl *This, IStream *stream, IPersistStream *ps = NULL; IStream *clone; DMUS_IO_TRACK_HEADER thdr;
- DMUS_IO_TRACK_EXTRAS_HEADER txhdr;
DMUS_IO_TRACK_EXTRAS_HEADER txhdr = {0};
LPDMUS_PRIVATE_SEGMENT_TRACK item; HRESULT hr;
TRACE("Parsing track form in %p: %s\n", stream, debugstr_chunk(riff));
@@ -663,7 +664,6 @@ static HRESULT parse_track_form(IDirectMusicSegment8Impl *This, IStream *stream,
if (chunk.id == DMUS_FOURCC_TRACK_EXTRAS_CHUNK && SUCCEEDED(stream_chunk_get_data(stream, &chunk, &txhdr, sizeof(txhdr)))) {
}FIXME("DMUS_IO_TRACK_EXTRAS_HEADER chunk not handled\n"); TRACE("dwFlags: %#x, dwPriority: %u\n", txhdr.dwFlags, txhdr.dwPriority); }
@@ -688,7 +688,14 @@ static HRESULT parse_track_form(IDirectMusicSegment8Impl *This, IStream *stream, goto done;
hr = IDirectMusicSegment8_InsertTrack(&This->IDirectMusicSegment8_iface, track, thdr.dwGroup);
if (FAILED(hr))
goto done;
item = get_track_entry(This, &thdr.guidClassID, thdr.dwGroup, 0);
if (item) {
item->flags = txhdr.dwFlags;
item->priority = txhdr.dwPriority;
}
done: if (ps) IPersistStream_Release(ps);
Hi Michael,
On 26/3/20 8:44 am, Michael Stefaniuc wrote:
Hello AListair,
do you have more in this series?
Not at this stage, but the next one was going to be SetTrackConfig, which will require at least the flags to be stored.
And no clue what the dwPriority is for. The only priority stuff I can find is for the channels.
I noticed that as well, there isn't much documentation about dwPriority but thought to store as well, so the fixme could be removed.
So most likely we will need a helper for InsertTrack() that either returns the index in the corresponding group or a LPDMUS_PRIVATE_SEGMENT_TRACK. But I wouldn't bother to store the info if we don't know how to use it.
I agree, a helper for InsertTrack would be useful. The storing of flags makes sense to me at least, eg. DMUS_TRACKCONFIG_PLAY_ENABLED, as they should be used once track looping is implemented.
Regards Alistair.