BufferItem.cpp revision bd3577ef5bae7d65e54bddc04f90b619330edb89
1289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza/* 2289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza * Copyright 2014 The Android Open Source Project 3289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza * 4289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza * Licensed under the Apache License, Version 2.0 (the "License"); 5289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza * you may not use this file except in compliance with the License. 6289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza * You may obtain a copy of the License at 7289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza * 8289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza * http://www.apache.org/licenses/LICENSE-2.0 9289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza * 10289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza * Unless required by applicable law or agreed to in writing, software 11289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza * distributed under the License is distributed on an "AS IS" BASIS, 12289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza * See the License for the specific language governing permissions and 14289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza * limitations under the License. 15289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza */ 16289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 17289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza#include <gui/BufferItem.h> 18289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 19289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza#include <ui/Fence.h> 20289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza#include <ui/GraphicBuffer.h> 21289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 22289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza#include <system/window.h> 23289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 24289ade165e60b5f71734d30e535f16eb1f4313adDan Stozanamespace android { 25289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 26289ade165e60b5f71734d30e535f16eb1f4313adDan StozaBufferItem::BufferItem() : 27ccdfd60d79a8b7f1ed6401d0f2e8e29166a10584Pablo Ceballos mGraphicBuffer(NULL), 28ccdfd60d79a8b7f1ed6401d0f2e8e29166a10584Pablo Ceballos mFence(NULL), 2960d6922a011fe18c111b8d30fb6ef1f655b6b15ePablo Ceballos mCrop(Rect::INVALID_RECT), 30289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza mTransform(0), 31289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza mScalingMode(NATIVE_WINDOW_SCALING_MODE_FREEZE), 32289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza mTimestamp(0), 33289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza mIsAutoTimestamp(false), 3482c6bcc9705eabcaf5b9e45bc81867b0e2d61a02Eino-Ville Talvala mDataSpace(HAL_DATASPACE_UNKNOWN), 35289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza mFrameNumber(0), 36289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza mSlot(INVALID_BUFFER_SLOT), 37289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza mIsDroppable(false), 38289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza mAcquireCalled(false), 39ccdfd60d79a8b7f1ed6401d0f2e8e29166a10584Pablo Ceballos mTransformToDisplayInverse(false), 40063121849890da78b1ad7fb96c54c795de5d1fd6Pablo Ceballos mSurfaceDamage(), 41ff95aabbcc6e8606acbd7933c90eeb9b8b382a21Pablo Ceballos mAutoRefresh(false), 4223b4abe024ea88c45e0b94c80e1fb537a573b143Pablo Ceballos mQueuedBuffer(true), 4323b4abe024ea88c45e0b94c80e1fb537a573b143Pablo Ceballos mIsStale(false) { 44289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza} 45289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 468dc55396fc9bc425b5e2c82e76a38080f2a655ffDan StozaBufferItem::~BufferItem() {} 478dc55396fc9bc425b5e2c82e76a38080f2a655ffDan Stoza 48eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stozatemplate <typename T> 49eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stozastatic void addAligned(size_t& size, T /* value */) { 50eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza size = FlattenableUtils::align<sizeof(T)>(size); 51eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza size += sizeof(T); 52eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza} 53eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza 54289ade165e60b5f71734d30e535f16eb1f4313adDan Stozasize_t BufferItem::getPodSize() const { 55eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza size_t size = 0; 56eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza addAligned(size, mCrop); 57eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza addAligned(size, mTransform); 58eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza addAligned(size, mScalingMode); 5947f674dfeca31b29810ecb90f1277918b67c4cf8Chong Zhang addAligned(size, mTimestampLo); 6047f674dfeca31b29810ecb90f1277918b67c4cf8Chong Zhang addAligned(size, mTimestampHi); 61eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza addAligned(size, mIsAutoTimestamp); 62eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza addAligned(size, mDataSpace); 6347f674dfeca31b29810ecb90f1277918b67c4cf8Chong Zhang addAligned(size, mFrameNumberLo); 6447f674dfeca31b29810ecb90f1277918b67c4cf8Chong Zhang addAligned(size, mFrameNumberHi); 65eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza addAligned(size, mSlot); 66eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza addAligned(size, mIsDroppable); 67eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza addAligned(size, mAcquireCalled); 68eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza addAligned(size, mTransformToDisplayInverse); 69bd3577ef5bae7d65e54bddc04f90b619330edb89Pablo Ceballos addAligned(size, mAutoRefresh); 70bd3577ef5bae7d65e54bddc04f90b619330edb89Pablo Ceballos addAligned(size, mQueuedBuffer); 71bd3577ef5bae7d65e54bddc04f90b619330edb89Pablo Ceballos addAligned(size, mIsStale); 72eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza return size; 73289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza} 74289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 75289ade165e60b5f71734d30e535f16eb1f4313adDan Stozasize_t BufferItem::getFlattenedSize() const { 76eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza size_t size = sizeof(uint32_t); // Flags 77289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza if (mGraphicBuffer != 0) { 78eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza size += mGraphicBuffer->getFlattenedSize(); 79eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza FlattenableUtils::align<4>(size); 80289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza } 81289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza if (mFence != 0) { 82eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza size += mFence->getFlattenedSize(); 83eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza FlattenableUtils::align<4>(size); 84289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza } 85eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza size += mSurfaceDamage.getFlattenedSize(); 86eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza size = FlattenableUtils::align<8>(size); 87eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza return size + getPodSize(); 88289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza} 89289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 90289ade165e60b5f71734d30e535f16eb1f4313adDan Stozasize_t BufferItem::getFdCount() const { 91eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza size_t count = 0; 92289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza if (mGraphicBuffer != 0) { 93eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza count += mGraphicBuffer->getFdCount(); 94289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza } 95289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza if (mFence != 0) { 96eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza count += mFence->getFdCount(); 97289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza } 98eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza return count; 99eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza} 100eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza 101eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stozatemplate <typename T> 102eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stozastatic void writeAligned(void*& buffer, size_t& size, T value) { 103eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza size -= FlattenableUtils::align<alignof(T)>(buffer); 104eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza FlattenableUtils::write(buffer, size, value); 105289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza} 106289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 107289ade165e60b5f71734d30e535f16eb1f4313adDan Stozastatus_t BufferItem::flatten( 108289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza void*& buffer, size_t& size, int*& fds, size_t& count) const { 109289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 110289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza // make sure we have enough space 111eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza if (size < BufferItem::getFlattenedSize()) { 112289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza return NO_MEMORY; 113289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza } 114289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 115289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza // content flags are stored first 116289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza uint32_t& flags = *static_cast<uint32_t*>(buffer); 117289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 118289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza // advance the pointer 119289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza FlattenableUtils::advance(buffer, size, sizeof(uint32_t)); 120289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 121289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza flags = 0; 122289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza if (mGraphicBuffer != 0) { 123289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza status_t err = mGraphicBuffer->flatten(buffer, size, fds, count); 124289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza if (err) return err; 125289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza size -= FlattenableUtils::align<4>(buffer); 126289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza flags |= 1; 127289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza } 128289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza if (mFence != 0) { 129289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza status_t err = mFence->flatten(buffer, size, fds, count); 130289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza if (err) return err; 131289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza size -= FlattenableUtils::align<4>(buffer); 132289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza flags |= 2; 133289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza } 134eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza 1355065a55291b67f584d7b0be3fa3cfc4e29a3cd1cDan Stoza status_t err = mSurfaceDamage.flatten(buffer, size); 1365065a55291b67f584d7b0be3fa3cfc4e29a3cd1cDan Stoza if (err) return err; 137eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza FlattenableUtils::advance(buffer, size, mSurfaceDamage.getFlattenedSize()); 138eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza 139eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza // Check we still have enough space 140289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza if (size < getPodSize()) { 141289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza return NO_MEMORY; 142289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza } 143289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 144eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza writeAligned(buffer, size, mCrop); 145eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza writeAligned(buffer, size, mTransform); 146eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza writeAligned(buffer, size, mScalingMode); 14747f674dfeca31b29810ecb90f1277918b67c4cf8Chong Zhang writeAligned(buffer, size, mTimestampLo); 14847f674dfeca31b29810ecb90f1277918b67c4cf8Chong Zhang writeAligned(buffer, size, mTimestampHi); 149eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza writeAligned(buffer, size, mIsAutoTimestamp); 150eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza writeAligned(buffer, size, mDataSpace); 15147f674dfeca31b29810ecb90f1277918b67c4cf8Chong Zhang writeAligned(buffer, size, mFrameNumberLo); 15247f674dfeca31b29810ecb90f1277918b67c4cf8Chong Zhang writeAligned(buffer, size, mFrameNumberHi); 153eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza writeAligned(buffer, size, mSlot); 154eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza writeAligned(buffer, size, mIsDroppable); 155eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza writeAligned(buffer, size, mAcquireCalled); 156eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza writeAligned(buffer, size, mTransformToDisplayInverse); 157bd3577ef5bae7d65e54bddc04f90b619330edb89Pablo Ceballos writeAligned(buffer, size, mAutoRefresh); 158bd3577ef5bae7d65e54bddc04f90b619330edb89Pablo Ceballos writeAligned(buffer, size, mQueuedBuffer); 159bd3577ef5bae7d65e54bddc04f90b619330edb89Pablo Ceballos writeAligned(buffer, size, mIsStale); 160289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 161289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza return NO_ERROR; 162289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza} 163289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 164eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stozatemplate <typename T> 165eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stozastatic void readAligned(const void*& buffer, size_t& size, T& value) { 166eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza size -= FlattenableUtils::align<alignof(T)>(buffer); 167eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza FlattenableUtils::read(buffer, size, value); 168eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza} 169eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza 170289ade165e60b5f71734d30e535f16eb1f4313adDan Stozastatus_t BufferItem::unflatten( 171289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza void const*& buffer, size_t& size, int const*& fds, size_t& count) { 172289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 173eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza if (size < sizeof(uint32_t)) { 174289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza return NO_MEMORY; 175eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza } 176289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 177289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza uint32_t flags = 0; 178289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza FlattenableUtils::read(buffer, size, flags); 179289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 180289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza if (flags & 1) { 181289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza mGraphicBuffer = new GraphicBuffer(); 182289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza status_t err = mGraphicBuffer->unflatten(buffer, size, fds, count); 183289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza if (err) return err; 184289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza size -= FlattenableUtils::align<4>(buffer); 185289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza } 186289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 187289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza if (flags & 2) { 188289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza mFence = new Fence(); 189289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza status_t err = mFence->unflatten(buffer, size, fds, count); 190289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza if (err) return err; 191289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza size -= FlattenableUtils::align<4>(buffer); 192289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza } 193eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza 1945065a55291b67f584d7b0be3fa3cfc4e29a3cd1cDan Stoza status_t err = mSurfaceDamage.unflatten(buffer, size); 1955065a55291b67f584d7b0be3fa3cfc4e29a3cd1cDan Stoza if (err) return err; 196eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza FlattenableUtils::advance(buffer, size, mSurfaceDamage.getFlattenedSize()); 197eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza 198eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza // Check we still have enough space 199289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza if (size < getPodSize()) { 200289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza return NO_MEMORY; 201289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza } 202289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 203eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza readAligned(buffer, size, mCrop); 204eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza readAligned(buffer, size, mTransform); 205eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza readAligned(buffer, size, mScalingMode); 20647f674dfeca31b29810ecb90f1277918b67c4cf8Chong Zhang readAligned(buffer, size, mTimestampLo); 20747f674dfeca31b29810ecb90f1277918b67c4cf8Chong Zhang readAligned(buffer, size, mTimestampHi); 208eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza readAligned(buffer, size, mIsAutoTimestamp); 209eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza readAligned(buffer, size, mDataSpace); 21047f674dfeca31b29810ecb90f1277918b67c4cf8Chong Zhang readAligned(buffer, size, mFrameNumberLo); 21147f674dfeca31b29810ecb90f1277918b67c4cf8Chong Zhang readAligned(buffer, size, mFrameNumberHi); 212eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza readAligned(buffer, size, mSlot); 213eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza readAligned(buffer, size, mIsDroppable); 214eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza readAligned(buffer, size, mAcquireCalled); 215eea6d682b8b0f7081f0fe8fab8feadb16e22b30bDan Stoza readAligned(buffer, size, mTransformToDisplayInverse); 216bd3577ef5bae7d65e54bddc04f90b619330edb89Pablo Ceballos readAligned(buffer, size, mAutoRefresh); 217bd3577ef5bae7d65e54bddc04f90b619330edb89Pablo Ceballos readAligned(buffer, size, mQueuedBuffer); 218bd3577ef5bae7d65e54bddc04f90b619330edb89Pablo Ceballos readAligned(buffer, size, mIsStale); 219289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 220289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza return NO_ERROR; 221289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza} 222289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 223289ade165e60b5f71734d30e535f16eb1f4313adDan Stozaconst char* BufferItem::scalingModeName(uint32_t scalingMode) { 224289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza switch (scalingMode) { 225289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza case NATIVE_WINDOW_SCALING_MODE_FREEZE: return "FREEZE"; 226289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza case NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW: return "SCALE_TO_WINDOW"; 227289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza case NATIVE_WINDOW_SCALING_MODE_SCALE_CROP: return "SCALE_CROP"; 228289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza default: return "Unknown"; 229289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza } 230289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza} 231289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza 232289ade165e60b5f71734d30e535f16eb1f4313adDan Stoza} // namespace android 233