iphone - Can't Capture AVCaptureVideoPreviewLayer -
in app opening video preview layer code:
avcapturedeviceinput *captureinput = [avcapturedeviceinput deviceinputwithdevice:[avcapturedevice defaultdevicewithmediatype:avmediatypevideo] error:nil]; /*we setupt output*/ avcapturevideodataoutput *captureoutput = [[avcapturevideodataoutput alloc] init]; captureoutput.alwaysdiscardslatevideoframes = yes; dispatch_queue_t queue; queue = dispatch_queue_create("cameraqueue", null); [captureoutput setsamplebufferdelegate:self queue:queue]; dispatch_release(queue); nsstring* key = (nsstring*)kcvpixelbufferpixelformattypekey; nsnumber* value = [nsnumber numberwithunsignedint:kcvpixelformattype_32bgra]; nsdictionary* videosettings = [nsdictionary dictionarywithobject:value forkey:key]; [captureoutput setvideosettings:videosettings]; self.capturesession = [[avcapturesession alloc] init]; [self.capturesession addinput:captureinput]; [self.capturesession addoutput:captureoutput]; /*we use medium quality, ont iphone 4 demo laging much, conversion in uiimage , cgimage demands ressources 720p resolution.*/ [self.capturesession setsessionpreset:avcapturesessionpresetmedium]; cgrect vframe; vframe = cgrectmake(self.viewno2.frame.origin.x, self.viewno2.frame.origin.y, self.viewno2.frame.size.width, self.viewno2.frame.size.height); /*we add custom layer (we need change orientation of layer video displayed correctly)*/ self.customlayer = [calayer layer]; self.customlayer.frame = vframe; self.customlayer.contentsgravity = kcagravityresizeaspect; [self.view.layer addsublayer:self.customlayer]; cgrect vframe1; vframe1 = cgrectmake(self.viewno3.frame.origin.x, self.viewno3.frame.origin.y, self.viewno3.frame.size.width, self.viewno3.frame.size.height); /*we add custom layer (we need change orientation of layer video displayed correctly)*/ self.customlayer1 = [calayer layer]; self.customlayer1.frame = vframe1; self.customlayer1.contentsgravity = kcagravityresizeaspect; [self.view.layer addsublayer:self.customlayer1]; ///*we add imageview*/ //self.imageview = [[uiimageview alloc] init]; //self.imageview.frame = cgrectmake(9, 9, 137, 441); //[self.view addsubview:self.imageview]; /*we add preview layer*/ cgrect vframe2; vframe2 = cgrectmake(self.viewno1.frame.origin.x, self.viewno1.frame.origin.y, self.viewno1.frame.size.width, self.viewno1.frame.size.height); self.prevlayer = [avcapturevideopreviewlayer layerwithsession: self.capturesession]; self.prevlayer.frame = vframe2; self.prevlayer.videogravity = avlayervideogravityresizeaspectfill; [self.view.layer addsublayer: self.prevlayer]; /*we start capture*/ [self.capturesession startrunning];
when trying capture screen method:
-(ibaction)photo{ cgrect rect = [self.view bounds]; uigraphicsbeginimagecontextwithoptions(rect.size,yes,0.0f); cgcontextref context = uigraphicsgetcurrentcontext(); [self.view.layer renderincontext:context]; uiimage *viewimage = uigraphicsgetimagefromcurrentimagecontext(); uigraphicsendimagecontext(); uiimagewritetosavedphotosalbum(viewimage, nil, nil, nil);}
the prevlayer isn't being captured, missing something?
avcapturevideopreviewlayer
not respond capturing screen uigraphicsgetimagefromcurrentimagecontext()
. it's strange rule apple has done. way current screen image tap image data buffer avcaptureinput
. can manually added onto screenshot.
Comments
Post a Comment