IGraphicBufferConsumer.cpp revision 9f3053de78630815d60cf48a2cf2348cc5867c45
1a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian/* 2a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * Copyright (C) 2013 The Android Open Source Project 3a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * 4a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 5a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * you may not use this file except in compliance with the License. 6a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * You may obtain a copy of the License at 7a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * 8a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 9a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * 10a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * Unless required by applicable law or agreed to in writing, software 11a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 12a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * See the License for the specific language governing permissions and 14a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * limitations under the License. 15a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian */ 16a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 17a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#define EGL_EGLEXT_PROTOTYPES 18a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 19a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <EGL/egl.h> 20a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <EGL/eglext.h> 21a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 22a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 23a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <stdint.h> 24a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <sys/types.h> 25a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 26a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <utils/Errors.h> 27a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 28a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <binder/Parcel.h> 29a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <binder/IInterface.h> 30a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 31a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <gui/IConsumerListener.h> 32a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <gui/IGraphicBufferConsumer.h> 33a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 34a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <ui/GraphicBuffer.h> 35a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <ui/Fence.h> 36a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 37a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <system/window.h> 38a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 39a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopiannamespace android { 40a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian// --------------------------------------------------------------------------- 41a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 42a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias AgopianIGraphicBufferConsumer::BufferItem::BufferItem() : 43a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mTransform(0), 44a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mScalingMode(NATIVE_WINDOW_SCALING_MODE_FREEZE), 45a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mTimestamp(0), 463c25621ad7d13f64d3ab95a27fa970fbc9998f73Andy McFadden mIsAutoTimestamp(false), 47a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mFrameNumber(0), 48a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mBuf(INVALID_BUFFER_SLOT), 49a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mIsDroppable(false), 50c1c05de415854eb7a13a16b7e22a22de8515123aMathias Agopian mAcquireCalled(false), 51c1c05de415854eb7a13a16b7e22a22de8515123aMathias Agopian mTransformToDisplayInverse(false) { 52a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mCrop.makeInvalid(); 53a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 54a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 55a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopiansize_t IGraphicBufferConsumer::BufferItem::getPodSize() const { 56a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian size_t c = sizeof(mCrop) + 57a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sizeof(mTransform) + 58a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sizeof(mScalingMode) + 59a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sizeof(mTimestamp) + 603c25621ad7d13f64d3ab95a27fa970fbc9998f73Andy McFadden sizeof(mIsAutoTimestamp) + 61a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sizeof(mFrameNumber) + 62a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sizeof(mBuf) + 63a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sizeof(mIsDroppable) + 64c1c05de415854eb7a13a16b7e22a22de8515123aMathias Agopian sizeof(mAcquireCalled) + 65c1c05de415854eb7a13a16b7e22a22de8515123aMathias Agopian sizeof(mTransformToDisplayInverse); 66a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return c; 67a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 68a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 69a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopiansize_t IGraphicBufferConsumer::BufferItem::getFlattenedSize() const { 70a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian size_t c = 0; 71a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (mGraphicBuffer != 0) { 72a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian c += mGraphicBuffer->getFlattenedSize(); 73a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::align<4>(c); 74a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 75a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (mFence != 0) { 76a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian c += mFence->getFlattenedSize(); 77a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::align<4>(c); 78a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 79a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return sizeof(int32_t) + c + getPodSize(); 80a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 81a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 82a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopiansize_t IGraphicBufferConsumer::BufferItem::getFdCount() const { 83a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian size_t c = 0; 84a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (mGraphicBuffer != 0) { 85a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian c += mGraphicBuffer->getFdCount(); 86a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 87a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (mFence != 0) { 88a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian c += mFence->getFdCount(); 89a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 90a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return c; 91a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 92a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 93a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianstatus_t IGraphicBufferConsumer::BufferItem::flatten( 94a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian void*& buffer, size_t& size, int*& fds, size_t& count) const { 95a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 96a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // make sure we have enough space 97a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (count < BufferItem::getFlattenedSize()) { 98a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_MEMORY; 99a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 100a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 101a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // content flags are stored first 102a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t& flags = *static_cast<uint32_t*>(buffer); 103a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 104a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // advance the pointer 105a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::advance(buffer, size, sizeof(uint32_t)); 106a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 107a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian flags = 0; 108a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (mGraphicBuffer != 0) { 109a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t err = mGraphicBuffer->flatten(buffer, size, fds, count); 110a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (err) return err; 111a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian size -= FlattenableUtils::align<4>(buffer); 112a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian flags |= 1; 113a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 114a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (mFence != 0) { 115a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t err = mFence->flatten(buffer, size, fds, count); 116a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (err) return err; 117a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian size -= FlattenableUtils::align<4>(buffer); 118a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian flags |= 2; 119a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 120a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 121a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // check we have enough space (in case flattening the fence/graphicbuffer lied to us) 122a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (size < getPodSize()) { 123a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_MEMORY; 124a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 125a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 126a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mCrop); 127a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mTransform); 128a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mScalingMode); 129a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mTimestamp); 1303c25621ad7d13f64d3ab95a27fa970fbc9998f73Andy McFadden FlattenableUtils::write(buffer, size, mIsAutoTimestamp); 131a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mFrameNumber); 132a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mBuf); 133a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mIsDroppable); 134a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mAcquireCalled); 135c1c05de415854eb7a13a16b7e22a22de8515123aMathias Agopian FlattenableUtils::write(buffer, size, mTransformToDisplayInverse); 136a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 137a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 138a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 139a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 140a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianstatus_t IGraphicBufferConsumer::BufferItem::unflatten( 141a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian void const*& buffer, size_t& size, int const*& fds, size_t& count) { 142a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 143a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (size < sizeof(uint32_t)) 144a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_MEMORY; 145a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 146a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t flags = 0; 147a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, flags); 148a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 149a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (flags & 1) { 150a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mGraphicBuffer = new GraphicBuffer(); 151a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t err = mGraphicBuffer->unflatten(buffer, size, fds, count); 152a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (err) return err; 153a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian size -= FlattenableUtils::align<4>(buffer); 154a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 155a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 156a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (flags & 2) { 157a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mFence = new Fence(); 158a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t err = mFence->unflatten(buffer, size, fds, count); 159a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (err) return err; 160a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian size -= FlattenableUtils::align<4>(buffer); 161a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 162a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 163a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // check we have enough space 164a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (size < getPodSize()) { 165a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_MEMORY; 166a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 167a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 168a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mCrop); 169a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mTransform); 170a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mScalingMode); 171a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mTimestamp); 1723c25621ad7d13f64d3ab95a27fa970fbc9998f73Andy McFadden FlattenableUtils::read(buffer, size, mIsAutoTimestamp); 173a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mFrameNumber); 174a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mBuf); 175a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mIsDroppable); 176a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mAcquireCalled); 177c1c05de415854eb7a13a16b7e22a22de8515123aMathias Agopian FlattenableUtils::read(buffer, size, mTransformToDisplayInverse); 178a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 179a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 180a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 181a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 182a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian// --------------------------------------------------------------------------- 183a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 184a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianenum { 185a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian ACQUIRE_BUFFER = IBinder::FIRST_CALL_TRANSACTION, 1869f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza DETACH_BUFFER, 1879f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza ATTACH_BUFFER, 188a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian RELEASE_BUFFER, 189a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CONSUMER_CONNECT, 190a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CONSUMER_DISCONNECT, 191a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian GET_RELEASED_BUFFERS, 192a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_DEFAULT_BUFFER_SIZE, 193a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_DEFAULT_MAX_BUFFER_COUNT, 194a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian DISABLE_ASYNC_BUFFER, 195a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_MAX_ACQUIRED_BUFFER_COUNT, 196a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_CONSUMER_NAME, 197a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_DEFAULT_BUFFER_FORMAT, 198a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_CONSUMER_USAGE_BITS, 199db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian SET_TRANSFORM_HINT, 200db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian DUMP, 201a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian}; 202a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 203a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 204a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianclass BpGraphicBufferConsumer : public BpInterface<IGraphicBufferConsumer> 205a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian{ 206a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianpublic: 207a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian BpGraphicBufferConsumer(const sp<IBinder>& impl) 208a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian : BpInterface<IGraphicBufferConsumer>(impl) 209a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian { 210a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 211a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 212a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t acquireBuffer(BufferItem *buffer, nsecs_t presentWhen) { 213a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 214a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 215a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt64(presentWhen); 216a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(ACQUIRE_BUFFER, data, &reply); 217a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 218a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 219a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 220a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian result = reply.read(*buffer); 221a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 222a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 223a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 224a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 225a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 226a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 2279f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza virtual status_t detachBuffer(int slot) { 2289f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza Parcel data, reply; 2299f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 2309f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza data.writeInt32(slot); 2319f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza status_t result = remote()->transact(DETACH_BUFFER, data, &reply); 2329f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza if (result != NO_ERROR) { 2339f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza return result; 2349f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza } 2359f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza result = reply.readInt32(); 2369f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza return result; 2379f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza } 2389f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza 2399f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza virtual status_t attachBuffer(int* slot, const sp<GraphicBuffer>& buffer) { 2409f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza Parcel data, reply; 2419f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 2429f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza data.write(*buffer.get()); 2439f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza status_t result = remote()->transact(ATTACH_BUFFER, data, &reply); 2449f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza if (result != NO_ERROR) { 2459f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza return result; 2469f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza } 2479f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza *slot = reply.readInt32(); 2489f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza result = reply.readInt32(); 2499f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza return result; 2509f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza } 2519f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza 252a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t releaseBuffer(int buf, uint64_t frameNumber, 2537d2d160cdc3cba9f4454f38433c94b68376cb843Igor Murashkin EGLDisplay display __attribute__((unused)), EGLSyncKHR fence __attribute__((unused)), 254a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian const sp<Fence>& releaseFence) { 255a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 256a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 257a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(buf); 258a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt64(frameNumber); 259a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.write(*releaseFence); 260a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(RELEASE_BUFFER, data, &reply); 261a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 262a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 263a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 264a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 265a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 266a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 267a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t consumerConnect(const sp<IConsumerListener>& consumer, bool controlledByApp) { 268a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 269a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 270a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeStrongBinder(consumer->asBinder()); 271a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(controlledByApp); 272a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(CONSUMER_CONNECT, data, &reply); 273a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 274a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 275a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 276a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 277a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 278a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 279a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t consumerDisconnect() { 280a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 281a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 282a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(CONSUMER_DISCONNECT, data, &reply); 283a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 284a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 285a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 286a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 287a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 288a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 289a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t getReleasedBuffers(uint32_t* slotMask) { 290a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 291a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 292a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(GET_RELEASED_BUFFERS, data, &reply); 293a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 294a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 295a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 296a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian *slotMask = reply.readInt32(); 297a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 298a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 299a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 300a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setDefaultBufferSize(uint32_t w, uint32_t h) { 301a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 302a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 303a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(w); 304a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(h); 305a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_DEFAULT_BUFFER_SIZE, data, &reply); 306a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 307a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 308a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 309a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 310a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 311a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 312a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setDefaultMaxBufferCount(int bufferCount) { 313a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 314a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 315a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(bufferCount); 316a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_DEFAULT_MAX_BUFFER_COUNT, data, &reply); 317a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 318a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 319a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 320a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 321a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 322a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 323a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t disableAsyncBuffer() { 324a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 325a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 326a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(DISABLE_ASYNC_BUFFER, data, &reply); 327a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 328a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 329a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 330a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 331a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 332a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 333a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setMaxAcquiredBufferCount(int maxAcquiredBuffers) { 334a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 335a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 336a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(maxAcquiredBuffers); 337a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_MAX_ACQUIRED_BUFFER_COUNT, data, &reply); 338a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 339a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 340a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 341a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 342a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 343a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 344a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual void setConsumerName(const String8& name) { 345a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 346a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 347a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeString8(name); 348a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian remote()->transact(SET_CONSUMER_NAME, data, &reply); 349a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 350a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 351a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setDefaultBufferFormat(uint32_t defaultFormat) { 352a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 353a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 354a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(defaultFormat); 355a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_DEFAULT_BUFFER_FORMAT, data, &reply); 356a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 357a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 358a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 359a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 360a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 361a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 362a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setConsumerUsageBits(uint32_t usage) { 363a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 364a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 365a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(usage); 366a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_CONSUMER_USAGE_BITS, data, &reply); 367a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 368a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 369a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 370a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 371a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 372a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 373a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setTransformHint(uint32_t hint) { 374a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 375a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 376a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(hint); 377a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_TRANSFORM_HINT, data, &reply); 378a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 379a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 380a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 381a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 382a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 383db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian 384db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian virtual void dump(String8& result, const char* prefix) const { 385db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian Parcel data, reply; 386db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 387db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian data.writeString8(result); 388db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian data.writeString8(String8(prefix ? prefix : "")); 389db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian remote()->transact(DUMP, data, &reply); 390db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian reply.readString8(); 391db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian } 392a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian}; 393a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 394a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias AgopianIMPLEMENT_META_INTERFACE(GraphicBufferConsumer, "android.gui.IGraphicBufferConsumer"); 395a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 396a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian// ---------------------------------------------------------------------- 397a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 398a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianstatus_t BnGraphicBufferConsumer::onTransact( 399a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 400a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian{ 401a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian switch(code) { 402a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case ACQUIRE_BUFFER: { 403a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 404a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian BufferItem item; 405a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian int64_t presentWhen = data.readInt64(); 406a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = acquireBuffer(&item, presentWhen); 407a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t err = reply->write(item); 408a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (err) return err; 409a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 410a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 411a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 4129f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza case DETACH_BUFFER: { 4139f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 4149f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza int slot = data.readInt32(); 4159f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza int result = detachBuffer(slot); 4169f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza reply->writeInt32(result); 4179f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza return NO_ERROR; 4189f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza } break; 4199f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza case ATTACH_BUFFER: { 4209f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 4219f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza sp<GraphicBuffer> buffer = new GraphicBuffer(); 4229f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza data.read(*buffer.get()); 4239f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza int slot; 4249f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza int result = attachBuffer(&slot, buffer); 4259f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza reply->writeInt32(slot); 4269f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza reply->writeInt32(result); 4279f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza return NO_ERROR; 4289f3053de78630815d60cf48a2cf2348cc5867c45Dan Stoza } break; 429a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case RELEASE_BUFFER: { 430a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 431a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian int buf = data.readInt32(); 432a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint64_t frameNumber = data.readInt64(); 433a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sp<Fence> releaseFence = new Fence(); 434a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t err = data.read(*releaseFence); 435a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (err) return err; 436a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = releaseBuffer(buf, frameNumber, 437a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian EGL_NO_DISPLAY, EGL_NO_SYNC_KHR, releaseFence); 438a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 439a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 440a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 441a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case CONSUMER_CONNECT: { 442a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 443a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sp<IConsumerListener> consumer = IConsumerListener::asInterface( data.readStrongBinder() ); 444a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian bool controlledByApp = data.readInt32(); 445a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = consumerConnect(consumer, controlledByApp); 446a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 447a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 448a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 449a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case CONSUMER_DISCONNECT: { 450a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 451a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = consumerDisconnect(); 452a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 453a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 454a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 455a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case GET_RELEASED_BUFFERS: { 456a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 457a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t slotMask; 458a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = getReleasedBuffers(&slotMask); 459a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(slotMask); 460a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 461a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 462a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 463a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_DEFAULT_BUFFER_SIZE: { 464a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 465a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t w = data.readInt32(); 466a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t h = data.readInt32(); 467a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setDefaultBufferSize(w, h); 468a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 469a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 470a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 471a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_DEFAULT_MAX_BUFFER_COUNT: { 472a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 473a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t bufferCount = data.readInt32(); 474a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setDefaultMaxBufferCount(bufferCount); 475a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 476a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 477a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 478a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case DISABLE_ASYNC_BUFFER: { 479a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 480a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = disableAsyncBuffer(); 481a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 482a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 483a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 484a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_MAX_ACQUIRED_BUFFER_COUNT: { 485a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 486a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t maxAcquiredBuffers = data.readInt32(); 487a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setMaxAcquiredBufferCount(maxAcquiredBuffers); 488a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 489a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 490a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 491a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_CONSUMER_NAME: { 492a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 493a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian setConsumerName( data.readString8() ); 494a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 495a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 496a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_DEFAULT_BUFFER_FORMAT: { 497a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 498a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t defaultFormat = data.readInt32(); 499a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setDefaultBufferFormat(defaultFormat); 500a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 501a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 502a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 503a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_CONSUMER_USAGE_BITS: { 504a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 505a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t usage = data.readInt32(); 506a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setConsumerUsageBits(usage); 507a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 508a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 509a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 510a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_TRANSFORM_HINT: { 511a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 512a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t hint = data.readInt32(); 513a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setTransformHint(hint); 514a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 515a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 516a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 517db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian case DUMP: { 518db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 519db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian String8 result = data.readString8(); 520db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian String8 prefix = data.readString8(); 521db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian static_cast<IGraphicBufferConsumer*>(this)->dump(result, prefix); 522db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian reply->writeString8(result); 523db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian return NO_ERROR; 524db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian } 525a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 526a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return BBinder::onTransact(code, data, reply, flags); 527a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 528a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 529a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian}; // namespace android 530