getSupportedPictureSize () retorna um valor que não é realmente suportado pelo Nexus4
Eu estendi um SurfaceView para exibir o feed da câmera para um aplicativo de câmera muito simples. Para encontrar o tamanho de visualização ideal para cada dispositivo, usei esse código de amostra que é usado em quase todos os aplicativos de câmera de código aberto que vi:
List<Camera.Size> sizes = parameters.getSupportedPreviewSizes();
double minDiff = Double.MAX_VALUE;
for (Camera.Size size : sizes) {
if (Math.abs(size.width - width) < minDiff) {
screenWidth = size.width;
screenHeight = size.height;
minDiff = Math.abs(size.width - width);
}
}
Tudo funciona perfeitamente até este ponto.
Agora, devido à natureza do aplicativo, eu tenho que manter dois bitmaps na memória durante o curso de uma sessão e por uma questão de simplicidade (evitando problemas de memória durante o teste) usei o mesmo código para o TAMANHO DA IMAGEM (substituído getSupportedPreviewSizes () com getSupportedPictureSizes ()). Tudo funciona muito bem na maioria dos dispositivos, embora eu tenha que decidir outra maneira de escolher o tamanho de imagem ideal para cada dispositivo.
Recentemente, durante o teste em um dispositivo Nexus 4, esse loop anterior falhou ao escolher o tamanho ideal da imagem. Após a investigação, descobri que as funções getSupportedPictureSizes () retornam um valor, ou seja, 1280 * 960, que na verdade não é suportado pela câmera do Nexus 4. Então, como alguém resolve esse problema? Quero dizer, essa função não deve apenas retornar os valores que a câmera do dispositivo suporta? Tenho certeza de que haverá outros dispositivos com o mesmo problema que não poderei testar. Alguma pista de como esse problema deve ser resolvido?
UPDATE: O que está acontecendo é que ele aceita o parâmetro errado sem nenhum erro e a imagem que ele retorna é distorcida, vou tentar tirar uma foto aqui também. Além disso, não há exceções de tempo de execução.