1a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian/* 2a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian * Copyright (C) 2011 The Android Open Source Project 3a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian * 4a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 5a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian * you may not use this file except in compliance with the License. 6a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian * You may obtain a copy of the License at 7a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian * 8a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 9a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian * 10a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian * Unless required by applicable law or agreed to in writing, software 11a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 12a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian * See the License for the specific language governing permissions and 14a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian * limitations under the License. 15a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian */ 16a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian 17a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian#include <stdlib.h> 18a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian#include <stdint.h> 19a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian#include <sys/types.h> 20a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian 21a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian#include <utils/Errors.h> 22a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian 23a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian#include "Layer.h" 24a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian#include "SurfaceTextureLayer.h" 25a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian 26a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopiannamespace android { 27a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian// --------------------------------------------------------------------------- 28a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian 29a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian 30b267579ba8dfe3f47d2a481c5a3c2254e3d565a1Daniel LamSurfaceTextureLayer::SurfaceTextureLayer() 31b267579ba8dfe3f47d2a481c5a3c2254e3d565a1Daniel Lam : BufferQueue(true) { 32a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian} 33a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian 34a67932fe6864ac346e7f78b86df11cf6c5344137Mathias AgopianSurfaceTextureLayer::~SurfaceTextureLayer() { 35a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian} 36a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian 3724202f5676c32edeef6544cf36e06b9fc970dbdeMathias Agopianstatus_t SurfaceTextureLayer::connect(int api, QueueBufferOutput* output) { 3824202f5676c32edeef6544cf36e06b9fc970dbdeMathias Agopian status_t err = BufferQueue::connect(api, output); 39cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis if (err == NO_ERROR) { 40cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis switch(api) { 41cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis case NATIVE_WINDOW_API_MEDIA: 42cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis case NATIVE_WINDOW_API_CAMERA: 43cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis // Camera preview and videos are rate-limited on the producer 44cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis // side. If enabled for this build, we use async mode to always 45cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis // show the most recent frame at the cost of requiring an 46cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis // additional buffer. 47cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis#ifndef NEVER_DEFAULT_TO_ASYNC_MODE 48cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis err = setSynchronousMode(false); 49cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis break; 50cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis#endif 51cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis // fall through to set synchronous mode when not defaulting to 52cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis // async mode. 53b267579ba8dfe3f47d2a481c5a3c2254e3d565a1Daniel Lam default: 54cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis err = setSynchronousMode(true); 55cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis break; 56cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis } 57cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis if (err != NO_ERROR) { 58cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis disconnect(api); 59cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis } 60cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis } 61cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis return err; 62cb6c755234a17ab14e6c5d0a857aab96fb02dc02Jamie Gennis} 63a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian 64a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian// --------------------------------------------------------------------------- 65a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian}; // namespace android 66