vr_composer_client.cpp revision 95a99a1d3cdbd19343d0d27271098c9c01a63e78
151a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara/* 251a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara * Copyright 2016 The Android Open Source Project 351a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara * 451a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara * Licensed under the Apache License, Version 2.0 (the "License"); 551a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara * you may not use this file except in compliance with the License. 651a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara * You may obtain a copy of the License at 751a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara * 851a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara * http://www.apache.org/licenses/LICENSE-2.0 951a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara * 1051a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara * Unless required by applicable law or agreed to in writing, software 1151a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara * distributed under the License is distributed on an "AS IS" BASIS, 1251a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1351a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara * See the License for the specific language governing permissions and 1451a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara * limitations under the License. 1551a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara */ 1651a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara 1795a99a1d3cdbd19343d0d27271098c9c01a63e78Daniel Nicoara#include <android/frameworks/vr/composer/1.0/IVrComposerClient.h> 1851a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara#include <hardware/gralloc.h> 1951a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara#include <hardware/gralloc1.h> 2051a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara#include <log/log.h> 2151a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara 2251a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara#include "vr_hwc.h" 2351a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara#include "vr_composer_client.h" 2451a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara 2551a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoaranamespace android { 2651a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoaranamespace dvr { 2751a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara 2851a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoarausing android::hardware::graphics::common::V1_0::PixelFormat; 2995a99a1d3cdbd19343d0d27271098c9c01a63e78Daniel Nicoarausing android::frameworks::vr::composer::V1_0::IVrComposerClient; 3051a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara 3151a0a56385f4176447d8168f9395341b3e7574a0Daniel NicoaraVrComposerClient::VrComposerClient(dvr::VrHwc& hal) 3251a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara : ComposerClient(hal), mVrHal(hal) {} 3351a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara 3451a0a56385f4176447d8168f9395341b3e7574a0Daniel NicoaraVrComposerClient::~VrComposerClient() {} 3551a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara 3651a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoarastd::unique_ptr<ComposerClient::CommandReader> 3751a0a56385f4176447d8168f9395341b3e7574a0Daniel NicoaraVrComposerClient::createCommandReader() { 3851a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara return std::unique_ptr<CommandReader>(new VrCommandReader(*this)); 3951a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara} 4051a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara 4151a0a56385f4176447d8168f9395341b3e7574a0Daniel NicoaraVrComposerClient::VrCommandReader::VrCommandReader(VrComposerClient& client) 4251a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara : CommandReader(client), mVrClient(client), mVrHal(client.mVrHal) {} 4351a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara 4451a0a56385f4176447d8168f9395341b3e7574a0Daniel NicoaraVrComposerClient::VrCommandReader::~VrCommandReader() {} 4551a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara 4651a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoarabool VrComposerClient::VrCommandReader::parseCommand( 4751a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara IComposerClient::Command command, uint16_t length) { 4851a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara IVrComposerClient::VrCommand vrCommand = 4951a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara static_cast<IVrComposerClient::VrCommand>(command); 5051a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara switch (vrCommand) { 5151a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara case IVrComposerClient::VrCommand::SET_LAYER_INFO: 5251a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara return parseSetLayerInfo(length); 5351a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara default: 5451a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara return CommandReader::parseCommand(command, length); 5551a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara } 5651a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara} 5751a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara 5851a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoarabool VrComposerClient::VrCommandReader::parseSetLayerInfo(uint16_t length) { 5951a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara if (length != 2) { 6051a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara return false; 6151a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara } 6251a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara 6351a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara auto err = mVrHal.setLayerInfo(mDisplay, mLayer, read(), read()); 6451a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara if (err != Error::NONE) { 6551a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara mWriter.setError(getCommandLoc(), err); 6651a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara } 6751a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara 6851a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara return true; 6951a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara} 7051a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara 7151a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara} // namespace dvr 7251a0a56385f4176447d8168f9395341b3e7574a0Daniel Nicoara} // namespace android 73