作者zonble (zonble)
看板MacDev
标题Re: [问题] CIFilter/QTSession的nsthread稳定性问题
时间Sun Aug 7 01:13:00 2011
你这样写最大的问题就在於,当 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
1F:推 Piceman:感谢Z大解惑,我会尝试从那几块地方进行突破,谢谢 08/07 15:06
3F:→ zonble:简单写了一下 08/07 22:57