Необъяснимое вращение камеры Android при захвате для некоторых устройств (не в EXIF)

То, что я делаю, кажется, должно быть простым, но я все еще теряюсь после того, как прочитал все возможные ответы Stackoverflow, которые смог найти, и искал в Google все статьи, которые смог найти .

Я использую предварительный просмотр SurfaceView и захватываю изображение из действия, которое установлено для screenOrientation = "landscape" в моем AndroidManifest.xml.

Я следил за примером кода приложения камеры и думал, что все работает, пока я попробовал мое приложение на нескольких устройствах Motorola под управлением 1.5.

У меня есть OrientationEventListener, работающий нормально, и я использую отражение, чтобы проверить, задано ли вращение как таковое:

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) - Отлично работает. latchedOrientation = 0, картинка в порядке, без поворота в заголовке EXIF.

T-Mobile G1 (OS 1.6) - Также отлично работает. latchedOrientation = 0, изображение в порядке.

Motorola Backflip (OS 1.5) - Изображение повернуто. latchedOrientation = 0, изображение не имеет поворота EXIF.

Motorola CLIQ (OS 1.5) - Изображение повернуто. latchedOrientation = 0, изображение не имеет вращения EXIF.

Что происходит с этими устройствами Motorola? Я думал, что моя проблема в том, что драйвер камеры Motorola не поворачивает изображения, поэтому нашел классы чтения Sanselan EXIF ​​для Android и готовился повернуть их сам. Забавно то, что есть заголовки EXIF, но нет элемента поворота.

Если я установил поворот вручную на 90 градусов, изображения получаются идеальными для устройств Motorola, но теперь у G1 и NexusOne есть изображения, повернутые на 90 градусов ( не то что хочу). Должно быть что-то, что я ' м не попадаю сюда.

Я сомневаюсь, что это проблема версии 1.5, иначе кто-нибудь опубликовал бы информацию об этом?

29
задан Scott Merritt 4 October 2010 в 00:33
поделиться