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