Android 15에서는 관심 영역 (RoI) 사용자 구성을 Android 동영상 인코딩 프레임워크에 통합하는 표준화된 프로세스를 도입합니다. 이 기능은 사용자 구성을 동영상 인코더에 통합하고 분석하는 공개 API를 제공하여 관심 영역의 압축 품질을 개선합니다.
구현
SoC 공급업체와 OEM은 FEATURE_Roi
플래그를 사용하여 동영상 인코딩의 관심 영역 지원을 제어할 수 있습니다. FEATURE_Roi
이 사용 설정되지 않으면 동영상 인코더 동작이 변경되지 않습니다.
동영상 프레임워크 변경사항
이 섹션에서는 이 기능을 구현하는 데 필요한 동영상 프레임워크의 변경사항을 자세히 설명합니다.
Codec2의 키
Android 15에서는 양자화 매개변수 맵(QP_map
)과 직사각형 구성 (rect
)이 관심 영역 구성 유형으로 정의됩니다. 또한 이러한 새로운 유형을 지원하기 위해 Codec2 (C2)에 두 개의 키가 도입되었습니다. 두 키의 사용량은 공개 API와 동일합니다.
인코더의 프레임 루프 내에서 구성은 실행 단계 중에 입력 버퍼가 대기열에 추가되기 전에 다음과 같이 동적으로 조정됩니다.
고정 시나리오에서 현재 프레임에 RoI 구성이 제공되지 않으면 인코더는 이전 프레임과 동일한 구성을 사용합니다.
동적 시나리오에서는 RoI 구성 유형이 동적으로 변경될 수 있습니다.
C2의 새 키는 다음 섹션에 설명되어 있습니다.
kParamIndexQpOffsetMapBuffer
kParamIndexQpOffsetMapBuffer
키는 프레임의 qp-offset
맵을 나타냅니다. 이 값은 setParameters
의 입력 매개변수 PARAMETER_KEY_QP_OFFSET_MAP
을 사용하여 설정됩니다.
kParamIndexQpOffsetMapBuffer
는 C2InfoBuffer
의 바이트 배열이며, 속성은 다음과 같습니다.
길이: 한 프레임의 16x16 블록 수입니다.
값: 배열의 각 값은 -51~51 범위의 16x16 블록의 QP 오프셋입니다. 타겟 최대 코딩 단위 (LCU)의 QP는 인코더 속도 제어에 오프셋을 더하여 계산됩니다. 계산된 결과가 0~51 영역을 초과하면 값이 0~51로 잘립니다.
- 0인 경우: QP 오프셋이 없으며 QP는 원래 비율 제어에 따라 결정됩니다.
- 0이 아닌 경우: QP는 원래의 속도 제어에 오프셋을 더한 값입니다.
- 부정적인 경우: 타겟 LCU에서 동영상 품질이 향상됩니다.
- 긍정적인 경우: 타겟 LCU에서 동영상 품질이 감소합니다.
사용: 사용자는 이 키를 16x16 블록으로 구성해야 합니다. 인코더는 LCU의 16x16 블록 값을 평균화하여 실제 LCU 크기에 맞게 구성을 조정합니다.
C2_PARAMKEY_QP_OFFSET_RECTS
C2_PARAMKEY_QP_OFFSET_RECTS
키 (coding.qp-offset-rects
로 설정)는 관심 영역을 QpOffset-Rects
로 설정합니다. 값은 setParameters
의 입력 매개변수 PARAMETER_KEY_QP_OFFSET_RECTS
을 사용하여 설정됩니다.
이 키를 지원하기 위해 다음 구조 C2QpOffsetRectStruct
가 도입됩니다.
struct C2QpOffsetRectStruct : C2Rect {
int32_t qpOffset;
DEFINE_AND_DESCRIBE_C2STRUCT(QpOffsetRect)
C2FIELD(width, "width")
C2FIELD(height, "height")
C2FIELD(left, "left")
C2FIELD(top, "top")
C2FIELD(qpOffset, "qp-offset")
}
각각의 의미는 다음과 같습니다.
top
및left
: 직사각형 모양의 관심 영역 좌표입니다. RoI가 LCU 경계에 맞게 늘어납니다. 이 값은 각 픽셀의 왼쪽 상단 모서리를 나타내므로 ((0,0), (16, 16))은 전체 16x16 블록을 정의합니다.qpOffset
: 배열의 각 값은 타겟rect
영역의 QP 오프셋을 나타냅니다. 정의와 사용법은kParamIndexQpOffsetMapBuffer
값과 동일합니다.
매핑 알고리즘
다음 표에서는 공개 키와 동영상 프레임워크 간의 매핑을 보여줍니다.
공개 키 또는 API | 동영상 프레임워크의 매핑 |
---|---|
PARAMETER_KEY_QP_OFFSET_MAP |
값은 kParamIndexQpOffsetMapBuffer 에 C2InfoBuffer 인스턴스로 전달됩니다. |
PARAMETER_KEY_QP_OFFSET_RECTS |
값이 String 에서 Struct C2QpOffsetRectStruct 로 변환되고 C2_PARAMKEY_QP_OFFSET_RECTS 에 전달됩니다. |
오류 처리
OEM 구현은 다음 오류 사례를 처리해야 합니다.
오류 사례 | 예 | 취급 |
---|---|---|
공급업체 키와 표준화된 키는 모두 관심 영역을 사용 설정하는 데 사용됩니다. | 사용자가 setFeatureEnabled(FEATURE_ROI) 와 공급업체 키를 모두 호출하여 관심 영역을 사용 설정합니다. |
관심 영역을 사용 설정해야 합니다. |
QP 오프셋이 범위 내에 있지만 SoC 공급업체에서 지원하지 않습니다. | 사용자가 QP 오프셋을 12로 설정하지만 SoC는 최대 10까지만 QP 오프셋을 지원합니다. | 지원되는 QP 오프셋 범위는 최선의 노력으로 남겨집니다. 값은 SoC의 지원 범위로 클램핑됩니다. |
표준화된 키든 공급업체별 키든 여러 관심 영역 구성이 단일 프레임으로 설정됩니다. | 사용자가 프레임 1에 표준화된 키와 공급업체 키를 모두 사용합니다. | 사용 가능한 경우 프레임워크는 첫 번째 표준화된 rect 구성, 첫 번째 표준화된 QP_map 구성 또는 둘 다를 유지합니다. 각 카테고리에서 프레임워크는 표준화된 구성 하나만 SoC에 전송하며 표준화된 구성을 사용할 수 있는 경우 SoC 구현은 공급업체 구성을 무시해야 합니다. 여러 구성이 SoC에 전송되는 경우 SoC 공급업체는 하나의 RoI 구성만 유지하고 나머지 구성은 무시해야 합니다.구성은 다음 우선순위 순으로 유지됩니다.
|