package Ġjp . co . cyber agent . android . gpu image . sample . utils Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Surface Texture Ċ import Ġandroid . hardware . camera 2 .* Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Surface Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġjp . co . cyber agent . android . gpu image . util . polyfill . Size Ċ Ċ @ Requires Api ( Build . VERSION _ CODES . LO L LI POP ) Ċ class ĠCamera 2 Loader ( private Ġval Ġactivity : ĠActivity , Ġprivate Ġval ĠsetUp Surface Texture : Ġ(( Surface Texture ) Ġ-> Ġjp . co . cyber agent . android . gpu image . util . polyfill . Size ) Ġ-> ĠUnit ) Ġ: ĠCamera Loader () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcamera Instance : ĠCamera Device ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcapture Session : ĠCamera Capture Session ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcamera Facing : ĠInt Ġ= ĠCamera Character istics . LEN S _ F ACING _ BACK ĊĊĠĠĠ Ġprivate Ġval Ġcamera Manager : ĠCamera Manager Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity . getSystem Service ( Context . CAMERA _ SERVICE ) Ġas ĠCamera Manager ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume ( width : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetUp Camera () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġrelease Camera () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġswitch Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġcamera Facing Ġ= Ġwhen Ġ( camera Facing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCamera Character istics . LEN S _ F ACING _ BACK Ġ-> ĠCamera Character istics . LEN S _ F ACING _ FRONT ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCamera Character istics . LEN S _ F ACING _ FRONT Ġ-> ĠCamera Character istics . LEN S _ F ACING _ BACK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrelease Camera () ĊĠĠĠĠĠĠĠ ĠsetUp Camera () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Camera Orientation (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdegrees Ġ= Ġwhen Ġ( activity . window Manager . default Display . rotation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 0 Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 9 0 Ġ-> Ġ 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 1 8 0 Ġ-> Ġ 1 8 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 2 7 0 Ġ-> Ġ 2 7 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcamera Id Ġ= Ġget Camera Id ( camera Facing ) Ġ?: Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġcharacteristics Ġ= Ġcamera Manager . get Camera Character istics ( camera Id ) ĊĠĠĠĠĠĠĠ Ġval Ġorientation Ġ= Ġcharacteristics . get ( Camera Character istics . SENSOR _ OR IENTATION ) Ġ?: Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( camera Facing Ġ== ĠCamera Character istics . LEN S _ F ACING _ FRONT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( orientation Ġ+ Ġdegrees ) Ġ% Ġ 3 6 0 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// Ġback - facing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( orientation Ġ- Ġdegrees ) Ġ% Ġ 3 6 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhas Multiple Camera (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcamera Manager . camera IdList . size Ġ> Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġprivate Ġfun ĠsetUp Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcamera Id Ġ= Ġget Camera Id ( camera Facing ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Manager . open Camera ( camera Id , ĠCamera Device Callback (), Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠCamera AccessException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Opening Ġcamera Ġ( ID : Ġ$ camera Id ) Ġfailed .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrelease Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġcamera Instance ?. close () ĊĠĠĠĠĠĠĠ Ġcapture Session ?. close () ĊĠĠĠĠĠĠĠ Ġcamera Instance Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġcapture Session Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Camera Id ( facing : ĠInt ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcamera Manager . camera IdList . find Ġ{ Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Manager . get Camera Character istics ( id ). get ( Camera Character istics . LEN S _ F ACING ) Ġ== Ġfacing ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Capture Session () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Size Ġ= Ġget Opt imal Size ( Surface Texture :: class . java ) Ġ?: ĠSize ( 4 8 0 , Ġ 6 4 0 ) ĊĊĠĠĠĠĠĠĠ ĠsetUp Surface Texture () Ġ{ Ġsurface Texture Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsurface Texture . setDefault BufferSize ( output Size . width , Ġoutput Size . height ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsurface Ġ= ĠSurface ( surface Texture ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Instance ?. create Capture Session ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( surface ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: Camera Capture Session . State Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Configure Failed ( session : ĠCamera Capture Session ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Failed Ġto Ġconfigure Ġcapture Ġsession .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Configured ( session : ĠCamera Capture Session ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Instance Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapture Session Ġ= Ġsession ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġcamera Instance !!. create Capture Request ( Camera Device . TEMPLATE _ PRE VIEW ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add Target ( surface ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession . set Repe ating Request ( builder . build (), Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠCamera AccessException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Failed Ġto Ġstart Ġcamera Ġpreview Ġbecause Ġit Ġcouldn 't Ġaccess Ġcamera ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalStateException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Failed Ġto Ġstart Ġcamera Ġpreview .", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Size ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġprivate Ġfun Ġget Opt imal Size ( clazz : ĠClass < *> ): ĠSize ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcamera Id Ġ= Ġget Camera Id ( camera Facing ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġcamera Character istics Ġ= Ġcamera Manager . get Camera Character istics ( camera Id ) ĊĠĠĠĠĠĠĠ Ġval Ġstream Configuration Map Ġ= Ġcamera Character istics . get ( Camera Character istics . SCAL ER _ STREAM _ CONFIGURATION _ MAP ) ĊĠĠĠĠĠĠĠ Ġval Ġsupported Sizes Ġ= Ġstream Configuration Map ?. getOutput Sizes ( clazz ) ĊĠĠĠĠĠĠĠ Ġif Ġ( supported Sizes Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsupported Sizes . first (). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSize ( width , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠCamera Device Callback Ġ: ĠCamera Device . State Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Opened ( camera : ĠCamera Device ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Instance Ġ= Ġcamera ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Capture Session () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Disconnected ( camera : ĠCamera Device ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Instance Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( camera : ĠCamera Device , Ġerror : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Instance Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Camera 2 Loader " ĊĠĠĠ Ġ} Ċ }