IGraphicBufferConsumer.cpp revision 399184a4cd728ea1421fb0bc1722274a29e38f4a
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> 27399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall#include <utils/NativeHandle.h> 28a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 29a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <binder/Parcel.h> 30a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <binder/IInterface.h> 31a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 32a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <gui/IConsumerListener.h> 33a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <gui/IGraphicBufferConsumer.h> 34a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 35a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <ui/GraphicBuffer.h> 36a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <ui/Fence.h> 37a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 38a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <system/window.h> 39a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 40a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopiannamespace android { 41a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian// --------------------------------------------------------------------------- 42a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 43a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias AgopianIGraphicBufferConsumer::BufferItem::BufferItem() : 44a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mTransform(0), 45a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mScalingMode(NATIVE_WINDOW_SCALING_MODE_FREEZE), 46a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mTimestamp(0), 473c25621ad7d13f64d3ab95a27fa970fbc9998f73Andy McFadden mIsAutoTimestamp(false), 48a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mFrameNumber(0), 49a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mBuf(INVALID_BUFFER_SLOT), 50a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mIsDroppable(false), 51c1c05de415854eb7a13a16b7e22a22de8515123aMathias Agopian mAcquireCalled(false), 52c1c05de415854eb7a13a16b7e22a22de8515123aMathias Agopian mTransformToDisplayInverse(false) { 53a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mCrop.makeInvalid(); 54a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 55a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 56a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopiansize_t IGraphicBufferConsumer::BufferItem::getPodSize() const { 57a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian size_t c = sizeof(mCrop) + 58a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sizeof(mTransform) + 59a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sizeof(mScalingMode) + 60a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sizeof(mTimestamp) + 613c25621ad7d13f64d3ab95a27fa970fbc9998f73Andy McFadden sizeof(mIsAutoTimestamp) + 62a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sizeof(mFrameNumber) + 63a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sizeof(mBuf) + 64a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sizeof(mIsDroppable) + 65c1c05de415854eb7a13a16b7e22a22de8515123aMathias Agopian sizeof(mAcquireCalled) + 66c1c05de415854eb7a13a16b7e22a22de8515123aMathias Agopian sizeof(mTransformToDisplayInverse); 67a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return c; 68a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 69a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 70a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopiansize_t IGraphicBufferConsumer::BufferItem::getFlattenedSize() const { 71a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian size_t c = 0; 72a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (mGraphicBuffer != 0) { 73a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian c += mGraphicBuffer->getFlattenedSize(); 74a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::align<4>(c); 75a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 76a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (mFence != 0) { 77a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian c += mFence->getFlattenedSize(); 78a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::align<4>(c); 79a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 80a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return sizeof(int32_t) + c + getPodSize(); 81a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 82a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 83a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopiansize_t IGraphicBufferConsumer::BufferItem::getFdCount() const { 84a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian size_t c = 0; 85a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (mGraphicBuffer != 0) { 86a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian c += mGraphicBuffer->getFdCount(); 87a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 88a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (mFence != 0) { 89a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian c += mFence->getFdCount(); 90a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 91a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return c; 92a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 93a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 94a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianstatus_t IGraphicBufferConsumer::BufferItem::flatten( 95a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian void*& buffer, size_t& size, int*& fds, size_t& count) const { 96a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 97a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // make sure we have enough space 98a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (count < BufferItem::getFlattenedSize()) { 99a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_MEMORY; 100a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 101a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 102a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // content flags are stored first 103a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t& flags = *static_cast<uint32_t*>(buffer); 104a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 105a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // advance the pointer 106a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::advance(buffer, size, sizeof(uint32_t)); 107a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 108a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian flags = 0; 109a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (mGraphicBuffer != 0) { 110a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t err = mGraphicBuffer->flatten(buffer, size, fds, count); 111a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (err) return err; 112a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian size -= FlattenableUtils::align<4>(buffer); 113a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian flags |= 1; 114a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 115a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (mFence != 0) { 116a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t err = mFence->flatten(buffer, size, fds, count); 117a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (err) return err; 118a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian size -= FlattenableUtils::align<4>(buffer); 119a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian flags |= 2; 120a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 121a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 122a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // check we have enough space (in case flattening the fence/graphicbuffer lied to us) 123a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (size < getPodSize()) { 124a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_MEMORY; 125a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 126a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 127a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mCrop); 128a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mTransform); 129a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mScalingMode); 130a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mTimestamp); 1313c25621ad7d13f64d3ab95a27fa970fbc9998f73Andy McFadden FlattenableUtils::write(buffer, size, mIsAutoTimestamp); 132a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mFrameNumber); 133a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mBuf); 134a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mIsDroppable); 135a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mAcquireCalled); 136c1c05de415854eb7a13a16b7e22a22de8515123aMathias Agopian FlattenableUtils::write(buffer, size, mTransformToDisplayInverse); 137a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 138a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 139a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 140a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 141a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianstatus_t IGraphicBufferConsumer::BufferItem::unflatten( 142a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian void const*& buffer, size_t& size, int const*& fds, size_t& count) { 143a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 144a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (size < sizeof(uint32_t)) 145a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_MEMORY; 146a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 147a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t flags = 0; 148a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, flags); 149a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 150a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (flags & 1) { 151a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mGraphicBuffer = new GraphicBuffer(); 152a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t err = mGraphicBuffer->unflatten(buffer, size, fds, count); 153a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (err) return err; 154a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian size -= FlattenableUtils::align<4>(buffer); 155a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 156a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 157a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (flags & 2) { 158a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mFence = new Fence(); 159a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t err = mFence->unflatten(buffer, size, fds, count); 160a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (err) return err; 161a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian size -= FlattenableUtils::align<4>(buffer); 162a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 163a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 164a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // check we have enough space 165a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (size < getPodSize()) { 166a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_MEMORY; 167a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 168a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 169a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mCrop); 170a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mTransform); 171a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mScalingMode); 172a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mTimestamp); 1733c25621ad7d13f64d3ab95a27fa970fbc9998f73Andy McFadden FlattenableUtils::read(buffer, size, mIsAutoTimestamp); 174a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mFrameNumber); 175a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mBuf); 176a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mIsDroppable); 177a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mAcquireCalled); 178c1c05de415854eb7a13a16b7e22a22de8515123aMathias Agopian FlattenableUtils::read(buffer, size, mTransformToDisplayInverse); 179a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 180a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 181a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 182a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 183a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian// --------------------------------------------------------------------------- 184a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 185a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianenum { 186a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian ACQUIRE_BUFFER = IBinder::FIRST_CALL_TRANSACTION, 187a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian RELEASE_BUFFER, 188a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CONSUMER_CONNECT, 189a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CONSUMER_DISCONNECT, 190a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian GET_RELEASED_BUFFERS, 191a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_DEFAULT_BUFFER_SIZE, 192a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_DEFAULT_MAX_BUFFER_COUNT, 193a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian DISABLE_ASYNC_BUFFER, 194a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_MAX_ACQUIRED_BUFFER_COUNT, 195a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_CONSUMER_NAME, 196a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_DEFAULT_BUFFER_FORMAT, 197a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_CONSUMER_USAGE_BITS, 198db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian SET_TRANSFORM_HINT, 199399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall GET_SIDEBAND_STREAM, 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 227a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t releaseBuffer(int buf, uint64_t frameNumber, 2287d2d160cdc3cba9f4454f38433c94b68376cb843Igor Murashkin EGLDisplay display __attribute__((unused)), EGLSyncKHR fence __attribute__((unused)), 229a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian const sp<Fence>& releaseFence) { 230a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 231a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 232a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(buf); 233a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt64(frameNumber); 234a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.write(*releaseFence); 235a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(RELEASE_BUFFER, data, &reply); 236a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 237a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 238a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 239a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 240a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 241a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 242a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t consumerConnect(const sp<IConsumerListener>& consumer, bool controlledByApp) { 243a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 244a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 245a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeStrongBinder(consumer->asBinder()); 246a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(controlledByApp); 247a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(CONSUMER_CONNECT, data, &reply); 248a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 249a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 250a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 251a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 252a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 253a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 254a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t consumerDisconnect() { 255a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 256a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 257a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(CONSUMER_DISCONNECT, data, &reply); 258a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 259a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 260a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 261a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 262a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 263a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 264a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t getReleasedBuffers(uint32_t* slotMask) { 265a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 266a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 267a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(GET_RELEASED_BUFFERS, data, &reply); 268a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 269a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 270a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 271a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian *slotMask = reply.readInt32(); 272a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 273a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 274a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 275a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setDefaultBufferSize(uint32_t w, uint32_t h) { 276a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 277a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 278a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(w); 279a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(h); 280a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_DEFAULT_BUFFER_SIZE, data, &reply); 281a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 282a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 283a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 284a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 285a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 286a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 287a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setDefaultMaxBufferCount(int bufferCount) { 288a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 289a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 290a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(bufferCount); 291a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_DEFAULT_MAX_BUFFER_COUNT, data, &reply); 292a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 293a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 294a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 295a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 296a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 297a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 298a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t disableAsyncBuffer() { 299a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 300a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 301a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(DISABLE_ASYNC_BUFFER, data, &reply); 302a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 303a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 304a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 305a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 306a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 307a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 308a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setMaxAcquiredBufferCount(int maxAcquiredBuffers) { 309a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 310a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 311a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(maxAcquiredBuffers); 312a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_MAX_ACQUIRED_BUFFER_COUNT, data, &reply); 313a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 314a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 315a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 316a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 317a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 318a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 319a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual void setConsumerName(const String8& name) { 320a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 321a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 322a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeString8(name); 323a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian remote()->transact(SET_CONSUMER_NAME, data, &reply); 324a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 325a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 326a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setDefaultBufferFormat(uint32_t defaultFormat) { 327a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 328a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 329a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(defaultFormat); 330a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_DEFAULT_BUFFER_FORMAT, data, &reply); 331a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 332a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 333a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 334a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 335a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 336a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 337a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setConsumerUsageBits(uint32_t usage) { 338a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 339a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 340a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(usage); 341a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_CONSUMER_USAGE_BITS, data, &reply); 342a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 343a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 344a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 345a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 346a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 347a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 348a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setTransformHint(uint32_t hint) { 349a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 350a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 351a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(hint); 352a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_TRANSFORM_HINT, data, &reply); 353a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 354a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 355a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 356a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 357a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 358db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian 359399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall virtual sp<NativeHandle> getSidebandStream() const { 360399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall Parcel data, reply; 361399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall status_t err; 362399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 363399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall if ((err = remote()->transact(GET_SIDEBAND_STREAM, data, &reply)) != NO_ERROR) { 364399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall return NULL; 365399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall } 366399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall sp<NativeHandle> stream; 367399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall if (reply.readInt32()) { 368399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall stream = NativeHandle::create(reply.readNativeHandle()); 369399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall } 370399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall return stream; 371399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall } 372399184a4cd728ea1421fb0bc1722274a29e38f4aJesse Hall 373db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian virtual void dump(String8& result, const char* prefix) const { 374db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian Parcel data, reply; 375db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 376db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian data.writeString8(result); 377db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian data.writeString8(String8(prefix ? prefix : "")); 378db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian remote()->transact(DUMP, data, &reply); 379db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian reply.readString8(); 380db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian } 381a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian}; 382a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 383a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias AgopianIMPLEMENT_META_INTERFACE(GraphicBufferConsumer, "android.gui.IGraphicBufferConsumer"); 384a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 385a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian// ---------------------------------------------------------------------- 386a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 387a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianstatus_t BnGraphicBufferConsumer::onTransact( 388a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 389a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian{ 390a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian switch(code) { 391a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case ACQUIRE_BUFFER: { 392a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 393a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian BufferItem item; 394a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian int64_t presentWhen = data.readInt64(); 395a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = acquireBuffer(&item, presentWhen); 396a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t err = reply->write(item); 397a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (err) return err; 398a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 399a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 400a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 401a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case RELEASE_BUFFER: { 402a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 403a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian int buf = data.readInt32(); 404a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint64_t frameNumber = data.readInt64(); 405a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sp<Fence> releaseFence = new Fence(); 406a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t err = data.read(*releaseFence); 407a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (err) return err; 408a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = releaseBuffer(buf, frameNumber, 409a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian EGL_NO_DISPLAY, EGL_NO_SYNC_KHR, releaseFence); 410a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 411a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 412a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 413a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case CONSUMER_CONNECT: { 414a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 415a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sp<IConsumerListener> consumer = IConsumerListener::asInterface( data.readStrongBinder() ); 416a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian bool controlledByApp = data.readInt32(); 417a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = consumerConnect(consumer, controlledByApp); 418a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 419a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 420a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 421a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case CONSUMER_DISCONNECT: { 422a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 423a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = consumerDisconnect(); 424a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 425a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 426a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 427a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case GET_RELEASED_BUFFERS: { 428a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 429a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t slotMask; 430a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = getReleasedBuffers(&slotMask); 431a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(slotMask); 432a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 433a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 434a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 435a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_DEFAULT_BUFFER_SIZE: { 436a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 437a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t w = data.readInt32(); 438a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t h = data.readInt32(); 439a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setDefaultBufferSize(w, h); 440a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 441a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 442a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 443a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_DEFAULT_MAX_BUFFER_COUNT: { 444a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 445a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t bufferCount = data.readInt32(); 446a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setDefaultMaxBufferCount(bufferCount); 447a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 448a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 449a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 450a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case DISABLE_ASYNC_BUFFER: { 451a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 452a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = disableAsyncBuffer(); 453a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 454a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 455a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 456a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_MAX_ACQUIRED_BUFFER_COUNT: { 457a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 458a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t maxAcquiredBuffers = data.readInt32(); 459a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setMaxAcquiredBufferCount(maxAcquiredBuffers); 460a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 461a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 462a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 463a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_CONSUMER_NAME: { 464a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 465a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian setConsumerName( data.readString8() ); 466a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 467a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 468a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_DEFAULT_BUFFER_FORMAT: { 469a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 470a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t defaultFormat = data.readInt32(); 471a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setDefaultBufferFormat(defaultFormat); 472a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 473a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 474a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 475a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_CONSUMER_USAGE_BITS: { 476a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 477a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t usage = data.readInt32(); 478a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setConsumerUsageBits(usage); 479a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 480a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 481a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 482a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_TRANSFORM_HINT: { 483a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 484a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t hint = data.readInt32(); 485a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setTransformHint(hint); 486a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 487a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 488a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 489db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian case DUMP: { 490db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 491db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian String8 result = data.readString8(); 492db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian String8 prefix = data.readString8(); 493db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian static_cast<IGraphicBufferConsumer*>(this)->dump(result, prefix); 494db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian reply->writeString8(result); 495db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian return NO_ERROR; 496db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian } 497a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 498a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return BBinder::onTransact(code, data, reply, flags); 499a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 500a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 501a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian}; // namespace android 502