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