我仍然对directshow过滤器有点新意,并且正在密切研究基类。几乎立即出现的一件事是CMediaType :: IsPartiallySpecified的基本实现。
它的内容如下:
if ((majortype == GUID_NULL) ||
(formattype == GUID_NULL)) {
return TRUE;
} else {
return FALSE;
}
但肯定应该是:
if ((majortype == GUID_NULL) ||
(subtype == GUID_NULL) ||
(formattype == GUID_NULL)) {
return TRUE;
} else {
return FALSE;
}
它并没有激发其他课程的信心。是否在某处发布了勘误表?
答案 0 :(得分:1)
它应该以它的方式阅读,它不应该以您认为应该阅读的方式阅读。
Partial
表示故意省略主要类型和/或格式类型。
你也会感到惊讶的是,IsPartiallySpecified
几乎没有在DirectShow SDK和依赖过滤器中使用,即使你打破了它,其余的仍然会坚如磐石。围绕部分指定的媒体类型的想法是能够提示过滤器功能。这仍然使用非常有限。
实现实际上并未测试子类型。如果有的话 指定的格式类型,媒体类型不被视为部分,甚至 如果子类型是GUID_NULL。
部分媒体类型只是主要类型和子类型,输入引脚说“嘿,我没有媒体类型可以尝试,但我想我知道应该看起来像什么”。
答案 1 :(得分:0)
DirectShow框架,正如Roman R.所说的那样,工作坚如磐石。它是Microsoft提供的更复杂的API集之一。你应该根据它的表现来判断它。 Windows SDK中提供的DirectShow示例经过精心挑选并且可以正常工作。
答案 2 :(得分:0)
还有一点是你错过了。要完全定义媒体类型,您需要一个主要类型和一个格式块,但许多音频过滤器使用FORMAT_WaveFormatEx并依赖波形格式标记来定义子类型,在这些情况下,子类型有效地为GUID_NULL但媒体类型是完全的定义
一般来说,格式块完全定义了媒体,并且既充分又必要。主要类型和子类型旨在允许一定程度的通用数据处理。