Nikolay Sivov (@nsivov) commented about dlls/mfreadwrite/reader.c:
hr = MF_E_INVALIDSTREAMNUMBER; else {
obj = (IUnknown *)reader->streams[index].decoder.transform;
struct list *ptr;
if ((ptr = list_tail(&stream->transforms)))
{
struct transform_entry *entry = LIST_ENTRY(ptr, struct transform_entry, entry);
obj = (IUnknown *)entry->transform;
}
if (!obj) hr = E_NOINTERFACE; } break;
GetServiceForStream() is supposed to use decoder transform, according to its description, and not the last one added. Is that not the case? To access the whole chain they added GetTransformForStream().