Michael Stefaniuc : dmusic: Avoid an intermediate copy in PackStructured() .

Alexandre Julliard julliard at winehq.org
Tue May 2 15:58:47 CDT 2017


Module: wine
Branch: master
Commit: 950b8a9699fc640b0b58126ce38d25ddaf91dac9
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=950b8a9699fc640b0b58126ce38d25ddaf91dac9

Author: Michael Stefaniuc <mstefani at winehq.org>
Date:   Mon May  1 23:58:50 2017 +0200

dmusic: Avoid an intermediate copy in PackStructured().

Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/dmusic/buffer.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/dlls/dmusic/buffer.c b/dlls/dmusic/buffer.c
index dbc8058..9b0ca84 100644
--- a/dlls/dmusic/buffer.c
+++ b/dlls/dmusic/buffer.c
@@ -101,7 +101,7 @@ static HRESULT WINAPI IDirectMusicBufferImpl_PackStructured(LPDIRECTMUSICBUFFER
 {
     IDirectMusicBufferImpl *This = impl_from_IDirectMusicBuffer(iface);
     DWORD new_write_pos = This->write_pos + DMUS_EVENT_SIZE(sizeof(channel_message));
-    DMUS_EVENTHEADER header;
+    DMUS_EVENTHEADER *header;
 
     TRACE("(%p)->(0x%s, %u, 0x%x)\n", iface, wine_dbgstr_longlong(ref_time), channel_group, channel_message);
 
@@ -119,13 +119,13 @@ static HRESULT WINAPI IDirectMusicBufferImpl_PackStructured(LPDIRECTMUSICBUFFER
     if (!This->write_pos)
         This->start_time = ref_time;
 
-    header.cbEvent = 3; /* Midi message takes 4 bytes space but only 3 are relevant */
-    header.dwChannelGroup = channel_group;
-    header.rtDelta = ref_time - This->start_time;
-    header.dwFlags = DMUS_EVENT_STRUCTURED;
+    header = (DMUS_EVENTHEADER*)&This->data[This->write_pos];
+    header->cbEvent = 3; /* Midi message takes 4 bytes space but only 3 are relevant */
+    header->dwChannelGroup = channel_group;
+    header->rtDelta = ref_time - This->start_time;
+    header->dwFlags = DMUS_EVENT_STRUCTURED;
 
-    memcpy(This->data + This->write_pos, &header, sizeof(header));
-    *(DWORD*)(This->data + This->write_pos + sizeof(header)) = channel_message;
+    *(DWORD*)&header[1] = channel_message;
     This->write_pos = new_write_pos;
 
     return S_OK;




More information about the wine-cvs mailing list