我正在使用DirectShow.Net並試圖在類上實現ISampleGrabberCB。ISampleGrabber回調沒有被調用
爲了建立抓取的圖形,我按照這個清單:
創建SampleGrabber對象
定義的MediaType格式(AMMediaType:視頻,RGB,VideoInfo)和將其設置爲SampleGrabber對象。 HRESULT爲0,所以我認爲沒關係。
我用sampleGrabber.SetCallback(this,0)設置了回調。我傳遞「this」是因爲ISampleGrabber是在類中實現和定義的;第二個參數是0,因爲我想調用SampleCB方法。
最後,我將過濾器添加到圖中。 HRESULT再次爲0.
但是ISampleGrabber.SampleCB方法未被調用。
你對這種不正當行爲的原因有什麼想法嗎?
[編輯]
我發現了這是怎麼回事了!但我仍然需要一些幫助。我擁有的網絡攝像機都會返回YUY2子視頻格式。如上所述,我使用的代碼強制MediaType爲RGB24。在運行時我可以看到HResult爲0,因此沒關係。但是因爲它們「不兼容」,所以不會調用示例回調。如果我刪除了子類型顯式定義,則回調被擊中。然而我收到的框架是YUY2;它不是有效的位圖,因此它看起來「損壞」,「失真」。
在這一點上,我想知道我是如何成功地強制RGB24格式或如何將視頻幀轉換爲RGB24格式。
我在谷歌上花了相當多的時間試圖找到一個有效的答案,但我沒有運氣。
有什麼想法?
乾杯。 Gianluca。
我們可以看到一些代碼嗎? – Goz
@Goz:代碼非常豐富,可以分成幾個功能。你想看什麼部分? –
根據您的編輯情況,可能會很高興看到連接濾鏡的部分 – Goz