Commit 23603589 authored by Maarten Lankhorst's avatar Maarten Lankhorst Committed by Alexandre Julliard

dsound: Block align SetCurrentPosition and add test for it.

parent ea2c96c5
...@@ -687,6 +687,7 @@ static HRESULT WINAPI IDirectSoundBufferImpl_SetCurrentPosition( ...@@ -687,6 +687,7 @@ static HRESULT WINAPI IDirectSoundBufferImpl_SetCurrentPosition(
EnterCriticalSection(&(This->lock)); EnterCriticalSection(&(This->lock));
newpos %= This->buflen; newpos %= This->buflen;
newpos -= newpos%This->pwfx->nBlockAlign;
This->buf_mixpos = newpos; This->buf_mixpos = newpos;
if (This->hwbuf) { if (This->hwbuf) {
hres = IDsDriverBuffer_SetPosition(This->hwbuf, This->buf_mixpos); hres = IDsDriverBuffer_SetPosition(This->hwbuf, This->buf_mixpos);
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
* So this is only done if the test is being run in interactive mode. * So this is only done if the test is being run in interactive mode.
* *
* Copyright (c) 2002-2004 Francois Gouget * Copyright (c) 2002-2004 Francois Gouget
* Copyright (c) 2007 Maarten Lankhorst
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
...@@ -764,6 +765,7 @@ static HRESULT test_block_align(LPGUID lpGuid) ...@@ -764,6 +765,7 @@ static HRESULT test_block_align(LPGUID lpGuid)
DSBUFFERDESC bufdesc; DSBUFFERDESC bufdesc;
DSBCAPS dsbcaps; DSBCAPS dsbcaps;
WAVEFORMATEX wfx; WAVEFORMATEX wfx;
DWORD pos, pos2;
int ref; int ref;
/* Create the DirectSound object */ /* Create the DirectSound object */
...@@ -790,11 +792,23 @@ static HRESULT test_block_align(LPGUID lpGuid) ...@@ -790,11 +792,23 @@ static HRESULT test_block_align(LPGUID lpGuid)
rc=IDirectSoundBuffer_GetCaps(secondary,&dsbcaps); rc=IDirectSoundBuffer_GetCaps(secondary,&dsbcaps);
ok(rc==DS_OK,"IDirectSoundBuffer_GetCaps() should have returned DS_OK, " ok(rc==DS_OK,"IDirectSoundBuffer_GetCaps() should have returned DS_OK, "
"returned: %s\n", DXGetErrorString8(rc)); "returned: %s\n", DXGetErrorString8(rc));
if (rc==DS_OK) if (rc==DS_OK && wfx.nBlockAlign > 1)
{
ok(dsbcaps.dwBufferBytes==(wfx.nAvgBytesPerSec + wfx.nBlockAlign), ok(dsbcaps.dwBufferBytes==(wfx.nAvgBytesPerSec + wfx.nBlockAlign),
"Buffer size not a multiple of nBlockAlign: requested %d, " "Buffer size not a multiple of nBlockAlign: requested %d, "
"got %d, should be %d\n", bufdesc.dwBufferBytes, "got %d, should be %d\n", bufdesc.dwBufferBytes,
dsbcaps.dwBufferBytes, wfx.nAvgBytesPerSec + wfx.nBlockAlign); dsbcaps.dwBufferBytes, wfx.nAvgBytesPerSec + wfx.nBlockAlign);
rc = IDirectSoundBuffer_SetCurrentPosition(secondary, 0);
ok(rc == DS_OK, "Could not set position to 0: %s\n", DXGetErrorString8(rc));
rc = IDirectSoundBuffer_GetCurrentPosition(secondary, &pos, NULL);
ok(rc == DS_OK, "Could not get position: %s\n", DXGetErrorString8(rc));
rc = IDirectSoundBuffer_SetCurrentPosition(secondary, 1);
ok(rc == DS_OK, "Could not set position to 1: %s\n", DXGetErrorString8(rc));
rc = IDirectSoundBuffer_GetCurrentPosition(secondary, &pos2, NULL);
ok(rc == DS_OK, "Could not get new position: %s\n", DXGetErrorString8(rc));
ok(pos == pos2, "Positions not the same! Old position: %d, new position: %d\n", pos, pos2);
}
ref=IDirectSoundBuffer_Release(secondary); ref=IDirectSoundBuffer_Release(secondary);
ok(ref==0,"IDirectSoundBuffer_Release() secondary has %d references, " ok(ref==0,"IDirectSoundBuffer_Release() secondary has %d references, "
"should have 0\n",ref); "should have 0\n",ref);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment