GraphicBufferListener.h revision e7f4e676bb88b17241d71731f9ea50c18cfcb039
1e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith/* 2e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith * Copyright (C) 2014 The Android Open Source Project 3e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith * 4e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith * Licensed under the Apache License, Version 2.0 (the "License"); 5e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith * you may not use this file except in compliance with the License. 6e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith * You may obtain a copy of the License at 7e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith * 8e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith * http://www.apache.org/licenses/LICENSE-2.0 9e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith * 10e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith * Unless required by applicable law or agreed to in writing, software 11e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith * distributed under the License is distributed on an "AS IS" BASIS, 12e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith * See the License for the specific language governing permissions and 14e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith * limitations under the License. 15e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith */ 16e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith 17e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith#ifndef GRAPHIC_BUFFER_LISTENER_H_ 18e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith#define GRAPHIC_BUFFER_LISTENER_H_ 19e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith 20e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith#include <gui/BufferQueue.h> 21e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith 22e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smithnamespace android { 23e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith 24e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smithstruct AMessage; 25e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith 26e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smithstruct GraphicBufferListener : public BufferQueue::ConsumerListener { 27e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smithpublic: 28e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith GraphicBufferListener() {}; 29e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith 30e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith status_t init( 31e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith const sp<AMessage> ¬ify, 32e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith size_t bufferWidth, size_t bufferHeight, size_t bufferCount); 33e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith 34e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith virtual void onFrameAvailable(); 35e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith virtual void onBuffersReleased(); 36e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith virtual void onSidebandStreamChanged(); 37e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith 38e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith // Returns the handle to the producer side of the BufferQueue. Buffers 39e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith // queued on this will be received by GraphicBufferListener. 40e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith sp<IGraphicBufferProducer> getIGraphicBufferProducer() const { 41e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith return mProducer; 42e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith } 43e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith 44e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith BufferQueue::BufferItem getBufferItem(); 45e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith sp<GraphicBuffer> getBuffer(BufferQueue::BufferItem item); 46e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith status_t releaseBuffer(BufferQueue::BufferItem item); 47e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith 48e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith enum { 49e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith kWhatFrameAvailable = 'frav', 50e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith }; 51e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith 52e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smithprivate: 53e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith sp<AMessage> mNotify; 54e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith size_t mNumFramesAvailable; 55e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith 56e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith mutable Mutex mMutex; 57e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith 58e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith // Our BufferQueue interfaces. mProducer is passed to the producer through 59e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith // getIGraphicBufferProducer, and mConsumer is used internally to retrieve 60e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith // the buffers queued by the producer. 61e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith sp<IGraphicBufferProducer> mProducer; 62e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith sp<IGraphicBufferConsumer> mConsumer; 63e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith 64e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith // Cache of GraphicBuffers from the buffer queue. 65e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith sp<GraphicBuffer> mBufferSlot[BufferQueue::NUM_BUFFER_SLOTS]; 66e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith}; 67e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith 68e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith} // namespace android 69e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith 70e7f4e676bb88b17241d71731f9ea50c18cfcb039David Smith#endif // GRAPHIC_BUFFER_LISTENER_H 71