1f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza/*
2f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza * Copyright 2014 The Android Open Source Project
3f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza *
4f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza * Licensed under the Apache License, Version 2.0 (the "License");
5f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza * you may not use this file except in compliance with the License.
6f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza * You may obtain a copy of the License at
7f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza *
8f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza *      http://www.apache.org/licenses/LICENSE-2.0
9f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza *
10f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza * Unless required by applicable law or agreed to in writing, software
11f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza * distributed under the License is distributed on an "AS IS" BASIS,
12f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza * See the License for the specific language governing permissions and
14f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza * limitations under the License.
15f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza */
16f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza
17f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza#ifndef ANDROID_GUI_IPRODUCERLISTENER_H
18f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza#define ANDROID_GUI_IPRODUCERLISTENER_H
19f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza
20f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza#include <binder/IInterface.h>
21f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza
22f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza#include <utils/RefBase.h>
23f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza
24f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stozanamespace android {
25f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza
26f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza// ProducerListener is the interface through which the BufferQueue notifies the
27f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza// producer of events that the producer may wish to react to. Because the
28f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza// producer will generally have a mutex that is locked during calls from the
29f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza// producer to the BufferQueue, these calls from the BufferQueue to the
30f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza// producer *MUST* be called only when the BufferQueue mutex is NOT locked.
31f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza
32f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stozaclass ProducerListener : public virtual RefBase
33f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza{
34f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stozapublic:
35f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza    ProducerListener() {}
36f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza    virtual ~ProducerListener() {}
37f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza
38f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza    // onBufferReleased is called from IGraphicBufferConsumer::releaseBuffer to
39f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza    // notify the producer that a new buffer is free and ready to be dequeued.
40f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza    //
41f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza    // This is called without any lock held and can be called concurrently by
42f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza    // multiple threads.
43f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza    virtual void onBufferReleased() = 0; // Asynchronous
44f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza};
45f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza
46f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stozaclass IProducerListener : public ProducerListener, public IInterface
47f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza{
48f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stozapublic:
49f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza    DECLARE_META_INTERFACE(ProducerListener)
50f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza};
51f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza
52f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stozaclass BnProducerListener : public BnInterface<IProducerListener>
53f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza{
54f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stozapublic:
55f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza    virtual status_t onTransact(uint32_t code, const Parcel& data,
56f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza            Parcel* reply, uint32_t flags = 0);
57f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza};
58f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza
59f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stozaclass DummyProducerListener : public BnProducerListener
60f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza{
61f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stozapublic:
62f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza    virtual void onBufferReleased() {}
63f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza};
64f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza
65f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza} // namespace android
66f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza
67f0eaf25e9247edf4d124bedaeb863f7abdf35a3eDan Stoza#endif
68