• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #pragma once
18 
19 #ifndef LOG_TAG
20 #warning "Mapper.h included without LOG_TAG"
21 #endif
22 
23 #include <android/hardware/graphics/mapper/2.1/IMapper.h>
24 #include <mapper-hal/2.0/Mapper.h>
25 #include <mapper-hal/2.1/MapperHal.h>
26 
27 namespace android {
28 namespace hardware {
29 namespace graphics {
30 namespace mapper {
31 namespace V2_1 {
32 namespace hal {
33 
34 namespace detail {
35 
36 // MapperImpl implements V2_*::IMapper on top of V2_*::hal::MapperHal
37 template <typename Interface, typename Hal>
38 class MapperImpl : public V2_0::hal::detail::MapperImpl<Interface, Hal> {
39    public:
40     // IMapper 2.1 interface
validateBufferSize(void * buffer,const IMapper::BufferDescriptorInfo & descriptorInfo,uint32_t stride)41     Return<Error> validateBufferSize(void* buffer,
42                                      const IMapper::BufferDescriptorInfo& descriptorInfo,
43                                      uint32_t stride) {
44         const native_handle_t* bufferHandle = getImportedBuffer(buffer);
45         if (!bufferHandle) {
46             return Error::BAD_BUFFER;
47         }
48 
49         return mHal->validateBufferSize(bufferHandle, descriptorInfo, stride);
50     }
51 
getTransportSize(void * buffer,IMapper::getTransportSize_cb hidl_cb)52     Return<void> getTransportSize(void* buffer, IMapper::getTransportSize_cb hidl_cb) {
53         const native_handle_t* bufferHandle = getImportedBuffer(buffer);
54         if (!bufferHandle) {
55             hidl_cb(Error::BAD_BUFFER, 0, 0);
56             return Void();
57         }
58 
59         uint32_t numFds = 0;
60         uint32_t numInts = 0;
61         Error error = mHal->getTransportSize(bufferHandle, &numFds, &numInts);
62         hidl_cb(error, numFds, numInts);
63         return Void();
64     }
65 
createDescriptor_2_1(const IMapper::BufferDescriptorInfo & descriptorInfo,IMapper::createDescriptor_2_1_cb hidl_cb)66     Return<void> createDescriptor_2_1(const IMapper::BufferDescriptorInfo& descriptorInfo,
67                                       IMapper::createDescriptor_2_1_cb hidl_cb) override {
68         BufferDescriptor descriptor;
69         Error error = mHal->createDescriptor_2_1(descriptorInfo, &descriptor);
70         hidl_cb(error, descriptor);
71         return Void();
72     }
73 
74    private:
75     using BaseType2_0 = V2_0::hal::detail::MapperImpl<Interface, Hal>;
76     using BaseType2_0::getImportedBuffer;
77     using BaseType2_0::mHal;
78 };
79 
80 }  // namespace detail
81 
82 using Mapper = detail::MapperImpl<IMapper, MapperHal>;
83 
84 }  // namespace hal
85 }  // namespace V2_1
86 }  // namespace mapper
87 }  // namespace graphics
88 }  // namespace hardware
89 }  // namespace android
90