# include  "selfdrive/common/visionimg.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <cassert> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# ifdef QCOM 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <gralloc_priv.h> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <system/graphics.h> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <ui/GraphicBuffer.h> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <ui/PixelFormat.h> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define GL_GLEXT_PROTOTYPES 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <GLES2/gl2ext.h> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								using  namespace  android ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								EGLImageTexture : : EGLImageTexture ( const  VisionBuf  * buf )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  int  bpp  =  3 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  assert ( ( buf - > len  %  buf - > stride )  = =  0 ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  assert ( ( buf - > stride  %  bpp )  = =  0 ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  int  format  =  HAL_PIXEL_FORMAT_RGB_888 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  private_handle  =  new  private_handle_t ( buf - > fd ,  buf - > len , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                             private_handle_t : : PRIV_FLAGS_USES_ION | private_handle_t : : PRIV_FLAGS_FRAMEBUFFER , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                             0 ,  format , 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								                             buf - > stride / bpp ,  buf - > len / buf - > stride , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                             buf - > width ,  buf - > height ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  // GraphicBuffer is ref counted by EGLClientBuffer(ANativeWindowBuffer), no need and not possible to release.	
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  GraphicBuffer *  gb  =  new  GraphicBuffer ( buf - > width ,  buf - > height ,  ( PixelFormat ) format , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                        GraphicBuffer : : USAGE_HW_TEXTURE ,  buf - > stride / bpp ,  ( private_handle_t * ) private_handle ,  false ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  EGLDisplay  display  =  eglGetDisplay ( EGL_DEFAULT_DISPLAY ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  assert ( display  ! =  EGL_NO_DISPLAY ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  EGLint  img_attrs [ ]  =  { EGL_IMAGE_PRESERVED_KHR ,  EGL_TRUE ,  EGL_NONE } ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  img_khr  =  eglCreateImageKHR ( display ,  EGL_NO_CONTEXT , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                              EGL_NATIVE_BUFFER_ANDROID ,  gb - > getNativeBuffer ( ) ,  img_attrs ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  assert ( img_khr  ! =  EGL_NO_IMAGE_KHR ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  glGenTextures ( 1 ,  & frame_tex ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  glBindTexture ( GL_TEXTURE_2D ,  frame_tex ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  glEGLImageTargetTexture2DOES ( GL_TEXTURE_2D ,  img_khr ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								EGLImageTexture : : ~ EGLImageTexture ( )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  glDeleteTextures ( 1 ,  & frame_tex ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  EGLDisplay  display  =  eglGetDisplay ( EGL_DEFAULT_DISPLAY ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  assert ( display  ! =  EGL_NO_DISPLAY ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  eglDestroyImageKHR ( display ,  img_khr ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  delete  ( private_handle_t * ) private_handle ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# else  // ifdef QCOM
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								EGLImageTexture : : EGLImageTexture ( const  VisionBuf  * buf )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  glGenTextures ( 1 ,  & frame_tex ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  glBindTexture ( GL_TEXTURE_2D ,  frame_tex ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  glTexImage2D ( GL_TEXTURE_2D ,  0 ,  GL_RGB ,  buf - > width ,  buf - > height ,  0 ,  GL_RGB ,  GL_UNSIGNED_BYTE ,  nullptr ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  glGenerateMipmap ( GL_TEXTURE_2D ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								EGLImageTexture : : ~ EGLImageTexture ( )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  glDeleteTextures ( 1 ,  & frame_tex ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif  // ifdef QCOM