之前OpenCV在多線程下讀取AVI視頻不奏效的問題解決了好久,后來不得已換成了AVI stream來解碼。本以為是解決了,在我的筆記本上和臺式機上都正常的運行,可是到了別人的XP系統中又不能運行了,這樣才真正的涉及到本質問題,一樣是不行的,為什么呢?查了很久,之前AVIFILEOPEN這個函數的返回值始終是-2147221008,可是都沒有找到本質原因,后來才發現,要把這個代碼換成16進制就可以搜索到很多相關的項目了。原來不是什么OpenCV的bug,是因為多線程使用前必須加一句CoInitialize(NULL);來對線程進行一個初始化。把這個簡單的話加到AVIStream解碼中和OpenCV解碼的前面,發現這兩種解碼的方式都可以正常運行了。這個問題困擾了我好幾天,卻通過這么曲折的方式解決掉,實在讓我有點意外。上網查了一下,發現這兩個函數用來設置COM庫的,可是我怎么知道OpenCV和AVIStream或者是XVID里面是否用到了COM庫呢?哎,只能吃啞巴虧了,也不可能從頭到尾去專研這個,畢竟只是一個工具而已,下次記住就OK了。
?
注:
CoInitialize是用來初始化COM庫的;
CoUninitialize是用來對COM庫做些清理工作的;
CoUninitialize是用來對COM庫做些清理工作的;
CoInitialize Function
Initializes the COM library on the current thread and identifies the concurrency model as single-thread apartment (STA).New applications should call CoInitializeEx instead of CoInitialize
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
