출력 스트림 및 자르기

출력 스트림

모든 해상도 및 출력 형식에서 카메라 하위 시스템은 ANativeWindow 기반 파이프라인에서만 작동합니다. GPU, 동영상 인코더, RenderScript 또는 앱 표시 버퍼(RAW Bayer, 처리된 YUV 버퍼 또는 JPEG로 인코딩된 버퍼)와 같은 여러 타겟에 단일 프레임을 전송하도록 한 번에 여러 스트림을 구성할 수 있습니다.

이러한 출력 스트림은 최적화의 일환으로 미리 구성되어야 하며, 한 번에 제한된 수만 존재할 수 있습니다. 이를 통해 메모리 버퍼를 사전 할당하고 카메라 하드웨어를 구성할 수 있으므로 여러 또는 다양한 출력 파이프라인이 나열된 상태에서 요청이 제출되는 경우 요청 처리 시 지연이 발생하지 않습니다.

지원 하드웨어 수준에 종속되는 보장된 스트림 출력 조합에 관한 자세한 내용은 createCaptureSession()을 참조하세요.

자르기

디지털 줌 및 FOV가 더 작아야 하는 사용 사례에 적합한 전체 픽셀 배열 자르기는 ANDROID_SCALER_CROP_REGION 설정을 통해 전달됩니다. 이는 요청별 설정이며, 요청별로 변경할 수 있으므로 원활한 디지털 줌을 구현하는 데 매우 중요합니다.

영역은 직사각형(x, y, 너비, 높이)으로 정의되며, (x, y)는 직사각형의 왼쪽 상단을 나타냅니다. 직사각형은 센서 활성 픽셀 배열의 좌표계에서 정의되며, (0,0)은 활성 픽셀 배열의 왼쪽 상단 픽셀에 해당합니다. 따라서 너비와 높이는 ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY 정적 정보 필드에 보고된 크기보다 클 수 없습니다. HAL은 지원되는 최대 확대/축소 배율을 설명하는 ANDROID_SCALER_MAX_DIGITAL_ZOOM 정적 정보 필드를 통해 허용 가능한 최소 너비와 높이를 보고합니다. 따라서 최소 자르기 영역 너비와 높이는 다음과 같습니다.

      {width, height} =
       { floor(ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY[0] /
           ANDROID_SCALER_MAX_DIGITAL_ZOOM),
         floor(ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY[1] /
           ANDROID_SCALER_MAX_DIGITAL_ZOOM) }
    

자르기 영역이 특정 요구사항을 충족해야 하는 경우(예: 짝수 좌표에서 시작해야 하며, 너비와 높이가 짝수여야 함) HAL은 필요한 반올림 작업을 수행하고 출력 결과 메타데이터에 사용되는 최종 자르기 영역을 작성해야 합니다. 마찬가지로 HAL이 동영상 안정화를 구현하는 경우 동영상 안정화가 적용된 후 출력에 실제로 포함되는 영역을 설명하도록 결과의 자르기 영역을 조정해야 합니다. 일반적으로 카메라를 사용하는 애플리케이션은 자르기 영역, 이미지 센서의 크기 및 렌즈 초점 거리에 따라 수신하는 시야를 결정할 수 있어야 합니다.

자르기 영역은 자르기 영역과 가로세로 비율이 다를 수 있는 모든 스트림에 적용되므로 각 스트림에 사용되는 정확한 센서 영역은 자르기 영역보다 작을 수 있습니다. 특히 각 스트림은 정의된 자르기 영역을 최소한으로 더 잘라서 정사각형 픽셀과 가로세로 비율을 유지해야 합니다. 스트림의 가로세로 비율이 자르기 영역보다 넓으면 스트림을 더 수직으로 자르고, 스트림의 가로세로 비율이 자르기 영역보다 좁으면 스트림을 가로로 더 잘라야 합니다.

모든 경우에 스트림 자르기는 전체 자르기 영역의 중앙에 위치해야 하며, 각 스트림은 전체 자르기 영역을 기준으로 수평이나 수직 중 한쪽으로만 잘리며, 양쪽이 다 잘리지는 않습니다.

예를 들어 640x480 스트림(4:3 비율)과 1280x720 스트림(16:9 비율)의 두 스트림이 정의되고, 센서가 3MP(2000 x 1500 픽셀 배열)라고 가정했을 때 다음은 각 스트림 일부 샘플 자르기 영역의 예상 출력 영역을 보여줍니다.

자르기 영역: (500, 375, 1000, 750)(4:3 가로세로 비율)
640x480 스트림 자르기: (500, 375, 1000, 750)(자르기 영역과 동일) 1280x720 스트림 자르기: (500, 469, 1000, 562)

crop-region-43-ratio

그림 1. 4:3 가로세로 비율

자르기 영역: (500, 375, 1333, 750)(16:9 가로세로 비율)
640x480 스트림 자르기: (666, 375, 1000, 750) 1280x720 스트림 자르기: (500, 375, 1333, 750)(자르기 지역과 동일)

crop-region-169-ratio

그림 2. 16:9 가로세로 비율

자르기 영역: (500, 375, 750, 750)(1:1 가로세로 비율)
640x480 스트림 자르기: (500, 469, 750, 562) 1280x720 스트림 자르기: (500, 543, 750, 414)

crop-region-11-ratio

그림 3. 1:1 가로세로 비율

마지막 예시는 480p 스트림이 아닌 1024x1024의 정사각형 가로세로 비율 스트림입니다.
자르기 영역: (500, 375, 1000, 750)(4:3 가로세로 비율) 1024x1024 스트림 자르기: (625, 375, 750, 750) 1280x720 스트림 자르기: (500, 469, 1000, 562)

crop-region-43-square-ratio

그림 4. 4:3 가로세로 비율, 정사각형

재처리

RAW 이미지 파일에 대한 추가 지원은 RAW Bayer 데이터에 관한 재처리 지원을 통해 제공됩니다. 이 지원을 통해 카메라 파이프라인은 이전에 캡처된 RAW 버퍼와 메타데이터(이전에 녹화된 전체 프레임)를 처리하여 새롭게 렌더링된 YUV 또는 JPEG 출력을 생성합니다.