Re: [問題] CIFilter/QTSession的nsthread穩定性問題

看板MacDev作者 (zonble)時間13年前 (2011/08/07 01:13), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串2/4 (看更多)
你這樣寫最大的問題就在於,當 QTCaptureView 每次呼叫到 view: willDisplayImage: 這個 delegate method 的時候,在 CIprocessor 裡頭放在 thread 裡頭的工作,不見得已經完成了,而因為再度被 呼叫到,所以就再度開了一個 thread 出來。於是,明明就只有一個 video stream,卻變成可能同時有好幾個 thread 在處理套用 filter 的工作,一方面這樣造成不必要的系統負擔,另一方面,同時好幾個 thread 都要寫入 self.tmpImage,這樣也會出問題。至少在產生一個 thread 之前,應該先把前一個 thread cancel 掉,以及 self.impImage 也應該要 lock 起來。 另外,用 QTCaptureView 的 delegate 來取得 CIImage,感覺也怪怪 的。 感覺另外產生一個 QTCaptureVideoPreviewOutput 會是比較好的作法。 ※ 引述《Piceman (派斯麵)》之銘言: : @property (nonatomic, retain) CIprocessor* CIpr; : - (CIImage *)view:(QTCaptureView *)view willDisplayImage:(CIImage *)image { : CIImage* ret= [CIpr returnCIImage:image]; : if (!ret) { : ret=image; : } : return ret; : } : @implement CIprocessor { : -(CIImage*)returnCIImage:(CIImage*)imgInput{ : //將工作丟到thread,會造成以下錯誤 : //QTCALayerRendererPendingQWorkLoop EXEC_BAD_ACCESS : [NSThread detachNewThreadSelector:@selector(threadImage) : toTarget:self withObject:imgInput]; : //不使用thread, 沒錯誤問題,不過在其他電腦上會有鍵盤反應遲緩 : //視窗lag等問題,雖然cpu loading不高.. : //[self threadImage:imgInput]; : return self.tmpImage; : } -- zonble.net cocoa.zonble.net -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.186.156

08/07 15:06, , 1F
感謝Z大解惑,我會嘗試從那幾塊地方進行突破,謝謝
08/07 15:06, 1F

08/07 22:56, , 2F

08/07 22:57, , 3F
簡單寫了一下
08/07 22:57, 3F
文章代碼(AID): #1EFNOV7- (MacDev)
討論串 (同標題文章)
文章代碼(AID): #1EFNOV7- (MacDev)