0

我可以复制一个 VideoInfoHeader,它是 AMMediaType 的一部分,其中包含以下几行:

AMMediaType mediaType = new AMMediaType();
VideoInfoHeader videoInfo = new VideoInfoHeader();
(pSampleGrabber as ISampleGrabber).GetConnectedMediaType(mediaType);
videoInfo = (VideoInfoHeader)Marshal.PtrToStructure(mediaType.formatPtr, typeof(VideoInfoHeader));

我从SampleGrabber 获得的参数不正确以及互联网上的其他资源。但是我无法复制整个 AMMediaType-Structure。指向 VideoInfoHeader 的指针丢失。

所以我想知道是否存在一个辅助函数将 AMMediaType 复制到内存中的不同位置,查找 VideoInfoHeader 之类的指针并将 VideoInfoHeader 的内容和其他引用数据复制到新位置(包括将 formatPtr 指向正确的位置) .

我在以下场景中使用它:我检索视频输入设备的所有可能的 IPin 媒体类型,并在 Windows.Forms - Combobox 中显示 AMMediaTypes。当我从组合框中读取 SelectedObject 时,指向 VideoInfoHeader 的指针为零。这是在构建过滤器图时无法使用我选择的引脚配置进行连接的地方。

4

1 回答 1

1

AMMediaTypeakaAM_MEDIA_TYPE结构由常规成员和额外分配的由formatPtr. 后者是一个字节数组,其含义取决于格式类型。结构和从属内存块通常都使用特定的 COM 分配器。

复制结构是复制其成员并复制后面的字节数组formatPtr。该结构还包括pUnk应该是 COM 接口的成员,但它通常是null. 它是非空的是有效的,但多年来我不记得它实际使用的一个案例,特别是视频和音频媒体类型。

于 2013-01-16T06:58:56.367 回答