IGraphicBufferConsumer.cpp revision c1c05de415854eb7a13a16b7e22a22de8515123a
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, 186a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian RELEASE_BUFFER, 187a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CONSUMER_CONNECT, 188a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CONSUMER_DISCONNECT, 189a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian GET_RELEASED_BUFFERS, 190a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_DEFAULT_BUFFER_SIZE, 191a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_DEFAULT_MAX_BUFFER_COUNT, 192a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian DISABLE_ASYNC_BUFFER, 193a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_MAX_ACQUIRED_BUFFER_COUNT, 194a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_CONSUMER_NAME, 195a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_DEFAULT_BUFFER_FORMAT, 196a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_CONSUMER_USAGE_BITS, 197db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian SET_TRANSFORM_HINT, 198db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian DUMP, 199a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian}; 200a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 201a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 202a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianclass BpGraphicBufferConsumer : public BpInterface<IGraphicBufferConsumer> 203a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian{ 204a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianpublic: 205a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian BpGraphicBufferConsumer(const sp<IBinder>& impl) 206a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian : BpInterface<IGraphicBufferConsumer>(impl) 207a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian { 208a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 209a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 210a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t acquireBuffer(BufferItem *buffer, nsecs_t presentWhen) { 211a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 212a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 213a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt64(presentWhen); 214a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(ACQUIRE_BUFFER, data, &reply); 215a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 216a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 217a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 218a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian result = reply.read(*buffer); 219a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 220a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 221a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 222a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 223a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 224a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 225a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t releaseBuffer(int buf, uint64_t frameNumber, 226a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian EGLDisplay display, EGLSyncKHR fence, 227a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian const sp<Fence>& releaseFence) { 228a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 229a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 230a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(buf); 231a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt64(frameNumber); 232a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.write(*releaseFence); 233a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(RELEASE_BUFFER, data, &reply); 234a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 235a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 236a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 237a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 238a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 239a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 240a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t consumerConnect(const sp<IConsumerListener>& consumer, bool controlledByApp) { 241a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 242a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 243a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeStrongBinder(consumer->asBinder()); 244a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(controlledByApp); 245a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(CONSUMER_CONNECT, data, &reply); 246a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 247a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 248a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 249a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 250a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 251a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 252a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t consumerDisconnect() { 253a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 254a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 255a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(CONSUMER_DISCONNECT, data, &reply); 256a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 257a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 258a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 259a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 260a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 261a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 262a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t getReleasedBuffers(uint32_t* slotMask) { 263a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 264a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 265a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(GET_RELEASED_BUFFERS, data, &reply); 266a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 267a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 268a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 269a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian *slotMask = reply.readInt32(); 270a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 271a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 272a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 273a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setDefaultBufferSize(uint32_t w, uint32_t h) { 274a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 275a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 276a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(w); 277a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(h); 278a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_DEFAULT_BUFFER_SIZE, data, &reply); 279a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 280a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 281a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 282a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 283a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 284a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 285a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setDefaultMaxBufferCount(int bufferCount) { 286a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 287a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 288a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(bufferCount); 289a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_DEFAULT_MAX_BUFFER_COUNT, data, &reply); 290a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 291a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 292a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 293a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 294a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 295a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 296a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t disableAsyncBuffer() { 297a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 298a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 299a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(DISABLE_ASYNC_BUFFER, data, &reply); 300a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 301a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 302a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 303a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 304a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 305a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 306a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setMaxAcquiredBufferCount(int maxAcquiredBuffers) { 307a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 308a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 309a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(maxAcquiredBuffers); 310a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_MAX_ACQUIRED_BUFFER_COUNT, data, &reply); 311a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 312a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 313a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 314a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 315a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 316a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 317a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual void setConsumerName(const String8& name) { 318a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 319a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 320a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeString8(name); 321a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian remote()->transact(SET_CONSUMER_NAME, data, &reply); 322a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 323a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 324a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setDefaultBufferFormat(uint32_t defaultFormat) { 325a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 326a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 327a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(defaultFormat); 328a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_DEFAULT_BUFFER_FORMAT, data, &reply); 329a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 330a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 331a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 332a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 333a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 334a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 335a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setConsumerUsageBits(uint32_t usage) { 336a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 337a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 338a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(usage); 339a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_CONSUMER_USAGE_BITS, data, &reply); 340a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 341a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 342a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 343a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 344a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 345a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 346a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setTransformHint(uint32_t hint) { 347a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 348a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 349a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(hint); 350a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_TRANSFORM_HINT, data, &reply); 351a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 352a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 353a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 354a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 355a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 356db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian 357db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian virtual void dump(String8& result, const char* prefix) const { 358db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian Parcel data, reply; 359db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 360db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian data.writeString8(result); 361db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian data.writeString8(String8(prefix ? prefix : "")); 362db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian remote()->transact(DUMP, data, &reply); 363db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian reply.readString8(); 364db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian } 365a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian}; 366a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 367a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias AgopianIMPLEMENT_META_INTERFACE(GraphicBufferConsumer, "android.gui.IGraphicBufferConsumer"); 368a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 369a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian// ---------------------------------------------------------------------- 370a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 371a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianstatus_t BnGraphicBufferConsumer::onTransact( 372a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 373a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian{ 374a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian switch(code) { 375a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case ACQUIRE_BUFFER: { 376a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 377a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian BufferItem item; 378a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian int64_t presentWhen = data.readInt64(); 379a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = acquireBuffer(&item, presentWhen); 380a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t err = reply->write(item); 381a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (err) return err; 382a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 383a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 384a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 385a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case RELEASE_BUFFER: { 386a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 387a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian int buf = data.readInt32(); 388a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint64_t frameNumber = data.readInt64(); 389a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sp<Fence> releaseFence = new Fence(); 390a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t err = data.read(*releaseFence); 391a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (err) return err; 392a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = releaseBuffer(buf, frameNumber, 393a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian EGL_NO_DISPLAY, EGL_NO_SYNC_KHR, releaseFence); 394a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 395a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 396a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 397a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case CONSUMER_CONNECT: { 398a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 399a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sp<IConsumerListener> consumer = IConsumerListener::asInterface( data.readStrongBinder() ); 400a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian bool controlledByApp = data.readInt32(); 401a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = consumerConnect(consumer, controlledByApp); 402a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 403a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 404a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 405a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case CONSUMER_DISCONNECT: { 406a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 407a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = consumerDisconnect(); 408a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 409a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 410a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 411a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case GET_RELEASED_BUFFERS: { 412a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 413a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t slotMask; 414a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = getReleasedBuffers(&slotMask); 415a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(slotMask); 416a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 417a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 418a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 419a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_DEFAULT_BUFFER_SIZE: { 420a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 421a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t w = data.readInt32(); 422a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t h = data.readInt32(); 423a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setDefaultBufferSize(w, h); 424a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 425a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 426a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 427a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_DEFAULT_MAX_BUFFER_COUNT: { 428a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 429a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t bufferCount = data.readInt32(); 430a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setDefaultMaxBufferCount(bufferCount); 431a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 432a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 433a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 434a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case DISABLE_ASYNC_BUFFER: { 435a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 436a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = disableAsyncBuffer(); 437a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 438a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 439a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 440a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_MAX_ACQUIRED_BUFFER_COUNT: { 441a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 442a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t maxAcquiredBuffers = data.readInt32(); 443a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setMaxAcquiredBufferCount(maxAcquiredBuffers); 444a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 445a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 446a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 447a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_CONSUMER_NAME: { 448a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 449a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian setConsumerName( data.readString8() ); 450a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 451a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 452a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_DEFAULT_BUFFER_FORMAT: { 453a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 454a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t defaultFormat = data.readInt32(); 455a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setDefaultBufferFormat(defaultFormat); 456a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 457a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 458a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 459a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_CONSUMER_USAGE_BITS: { 460a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 461a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t usage = data.readInt32(); 462a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setConsumerUsageBits(usage); 463a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 464a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 465a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 466a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_TRANSFORM_HINT: { 467a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 468a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t hint = data.readInt32(); 469a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setTransformHint(hint); 470a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 471a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 472a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 473db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian case DUMP: { 474db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 475db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian String8 result = data.readString8(); 476db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian String8 prefix = data.readString8(); 477db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian static_cast<IGraphicBufferConsumer*>(this)->dump(result, prefix); 478db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian reply->writeString8(result); 479db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian return NO_ERROR; 480db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian } 481a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 482a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return BBinder::onTransact(code, data, reply, flags); 483a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 484a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 485a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian}; // namespace android 486