155 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C++
		
	
	
	
| /*
 | |
|  * Copyright (c) 2016, NVIDIA CORPORATION.  All rights reserved.
 | |
|  *
 | |
|  * NVIDIA CORPORATION and its licensors retain all intellectual property
 | |
|  * and proprietary rights in and to this software, related documentation
 | |
|  * and any modifications thereto.  Any use, reproduction, disclosure or
 | |
|  * distribution of this software and related documentation without an express
 | |
|  * license agreement from NVIDIA CORPORATION is strictly prohibited.
 | |
|  */
 | |
| 
 | |
| #ifndef CAMERA_EGL_STREAM_CONSUMER_H
 | |
| #define CAMERA_EGL_STREAM_CONSUMER_H
 | |
| 
 | |
| #include <EGL/egl.h>
 | |
| #include <EGL/eglext.h>
 | |
| 
 | |
| enum CONSUMER_STATUS
 | |
| {
 | |
|   /// Function succeeded.
 | |
|   CONSUMER_STATUS_OK,
 | |
| 
 | |
|   /// The set of parameters passed was invalid.
 | |
|   CONSUMER_STATUS_INVALID_PARAMS,
 | |
| 
 | |
|   /// The requested settings are invalid.
 | |
|   CONSUMER_STATUS_INVALID_SETTINGS,
 | |
| 
 | |
|   /// The requested device is unavailable.
 | |
|   CONSUMER_STATUS_UNAVAILABLE,
 | |
| 
 | |
|   /// An operation failed because of insufficient available memory.
 | |
|   CONSUMER_STATUS_OUT_OF_MEMORY,
 | |
| 
 | |
|   /// This method has not been implemented.
 | |
|   CONSUMER_STATUS_UNIMPLEMENTED,
 | |
| 
 | |
|   /// An operation timed out.
 | |
|   CONSUMER_STATUS_TIMEOUT,
 | |
| 
 | |
|   /// The capture was aborted. @see ICaptureSession::cancelRequests()
 | |
|   CONSUMER_STATUS_CANCELLED,
 | |
| 
 | |
|   /// The stream or other resource has been disconnected.
 | |
|   CONSUMER_STATUS_DISCONNECTED,
 | |
| 
 | |
|   // Number of elements in this enum.
 | |
|   CONSUMER_STATUS_COUNT
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * A Consumer object maintains a consumer connection to an EGLStream and is
 | |
|  * used to acquire and release dmabuf Fd from the stream.
 | |
|  *
 | |
|  * Destroying a Consumer will implicitly disconnect the stream and release any
 | |
|  * pending or acquired frames, invalidating any currently acquired dmabuf Fd.
 | |
|  */
 | |
| class CameraEGLStreamConsumer
 | |
| {
 | |
| public:
 | |
|   /**
 | |
|    * Creates a new Consumer object. The returned Consumer will have the default state
 | |
|    * which can then be reconfigured using the various interfaces and settings methods
 | |
|    * before it is explicitly connected to the EGLStream using connect().
 | |
|    *
 | |
|    * @param[out] status An optional pointer to return an error status code.
 | |
|    *
 | |
|    * @returns A new Consumer object, or NULL on error.
 | |
|    */
 | |
|   static CameraEGLStreamConsumer* create(CONSUMER_STATUS* status = NULL);
 | |
| 
 | |
|   /**
 | |
|    * Sets the maximum number of frames that can be simultaneously acquired by the
 | |
|    * consumer at any point in time. The default is 1.
 | |
|    *
 | |
|    * @param[in] maxFrames The maximum number of frames that can be acquired.
 | |
|    *
 | |
|    * @return Success/error code of the call.
 | |
|    */
 | |
|   virtual CONSUMER_STATUS setMaxAcquiredFrames(uint32_t maxFrames) = 0;
 | |
| 
 | |
|   /** @} */ // End of PreConnect methods.
 | |
| 
 | |
|   /**
 | |
|    * \defgroup ConnectionState EGLStream connection state methods.
 | |
|    * @{
 | |
|    */
 | |
| 
 | |
|   /**
 | |
|    * Connects the Consumer to an EGLStream.
 | |
|    *
 | |
|    * @param[in] eglDisplay The EGLDisplay the stream belongs to.
 | |
|    * @param[in] eglStream The EGLStream to connect the consumer to.
 | |
|    *
 | |
|    * @return Success/error code of the call.
 | |
|    */
 | |
|   virtual CONSUMER_STATUS connect(EGLDisplay eglDisplay, EGLStreamKHR eglStream) = 0;
 | |
| 
 | |
|   /**
 | |
|    * Disconnects the consumer from the EGLStream. This will notify the
 | |
|    * producer endpoint of the disconnect and will prevent new frames from
 | |
|    * being presented to the stream by the producer. It will also prevent new
 | |
|    * frames from being acquired, but any currently acquired frames will still
 | |
|    * remain valid until released or until the consumer is destroyed.
 | |
|    */
 | |
|   virtual void disconnect() = 0;
 | |
| 
 | |
|   /**
 | |
|    *  Destroy the Consumer object. Destroying a Consumer will implicitly disconnect
 | |
|    *  the stream and release any pending or acquired frames, invalidating any
 | |
|    *  currently acquired dmabuf Fd.
 | |
|    */
 | |
| 
 | |
|   virtual void destroy() = 0;
 | |
| 
 | |
|   /** @} */ // End of ConnectionState methods.
 | |
| 
 | |
|   /**
 | |
|    * \defgroup Connected Methods available while the stream is connected.
 | |
|    *
 | |
|    * These methods can only be called once both the Consumer and Producer
 | |
|    * have successfully connected to the EGLStream and it is in the
 | |
|    * CONNECTED state. Calling any of these function when the stream is not
 | |
|    * in the CONNECTED state will return an INVALID_STATE status.
 | |
|    * @{
 | |
|    */
 | |
| 
 | |
|   /**
 | |
|    * Acquires a new dmabuf Fd. If the maximum number of fds are currently acquired,
 | |
|    * an error will be returned immediately. If -1 is returned and the status is
 | |
|    * DISCONNECTED, the producer has disconnected from the stream and no more fds
 | |
|    * can be acquired.
 | |
|    * @param[in] timeout The timeout to wait for a frame if one isn't available.
 | |
|    * @param[out] status An optional pointer to return an error status code.
 | |
|    *
 | |
|    * @returns dmabuf Fd of a frame acquired from the stream, or -1 on error.
 | |
|    *          This dmabuf object is owned by the Consumer, and is valid until it is
 | |
|    *          released by releaseFd() or is implicitly released by destroy().
 | |
|    */
 | |
|   virtual int acquireFd(uint64_t timeout = 0xFFFFFFFFFFFFFFFF,
 | |
|                         CONSUMER_STATUS* status = NULL) = 0;
 | |
| 
 | |
|   /**
 | |
|    * Releases an acquired dmabuf .
 | |
|    * @param[in] fd The dmabuf fd to release.
 | |
|    *
 | |
|    * @return Success/error code of the call.
 | |
|    */
 | |
|   virtual CONSUMER_STATUS releaseFd(int fd) = 0;
 | |
| 
 | |
| protected:
 | |
|   ~CameraEGLStreamConsumer() {}
 | |
| };
 | |
| 
 | |
| #endif // CAMERA_EGL_STREAM_CONSUMER_H
 |