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