Я разрабатываю пользовательское приложение Camera API 2 и замечаю, что преобразование формата захвата на некоторых устройствах отличается, когда я использую обратный вызов ImageReader.
Например, в Nexus 4 не работает нормально, а в Nexus5X выглядит нормально, вот результат.
Я инициализирую ImageReader в такой форме:
mImageReader = ImageReader.newInstance(320, 240, ImageFormat.YUV_420_888,2);
И мой обратный вызов - это простой обратный вызов ImageReader Callback.
mOnImageAvailableListener = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable( ImageReader reader) {
try {
mBackgroundHandler.post(
new ImageController(reader.acquireNextImage())
);
}
catch(Exception e)
{
//exception
}
}
};
А в случае Nexus 4: у меня была такая ошибка.
D/qdgralloc: gralloc_lock_ycbcr: Invalid format passed: 0x32315659
Когда я пытаюсь записать необработанный файл на обоих устройствах, у меня появляются разные изображения. Итак, я понимаю, что изображение Nexus 5X имеет кодировку NV21, а Nexus 4 - кодировку YV12.
Я нашел спецификацию формата изображения и пытаюсь получить формат в ImageReader. Есть варианты YV12 и NV21, но, очевидно, я получаю формат YUV_420_888, когда пытаюсь получить формат.
int test=mImageReader.getImageFormat();
Итак, есть ли способ получить формат ввода камеры (NV21 или YV12), чтобы различать эти типы кодификации в классе камеры? КамераХарактеристики может быть?
Заранее спасибо.
Унаи. PD: Я использую OpenGL для отображения изображений RGB, и я использую Opencv для преобразования в YUV_420_888.
Image.getFormat()
возвращает то же, что и форматImageReader
? и кажется, что вы не одиноки: http://stackoverflow.com/questions/34717969/imagereader-format-overridden-in-some-devices - person nandsito   schedule 18.11.2016Camera.Parameters.getSupportedPictureFormats()
, какие форматы поддерживаются? - person Robert   schedule 18.11.2016