我有一个IWMSinkWriter
对象接收来自WMA编码器变换的压缩样本。我该如何强制要写在IWMSinkWriter上的优秀样本?
我想执行一个“漏”操作,其中输入样本仍然留在接收器写入器上不会丢失(因为它现在发生在IWMSinkWriter::Flush()
操作中),而是在不关闭目标文件的情况下提交到磁盘,类似于在C文件上调用fflush()
)。
我以为我传递给IWMSinkWriter
样品最终会被写入磁盘,所以我试图实现这种“流失” functionallity这样的:
void WmaWriterBox::HandleCommand(DrainCommand^ command) {
HRESULT hRes;
BASE::HandleCommand(command);
MF_SINK_WRITER_STATISTICS statistics;
statistics.cb = sizeof(statistics);
// spin-wait until the pending samples are processed
while(true) {
COM_CALL(_pWriter->GetStatistics(0, &statistics));
if(!statistics.dwNumOutstandingSinkSampleRequests)
break;
Thread::Sleep(10);
}
}
不幸的是,优秀的样本数从来没有降到零,因此我进入了一个无限循环。
有没有一种方法可以实现这种“写入数据到磁盘的写入”功能?
罗马您好,感谢您的回复,实际上我不想关闭输出文件,我只想确保接收器接收的样本实际写入磁盘而不保存在内存中。这是为了保持一致性,因为我们的DSP微型框架组件支持Drain和Flush操作(就像MF转换一样),所以如果我可以在WMA Writer组件上实现Drain操作将会很好。 – BlueStrat
即使在MFT上耗尽可能导致MFT在完全耗尽后进一步输入的可用性,文件写入也不是这种情况。没有排水。在确保运输中的样品得到处理方面也没有太多的实际用途,因为它不能保证文件中的数据*实际上*并且文件保持可读。尽管ASF可能是这种情况。在MP4完成之前,即使有排水功能,它仍然无法读取。 –
感谢罗马人,如果你发表你最后的评论作为答案,我会很乐意接受它。 – BlueStrat