From: Rémi Bernon rbernon@codeweavers.com
To avoid setting it to a size larger than its capacity when buffer too small status is returned. --- dlls/winedmo/main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/dlls/winedmo/main.c b/dlls/winedmo/main.c index 3cb638860ac..1e91d8e2e51 100644 --- a/dlls/winedmo/main.c +++ b/dlls/winedmo/main.c @@ -131,12 +131,12 @@ static void buffer_lock( DMO_OUTPUT_DATA_BUFFER *buffer, struct sample *sample ) sample->size = size; }
-static void buffer_unlock( DMO_OUTPUT_DATA_BUFFER *buffer, struct sample *sample ) +static void buffer_unlock( DMO_OUTPUT_DATA_BUFFER *buffer, struct sample *sample, NTSTATUS status ) { IMFSample *object; HRESULT hr;
- if (FAILED(hr = IMediaBuffer_SetLength( buffer->pBuffer, sample->size ))) + if (FAILED(hr = IMediaBuffer_SetLength( buffer->pBuffer, status ? 0 : sample->size ))) ERR( "Failed to update buffer length, hr %#lx\n", hr );
buffer->dwStatus = 0; @@ -231,7 +231,7 @@ NTSTATUS CDECL winedmo_demuxer_read( struct winedmo_demuxer demuxer, UINT *strea
buffer_lock( buffer, ¶ms.sample ); status = UNIX_CALL( demuxer_read, ¶ms ); - buffer_unlock( buffer, ¶ms.sample ); + buffer_unlock( buffer, ¶ms.sample, status ); *buffer_size = params.sample.size; *stream = params.stream;