Pregunta

Mi objetivo es escribir un controlador de vista de cámara personalizado que:

  1. Puede tomar fotos en las cuatro orientaciones de la interfaz con la cámara trasera y, cuando esté disponible, la cámara frontal.
  2. Gira y escala correctamente el "video" de vista previa, así como la foto de resolución completa.
  3. Permite que un efecto (simple) se aplique TANTO al "video" de vista previa como a la foto de resolución completa.

Mi esfuerzo anterior está documentado en esta pregunta . Mi último intento fue modificar el GLVideoFrame de muestra de Apple (de WWDC 2010). Sin embargo, no he podido hacer que el iPhone 4 muestre el "video" de vista previa correctamente cuando la sesión preestablecida es AVCaptureSessionPresetPhoto.

¿Alguien ha probado esto o sabe por qué el ejemplo no funciona con este ajuste preestablecido?

El ejemplo de Apple usa un ajuste preestablecido con dimensiones de video de 640x480 y un tamaño de textura predeterminado de 1280x720. La cámara trasera del iPhone 4 ofrece solo 852x640 cuando el valor predeterminado es AVCaptureSessionPresetPhoto.

Dimensiones de video / foto de la cámara del dispositivo iOS cuando el valor predeterminado es AVCaptureSessionPresetPhoto:

  • Parte posterior del iPhone 4: el video es de 852 x 640 y las fotos son de 2592 x 1936
  • Parte frontal del iPhone 4: los videos y las fotos son de 640x480
  • Parte posterior del iPod Touch 4G: los videos y las fotos son de 960 x 720
  • Parte frontal del iPod Touch 4G: los videos y las fotos son de 640x480
  • iPhone 3GS: el video es de 512 x 384 y las fotos son de 2048 x 1536

<”Actualización

Obtuve el mismo resultado de video ilegible al cambiar el ejemplo de ColorTracking de Brad Larson (< una href="http://www.sunsetlakesoftware.com/2010/10/22/gpu-accelerated-video-processing-mac-and-ios" rel="nofollow noreferrer"> entrada de blog ) para usar el AVCaptureSessionPresetPhoto.

¿Fue útil?

Solución

El problema es que AVCaptureSessionPresetPhoto ahora es sensible al contexto y se ejecuta en diferentes resoluciones en función de si muestra capturas de video o imágenes fijas.

La vista previa en vivo es diferente para este modo porque rellena las filas con bytes adicionales.Supongo que se trata de una especie de optimización de hardware.

En cualquier caso, puedes ver cómo resolví el problema aquí:

iOS CVImageBuffer distorsionado desde AVCaptureSession con AVPressionPuture

Otros consejos

AVCaptureSessionPresetPhoto es para tomar fotografías, no para capturar imágenes en vivo. Puede leer sobre esto aquí: http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/03_MediaCapture.html

(Creo que en realidad se trata de dos cámaras o sensores diferentes, ya que se comportan de manera muy diferente, y hay un retraso de un par de segundos solo para cambiar entre la foto y, digamos, 640x480).

Ni siquiera puedes usar ambos ajustes preestablecidos al mismo tiempo, y cambiar entre ellos también es un dolor de cabeza - Cómo obtener tanto la salida de video como la imagen de resolución de foto completa en AVFoundation Framework

HTH, aunque no es lo que querías escuchar ...

Oded.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top