Я использую Camera2 и основываюсь на многих из примеров Google Camera2. У меня проблемы с соотношением сторон экрана на разных телефонах.
Я получаю наибольший размер вывода и устанавливаю предварительный просмотр; Это всегда соотношение сторон 4: 3. На Pixel, Galaxy S9, Galaxy Note 8 и Moto G5 + соотношение сторон всегда равно 4: 3.
На Pixel, Galaxy Note 8 и Moto G5 + поток, идущий к предварительному просмотру, имеет соотношение сторон 4: 3. Поток, который рисуется на Samsung Galaxy S9, имеет соотношение сторон 16: 9. Почему S9 выбирает потоковую передачу другого размера, чем я его установил? Я настроил предварительный просмотр на правильный размер, но выводится не то, что я установил.
Общая схема того, что я делаю, такова:
List<Size> outputSizes = Arrays.asList(streamConfigurationMap.getOutputSizes(renderingClass));
Final Size previewOutputSize = Collections.max(outputSizes, new AreaComparator());
((AspectRatioTextureView) preview).setAspectRatio(previewOutputSize.getWidth(), previewOutputSize.getHeight());
preview.getSurfaceTexture().setDefaultBufferSize(previewOutputSize.getWidth(), previewOutputSize.getHeight());
previewRequestBuilder = camera.getCaptureRequestBuilder(CameraDevice.TEMPLATE_PREVIEW);
previewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
previewRequestBuilder.addTarget(previewSurface);
camera.setRepeatingRequest(previewRequestBuilder.build(), new CaptureListener());