IConsumerListener.h revision a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0b
1a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian/* 2a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * Copyright (C) 2013 The Android Open Source Project 3a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * 4a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 5a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * you may not use this file except in compliance with the License. 6a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * You may obtain a copy of the License at 7a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * 8a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 9a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * 10a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * Unless required by applicable law or agreed to in writing, software 11a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 12a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * See the License for the specific language governing permissions and 14a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian * limitations under the License. 15a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian */ 16a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 17a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#ifndef ANDROID_GUI_ICONSUMERLISTENER_H 18a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#define ANDROID_GUI_ICONSUMERLISTENER_H 19a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 20a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <stdint.h> 21a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <sys/types.h> 22a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 23a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <utils/Errors.h> 24a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <utils/RefBase.h> 25a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 26a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#include <binder/IInterface.h> 27a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 28a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopiannamespace android { 29a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian// ---------------------------------------------------------------------------- 30a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 31a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian// ConsumerListener is the interface through which the BufferQueue notifies 32a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian// the consumer of events that the consumer may wish to react to. Because 33a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian// the consumer will generally have a mutex that is locked during calls from 34a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian// the consumer to the BufferQueue, these calls from the BufferQueue to the 35a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian// consumer *MUST* be called only when the BufferQueue mutex is NOT locked. 36a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 37a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianclass ConsumerListener : public virtual RefBase { 38a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianpublic: 39a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian ConsumerListener() { } 40a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual ~ConsumerListener() { } 41a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 42a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // onFrameAvailable is called from queueBuffer each time an additional 43a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // frame becomes available for consumption. This means that frames that 44a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // are queued while in asynchronous mode only trigger the callback if no 45a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // previous frames are pending. Frames queued while in synchronous mode 46a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // always trigger the callback. 47a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // 48a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // This is called without any lock held and can be called concurrently 49a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // by multiple threads. 50a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual void onFrameAvailable() = 0; /* Asynchronous */ 51a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 52a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // onBuffersReleased is called to notify the buffer consumer that the 53a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // BufferQueue has released its references to one or more GraphicBuffers 54a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // contained in its slots. The buffer consumer should then call 55a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // BufferQueue::getReleasedBuffers to retrieve the list of buffers 56a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // 57a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // This is called without any lock held and can be called concurrently 58a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian // by multiple threads. 59a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual void onBuffersReleased() = 0; /* Asynchronous */ 60a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian}; 61a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 62a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 63a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianclass IConsumerListener : public ConsumerListener, public IInterface 64a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian{ 65a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianpublic: 66a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian DECLARE_META_INTERFACE(ConsumerListener); 67a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian}; 68a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 69a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian// ---------------------------------------------------------------------------- 70a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 71a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianclass BnConsumerListener : public BnInterface<IConsumerListener> 72a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian{ 73a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopianpublic: 74a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian virtual status_t onTransact( uint32_t code, 75a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian const Parcel& data, 76a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian Parcel* reply, 77a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian uint32_t flags = 0); 78a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian}; 79a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 80a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian// ---------------------------------------------------------------------------- 81a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian}; // namespace android 82a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian 83a4e19521ac4563f2ff6517bcfd63d9b8d33a6d0bMathias Agopian#endif // ANDROID_GUI_ICONSUMERLISTENER_H 84