Aplicação de efeitos ao “Vídeo” de visualização da câmera do iPhone usando OpenGL
-
28-10-2019 - |
Pergunta
Meu objetivo é escrever um controlador de visualização de câmera personalizado que:
- Pode tirar fotos em todas as quatro orientações de interface com a câmera traseira e, quando disponível, frontal.
- Gira e dimensiona adequadamente o "vídeo" de visualização, bem como a foto em resolução total.
- 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.
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:
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.