Aplicação de efeitos ao “Vídeo” de visualização da câmera do iPhone usando OpenGL

StackOverflow https://stackoverflow.com/questions/4893664

Pergunta

Meu objetivo é escrever um controlador de visualização de câmera personalizado que:

  1. Pode tirar fotos em todas as quatro orientações de interface com a câmera traseira e, quando disponível, frontal.
  2. Gira e dimensiona adequadamente o "vídeo" de visualização, bem como a foto em resolução total.
  3. Permite que um efeito (simples) seja aplicado a AMBOS o "vídeo" de visualização e a foto de resolução total.

Meu esforço anterior está documentado nesta pergunta . Minha última tentativa foi modificar o exemplo de GLVideoFrame da Apple (do WWDC 2010). No entanto, não consegui fazer com que o iPhone 4 exibisse o "vídeo" de visualização adequadamente quando a predefinição da sessão é AVCaptureSessionPresetPhoto.

Alguém já tentou fazer isso ou sabe por que o exemplo não funciona com esta predefinição?

O exemplo da Apple usa uma predefinição com dimensões de vídeo de 640x480 e um tamanho de textura padrão de 1280x720. A câmera traseira do iPhone 4 oferece apenas 852x640 quando a predefinição é AVCaptureSessionPresetPhoto.

Dimensões de vídeo / foto da câmera do dispositivo iOS quando predefinido é AVCaptureSessionPresetPhoto:

  • Verso do iPhone 4: o vídeo tem 852 x 640 e as fotos têm 2592 x 1936
  • iPhone 4 frontal: vídeo e fotos têm 640x480
  • Voltar para o iPod Touch 4G: vídeos e fotos são 960 x 720
  • iPod Touch 4G frontal: vídeo e fotos são 640x480
  • iPhone 3GS: o vídeo é 512x384 e as fotos são 2048x1536

< Budapate

Obtive o mesmo vídeo distorcido ao trocar o exemplo ColorTracking de Brad Larson (< um href="http://www.sunsetlakesoftware.com/2010/10/22/gpu-accelerated-video-processing-mac-and-ios" rel="nofollow noreferrer"> postagem do blog ) para usar o AVCaptureSessionPresetPhoto.

Foi útil?

Solução

O problema é que AVCaptureSessionPresetPhoto agora reconhece o contexto e é executado em diferentes resoluções com base na exibição de capturas de vídeo ou imagem estática.

A visualização ao vivo é diferente para este modo porque preenche as linhas com bytes extras.Suponho que seja algum tipo de otimização de hardware.

Em qualquer caso, você pode ver como resolvi o problema aqui:

iOS CVImageBuffer distorcido de AVCaptureSessionDataOutput com AVCaptureSessionDataOutput com AVCaptureSession

Outras dicas

O AVCaptureSessionPresetPhoto é para tirar fotos, não capturar imagens ao vivo. Você pode ler sobre isso aqui: http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/03_MediaCapture.html

(Acredito que se tratem de duas câmeras ou sensores diferentes, pois se comportam de maneira muito diferente e há um atraso de alguns segundos apenas para alternar entre a foto e, digamos, 640x480).

Você não pode nem usar as duas predefinições ao mesmo tempo, e alternar entre elas também é uma dor de cabeça - Como obter a saída de vídeo e a imagem com a resolução total da foto no AVFoundation Framework

HTH, embora não seja o que você queria ouvir ...

Oded.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top