我有一個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