Anton Baskanov (@baskanov) commented about dlls/amstream/ddrawstream.c:
if (stream->peer && !is_format_compatible(stream, old_format.width, old_format.height, &old_format.pf)) {
hr = CopyMediaType(&old_media_type, &stream->mt);
if (FAILED(hr))
memset(&new_media_type, 0, sizeof(new_media_type));
new_media_type.pbFormat = (BYTE*)&new_media_type_video;
new_media_type.cbFormat = sizeof(VIDEOINFO);
create_mt_from_desc(&new_media_type, format);
if (!using_private_allocator(stream) ||
(IPin_QueryAccept(stream->peer, &new_media_type) != S_OK) ||
FAILED(hr = IMediaSample_SetMediaType(stream->next_sample, &new_media_type)))
The media type should be set on all subsequent samples, not just one.