Nikolay Sivov (@nsivov) commented about dlls/mfreadwrite/reader.c:
- if (SUCCEEDED(hr))
- {
GUID major_type, subtype;
UINT64 frame_size;
LONG stride;
type = reader->streams[index].current;
if (SUCCEEDED(IMFMediaType_GetMajorType(type, &major_type))
&& IsEqualGUID(&major_type, &MFMediaType_Video)
&& SUCCEEDED(IMFMediaType_GetGUID(type, &MF_MT_SUBTYPE, &subtype))
&& SUCCEEDED(IMFMediaType_GetUINT64(type, &MF_MT_FRAME_SIZE, &frame_size))
&& SUCCEEDED(MFGetStrideForBitmapInfoHeader(subtype.Data1, frame_size >> 32, &stride)))
IMFMediaType_SetUINT32(type, &MF_MT_DEFAULT_STRIDE, abs(stride));
- }
If we really need this it should go to helpers where type is set from the source or from a transform. Right now it looks like a workaround to me. How can we be sure that it's a reader responsibility to modify type like this, and not something missing in source/transform?