프레임 메타데이터

프레임 메타데이터는 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)); ...