Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
442db8a1
Commit
442db8a1
authored
Oct 25, 2023
by
Rémi Bernon
Committed by
Alexandre Julliard
Nov 07, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dmime: Send notification messages from segment_play_chunk.
parent
56043971
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
40 additions
and
29 deletions
+40
-29
dmime_private.h
dlls/dmime/dmime_private.h
+2
-0
performance.c
dlls/dmime/performance.c
+17
-21
segmentstate.c
dlls/dmime/segmentstate.c
+18
-4
dmime.c
dlls/dmime/tests/dmime.c
+3
-4
No files found.
dlls/dmime/dmime_private.h
View file @
442db8a1
...
...
@@ -82,6 +82,8 @@ extern HRESULT wave_track_create_from_chunk(IStream *stream, struct chunk_entry
IDirectMusicTrack8
**
ret_iface
);
extern
HRESULT
performance_get_dsound
(
IDirectMusicPerformance8
*
iface
,
IDirectSound
**
dsound
);
extern
HRESULT
performance_send_segment_start
(
IDirectMusicPerformance8
*
iface
,
MUSIC_TIME
music_time
,
IDirectMusicSegmentState
*
state
);
extern
HRESULT
performance_send_segment_tick
(
IDirectMusicPerformance8
*
iface
,
MUSIC_TIME
music_time
,
IDirectMusicSegmentState
*
state
);
extern
HRESULT
performance_send_segment_end
(
IDirectMusicPerformance8
*
iface
,
MUSIC_TIME
music_time
,
...
...
dlls/dmime/performance.c
View file @
442db8a1
...
...
@@ -276,7 +276,7 @@ static inline struct performance *impl_from_IDirectMusicPerformance8(IDirectMusi
return
CONTAINING_RECORD
(
iface
,
struct
performance
,
IDirectMusicPerformance8_iface
);
}
static
HRESULT
performance_send_segment_start
(
IDirectMusicPerformance8
*
iface
,
MUSIC_TIME
music_time
,
HRESULT
performance_send_segment_start
(
IDirectMusicPerformance8
*
iface
,
MUSIC_TIME
music_time
,
IDirectMusicSegmentState
*
state
)
{
struct
performance
*
This
=
impl_from_IDirectMusicPerformance8
(
iface
);
...
...
@@ -319,6 +319,18 @@ HRESULT performance_send_segment_end(IDirectMusicPerformance8 *iface, MUSIC_TIME
struct
performance
*
This
=
impl_from_IDirectMusicPerformance8
(
iface
);
HRESULT
hr
;
if
(
FAILED
(
hr
=
performance_send_notification_pmsg
(
This
,
music_time
-
1450
,
This
->
notification_segment
,
GUID_NOTIFICATION_SEGMENT
,
DMUS_NOTIFICATION_SEGALMOSTEND
,
(
IUnknown
*
)
state
)))
return
hr
;
if
(
FAILED
(
hr
=
performance_send_notification_pmsg
(
This
,
music_time
,
This
->
notification_segment
,
GUID_NOTIFICATION_SEGMENT
,
DMUS_NOTIFICATION_SEGEND
,
(
IUnknown
*
)
state
)))
return
hr
;
if
(
FAILED
(
hr
=
performance_send_pmsg
(
This
,
music_time
,
DMUS_PMSGF_TOOL_IMMEDIATE
,
DMUS_PMSGT_DIRTY
,
NULL
)))
return
hr
;
if
(
FAILED
(
hr
=
performance_send_notification_pmsg
(
This
,
music_time
,
This
->
notification_performance
,
GUID_NOTIFICATION_PERFORMANCE
,
DMUS_NOTIFICATION_MUSICSTOPPED
,
NULL
)))
return
hr
;
if
(
FAILED
(
hr
=
performance_send_pmsg
(
This
,
music_time
,
DMUS_PMSGF_TOOL_ATTIME
,
DMUS_PMSGT_INTERNAL_SEGMENT_END
,
(
IUnknown
*
)
state
)))
return
hr
;
...
...
@@ -1253,8 +1265,8 @@ static HRESULT WINAPI performance_PlaySegmentEx(IDirectMusicPerformance8 *iface,
{
struct
performance
*
This
=
impl_from_IDirectMusicPerformance8
(
iface
);
IDirectMusicSegmentState
*
state
;
MUSIC_TIME
length
,
music_time
;
IDirectMusicSegment
*
segment
;
MUSIC_TIME
music_time
;
HRESULT
hr
;
FIXME
(
"(%p, %p, %s, %p, %#lx, %I64d, %p, %p, %p): stub
\n
"
,
This
,
source
,
debugstr_w
(
segment_name
),
...
...
@@ -1275,25 +1287,9 @@ static HRESULT WINAPI performance_PlaySegmentEx(IDirectMusicPerformance8 *iface,
EnterCriticalSection
(
&
This
->
safe
);
hr
=
IDirectMusicSegment_GetLength
(
segment
,
&
length
);
if
(
SUCCEEDED
(
hr
))
hr
=
performance_send_segment_start
(
iface
,
music_time
,
state
);
if
(
SUCCEEDED
(
hr
))
hr
=
segment_state_play
(
state
,
iface
);
if
(
SUCCEEDED
(
hr
))
hr
=
performance_send_notification_pmsg
(
This
,
music_time
+
length
-
1450
,
This
->
notification_segment
,
GUID_NOTIFICATION_SEGMENT
,
DMUS_NOTIFICATION_SEGALMOSTEND
,
(
IUnknown
*
)
state
);
if
(
SUCCEEDED
(
hr
))
hr
=
performance_send_notification_pmsg
(
This
,
music_time
+
length
,
This
->
notification_segment
,
GUID_NOTIFICATION_SEGMENT
,
DMUS_NOTIFICATION_SEGEND
,
(
IUnknown
*
)
state
);
if
(
SUCCEEDED
(
hr
))
hr
=
performance_send_pmsg
(
This
,
music_time
+
length
,
DMUS_PMSGF_TOOL_IMMEDIATE
,
DMUS_PMSGT_DIRTY
,
NULL
);
if
(
SUCCEEDED
(
hr
))
hr
=
performance_send_notification_pmsg
(
This
,
music_time
+
length
,
This
->
notification_performance
,
GUID_NOTIFICATION_PERFORMANCE
,
DMUS_NOTIFICATION_MUSICSTOPPED
,
NULL
);
if
(
SUCCEEDED
(
hr
)
&&
segment_state
)
if
(
FAILED
(
hr
=
segment_state_play
(
state
,
iface
)))
ERR
(
"Failed to play segment state, hr %#lx
\n
"
,
hr
);
else
if
(
segment_state
)
{
*
segment_state
=
state
;
IDirectMusicSegmentState_AddRef
(
state
);
...
...
dlls/dmime/segmentstate.c
View file @
442db8a1
...
...
@@ -215,8 +215,8 @@ HRESULT segment_state_create(IDirectMusicSegment *segment, MUSIC_TIME start_time
IDirectMusicSegmentState
*
iface
;
struct
segment_state
*
This
;
IDirectMusicTrack
*
track
;
UINT
i
,
duration
;
HRESULT
hr
;
UINT
i
;
TRACE
(
"(%p, %lu, %p)
\n
"
,
segment
,
start_time
,
ret_iface
);
...
...
@@ -264,9 +264,6 @@ HRESULT segment_state_create(IDirectMusicSegment *segment, MUSIC_TIME start_time
}
}
duration
=
This
->
end_point
-
This
->
start_point
;
if
(
SUCCEEDED
(
hr
))
hr
=
performance_send_segment_end
(
performance
,
start_time
+
duration
,
iface
);
if
(
SUCCEEDED
(
hr
))
*
ret_iface
=
iface
;
else
IDirectMusicSegmentState_Release
(
iface
);
return
hr
;
...
...
@@ -303,7 +300,18 @@ static HRESULT segment_state_play_chunk(struct segment_state *This, IDirectMusic
This
->
played
=
played
;
if
(
This
->
start_point
+
This
->
played
>=
This
->
end_point
)
{
MUSIC_TIME
end_time
=
This
->
start_time
+
This
->
played
;
if
(
FAILED
(
hr
=
performance_send_segment_end
(
performance
,
end_time
,
iface
)))
{
ERR
(
"Failed to send segment end, hr %#lx
\n
"
,
hr
);
return
hr
;
}
return
S_FALSE
;
}
return
S_OK
;
}
...
...
@@ -314,6 +322,12 @@ HRESULT segment_state_play(IDirectMusicSegmentState *iface, IDirectMusicPerforma
TRACE
(
"%p %p
\n
"
,
iface
,
performance
);
if
(
FAILED
(
hr
=
performance_send_segment_start
(
performance
,
This
->
start_time
,
iface
)))
{
ERR
(
"Failed to send segment start, hr %#lx
\n
"
,
hr
);
return
hr
;
}
if
(
FAILED
(
hr
=
segment_state_play_chunk
(
This
,
performance
,
10000000
,
DMUS_TRACKF_START
|
DMUS_TRACKF_SEEK
|
DMUS_TRACKF_DIRTY
)))
return
hr
;
...
...
dlls/dmime/tests/dmime.c
View file @
442db8a1
...
...
@@ -3147,8 +3147,8 @@ static void test_notification_pmsg(void)
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
ret
=
test_tool_wait_message
(
tool
,
50
,
&
msg
);
todo_wine
ok
(
ret
==
WAIT_TIMEOUT
,
"got %#lx
\n
"
,
ret
);
if
(
ret
==
WAIT_TIMEOUT
)
ret
=
test_tool_wait_message
(
tool
,
500
,
&
msg
);
ok
(
ret
==
WAIT_TIMEOUT
,
"got %#lx
\n
"
,
ret
);
ret
=
test_tool_wait_message
(
tool
,
500
,
&
msg
);
ok
(
!
ret
,
"got %#lx
\n
"
,
ret
);
check_dmus_dirty_pmsg
(
msg
,
music_time
+
length
);
hr
=
IDirectMusicPerformance_FreePMsg
(
performance
,
msg
);
...
...
@@ -3312,8 +3312,7 @@ static void test_notification_pmsg(void)
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
ret
=
test_tool_wait_message
(
tool
,
500
,
&
msg
);
todo_wine
ok
(
ret
==
WAIT_TIMEOUT
,
"got %#lx
\n
"
,
ret
);
if
(
!
ret
)
IDirectMusicPerformance_FreePMsg
(
performance
,
msg
);
ok
(
ret
==
WAIT_TIMEOUT
,
"got %#lx
\n
"
,
ret
);
IDirectMusicSegmentState_Release
(
state
);
IDirectMusicSegment_Release
(
segment
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment