프레임 메타데이터는 Android 11에서 BufferDesc 데이터 구조의 한 요소로 도입되었습니다. 이 새로운 필드는 고객 정의 데이터 형식을 수용하기 위해 vec<uint8_t>
로 선언되며 EVS Manager에 불투명합니다.
struct BufferDesc { /** * HIDL counterpart of AHardwareBuffer_Desc. Please see * hardware/interfaces/graphics/common/1.2/types.hal for more details. */ HardwareBuffer buffer; ... /** * Time that this buffer is being filled. */ int64_t timestamp; /** * Frame metadata field. This is opaque to EVS manager. */ vec<uint8_t> metadata; };
HIDL vec<T>
는 별도의 버퍼에 저장된 데이터를 갖는, 동적 크기의 배열을 나타냅니다. 이러한 인스턴스는 구조체에서 vec<T>
의 인스턴스로 표현됩니다. 즉, EVS 카메라 HAL 드라이버 구현이 이 메타데이터를 소유해 적절히 정리해야 한다는 의미입니다. 메타데이터는 다음 두 가지 방법으로 채울 수 있습니다.
operator[]
을 사용하여 컨테이너 크기를 조절하고 데이터를 채웁니다.struct BufferDesc desc = {}; ... desc.metadata.resize(10); for (auto i = 0; i < 10; ++i) { desc.metadata[i] = frameInfo[i]; } ...
setToExternal()
을 사용하여vec<T>
가 맞춤 데이터 구조를 가리키도록 합니다.struct BufferDesc desc = {}; struct FrameMetadata metadata = { ... }; // this is in vendor-defined format.
desc.metadata.setToExternal(&metadata, sizeof(metadata)); ...