package Ġcom . sz aki . v 2 v simulator . camera Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Image Format Ċ import Ġandroid . graphics . Surface Texture Ċ import Ġandroid . hardware . Camera Ċ import Ġandroid . hardware . Camera . Camera Info Ċ import Ġandroid . support . annotation . Requires Permission Ċ import Ġandroid . view . Surface Ċ import Ġandroid . view . WindowManager Ċ import Ġcom . google . android . gms . common . images . Size Ċ import Ġcom . sz aki . v 2 v simulator . misc . Frame Metadata Ċ import Ġcom . sz aki . v 2 v simulator . ml kit . Barcode Sc anning Processor Ċ import Ġjava . io . IOException Ċ import Ġjava . lang . Thread . State Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . util .* Ċ Ċ @ Suppress Lint (" Missing Permission ") Ċ class ĠFirebase Camera ( ĊĠĠĠ Ġprivate Ġval Ġactivity : ĠActivity , Ġprivate Ġval Ġcamera View : ĠCamera View , ĊĠĠĠ Ġprivate Ġval Ġrequested Preview Width : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġrequested Preview Height : ĠInt , Ġprivate Ġval Ġrequested F ps : ĠFloat Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġprocessing Runnable : ĠFrame Processing Runnable ĊĠĠĠ Ġprivate Ġval Ġprocessor Lock Ġ= ĠObject () ĊĊĠĠĠ Ġprivate Ġval Ġbytes To ByteBuffer Ġ= ĠIdentity HashMap < ByteArray , ĠByteBuffer >() ĊĠĠĠ Ġprivate Ġvar Ġcamera : ĠCamera ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġrotation : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġpreview Size : ĠSize ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdummy Surface Texture : ĠSurface Texture ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġusing Surface Texture : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġprocessing Thread : ĠThread ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġprocessor : ĠBar code Sc anning Processor ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcamera View . post Invalidate () ĊĠĠĠĠĠĠĠ Ġprocessing Runnable Ġ= ĠFrame Processing Runnable () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Camera . getNumberOf Cam eras () Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcamera Info Ġ= ĠCamera Info () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCamera . get Camera Info ( 0 , Ġcamera Info ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrelease () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( processor Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocessing Runnable . release () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclean Screen () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocessor ?. stop () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġ@ Requires Permission ( Manifest . permission . CAMERA ) ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġstart (): ĠFirebase Camera Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( camera Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Ġ= Ġcreate Camera () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdummy Surface Texture Ġ= ĠSurface Texture ( D UMMY _ TEXTURE _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera !!. set Preview Texture ( dummy Surface Texture ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusing Surface Texture Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera !!. start Preview () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocessing Thread Ġ= ĠThread ( processing Runnable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocessing Runnable . setActive ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocessing Thread !!. start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġprocessing Runnable . setActive ( false ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocessing Thread ?. join () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( e . stack Trace ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprocessing Thread Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġcamera ?. stop Preview () ĊĠĠĠĠĠĠĠ Ġcamera ?. set Preview Callback With Buffer ( null ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( using Surface Texture ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera ?. set Preview Texture ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġcamera ?. set Preview Display ( null ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( e . stack Trace ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcamera ?. release () ĊĠĠĠĠĠĠĠ Ġcamera Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġbytes To ByteBuffer . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" In lined Api ") ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġcreate Camera (): ĠCamera Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequested Camera Id Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetId For Requested Camera ( Camera Info . CAMERA _ F ACING _ BACK ) ĊĠĠĠĠĠĠĠ Ġif Ġ( requested Camera Id Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException (" Could Ġnot Ġfind Ġrequested Ġcamera .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcamera Ġ= ĠCamera . open ( requested Camera Id ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsize Pair Ġ= Ġselect Size Pair ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequested Preview Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequested Preview Height ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIOException (" Couldn 't Ġfind Ġsuitable Ġpreview Ġsize .") ĊĠĠĠĠĠĠĠ Ġval Ġpicture Size Ġ= Ġsize Pair . picture ĊĠĠĠĠĠĠĠ Ġpreview Size Ġ= Ġsize Pair . preview ĊĊĠĠĠĠĠĠĠ Ġval Ġpreview F ps Range Ġ= Ġselect Preview F ps Range ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequested F ps ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIOException (" Couldn 't Ġfind Ġsuitable Ġpreview Ġframes Ġper Ġsecond Ġrange .") ĊĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= Ġcamera . parameters ĊĊĠĠĠĠĠĠĠ Ġparameters ?. set Picture Size ( picture Size !!. width , Ġpicture Size . height ) ĊĠĠĠĠĠĠĠ Ġparameters . set Preview Size ( preview Size !!. width , Ġpreview Size !!. height ) ĊĠĠĠĠĠĠĠ Ġparameters . set Preview F ps Range ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview F ps Range [ Camera . Parameters . PRE VIEW _ FPS _ MIN _ INDEX ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview F ps Range [ Camera . Parameters . PRE VIEW _ FPS _ MAX _ INDEX ] ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġparameters . preview Format Ġ= ĠImage Format . NV 2 1 ĊĊĠĠĠĠĠĠĠ Ġset Rotation ( camera , Ġparameters , Ġrequested Camera Id ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( parameters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. supported Focus Modes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains ( Camera . Parameters . FOCUS _ MODE _ CONT IN UO US _ VIDEO ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . focus Mode Ġ= ĠCamera . Parameters . FOCUS _ MODE _ CONT IN UO US _ VIDEO ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint (" AF Ġisn 't Ġsupported ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcamera . parameters Ġ= Ġparameters ĊĠĠĠĠĠĠĠ Ġcamera . set Preview Callback With Buffer ( Camera Preview Callback ()) ĊĠĠĠĠĠĠĠ Ġcamera . add Callback Buffer ( create Preview Buffer ( preview Size !! )) ĊĠĠĠĠĠĠĠ Ġcamera . add Callback Buffer ( create Preview Buffer ( preview Size !! )) ĊĠĠĠĠĠĠĠ Ġcamera . add Callback Buffer ( create Preview Buffer ( preview Size !! )) ĊĠĠĠĠĠĠĠ Ġcamera . add Callback Buffer ( create Preview Buffer ( preview Size !! )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcamera ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Rotation ( camera : ĠCamera , Ġparameters : ĠCamera . Parameters , Ġcamera Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwindow Manager Ġ= Ġactivity . getSystem Service ( Context . WINDOW _ SERVICE ) Ġas ĠWindow Manager ĊĠĠĠĠĠĠĠ Ġvar Ġdegrees Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġrotation Ġ= Ġwindow Manager . default Display . rotation ĊĠĠĠĠĠĠĠ Ġwhen Ġ( rotation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 0 Ġ-> Ġdegrees Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 9 0 Ġ-> Ġdegrees Ġ= Ġ 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 1 8 0 Ġ-> Ġdegrees Ġ= Ġ 1 8 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 2 7 0 Ġ-> Ġdegrees Ġ= Ġ 2 7 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcamera Info Ġ= ĠCamera Info () ĊĠĠĠĠĠĠĠ ĠCamera . get Camera Info ( camera Id , Ġcamera Info ) ĊĠĠĠĠĠĠĠ Ġval Ġangle Ġ= Ġ( camera Info . orientation Ġ- Ġdegrees Ġ+ Ġ 3 6 0 ) Ġ% Ġ 3 6 0 ĊĠĠĠĠĠĠĠ Ġthis . rotation Ġ= Ġangle Ġ/ Ġ 9 0 ĊĠĠĠĠĠĠĠ Ġcamera . set Display Orientation ( angle ) ĊĠĠĠĠĠĠĠ Ġparameters . setRotation ( angle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" In lined Api ") ĊĠĠĠ Ġprivate Ġfun Ġcreate Preview Buffer ( preview Size : ĠSize ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbits Per Pixel Ġ= ĠImage Format . get Bits Per Pixel ( Image Format . NV 2 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġsize In Bits Ġ= Ġ( preview Size . height Ġ* Ġpreview Size . width Ġ* Ġbits Per Pixel ). to Long () ĊĠĠĠĠĠĠĠ Ġval ĠbufferSize Ġ= ĠMath . ceil ( size In Bits Ġ/ Ġ 8 . 0 ). toInt () Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġval ĠbyteArray Ġ= ĠByteArray ( buffer Size ) ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteBuffer . wrap ( byteArray ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! buffer . has Array () Ġ|| Ġ! buffer . array (). equals ( byteArray )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Couldn 't Ġcreate Ġvalid Ġbuffer Ġfor Ġcamera ") ĊĊĠĠĠĠĠĠĠ Ġbytes To ByteBuffer [ byteArray ] Ġ= Ġbuffer ĊĠĠĠĠĠĠĠ Ġreturn ĠbyteArray ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Sc anning Processor ( processor : ĠBar code Sc anning Processor ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( processor Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclean Screen () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocessor ?. stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . processor Ġ= Ġprocessor ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclean Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġcamera View . post Invalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠSize Pair Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġpreview Size : Ġandroid . hardware . Camera . Size , ĊĠĠĠĠĠĠĠ Ġpicture Size : Ġandroid . hardware . Camera . Size ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpreview : ĠSize Ġ= ĠSize ( preview Size . width , Ġpreview Size . height ) ĊĠĠĠĠĠĠĠ Ġvar Ġpicture : ĠSize ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( picture Size Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpicture Ġ= ĠSize ( picture Size . width , Ġpicture Size . height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠCamera Preview Callback Ġ: ĠCamera . Preview Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Preview Frame ( data : ĠByteArray , Ġcamera : ĠCamera ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocessing Runnable . set Next Frame ( data , Ġcamera ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠFrame Processing Runnable Ġ: ĠRunnable Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlock Ġ= ĠObject () ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġactive Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġpending Frame Data : ĠByteBuffer ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Assert ") ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġrelease () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( processing Thread ?. state Ġ== ĠState . TERMIN ATED ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġset Active ( active : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . active Ġ= Ġactive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock . notify All () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġset Next Frame ( data : ĠByteArray , Ġcamera : ĠCamera ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pending Frame Data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera . add Callback Buffer ( pending Frame Data !!. array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Frame Data Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! bytes To ByteBuffer . containsKey ( data )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Frame Data Ġ= Ġbytes To ByteBuffer [ data ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock . notify All () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" In lined Api ") ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdata : ĠByteBuffer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( active Ġ&& Ġpending Frame Data Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock . wait () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint (" Frame Ġprocessing Ġinterrupted ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! active ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġpending Frame Data !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Frame Data Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( processor Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocessor !!. process ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFrame Metadata . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setWidth ( preview Size !!. width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Height ( preview Size !!. height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setRotation ( rotation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Camera Facing ( Camera Info . CAMERA _ F ACING _ BACK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( t . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera !!. add Callback Buffer ( data . array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠD UMMY _ TEXTURE _ NAME Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠAS PECT _ RATIO _ TO LER ANCE Ġ= Ġ 0 . 0 1 f ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠgetId For Requested Camera ( facing : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcamera Info Ġ= ĠCamera Info () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil ĠCamera . getNumberOf Cam eras ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCamera . get Camera Info ( i , Ġcamera Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( camera Info . facing Ġ== Ġfacing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġselect Size Pair ( camera : ĠCamera , Ġdesired Width : ĠInt , Ġdesired Height : ĠInt ): ĠSize Pair ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalid Preview Sizes Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Valid Preview Size List ( camera ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġselected Pair : ĠSize Pair ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmin Diff Ġ= ĠInteger . MAX _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( size Pair Ġin Ġvalid Preview Sizes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġsize Pair . preview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= ĠMath . abs ( size . width Ġ- Ġdesired Width ) Ġ+ ĠMath . abs ( size . height Ġ- Ġdesired Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( diff Ġ< Ġmin Diff ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Pair Ġ= Ġsize Pair ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Diff Ġ= Ġdiff ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġselected Pair ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġgenerate Valid Preview Size List ( camera : ĠCamera ): ĠList < Size Pair > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= Ġcamera . parameters ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsupported Preview Sizes Ġ= Ġparameters . supported Preview Sizes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsupported Picture Sizes Ġ= Ġparameters . supported Picture Sizes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalid Preview Sizes Ġ= ĠArrayList < Size Pair >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( preview Size Ġin Ġsupported Preview Sizes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreview AspectRatio Ġ= Ġpreview Size . width . toFloat () Ġ/ Ġpreview Size . height . toFloat () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( picture Size Ġin Ġsupported Picture Sizes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpicture AspectRatio Ġ= Ġpicture Size . width . toFloat () Ġ/ Ġpicture Size . height . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Math . abs ( preview AspectRatio Ġ- Ġpicture AspectRatio ) Ġ< ĠAS PECT _ RATIO _ TO LER ANCE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalid Preview Sizes . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSize Pair ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpicture Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( valid Preview Sizes . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( preview Size Ġin Ġsupported Preview Sizes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalid Preview Sizes . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSize Pair ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalid Preview Sizes ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" In lined Api ") ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġselect Preview F ps Range ( camera : ĠCamera , Ġdesired Preview F ps : ĠFloat ): ĠInt Array ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdesired Preview F ps Scaled Ġ= Ġ( desired Preview F ps Ġ* Ġ 1 0 0 0 . 0 f ). toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġselected F ps Range : ĠInt Array ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmin Diff Ġ= ĠInteger . MAX _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreview F ps Range List Ġ= Ġcamera . parameters . supported Preview F ps Range ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( range Ġin Ġpreview F ps Range List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelta Min Ġ= Ġdesired Preview F ps Scaled Ġ- Ġrange [ Camera . Parameters . PRE VIEW _ FPS _ MIN _ INDEX ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelta Max Ġ= Ġdesired Preview F ps Scaled Ġ- Ġrange [ Camera . Parameters . PRE VIEW _ FPS _ MAX _ INDEX ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= ĠMath . abs ( delta Min ) Ġ+ ĠMath . abs ( delta Max ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( diff Ġ< Ġmin Diff ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected F ps Range Ġ= Ġrange ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Diff Ġ= Ġdiff ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġselected F ps Range ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ