Rotação inexplicável da câmera do Android na captura para alguns dispositivos (não em EXIF)
O que estou fazendo parece que deve ser simples, mas ainda estou perdido depois de ler todas as respostas possíveis do Stackoverflow que posso encontrar e pesquisar no Google todos os artigos que posso encontrar.
Estou usando uma visualização do SurfaceView e capturando uma imagem de uma atividade definida para screenOrientation = "landscape" no meu AndroidManifest.xml.
Segui o código de aplicativo da câmera de exemplo e pensei que as coisas estavam funcionando até que eu tentei o aplicativo em alguns dispositivos Motorola executando o 1.5.
Eu tenho o OrientationEventListener executando OK e uso a reflexão para ver se defina a rotação da seguinte forma:
final int latchedOrientation = roundOrientation(mLastOrientation + 90);
Parameters parameters = preview.camera.getParameters();
JPLog.d("Setting camera rotation = %d", latchedOrientation);
try {
// if >= 2.0
Method method = Camera.Parameters.class.getMethod("setRotation",
int.class);
if(method != null) {
method.invoke(parameters, latchedOrientation);
}
} catch(Throwable t) {
// if < 2.0
parameters.set("rotation", latchedOrientation);
}
preview.camera.setParameters(parameters);
NexusOne (OS 2.2) - Funciona bem. latchedOrientation = 0, figura OK sem qualquer rotação no cabeçalho EXIF.
T-Mobile G1 (OS 1.6) - Também funciona muito bem. latchedOrientation = 0, imagem OK.
Motorola Backflip (OS 1.5) - Imagem girada. latchedOrientation = 0, a imagem não possui rotação EXIF.
Motorola CLIQ (OS 1.5) - Imagem girada. latchedOrientation = 0, a imagem não possui rotação EXIF.
O que está acontecendo com esses dispositivos Motorola? Eu pensei que meu problema era que o driver da câmera da Motorola não estava rodando as imagens, então encontrei as aulas de leitura Sanselan EXIF para Android e estava me preparando para rotacioná-las. O engraçado é que existem cabeçalhos EXIF, mas nenhum elemento de rotação.
Se eu definir a rotação manualmente para 90 graus, as imagens sairão perfeitas para os dispositivos Motorola, mas agora o G1 e o NexusOne têm imagens giradas em 90 graus (não é o que eu quero). Tem que haver algo que eu não estou chegando aqui.
Duvido que seja um problema de 1,5 ou alguém teria postado informações sobre ele?