Camera3ZslStream.h revision 7b82efe7a376c882f8f938e1c41b8311a8cdda4a
1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Copyright (C) 2013 The Android Open Source Project 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License"); 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * you may not use this file except in compliance with the License. 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * You may obtain a copy of the License at 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * http://www.apache.org/licenses/LICENSE-2.0 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Unless required by applicable law or agreed to in writing, software 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS, 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * See the License for the specific language governing permissions and 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * limitations under the License. 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef ANDROID_SERVERS_CAMERA3_ZSL_STREAM_H 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ANDROID_SERVERS_CAMERA3_ZSL_STREAM_H 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <utils/RefBase.h> 2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include <gui/Surface.h> 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <gui/RingBufferConsumer.h> 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "Camera3OutputStream.h" 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace android { 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace camera3 { 297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * A class for managing a single opaque ZSL stream to/from the camera device. 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * This acts as a bidirectional stream at the HAL layer, caching and discarding 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * most output buffers, and when directed, pushes a buffer back to the HAL for 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * processing. 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class Camera3ZslStream : 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) public Camera3OutputStream { 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) public: 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Set up a ZSL stream of a given resolution. Depth is the number of buffers 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * cached within the stream that can be retrieved for input. 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Camera3ZslStream(int id, uint32_t width, uint32_t height, int depth); 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ~Camera3ZslStream(); 4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void dump(int fd, const Vector<String16> &args) const; 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) enum { NO_BUFFER_AVAILABLE = BufferQueue::NO_BUFFER_AVAILABLE }; 49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch /** 51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * Locate a buffer matching this timestamp in the RingBufferConsumer, 52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * and mark it to be queued at the next getInputBufferLocked invocation. 53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * 54e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch * Errors: Returns NO_BUFFER_AVAILABLE if we could not find a match. 55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * 56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch */ 57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch status_t enqueueInputBufferByTimestamp(nsecs_t timestamp, 58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch nsecs_t* actualTimestamp); 59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch /** 61e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch * Clears the buffers that can be used by enqueueInputBufferByTimestamp 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch status_t clearInputRingBuffer(); 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch protected: 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Camera3OutputStreamInterface implementation 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status_t setTransform(int transform); 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int mDepth; 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Input buffers pending to be queued into HAL 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) List<sp<RingBufferConsumer::PinnedBufferItem> > mInputBufferQueue; 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) sp<RingBufferConsumer> mProducer; 7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Input buffers in flight to HAL 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Vector<sp<RingBufferConsumer::PinnedBufferItem> > mBuffersInFlight; 8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) /** 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Camera3Stream interface 84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) */ 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // getInputBuffer/returnInputBuffer operate the input stream side of the 87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // ZslStream. 88a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual status_t getInputBufferLocked(camera3_stream_buffer *buffer); 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual status_t returnInputBufferLocked( 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const camera3_stream_buffer &buffer); 91a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Actual body to return either input or output buffers 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual status_t returnBufferCheckedLocked( 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const camera3_stream_buffer &buffer, 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch nsecs_t timestamp, 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool output, 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /*out*/ 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sp<Fence> *releaseFenceOut); 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; // class Camera3ZslStream 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; // namespace camera3 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; // namespace android 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch