graphic_buffer_impl.cpp revision c5cde8c18df853e11d1ec528508fd0fe2e742d5c
1c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu/* 2c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu * Copyright (C) 2013 The Android Open Source Project 3c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu * 4c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu * Licensed under the Apache License, Version 2.0 (the "License"); 5c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu * you may not use this file except in compliance with the License. 6c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu * You may obtain a copy of the License at 7c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu * 8c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu * http://www.apache.org/licenses/LICENSE-2.0 9c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu * 10c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu * Unless required by applicable law or agreed to in writing, software 11c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu * distributed under the License is distributed on an "AS IS" BASIS, 12c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu * See the License for the specific language governing permissions and 14c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu * limitations under the License. 15c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu */ 16c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu 17c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu// Provides the implementation of the GraphicBuffer interface in 18c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu// renderer compostior 19c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu 20c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu#include "graphic_buffer_impl.h" 21c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu 22c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu#include <utils/Errors.h> 23c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu 24c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglunamespace android { 25c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu 26c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan BalogluGraphicBufferImpl::GraphicBufferImpl(uint32_t w, uint32_t h) 27c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu : mBuffer(new android::GraphicBuffer(w, h, PIXEL_FORMAT_RGBA_8888, 28c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu android::GraphicBuffer::USAGE_HW_TEXTURE | 29c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu android::GraphicBuffer::USAGE_SW_READ_OFTEN | 30c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu android::GraphicBuffer::USAGE_SW_WRITE_OFTEN)) { 31c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu} 32c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu 33c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan BalogluGraphicBufferImpl::~GraphicBufferImpl() { 34c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu} 35c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu 36c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu// static 37c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Balogluint GraphicBufferImpl::Create(int w, int h) { 38c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu GraphicBufferImpl* buffer = new GraphicBufferImpl( 39c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu static_cast<uint32_t>(w), static_cast<uint32_t>(h)); 40c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu if (buffer->InitCheck() != NO_ERROR) { 41c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu delete buffer; 42c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu return 0; 43c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu } 44c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu return reinterpret_cast<int>(buffer); 45c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu} 46c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu 47c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu// static 48c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Balogluvoid GraphicBufferImpl::Release(int buffer_id) { 49c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu GraphicBufferImpl* buffer = reinterpret_cast<GraphicBufferImpl*>(buffer_id); 50c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu delete buffer; 51c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu} 52c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu 53c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu// static 54c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Balogluint GraphicBufferImpl::LockStatic(int buffer_id, int mode, void** vaddr) { 55c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu GraphicBufferImpl* buffer = reinterpret_cast<GraphicBufferImpl*>(buffer_id); 56c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu return buffer->Lock(mode, vaddr); 57c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu} 58c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu 59c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu// static 60c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Balogluint GraphicBufferImpl::UnlockStatic(int buffer_id) { 61c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu GraphicBufferImpl* buffer = reinterpret_cast<GraphicBufferImpl*>(buffer_id); 62c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu return buffer->Unlock(); 63c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu} 64c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu 65c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu// static 66c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Balogluvoid* GraphicBufferImpl::GetNativeBufferStatic(int buffer_id) { 67c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu GraphicBufferImpl* buffer = reinterpret_cast<GraphicBufferImpl*>(buffer_id); 68c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu return buffer->GetNativeBuffer(); 69c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu} 70c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu 71c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu// static 72c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Balogluuint32_t GraphicBufferImpl::GetStrideStatic(int buffer_id) { 73c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu GraphicBufferImpl* buffer = reinterpret_cast<GraphicBufferImpl*>(buffer_id); 74c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu return buffer->GetStride(); 75c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu} 76c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu 77c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglustatus_t GraphicBufferImpl::Lock(int mode, void** vaddr) { 78c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu int usage = 0; 79c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu switch (mode) { 80c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu // TODO(kaanb): Use public enum constants instead of integers. 81c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu case 0: 82c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu usage = android::GraphicBuffer::USAGE_SW_READ_OFTEN; 83c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu break; 84c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu case 1: 85c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu usage = android::GraphicBuffer::USAGE_SW_WRITE_OFTEN; 86c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu break; 87c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu case 2: 88c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu usage = android::GraphicBuffer::USAGE_SW_READ_OFTEN | 89c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu android::GraphicBuffer::USAGE_SW_WRITE_OFTEN; 90c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu break; 91c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu default: 92c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu return INVALID_OPERATION; 93c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu } 94c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu return mBuffer->lock(usage, vaddr); 95c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu} 96c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu 97c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglustatus_t GraphicBufferImpl::Unlock() { 98c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu return mBuffer->unlock(); 99c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu} 100c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu 101c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglustatus_t GraphicBufferImpl::InitCheck() const { 102c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu return mBuffer->initCheck(); 103c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu} 104c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu 105c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Balogluvoid* GraphicBufferImpl::GetNativeBuffer() const { 106c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu return mBuffer->getNativeBuffer(); 107c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu} 108c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu 109c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Balogluuint32_t GraphicBufferImpl::GetStride() const { 110c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu return mBuffer->getStride(); 111c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu} 112c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu 113c5cde8c18df853e11d1ec528508fd0fe2e742d5cKaan Baloglu} // namespace android 114