Skip to content

Commit

Permalink
mfplat/sample: Refactor sample_CopyToBuffer().
Browse files Browse the repository at this point in the history
CW-Bug-Id: #22084
  • Loading branch information
Paul Gofman authored and ivyl committed Sep 7, 2023
1 parent 2049fd4 commit 7495381
Showing 1 changed file with 29 additions and 23 deletions.
52 changes: 29 additions & 23 deletions dlls/mfplat/sample.c
Original file line number Diff line number Diff line change
Expand Up @@ -875,36 +875,42 @@ static HRESULT WINAPI sample_CopyToBuffer(IMFSample *iface, IMFMediaBuffer *buff
dst_ptr = NULL;
dst_length = current_length = 0;
locked = SUCCEEDED(hr = IMFMediaBuffer_Lock(buffer, &dst_ptr, &dst_length, &current_length));
if (locked)
if (!locked)
goto done;

if (dst_length < total_length)
{
if (dst_length < total_length)
hr = MF_E_BUFFERTOOSMALL;
else if (dst_ptr)
hr = MF_E_BUFFERTOOSMALL;
goto done;
}

if (!dst_ptr)
goto done;

for (i = 0; i < sample->buffer_count && SUCCEEDED(hr); ++i)
{
src_ptr = NULL;
src_max_length = current_length = 0;

if (FAILED(hr = IMFMediaBuffer_Lock(sample->buffers[i], &src_ptr, &src_max_length, &current_length)))
continue;

if (src_ptr)
{
for (i = 0; i < sample->buffer_count && SUCCEEDED(hr); ++i)
if (current_length > dst_length)
hr = MF_E_BUFFERTOOSMALL;
else if (current_length)
{
src_ptr = NULL;
src_max_length = current_length = 0;
if (SUCCEEDED(hr = IMFMediaBuffer_Lock(sample->buffers[i], &src_ptr, &src_max_length, &current_length)))
{
if (src_ptr)
{
if (current_length > dst_length)
hr = MF_E_BUFFERTOOSMALL;
else if (current_length)
{
memcpy(dst_ptr, src_ptr, current_length);
dst_length -= current_length;
dst_current_length += current_length;
dst_ptr += current_length;
}
}
IMFMediaBuffer_Unlock(sample->buffers[i]);
}
memcpy(dst_ptr, src_ptr, current_length);
dst_length -= current_length;
dst_current_length += current_length;
dst_ptr += current_length;
}
}
IMFMediaBuffer_Unlock(sample->buffers[i]);
}

done:
IMFMediaBuffer_SetCurrentLength(buffer, dst_current_length);

if (locked)
Expand Down

0 comments on commit 7495381

Please sign in to comment.