From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/amstream/audiostream.c | 1 + dlls/amstream/ddrawstream.c | 39 +++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+)
diff --git a/dlls/amstream/audiostream.c b/dlls/amstream/audiostream.c index d76156cb682..8e1c96b4b5e 100644 --- a/dlls/amstream/audiostream.c +++ b/dlls/amstream/audiostream.c @@ -960,6 +960,7 @@ static HRESULT WINAPI audio_sink_ReceiveConnection(IPin *iface, IPin *peer, cons PIN_DIRECTION dir;
TRACE("stream %p, peer %p, mt %p.\n", stream, peer, mt); + strmbase_dump_media_type(mt);
if (!IsEqualGUID(&mt->majortype, &MEDIATYPE_Audio) || !IsEqualGUID(&mt->formattype, &FORMAT_WaveFormatEx) diff --git a/dlls/amstream/ddrawstream.c b/dlls/amstream/ddrawstream.c index cbd88187e1b..40e7fab1e79 100644 --- a/dlls/amstream/ddrawstream.c +++ b/dlls/amstream/ddrawstream.c @@ -637,49 +637,83 @@ static HRESULT WINAPI ddraw_IDirectDrawMediaStream_SetFormat(IDirectDrawMediaStr if (format->dwFlags & DDSD_PIXELFORMAT) { if (format->ddpfPixelFormat.dwSize != sizeof(DDPIXELFORMAT)) + { + WARN("Invalid size %#lx, returning DDERR_INVALIDSURFACETYPE.\n", format->ddpfPixelFormat.dwSize); return DDERR_INVALIDSURFACETYPE; + }
if (format->ddpfPixelFormat.dwFlags & DDPF_FOURCC) { if (!format->ddpfPixelFormat.dwRGBBitCount) + { + WARN("Invalid zero bit count, returning E_INVALIDARG.\n"); return E_INVALIDARG; + } } else { if (format->ddpfPixelFormat.dwFlags & (DDPF_YUV | DDPF_PALETTEINDEXED1 | DDPF_PALETTEINDEXED2 | DDPF_PALETTEINDEXED4 | DDPF_PALETTEINDEXEDTO8)) + { + WARN("Rejecting flags %#lx.\n", format->ddpfPixelFormat.dwFlags); return DDERR_INVALIDSURFACETYPE; + }
if (!(format->ddpfPixelFormat.dwFlags & DDPF_RGB)) + { + WARN("Rejecting non-RGB flags %#lx.\n", format->ddpfPixelFormat.dwFlags); return DDERR_INVALIDSURFACETYPE; + }
switch (format->ddpfPixelFormat.dwRGBBitCount) { case 8: if (!(format->ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8)) + { + WARN("Rejecting non-palettized 8-bit format.\n"); return DDERR_INVALIDSURFACETYPE; + } break; case 16: if (format->ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) + { + WARN("Rejecting palettized 16-bit format.\n"); return DDERR_INVALIDSURFACETYPE; + } if ((format->ddpfPixelFormat.dwRBitMask != 0x7c00 || format->ddpfPixelFormat.dwGBitMask != 0x03e0 || format->ddpfPixelFormat.dwBBitMask != 0x001f) && (format->ddpfPixelFormat.dwRBitMask != 0xf800 || format->ddpfPixelFormat.dwGBitMask != 0x07e0 || format->ddpfPixelFormat.dwBBitMask != 0x001f)) + { + WARN("Rejecting bit masks %08lx, %08lx, %08lx.\n", + format->ddpfPixelFormat.dwRBitMask, + format->ddpfPixelFormat.dwGBitMask, + format->ddpfPixelFormat.dwBBitMask); return DDERR_INVALIDSURFACETYPE; + } break; case 24: case 32: if (format->ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) + { + WARN("Rejecting palettized %lu-bit format.\n", format->ddpfPixelFormat.dwRGBBitCount); return DDERR_INVALIDSURFACETYPE; + } if (format->ddpfPixelFormat.dwRBitMask != 0xff0000 || format->ddpfPixelFormat.dwGBitMask != 0x00ff00 || format->ddpfPixelFormat.dwBBitMask != 0x0000ff) + { + WARN("Rejecting bit masks %08lx, %08lx, %08lx.\n", + format->ddpfPixelFormat.dwRBitMask, + format->ddpfPixelFormat.dwGBitMask, + format->ddpfPixelFormat.dwBBitMask); return DDERR_INVALIDSURFACETYPE; + } break; default: + WARN("Unknown bit count %lu.\n", format->ddpfPixelFormat.dwRGBBitCount); return DDERR_INVALIDSURFACETYPE; } } @@ -703,6 +737,7 @@ static HRESULT WINAPI ddraw_IDirectDrawMediaStream_SetFormat(IDirectDrawMediaStr
if (stream->sample_refs > 0) { + WARN("Outstanding sample references, returning MS_E_SAMPLEALLOC.\n"); stream->format = old_format; LeaveCriticalSection(&stream->cs); return MS_E_SAMPLEALLOC; @@ -1027,6 +1062,7 @@ static HRESULT WINAPI ddraw_sink_ReceiveConnection(IPin *iface, IPin *peer, cons DDPIXELFORMAT pf = {sizeof(DDPIXELFORMAT)};
TRACE("stream %p, peer %p, mt %p.\n", stream, peer, mt); + strmbase_dump_media_type(mt);
EnterCriticalSection(&stream->cs);
@@ -1394,6 +1430,9 @@ static HRESULT WINAPI ddraw_mem_allocator_SetProperties(IMemAllocator *iface,
TRACE("stream %p, req_props %p, ret_props %p.\n", stream, req_props, ret_props);
+ TRACE("Requested %ld buffers, size %ld, prefix %ld, alignment %ld.\n", + req_props->cBuffers, req_props->cbBuffer, req_props->cbPrefix, req_props->cbAlign); + if (!req_props->cbAlign) return VFW_E_BADALIGN;