Re: [問題] CIFilter/QTSession的nsthread穩定性問題
你這樣寫最大的問題就在於,當 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
08/07 15:06, 1F
→
08/07 22:56, , 2F
08/07 22:56, 2F
→
08/07 22:57, , 3F
08/07 22:57, 3F
討論串 (同標題文章)