Взгляните на пример RGBFilters в DirectX SDK.Например, один из включенных фильтров - TransNull24.Этот фильтр пропустит все выборки без изменений, но сможет подключиться только тогда, когда на входе будет MEDIASUBTYPE_RGB24.Что вы делаете, это подключаете фильтр веб-камеры к TransNull24, а TransNull24 с помощью samplegrabber.Если веб-камера может выводить RGB24, это будет использоваться.В противном случае между веб-камерой и TransNull24 будет автоматически добавлен фильтр преобразования.Теперь вы будете получать только RGB24 в своем сэмплграбере, даже если веб-камера не поддерживает это напрямую.
Конечно, вам не нужен RGB24, но вы можете просто изменить пример фильтра и создать свой собственный фильтр TransNullI420.Я не уверен, что стандартный фильтр преобразования цветового пространства может выводить I420, поэтому вам может потребоваться установить ffdshow, настроив его для преобразования несжатого видео.