IGraphicBufferConsumer.cpp revision a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0b
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), 46a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mFrameNumber(0), 47a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mBuf(INVALID_BUFFER_SLOT), 48a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mIsDroppable(false), 49a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mAcquireCalled(false) { 50a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mCrop.makeInvalid(); 51a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 52a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 53a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopiansize_t IGraphicBufferConsumer::BufferItem::getPodSize() const { 54a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian size_t c = sizeof(mCrop) + 55a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sizeof(mTransform) + 56a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sizeof(mScalingMode) + 57a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sizeof(mTimestamp) + 58a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sizeof(mFrameNumber) + 59a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sizeof(mBuf) + 60a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sizeof(mIsDroppable) + 61a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sizeof(mAcquireCalled); 62a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return c; 63a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 64a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 65a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopiansize_t IGraphicBufferConsumer::BufferItem::getFlattenedSize() const { 66a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian size_t c = 0; 67a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (mGraphicBuffer != 0) { 68a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian c += mGraphicBuffer->getFlattenedSize(); 69a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::align<4>(c); 70a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 71a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (mFence != 0) { 72a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian c += mFence->getFlattenedSize(); 73a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::align<4>(c); 74a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 75a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return sizeof(int32_t) + c + getPodSize(); 76a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 77a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 78a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopiansize_t IGraphicBufferConsumer::BufferItem::getFdCount() const { 79a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian size_t c = 0; 80a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (mGraphicBuffer != 0) { 81a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian c += mGraphicBuffer->getFdCount(); 82a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 83a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (mFence != 0) { 84a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian c += mFence->getFdCount(); 85a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 86a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return c; 87a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 88a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 89a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianstatus_t IGraphicBufferConsumer::BufferItem::flatten( 90a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian void*& buffer, size_t& size, int*& fds, size_t& count) const { 91a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 92a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // make sure we have enough space 93a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (count < BufferItem::getFlattenedSize()) { 94a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_MEMORY; 95a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 96a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 97a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // content flags are stored first 98a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t& flags = *static_cast<uint32_t*>(buffer); 99a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 100a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // advance the pointer 101a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::advance(buffer, size, sizeof(uint32_t)); 102a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 103a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian flags = 0; 104a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (mGraphicBuffer != 0) { 105a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t err = mGraphicBuffer->flatten(buffer, size, fds, count); 106a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (err) return err; 107a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian size -= FlattenableUtils::align<4>(buffer); 108a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian flags |= 1; 109a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 110a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (mFence != 0) { 111a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t err = mFence->flatten(buffer, size, fds, count); 112a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (err) return err; 113a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian size -= FlattenableUtils::align<4>(buffer); 114a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian flags |= 2; 115a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 116a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 117a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // check we have enough space (in case flattening the fence/graphicbuffer lied to us) 118a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (size < getPodSize()) { 119a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_MEMORY; 120a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 121a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 122a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mCrop); 123a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mTransform); 124a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mScalingMode); 125a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mTimestamp); 126a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mFrameNumber); 127a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mBuf); 128a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mIsDroppable); 129a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::write(buffer, size, mAcquireCalled); 130a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 131a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 132a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 133a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 134a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianstatus_t IGraphicBufferConsumer::BufferItem::unflatten( 135a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian void const*& buffer, size_t& size, int const*& fds, size_t& count) { 136a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 137a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (size < sizeof(uint32_t)) 138a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_MEMORY; 139a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 140a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t flags = 0; 141a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, flags); 142a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 143a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (flags & 1) { 144a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mGraphicBuffer = new GraphicBuffer(); 145a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t err = mGraphicBuffer->unflatten(buffer, size, fds, count); 146a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (err) return err; 147a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian size -= FlattenableUtils::align<4>(buffer); 148a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 149a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 150a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (flags & 2) { 151a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian mFence = new Fence(); 152a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t err = mFence->unflatten(buffer, size, fds, count); 153a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (err) return err; 154a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian size -= FlattenableUtils::align<4>(buffer); 155a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 156a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 157a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // check we have enough space 158a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (size < getPodSize()) { 159a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_MEMORY; 160a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 161a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 162a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mCrop); 163a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mTransform); 164a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mScalingMode); 165a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mTimestamp); 166a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mFrameNumber); 167a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mBuf); 168a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mIsDroppable); 169a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian FlattenableUtils::read(buffer, size, mAcquireCalled); 170a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 171a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 172a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 173a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 174a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian// --------------------------------------------------------------------------- 175a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 176a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianenum { 177a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian ACQUIRE_BUFFER = IBinder::FIRST_CALL_TRANSACTION, 178a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian RELEASE_BUFFER, 179a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CONSUMER_CONNECT, 180a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CONSUMER_DISCONNECT, 181a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian GET_RELEASED_BUFFERS, 182a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_DEFAULT_BUFFER_SIZE, 183a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_DEFAULT_MAX_BUFFER_COUNT, 184a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian DISABLE_ASYNC_BUFFER, 185a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_MAX_ACQUIRED_BUFFER_COUNT, 186a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_CONSUMER_NAME, 187a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_DEFAULT_BUFFER_FORMAT, 188a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_CONSUMER_USAGE_BITS, 189a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian SET_TRANSFORM_HINT 190a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian}; 191a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 192a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 193a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianclass BpGraphicBufferConsumer : public BpInterface<IGraphicBufferConsumer> 194a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian{ 195a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianpublic: 196a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian BpGraphicBufferConsumer(const sp<IBinder>& impl) 197a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian : BpInterface<IGraphicBufferConsumer>(impl) 198a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian { 199a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 200a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 201a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t acquireBuffer(BufferItem *buffer, nsecs_t presentWhen) { 202a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 203a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 204a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt64(presentWhen); 205a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(ACQUIRE_BUFFER, data, &reply); 206a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 207a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 208a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 209a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian result = reply.read(*buffer); 210a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 211a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 212a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 213a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 214a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 215a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 216a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t releaseBuffer(int buf, uint64_t frameNumber, 217a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian EGLDisplay display, EGLSyncKHR fence, 218a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian const sp<Fence>& releaseFence) { 219a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 220a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 221a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(buf); 222a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt64(frameNumber); 223a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.write(*releaseFence); 224a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(RELEASE_BUFFER, data, &reply); 225a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 226a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 227a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 228a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 229a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 230a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 231a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t consumerConnect(const sp<IConsumerListener>& consumer, bool controlledByApp) { 232a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 233a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 234a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeStrongBinder(consumer->asBinder()); 235a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(controlledByApp); 236a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(CONSUMER_CONNECT, data, &reply); 237a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 238a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 239a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 240a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 241a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 242a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 243a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t consumerDisconnect() { 244a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 245a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 246a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(CONSUMER_DISCONNECT, data, &reply); 247a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 248a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 249a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 250a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 251a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 252a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 253a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t getReleasedBuffers(uint32_t* slotMask) { 254a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 255a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 256a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(GET_RELEASED_BUFFERS, data, &reply); 257a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 258a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 259a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 260a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian *slotMask = reply.readInt32(); 261a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 262a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 263a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 264a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setDefaultBufferSize(uint32_t w, uint32_t h) { 265a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 266a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 267a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(w); 268a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(h); 269a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_DEFAULT_BUFFER_SIZE, data, &reply); 270a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 271a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 272a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 273a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 274a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 275a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 276a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setDefaultMaxBufferCount(int bufferCount) { 277a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 278a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 279a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(bufferCount); 280a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_DEFAULT_MAX_BUFFER_COUNT, 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 disableAsyncBuffer() { 288a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 289a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 290a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(DISABLE_ASYNC_BUFFER, data, &reply); 291a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 292a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 293a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 294a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 295a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 296a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 297a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setMaxAcquiredBufferCount(int maxAcquiredBuffers) { 298a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 299a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 300a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(maxAcquiredBuffers); 301a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_MAX_ACQUIRED_BUFFER_COUNT, 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 void setConsumerName(const String8& name) { 309a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 310a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 311a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeString8(name); 312a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian remote()->transact(SET_CONSUMER_NAME, data, &reply); 313a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 314a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 315a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setDefaultBufferFormat(uint32_t defaultFormat) { 316a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 317a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 318a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(defaultFormat); 319a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_DEFAULT_BUFFER_FORMAT, data, &reply); 320a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (result != NO_ERROR) { 321a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return result; 322a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 323a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return reply.readInt32(); 324a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 325a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 326a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t setConsumerUsageBits(uint32_t usage) { 327a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 328a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 329a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(usage); 330a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_CONSUMER_USAGE_BITS, 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 setTransformHint(uint32_t hint) { 338a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel data, reply; 339a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); 340a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian data.writeInt32(hint); 341a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = remote()->transact(SET_TRANSFORM_HINT, 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 349a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias AgopianIMPLEMENT_META_INTERFACE(GraphicBufferConsumer, "android.gui.IGraphicBufferConsumer"); 350a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 351a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian// ---------------------------------------------------------------------- 352a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 353a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianstatus_t BnGraphicBufferConsumer::onTransact( 354a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 355a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian{ 356a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian switch(code) { 357a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case ACQUIRE_BUFFER: { 358a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 359a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian BufferItem item; 360a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian int64_t presentWhen = data.readInt64(); 361a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = acquireBuffer(&item, presentWhen); 362a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t err = reply->write(item); 363a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (err) return err; 364a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 365a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 366a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 367a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case RELEASE_BUFFER: { 368a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 369a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian int buf = data.readInt32(); 370a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint64_t frameNumber = data.readInt64(); 371a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sp<Fence> releaseFence = new Fence(); 372a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t err = data.read(*releaseFence); 373a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian if (err) return err; 374a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = releaseBuffer(buf, frameNumber, 375a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian EGL_NO_DISPLAY, EGL_NO_SYNC_KHR, releaseFence); 376a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 377a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 378a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 379a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case CONSUMER_CONNECT: { 380a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 381a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian sp<IConsumerListener> consumer = IConsumerListener::asInterface( data.readStrongBinder() ); 382a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian bool controlledByApp = data.readInt32(); 383a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = consumerConnect(consumer, controlledByApp); 384a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 385a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 386a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 387a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case CONSUMER_DISCONNECT: { 388a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 389a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = consumerDisconnect(); 390a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 391a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 392a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 393a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case GET_RELEASED_BUFFERS: { 394a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 395a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t slotMask; 396a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = getReleasedBuffers(&slotMask); 397a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(slotMask); 398a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 399a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 400a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 401a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_DEFAULT_BUFFER_SIZE: { 402a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 403a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t w = data.readInt32(); 404a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t h = data.readInt32(); 405a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setDefaultBufferSize(w, h); 406a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 407a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 408a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 409a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_DEFAULT_MAX_BUFFER_COUNT: { 410a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 411a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t bufferCount = data.readInt32(); 412a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setDefaultMaxBufferCount(bufferCount); 413a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 414a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 415a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 416a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case DISABLE_ASYNC_BUFFER: { 417a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 418a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = disableAsyncBuffer(); 419a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 420a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 421a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 422a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_MAX_ACQUIRED_BUFFER_COUNT: { 423a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 424a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t maxAcquiredBuffers = data.readInt32(); 425a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setMaxAcquiredBufferCount(maxAcquiredBuffers); 426a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 427a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 428a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 429a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_CONSUMER_NAME: { 430a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 431a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian setConsumerName( data.readString8() ); 432a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 433a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 434a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_DEFAULT_BUFFER_FORMAT: { 435a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 436a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t defaultFormat = data.readInt32(); 437a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setDefaultBufferFormat(defaultFormat); 438a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 439a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 440a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 441a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_CONSUMER_USAGE_BITS: { 442a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 443a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t usage = data.readInt32(); 444a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setConsumerUsageBits(usage); 445a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 446a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 447a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 448a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian case SET_TRANSFORM_HINT: { 449a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); 450a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t hint = data.readInt32(); 451a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian status_t result = setTransformHint(hint); 452a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian reply->writeInt32(result); 453a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return NO_ERROR; 454a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } break; 455a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian } 456a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian return BBinder::onTransact(code, data, reply, flags); 457a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian} 458a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 459a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian}; // namespace android 460