179d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu/* 279d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu * Copyright 2016 The Android Open Source Project 379d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu * 479d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu * Licensed under the Apache License, Version 2.0 (the "License"); 579d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu * you may not use this file except in compliance with the License. 679d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu * You may obtain a copy of the License at 779d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu * 879d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu * http://www.apache.org/licenses/LICENSE-2.0 979d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu * 1079d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu * Unless required by applicable law or agreed to in writing, software 1179d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu * distributed under the License is distributed on an "AS IS" BASIS, 1279d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1379d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu * See the License for the specific language governing permissions and 1479d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu * limitations under the License. 1579d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu */ 1679d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu 1779d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu#ifndef ANDROID_HARDWARE_GRAPHICS_MAPPER_V2_0_GRALLOCBUFFERDESCRIPTOR_H 1879d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu#define ANDROID_HARDWARE_GRAPHICS_MAPPER_V2_0_GRALLOCBUFFERDESCRIPTOR_H 1979d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu 2079d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu#include <android/hardware/graphics/mapper/2.0/IMapper.h> 2179d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu 2279d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wunamespace android { 2379d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wunamespace hardware { 2479d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wunamespace graphics { 2579d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wunamespace mapper { 2679d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wunamespace V2_0 { 2779d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wunamespace implementation { 2879d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu 2979d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wuusing android::hardware::graphics::common::V1_0::PixelFormat; 3079d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu 3179d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu/** 3279d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu * BufferDescriptor is created by IMapper and consumed by IAllocator. It is 3379d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu * versioned so that IMapper and IAllocator can be updated independently. 3479d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu */ 3579d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wuconstexpr uint32_t grallocBufferDescriptorSize = 7; 3679d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wuconstexpr uint32_t grallocBufferDescriptorMagicVersion = ((0x9487 << 16) | 0); 3779d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu 3879d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wuinline BufferDescriptor grallocEncodeBufferDescriptor( 3979d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu const IMapper::BufferDescriptorInfo& descriptorInfo) { 4079d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu BufferDescriptor descriptor; 4179d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu descriptor.resize(grallocBufferDescriptorSize); 4279d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu descriptor[0] = grallocBufferDescriptorMagicVersion; 4379d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu descriptor[1] = descriptorInfo.width; 4479d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu descriptor[2] = descriptorInfo.height; 4579d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu descriptor[3] = descriptorInfo.layerCount; 4679d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu descriptor[4] = static_cast<uint32_t>(descriptorInfo.format); 4779d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu descriptor[5] = static_cast<uint32_t>(descriptorInfo.usage); 4879d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu descriptor[6] = static_cast<uint32_t>(descriptorInfo.usage >> 32); 4979d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu 5079d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu return descriptor; 5179d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu} 5279d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu 5379d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wuinline bool grallocDecodeBufferDescriptor( 5479d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu const BufferDescriptor& descriptor, 5579d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu IMapper::BufferDescriptorInfo* outDescriptorInfo) { 5679d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu if (descriptor.size() != grallocBufferDescriptorSize || 5779d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu descriptor[0] != grallocBufferDescriptorMagicVersion) { 5879d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu return false; 5979d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu } 6079d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu 6179d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu *outDescriptorInfo = IMapper::BufferDescriptorInfo{ 6279d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu descriptor[1], 6379d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu descriptor[2], 6479d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu descriptor[3], 6579d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu static_cast<PixelFormat>(descriptor[4]), 6679d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu (static_cast<uint64_t>(descriptor[6]) << 32) | descriptor[5], 6779d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu }; 6879d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu 6979d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu return true; 7079d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu} 7179d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu 7279d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu} // namespace implementation 7379d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu} // namespace V2_0 7479d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu} // namespace mapper 7579d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu} // namespace graphics 7679d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu} // namespace hardware 7779d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu} // namespace android 7879d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu 7979d13ff0f5cd3c4242445baf5b2f01a52f0ed06fChia-I Wu#endif // ANDROID_HARDWARE_GRAPHICS_MAPPER_V2_0_GRALLOCBUFFERDESCRIPTOR_H 80