It looks confusing that
IMFSourceReader interface does not offer a dedicated method to find out the number of streams behind it. There is a
IMFMediaSource instance behind the reader, and its streams are available through
IMFMediaSource::CreatePresentationDescriptor method and
IMFPresentationDescriptor::GetStreamDescriptorCount method call.
I am under impression that source reader’s method just has to be there even though I am not seeing it looking at the list of methods. Okay, there are other methods, namely
IMFSourceReader::GetStreamSelection method, which takes either ordinal stream index or an alias as the first argument, then returns
MF_E_INVALIDSTREAMNUMBER if you run out of streams. However the problem is that this is associated with an internal exception, and I consider exceptions as exceptional conditions the code should not normally hit. I would expect to have a legal exception-free way to find out the number of streams. I am using debugger that breaks on exception or at least pollutes output log for no reason, I use other tools that intercept and log exceptions as something that needs attention – getting number of streams is nowhere near there.
Even though it is not a real drawback of the API since it is still possible to get the data and the API acts as documented, I still think someone overlooked this and API like this should have have a normal method or argument to request number of streams explicitly. Or I am just not seeing it even though I am trying thoroughly.