quartz: Fill up sound buffer while in paused state.
This commit is contained in:
parent
6e69cd4df4
commit
e591700177
|
@ -146,7 +146,9 @@ static HRESULT DSoundRender_GetWritePos(DSoundRenderImpl *This, DWORD *ret_write
|
||||||
|
|
||||||
DSoundRender_UpdatePositions(This, &writepos, &min_writepos);
|
DSoundRender_UpdatePositions(This, &writepos, &min_writepos);
|
||||||
playpos = This->last_playpos;
|
playpos = This->last_playpos;
|
||||||
if (This->filter.pClock == (IReferenceClock*)&This->IReferenceClock_vtbl) {
|
if (This->filter.state == State_Paused) {
|
||||||
|
write_at = cur = -1;
|
||||||
|
} else if (This->filter.pClock == (IReferenceClock*)&This->IReferenceClock_vtbl) {
|
||||||
max_lag = min_lag;
|
max_lag = min_lag;
|
||||||
cur = This->play_time + time_from_pos(This, playpos);
|
cur = This->play_time + time_from_pos(This, playpos);
|
||||||
cur -= This->filter.rtStreamStart;
|
cur -= This->filter.rtStreamStart;
|
||||||
|
@ -226,12 +228,10 @@ static HRESULT DSoundRender_SendSampleData(DSoundRenderImpl* This, REFERENCE_TIM
|
||||||
DWORD writepos, skip = 0, free, size1, size2, ret;
|
DWORD writepos, skip = 0, free, size1, size2, ret;
|
||||||
BYTE *buf1, *buf2;
|
BYTE *buf1, *buf2;
|
||||||
|
|
||||||
if (This->filter.state == State_Running)
|
|
||||||
hr = DSoundRender_GetWritePos(This, &writepos, tStart, &free, &skip);
|
hr = DSoundRender_GetWritePos(This, &writepos, tStart, &free, &skip);
|
||||||
else
|
|
||||||
hr = S_FALSE;
|
|
||||||
|
|
||||||
if (hr != S_OK) {
|
if (hr != S_OK) {
|
||||||
|
SetEvent(This->state_change);
|
||||||
This->in_loop = 1;
|
This->in_loop = 1;
|
||||||
LeaveCriticalSection(&This->filter.csFilter);
|
LeaveCriticalSection(&This->filter.csFilter);
|
||||||
ret = WaitForSingleObject(This->blocked, 10);
|
ret = WaitForSingleObject(This->blocked, 10);
|
||||||
|
@ -251,7 +251,7 @@ static HRESULT DSoundRender_SendSampleData(DSoundRenderImpl* This, REFERENCE_TIM
|
||||||
if (skip)
|
if (skip)
|
||||||
FIXME("Sample dropped %u of %u bytes\n", skip, size);
|
FIXME("Sample dropped %u of %u bytes\n", skip, size);
|
||||||
if (skip >= size)
|
if (skip >= size)
|
||||||
return S_OK;
|
break;
|
||||||
data += skip;
|
data += skip;
|
||||||
size -= skip;
|
size -= skip;
|
||||||
|
|
||||||
|
@ -362,7 +362,6 @@ static HRESULT WINAPI DSoundRender_Receive(BaseInputPin *pin, IMediaSample * pSa
|
||||||
cbSrcStream = IMediaSample_GetActualDataLength(pSample);
|
cbSrcStream = IMediaSample_GetActualDataLength(pSample);
|
||||||
TRACE("Sample data ptr = %p, size = %d\n", pbSrcStream, cbSrcStream);
|
TRACE("Sample data ptr = %p, size = %d\n", pbSrcStream, cbSrcStream);
|
||||||
|
|
||||||
SetEvent(This->state_change);
|
|
||||||
hr = DSoundRender_SendSampleData(This, tStart, tStop, pbSrcStream, cbSrcStream);
|
hr = DSoundRender_SendSampleData(This, tStart, tStop, pbSrcStream, cbSrcStream);
|
||||||
LeaveCriticalSection(&This->filter.csFilter);
|
LeaveCriticalSection(&This->filter.csFilter);
|
||||||
return hr;
|
return hr;
|
||||||
|
|
Loading…
Reference in New Issue