Question

Je développe une application iPhone qui comprend des fonctions « de la caméra » standard. Enregistrement au rouleau de la caméra est vraiment trop lent, il faut environ quatre secondes sur l'iPhone 4. Est-il possible d'améliorer la vitesse?

Si vous regardez l'application Appareil photo iPhone par défaut, il peut prendre des photos suivantes sans grands retards et photos sont enregistrées tout à fait instantanément sur le disque (si vous cliquez sur la petite place avec la dernière photo prise, dans le coin inférieur du écran, la bibliothèque photo ouvre toujours sur l'image enregistrée, même si vous prenez une grande séquence d'entre eux).

Voici deux snipplets de l'utilisation importante du code I pour obtenir l'image de la mémoire tampon, puis pour enregistrer la photo dans le rouleau de la caméra; J'ai essayé de mettre un NSLog avant et après la 2ème snipplet, et il a confirmé 4 secondes pour terminer le retarder le processus d'enregistrement.

[stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error)
 {
     NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
     UIImage *image = [[UIImage alloc] initWithData:imageData];

...

     ALAssetsLibrary *library = [[[ALAssetsLibrary alloc] init] autorelease];
     NSLog(@"SCATTO: Inizio salvataggio in library...");
     [library writeImageToSavedPhotosAlbum:[image CGImage] metadata:exifAttachments_dictionary completionBlock:^(NSURL *newURL, NSError *error) {
         if (error){
             NSLog(@"SCATTO: Salvataggio in library: ERRORE");
         } else {
             NSLog(@"SCATTO: Salvataggio in library: OK");
             [self loadNewestPhoto];
         }
     }];
Était-ce utile?

La solution

Je ne suis pas un expert dans ce domaine, mais je suis curieux sur le sujet.

Je pense qu'il y aura toujours une quantité importante de temps nécessaire pour enregistrer une image. Cela est particulièrement vrai si vous souhaitez soutenir les iPhones futurs qui seront très probablement créer des images plus grandes que aujourd'hui.

Une chose que je pense peut améliorer la performance est si vous utilisez -(void)writeImageDataToSavedPhotosAlbum: ... au lieu de - (void)writeImageToSavedPhotosAlbum: .... Le processus d'extraction et de compression JPEG peut être ignorée. Il est très coûteux car il transforme des données au sujet de 3MB à environ 15Mo.

Ceci est pure spéculation, mais si l'extraction JPEG / compression est accélération matérielle, la ressource matérielle peut être occupé si vous affichez la sortie de la caméra en même temps. Ainsi, le processus doit être fait par la CPU.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top