1b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza/*
2b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza * Copyright 2014 The Android Open Source Project
3b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza *
4b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza * Licensed under the Apache License, Version 2.0 (the "License");
5b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza * you may not use this file except in compliance with the License.
6b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza * You may obtain a copy of the License at
7b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza *
8b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza *      http://www.apache.org/licenses/LICENSE-2.0
9b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza *
10b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza * Unless required by applicable law or agreed to in writing, software
11b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza * distributed under the License is distributed on an "AS IS" BASIS,
12b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza * See the License for the specific language governing permissions and
14b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza * limitations under the License.
15b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza */
16b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza
17b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza#ifndef ANDROID_MONITORED_PRODUCER_H
18b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza#define ANDROID_MONITORED_PRODUCER_H
19b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza
20b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza#include <gui/IGraphicBufferProducer.h>
21b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza
22b9b088375d33a87b201cdbe18be71802e2607717Dan Stozanamespace android {
23b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza
24f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stozaclass IProducerListener;
25b9b088375d33a87b201cdbe18be71802e2607717Dan Stozaclass NativeHandle;
26b9b088375d33a87b201cdbe18be71802e2607717Dan Stozaclass SurfaceFlinger;
27b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza
28b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza// MonitoredProducer wraps an IGraphicBufferProducer so that SurfaceFlinger will
29b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza// be notified upon its destruction
30b3d0bdf0dbc19f0a0d7d924693025371e24828fdDan Stozaclass MonitoredProducer : public IGraphicBufferProducer {
31b9b088375d33a87b201cdbe18be71802e2607717Dan Stozapublic:
32b3d0bdf0dbc19f0a0d7d924693025371e24828fdDan Stoza    MonitoredProducer(const sp<IGraphicBufferProducer>& producer,
33b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza            const sp<SurfaceFlinger>& flinger);
34b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza    virtual ~MonitoredProducer();
35b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza
36b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza    // From IGraphicBufferProducer
37b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza    virtual status_t requestBuffer(int slot, sp<GraphicBuffer>* buf);
38b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza    virtual status_t setBufferCount(int bufferCount);
39b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza    virtual status_t dequeueBuffer(int* slot, sp<Fence>* fence, bool async,
40b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza            uint32_t w, uint32_t h, uint32_t format, uint32_t usage);
41b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza    virtual status_t detachBuffer(int slot);
42d9822a3843017444364899afc3c23fb5be6b9cb9Dan Stoza    virtual status_t detachNextBuffer(sp<GraphicBuffer>* outBuffer,
43d9822a3843017444364899afc3c23fb5be6b9cb9Dan Stoza            sp<Fence>* outFence);
44b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza    virtual status_t attachBuffer(int* outSlot,
45b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza            const sp<GraphicBuffer>& buffer);
46b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza    virtual status_t queueBuffer(int slot, const QueueBufferInput& input,
47b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza            QueueBufferOutput* output);
48b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza    virtual void cancelBuffer(int slot, const sp<Fence>& fence);
49b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza    virtual int query(int what, int* value);
50f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza    virtual status_t connect(const sp<IProducerListener>& token, int api,
51b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza            bool producerControlledByApp, QueueBufferOutput* output);
52b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza    virtual status_t disconnect(int api);
53b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza    virtual status_t setSidebandStream(const sp<NativeHandle>& stream);
5429a3e90879fd96404c971e7187cd0e05927bbce0Dan Stoza    virtual void allocateBuffers(bool async, uint32_t width, uint32_t height,
5529a3e90879fd96404c971e7187cd0e05927bbce0Dan Stoza            uint32_t format, uint32_t usage);
56b3d0bdf0dbc19f0a0d7d924693025371e24828fdDan Stoza    virtual IBinder* onAsBinder();
57b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza
58b9b088375d33a87b201cdbe18be71802e2607717Dan Stozaprivate:
59b3d0bdf0dbc19f0a0d7d924693025371e24828fdDan Stoza    sp<IGraphicBufferProducer> mProducer;
60b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza    sp<SurfaceFlinger> mFlinger;
61b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza};
62b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza
63b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza}; // namespace android
64b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza
65b9b088375d33a87b201cdbe18be71802e2607717Dan Stoza#endif // ANDROID_MONITORED_PRODUCER_H
66