/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 6 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . react native camera . view Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . graphics . Surface Texture Ċ import Ġandroid . hardware . Camera Ċ import Ġandroid . hardware . Camera .* Ċ import Ġandroid . media . Cam c order Profile Ċ import Ġandroid . media . Media Action Sound Ċ import Ġandroid . media . Media Recorder Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Handler Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Surface Holder Ċ import Ġandroidx . collection . Sparse Array Compat Ċ import Ġcom . facebook . react . bridge . Readable Map Ċ import Ġcom . react native camera . Constants Ċ import Ġcom . react native camera . utils . object Equals Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean Ċ Ċ internal Ġclass ĠCamera 1 ( callback : ĠCallback , Ġpreview : ĠPreview Impl , Ġbg Handler : ĠHandler ) Ġ: ĠCamera View Impl ( callback , Ġpreview , Ġbg Handler ), ĠMedia Recorder . On Info Listener , ĠMedia Recorder . OnError Listener , ĠPreview Callback Ġ{ ĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠINVALID _ CAMERA _ ID Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġval ĠFL ASH _ MODES Ġ= ĠSparse Array Compat < String >() ĊĠĠĠ Ġprivate Ġval ĠW B _ MODES Ġ= ĠSparse Array Compat < String >() ĊĠĠĠ Ġprivate Ġconst Ġval ĠF OC US _ AREA _ SIZE _ DEFAULT Ġ= Ġ 3 0 0 ĊĠĠĠ Ġprivate Ġconst Ġval ĠF OC US _ METER ING _ AREA _ WEIGHT _ DEFAULT Ġ= Ġ 1 0 0 0 ĊĠĠĠ Ġprivate Ġconst Ġval ĠDEL AY _ M ILL IS _ BEFORE _ RESET TING _ FOCUS Ġ= Ġ 3 0 0 0 ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ ĠFL ASH _ MODES . put ( Constants . FLASH _ OFF , ĠParameters . FLASH _ MODE _ OFF ) ĊĠĠĠĠĠ ĠFL ASH _ MODES . put ( Constants . FLASH _ ON , ĠParameters . FLASH _ MODE _ ON ) ĊĠĠĠĠĠ ĠFL ASH _ MODES . put ( Constants . FLASH _ TOR CH , ĠParameters . FLASH _ MODE _ TOR CH ) ĊĠĠĠĠĠ ĠFL ASH _ MODES . put ( Constants . FLASH _ AUTO , ĠParameters . FLASH _ MODE _ AUTO ) ĊĠĠĠĠĠ ĠFL ASH _ MODES . put ( Constants . FLASH _ RED _ EY E , ĠParameters . FLASH _ MODE _ RED _ EY E ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ ĠW B _ MODES . put ( Constants . WB _ AUTO , ĠParameters . WHITE _ BAL ANCE _ AUTO ) ĊĠĠĠĠĠ ĠW B _ MODES . put ( Constants . WB _ CLOUD Y , ĠParameters . WHITE _ BAL ANCE _ CLOUD Y _ DAY LIGHT ) ĊĠĠĠĠĠ ĠW B _ MODES . put ( Constants . WB _ SUN NY , ĠParameters . WHITE _ BAL ANCE _ DAY LIGHT ) ĊĠĠĠĠĠ ĠW B _ MODES . put ( Constants . WB _ SH ADOW , ĠParameters . WHITE _ BAL ANCE _ SHA DE ) ĊĠĠĠĠĠ ĠW B _ MODES . put ( Constants . WB _ FL U ORE SC ENT , ĠParameters . WHITE _ BAL ANCE _ FL U ORE SC ENT ) ĊĠĠĠĠĠ ĠW B _ MODES . put ( Constants . WB _ INC AN DESC ENT , ĠParameters . WHITE _ BAL ANCE _ INC AN DESC ENT ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġm Handler Ġ= ĠHandler () ĊĠ Ġprivate Ġvar Ġm Camera Id Ġ= Ġ 0 ĊĠ Ġprivate Ġvar Ġ_ m Camera Id : ĠString ? Ġ= Ġnull ĊĠ Ġprivate Ġval Ġis Picture Capture InProgress Ġ= ĠAtomic Boolean ( false ) ĊĠ Ġvar Ġm Camera : ĠCamera ? Ġ= Ġnull ĊĊĠ Ġ// Ġdo Ġnot Ġinstantiate Ġthis Ġevery Ġtime Ġsince Ġit Ġalloc ates Ġunnecessary Ġresources ĊĠ Ġvar Ġsound Ġ= ĠMedia Action Sound () ĊĠ Ġprivate Ġvar Ġm Camera Parameters : ĠCamera . Parameters ? Ġ= Ġnull ĊĠ Ġprivate Ġval Ġm Camera Info Ġ= ĠCamera Info () ĊĠ Ġprivate Ġvar Ġm Media Recorder : ĠMedia Recorder ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġm Video Path : ĠString ? Ġ= Ġnull ĊĠ Ġprivate Ġval Ġm Is Recording Ġ= ĠAtomic Boolean ( false ) ĊĠ Ġprivate Ġval Ġm Preview Sizes Ġ= ĠSize Map () ĊĠ Ġprivate Ġvar Ġm Is Preview Active Ġ= Ġfalse ĊĠ Ġprivate Ġvar Ġm Showing Preview Ġ= Ġtrue Ġ// Ġpreview Ġenabled Ġby Ġdefault ĊĠ Ġprivate Ġval Ġm Picture Sizes Ġ= ĠSize Map () ĊĠ Ġprivate Ġvar Ġm Picture Size : ĠSize ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġm AspectRatio : ĠAs pect Ratio ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġm Auto Focus Ġ= Ġfalse ĊĠ Ġprivate Ġvar Ġm Facing Ġ= Ġ 0 ĊĠ Ġprivate Ġvar Ġm Flash Ġ= Ġ 0 ĊĠ Ġprivate Ġvar Ġm Exposure Ġ= Ġ 0 f ĊĠ Ġprivate Ġvar Ġm Display Orientation Ġ= Ġ 0 ĊĠ Ġprivate Ġvar Ġm Device Orientation Ġ= Ġ 0 ĊĠ Ġprivate Ġvar Ġm Orientation Ġ= ĠConstants . OR IENTATION _ AUTO ĊĠ Ġprivate Ġvar Ġm Zoom Ġ= Ġ 0 f ĊĠ Ġprivate Ġvar Ġm White Balance Ġ= Ġ 0 ĊĠ Ġprivate Ġvar Ġm Is Sc anning Ġ= Ġfalse ĊĠ Ġprivate Ġvar Ġm Play Sound On Capture Ġ= Ġfalse ĊĠ Ġprivate Ġvar Ġm Play Sound On Record Ġ= Ġfalse ĊĠ Ġprivate Ġvar Ġmust Update Surface Ġ= Ġfalse ĊĠ Ġprivate Ġvar Ġsurface Was Destroyed Ġ= Ġfalse ĊĠ Ġprivate Ġvar Ġm Preview Texture : ĠSurface Texture ? Ġ= Ġnull ĊĠ Ġprivate Ġfun Ġupdate Surface () Ġ{ ĊĠĠĠ Ġif Ġ( m Camera Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠ Ġ// Ġdo Ġnot Ġupdate Ġsurface Ġif Ġwe Ġare Ġcurrently Ġcapturing ĊĠĠĠĠĠ Ġ// Ġsince Ġit Ġwill Ġbreak Ġcapture Ġevents / video Ġdue Ġto Ġthe ĊĠĠĠĠĠ Ġ// Ġpause Ġpreview Ġcalls ĊĠĠĠĠĠ Ġ// Ġcapture Ġcallbacks Ġwill Ġhandle Ġit Ġif Ġneeded Ġafterwards . ĊĠĠĠĠĠ Ġif Ġ(! is Picture Capture InProgress . get () Ġ&& Ġ! m Is Recording . get ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Bg Handler . post ( Runnable Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsynchronized ( this @ Camera 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġfor Ġcamera Ġnull Ġagain Ġsince Ġit Ġmight Ġhave Ġchanged ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmust Update Surface Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp Preview () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadjust Camera Parameters () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġonly Ġstart Ġpreview Ġif Ġwe Ġare Ġshowing Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Showing Preview ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Camera Preview () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġmust Update Surface Ġ= Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġpublic Ġoverride Ġfun Ġstart (): ĠBoolean Ġ{ ĊĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠ Ġchoose Camera () ĊĠĠĠĠĠ Ġif Ġ(! open Camera ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Callback . on Mount Error () ĊĠĠĠĠĠĠĠ Ġ// Ġreturning Ġfalse Ġwill Ġresult Ġin Ġinvoking Ġthis Ġmethod Ġagain ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ// Ġif Ġour Ġpreview Ġlayer Ġis Ġnot Ġready ĊĠĠĠĠĠ Ġ// Ġdo Ġnot Ġset Ġit Ġup . ĠSurface Ġhandler Ġwill Ġdo Ġit Ġfor Ġus ĊĠĠĠĠĠ Ġ// Ġonce Ġready . ĊĠĠĠĠĠ Ġ// ĠThis Ġprevents Ġsome Ġredundant Ġcamera Ġwork ĊĠĠĠĠĠ Ġif Ġ( m Preview . is Ready ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetUp Preview () ĊĠĠĠĠĠĠĠ Ġif Ġ( m Showing Preview ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġstart Camera Preview () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġpublic Ġoverride Ġfun Ġstop () Ġ{ ĊĊĠĠĠ Ġ// Ġmake Ġsure Ġno Ġother Ġthreads Ġare Ġtrying Ġto Ġdo Ġthis Ġat Ġthe Ġsame Ġtime ĊĠĠĠ Ġ// Ġsuch Ġas Ġanother Ġcall Ġto Ġstop Ġfrom Ġsurface Ġdestroyed ĊĠĠĠ Ġ// Ġor Ġhost Ġdestroyed . ĠShould Ġavoid Ġcrashes Ġwith Ġconcurrent Ġcalls ĊĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( m Media Recorder Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm Media Recorder !!. stop () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" m Media Recorder . stop () Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm Media Recorder !!. reset () ĊĠĠĠĠĠĠĠĠĠ Ġm Media Recorder !!. release () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" m Media Recorder . release () Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Media Recorder Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( m Is Recording . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm Callback . on Recording End () ĊĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Orientation : ĠInt Ġ= Ġdisplay Orientation To Orientation Enum ( m Device Orientation ) ĊĠĠĠĠĠĠĠĠĠ Ġm Callback . on Video Re corded ( m Video Path !! , Ġif Ġ( m Orientation Ġ!= ĠConstants . OR IENTATION _ AUTO ) Ġm Orientation Ġelse Ġdevice Orientation , Ġdevice Orientation ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( m Camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Is Preview Active Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm Camera !!. stop Preview () ĊĠĠĠĠĠĠĠĠĠ Ġm Camera !!. set Preview Callback ( null ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" stop Ġpreview Ġcleanup Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġrelease Camera () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ// ĠSup p resses ĠCamera # set Preview Texture ĊĠ Ġ@ Suppress Lint (" New Api ") ĊĠ Ġfun ĠsetUp Preview () Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġsurface Was Destroyed Ġ= Ġfalse ĊĠĠĠĠĠ Ġif Ġ( m Camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Preview Texture Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm Camera !!. set Preview Texture ( m Preview Texture ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( m Preview . output Class Ġ== ĠSurface Holder :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġneeds To Stop Preview Ġ= Ġm Is Preview Active ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( need sTo Stop Preview ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. stop Preview () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Is Preview Active Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġm Camera !!. set Preview Display ( m Preview . surface Holder ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( need sTo Stop Preview ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Camera Preview () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm Camera !!. set Preview Texture ( m Preview . surface Texture Ġas ĠSurface Texture ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" setUp Preview Ġfailed ", Ġe ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġstart Camera Preview () Ġ{ ĊĠĠĠ Ġ// Ġonly Ġstart Ġthe Ġpreview Ġif Ġwe Ġdidn 't Ġyet . ĊĠĠĠ Ġif Ġ(! m Is Preview Active Ġ&& Ġm Camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġm Is Preview Active Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġm Camera !!. start Preview () ĊĠĠĠĠĠĠĠ Ġif Ġ( m Is Sc anning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm Camera !!. set Preview Callback ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Is Preview Active Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" start Camera Preview Ġfailed ", Ġe ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġresume Preview () Ġ{ ĊĠĠĠ Ġm Bg Handler . post ( object Ġ: ĠRunnable Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm Showing Preview Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠ Ġstart Camera Preview () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġpause Preview () Ġ{ ĊĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠ Ġm Is Preview Active Ġ= Ġfalse ĊĠĠĠĠĠ Ġm Showing Preview Ġ= Ġfalse ĊĠĠĠĠĠ Ġif Ġ( m Camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Camera !!. stop Preview () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġval Ġis Camera Opened : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġm Camera Ġ!= Ġnull ĊĊĠ Ġoverride Ġvar Ġfacing : ĠInt ĊĠĠĠ Ġget () Ġ= Ġm Facing ĊĠĠĠ Ġset ( facing ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( mF acing Ġ== Ġfacing ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġm Facing Ġ= Ġfacing ĊĠĠĠĠĠ Ġm Bg Handler . post Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Camera Opened ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġstop () ĊĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġvar Ġcamera Id : ĠString ? ĊĠĠĠ Ġget () Ġ= Ġ_ m Camera Id ĊĠĠĠ Ġset ( id ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ(! object Equals (_ m Camera Id , Ġid )) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ m Camera Id Ġ= Ġid ĊĊĠĠĠĠĠĠĠ Ġ// Ġonly Ġupdate Ġif Ġour Ġcamera ĠID Ġactually Ġchanges ĊĠĠĠĠĠĠĠ Ġ// Ġfrom Ġwhat Ġwe Ġcurrently Ġhave . ĊĠĠĠĠĠĠĠ Ġ// ĠPass ing Ġnull Ġwill Ġalways Ġyield Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ(! object Equals (_ m Camera Id , Ġm Camera Id . toString ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġwill Ġcall Ġchoose Camera ĊĠĠĠĠĠĠĠĠĠ Ġm Bg Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Camera Opened ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġval Ġsupported Aspect Rat ios : ĠSet < AspectRatio > ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠ Ġval Ġideal Aspect Rat ios Ġ= Ġm Preview Sizes ĊĠĠĠĠĠ Ġfor Ġ( aspect Ratio : ĠAs pect Ratio ? Ġin Ġideal Aspect Rat ios . rat ios ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Picture Sizes . sizes ( aspect Ratio ) Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġideal Aspect Rat ios . remove ( aspect Ratio ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġideal Aspect Rat ios . rat ios () ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġval Ġcamera Ids : ĠList < Properties > ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠ Ġval Ġids : ĠMutable List < Properties > Ġ= ĠArrayList () ĊĠĠĠĠĠ Ġval Ġinfo Ġ= ĠCamera Info () ĊĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠ Ġval Ġcount Ġ= ĠCamera . getNumberOf Cam eras () ĊĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠProperties () ĊĠĠĠĠĠĠĠ ĠCamera . get Camera Info ( i , Ġinfo ) ĊĠĠĠĠĠĠĠ Ġp [" id "] Ġ= Ġi . toString () ĊĠĠĠĠĠĠĠ Ġp [" type "] Ġ= Ġinfo . facing . toString () ĊĠĠĠĠĠĠĠ Ġids . add ( p ) ĊĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġids ĊĠĠĠ Ġ} ĊĊĠ Ġpublic Ġoverride Ġfun Ġget Available Picture Sizes ( ratio : ĠAs pect Ratio ): ĠSorted Set < Size > Ġ{ ĊĠĠĠ Ġreturn Ġ( m Picture Sizes . sizes ( ratio )) !! ĊĠ Ġ} ĊĊĠ Ġ// ĠReturns Ġthe Ġbest Ġavailable Ġsize Ġmatch Ġfor Ġa Ġgiven ĊĠ Ġ// Ġwidth Ġand Ġheight ĊĠ Ġ// Ġreturns Ġthe Ġbiggest Ġavailable Ġsize ĊĠ Ġprivate Ġfun Ġget Best Size Match ( desired Width : ĠInt , Ġdesired Height : ĠInt , Ġsizes : ĠSorted Set < Size >? ): ĠSize ? Ġ{ ĊĠĠĠ Ġif Ġ( sizes Ġ== Ġnull Ġ|| Ġsizes . isEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġresult Ġ= Ġsizes . last () ĊĊĠĠĠ Ġ// Ġiterate Ġfrom Ġsmallest Ġto Ġlargest , Ġand Ġstay Ġwith Ġthe Ġclosest - big gest Ġmatch ĊĠĠĠ Ġif Ġ( desired Width Ġ!= Ġ 0 Ġ&& Ġdesired Height Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġfor Ġ( size : ĠSize Ġin Ġsizes ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( desired Width Ġ<= Ġsize . width Ġ&& Ġdesired Height Ġ<= Ġsize . height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġsize ĊĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} ĊĊĠ Ġoverride Ġvar Ġpicture Size : ĠSize ? ĊĠĠĠ Ġget () Ġ= Ġm Picture Size ĊĠĠĠ Ġset ( size ) Ġ{ ĊĠĠĠĠĠ Ġ// Ġif Ġno Ġchanges , Ġdon 't Ġdo Ġanything ĊĠĠĠĠĠ Ġif Ġ( m Picture Size Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( size Ġ== Ġm Picture Size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġm Picture Size Ġ= Ġsize ĊĊĠĠĠĠĠ Ġ// Ġif Ġcamera Ġis Ġopened , Ġrequest Ġparameters Ġupdate ĊĠĠĠĠĠ Ġif Ġ( is Camera Opened ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Bg Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsynchronized ( this @ Camera 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadjust Camera Parameters () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġval Ġaspect Ratio : ĠAs pect Ratio ? ĊĠĠĠ Ġget () Ġ= Ġm AspectRatio ĊĊĠ Ġoverride Ġfun Ġset AspectRatio ( ratio : ĠAs pect Ratio ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( m AspectRatio Ġ== Ġnull Ġ|| Ġ! is Camera Opened ) Ġ{ ĊĠĠĠĠĠ Ġ// ĠHandle Ġthis Ġlater Ġwhen Ġcamera Ġis Ġopened ĊĠĠĠĠĠ Ġm AspectRatio Ġ= Ġratio ĊĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ġelse Ġif Ġ(! m AspectRatio !!. equals ( ratio )) Ġ{ ĊĠĠĠĠĠ Ġval Ġsizes : ĠSet < Size >? Ġ= Ġm Preview Sizes . sizes ( ratio ) ĊĠĠĠĠĠ Ġif Ġ( sizes Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing , Ġratio Ġremains Ġunchanged . ĠCons istent Ġwith ĠCamera 2 Ġand Ġinitial Ġmount Ġbehaviour ĊĠĠĠĠĠĠĠ ĠLog . w (" CAMERA _ 1 :: ", Ġ" set AspectRatio Ġreceived Ġan Ġunsupported Ġvalue Ġand Ġwill Ġbe Ġignored .") ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġm AspectRatio Ġ= Ġratio ĊĠĠĠĠĠĠĠ Ġm Bg Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsynchronized ( this @ Camera 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadjust Camera Parameters () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfalse ĊĠ Ġ} ĊĊĠ Ġoverride Ġvar Ġauto Focus : ĠBoolean ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠ Ġif Ġ(! is Camera Opened ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Auto Focus ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġfocus Mode Ġ= Ġm Camera Parameters !!. focus Mode ĊĠĠĠĠĠ Ġreturn Ġfocus Mode Ġ!= Ġnull Ġ&& Ġfocus Mode . contains (" continuous ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġset ( auto Focus ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( m Auto Focus Ġ== Ġauto Focus ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( setAuto Focus Internal ( auto Focus )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. parameters Ġ= Ġm Camera Parameters ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" set Parameters Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġvar Ġflash : ĠInt ĊĠĠĠ Ġget () Ġ= Ġm Flash ĊĠĠĠ Ġset ( flash ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( flash Ġ== Ġm Flash ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( set Flash Internal ( flash )) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. parameters Ġ= Ġm Camera Parameters ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" set Parameters Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġvar Ġexposure Comp ensation : ĠFloat ĊĠĠĠ Ġget () Ġ= Ġm Exposure ĊĠĠĠ Ġset ( ex posure ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( ex posure Ġ== Ġm Exposure ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( set Exposure Internal ( ex posure )) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. parameters Ġ= Ġm Camera Parameters ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" set Parameters Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġvar Ġfocus Depth : ĠFloat ĊĠĠĠ Ġget () Ġ= Ġ 0 . toFloat () ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġ// Ġnot Ġsupported Ġfor ĠCamera 1 ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġvar Ġzoom : ĠFloat ĊĠĠĠ Ġget () Ġ= Ġm Zoom ĊĠĠĠ Ġset ( zoom ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( zoom Ġ== Ġm Zoom ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( set Zoom Internal ( zoom )) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. parameters Ġ= Ġm Camera Parameters ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" set Parameters Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġvar Ġwhite Balance : ĠInt ĊĠĠĠ Ġget () Ġ= Ġm White Balance ĊĠĠĠ Ġset ( white Balance ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( white Balance Ġ== Ġm White Balance ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( set White Balance Internal ( white Balance )) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. parameters Ġ= Ġm Camera Parameters ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" set Parameters Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġvar Ġscanning : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġm Is Sc anning ĊĠĠĠ Ġset ( is Sc anning ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( is Sc anning Ġ== Ġm Is Sc anning ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġset Sc anning Internal ( is Sc anning ) ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġtake Picture ( options : ĠRead able Map ) Ġ{ ĊĠĠĠ Ġif Ġ(! is Camera Opened ) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠIllegalStateException ( ĊĠĠĠĠĠĠĠ Ġ" Camera Ġis Ġnot Ġready . ĠCall Ġstart () Ġbefore Ġtake Picture (). ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ(! m Is Preview Active ) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Preview Ġis Ġpaused Ġ- Ġresume Ġit Ġbefore Ġtaking Ġa Ġpicture .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠUPDATE : ĠTake Ġpicture Ġright Ġaway Ġinstead Ġof Ġrequesting / waiting Ġfor Ġfocus . ĊĠĠĠ Ġ// ĠThis Ġwill Ġmatch Ġcloser Ġwhat Ġthe Ġnative Ġcamera Ġdoes , ĊĠĠĠ Ġ// Ġand Ġwill Ġcapture Ġwhatever Ġis Ġon Ġthe Ġpreview Ġwithout Ġchanging Ġthe Ġcamera Ġfocus . ĊĠĠĠ Ġ// ĠThis Ġchange Ġwill Ġalso Ġhelp Ġwith Ġauto Focus Point Of Interest Ġnot Ġbeing Ġusable Ġto Ġcapture Ġ( Issue Ġ# 2 4 2 0 ) ĊĠĠĠ Ġ// Ġand Ġwith Ġtake Picture Ġnever Ġreturning / res olving Ġif Ġthe Ġfocus Ġwas Ġreset Ġ( Issue Ġ# 2 4 2 1 ) ĊĠĠĠ Ġtake Picture Internal ( options ) ĊĠ Ġ} ĊĊĠ Ġfun Ġorientation Enum To Rotation ( orientation : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( orientation ) Ġ{ ĊĠĠĠĠĠ ĠConstants . OR IENTATION _ UP Ġ-> Ġ 0 ĊĠĠĠĠĠ ĠConstants . OR IENTATION _ DOWN Ġ-> Ġ 1 8 0 ĊĠĠĠĠĠ ĠConstants . OR IENTATION _ LEFT Ġ-> Ġ 2 7 0 ĊĠĠĠĠĠ ĠConstants . OR IENTATION _ RIGHT Ġ-> Ġ 9 0 ĊĠĠĠĠĠ Ġelse Ġ-> ĠConstants . OR IENTATION _ UP ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġdisplay Orientation To Orientation Enum ( rotation : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( rotation ) Ġ{ ĊĠĠĠĠĠĠ 0 Ġ-> ĠConstants . OR IENTATION _ UP ĊĠĠĠĠĠĠ 9 0 Ġ-> ĠConstants . OR IENTATION _ RIGHT ĊĠĠĠĠĠĠ 1 8 0 Ġ-> ĠConstants . OR IENTATION _ DOWN ĊĠĠĠĠĠĠ 2 7 0 Ġ-> ĠConstants . OR IENTATION _ LEFT ĊĠĠĠĠĠ Ġelse Ġ-> Ġ 1 ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġtake Picture Internal ( options : ĠRead able Map ) Ġ{ ĊĠĠĠ Ġ// Ġif Ġnot Ġcapturing Ġalready , Ġatom ically Ġset Ġit Ġto Ġtrue ĊĠĠĠ Ġif Ġ(! m Is Recording . get () Ġ&& Ġis Picture Capture InProgress . compare AndSet ( false , Ġtrue )) Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( options . has Key (" orientation ") Ġ&& Ġoptions . getInt (" orientation ") Ġ!= ĠConstants . OR IENTATION _ AUTO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm Orientation Ġ= Ġoptions . getInt (" orientation ") ĊĠĠĠĠĠĠĠĠĠ Ġval Ġrotation Ġ= Ġorientation Enum To Rotation ( m Orientation ) ĊĠĠĠĠĠĠĠĠĠ Ġm Camera Parameters !!. setRotation ( calc Camera Rotation ( rotation )) ĊĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. parameters Ġ= Ġm Camera Parameters ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" set Parameters Ġrotation Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġquality Ġon Ġcapture Ġsince Ġwe Ġmight Ġnot Ġprocess Ġthe Ġimage Ġbitmap Ġif Ġnot Ġneeded Ġnow . ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġalso Ġach ie ves Ġa Ġmuch Ġfaster ĠJPEG Ġcompression Ġspeed Ġsince Ġit 's Ġdone Ġon Ġthe Ġhardware ĊĠĠĠĠĠĠĠ Ġif Ġ( options . has Key (" quality ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm Camera Parameters !!. jpeg Quality Ġ= Ġ( options . getDouble (" quality ") Ġ* Ġ 1 0 0 ). toInt () ĊĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. parameters Ġ= Ġm Camera Parameters ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" set Parameters Ġquality Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Camera !!. take Picture ( null , Ġnull , Ġnull , Ġobject Ġ: ĠPicture Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Picture Taken ( data : ĠByteArray , Ġcamera : ĠCamera ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġshouldn 't Ġbe Ġneeded Ġand Ġmes ses Ġup Ġauto Focus Point Of Interest ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcamera . cancel Auto Focus (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Play Sound On Capture ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsound . play ( Media Action Sound . SHUT TER _ CLICK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġour Ġcamera Ġmight Ġhave Ġbeen Ġreleased ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhen Ġthis Ġcallback Ġfires , Ġso Ġmake Ġsure Ġwe Ġhave ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġexclusive Ġaccess Ġwhen Ġrest oring Ġits Ġpreview ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( this @ Camera 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( options . has Key (" pause After Capture ") Ġ&& Ġ! options . getBoolean (" pause After Capture ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. start Preview () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Is Preview Active Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Is Sc anning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. set Preview Callback ( this @ Camera 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. stop Preview () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Is Preview Active Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. set Preview Callback ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Picture Capture InProgress . set ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Orientation Ġ= ĠConstants . OR IENTATION _ AUTO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback . on Picture Taken ( data , Ġdisplay Orientation To Orientation Enum ( m Device Orientation )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( must Update Surface ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Surface () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Picture Capture InProgress . set ( false ) ĊĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Camera Ġcapture Ġfailed . ĠCamera Ġis Ġalready Ġcapturing .") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġpublic Ġoverride Ġfun Ġrecord ( path : ĠString , Ġmax Duration : ĠInt , Ġmax FileSize : ĠInt , Ġrecord Audio : ĠBoolean , Ġprofile : ĠCam c order Profile , Ġorientation : ĠInt , Ġfps : ĠInt ): ĠBoolean Ġ{ ĊĊĠĠĠ Ġ// Ġmake Ġsure Ġcompare AndSet Ġis Ġlast Ġbecause Ġwe Ġare Ġsetting Ġit ĊĠĠĠ Ġif Ġ(! is Picture Capture InProgress . get () Ġ&& Ġm Is Recording . compare AndSet ( false , Ġtrue )) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( orientation Ġ!= ĠConstants . OR IENTATION _ AUTO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Orientation Ġ= Ġorientation ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ ĠsetUp Media Recorder ( path , Ġmax Duration , Ġmax FileSize , Ġrecord Audio , Ġprofile , Ġfps ) ĊĠĠĠĠĠĠĠ Ġm Media Recorder !!. prepare () ĊĠĠĠĠĠĠĠ Ġm Media Recorder !!. start () ĊĊĠĠĠĠĠĠĠ Ġ// Ġafter Ġour Ġmedia Ġrecorder Ġis Ġset Ġand Ġstarted , Ġwe Ġmust Ġupdate ĊĠĠĠĠĠĠĠ Ġ// Ġsome Ġcamera Ġparameters Ġagain Ġbecause Ġthe Ġrecorder 's Ġexclusive Ġaccess Ġ( after Ġunlock Ġis Ġcalled ) ĊĠĠĠĠĠĠĠ Ġ// Ġmight Ġinterf ere Ġwith Ġthe Ġcamera Ġparameters Ġ( e . g ., Ġflash Ġand Ġzoom ) ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġshould Ġalso Ġbe Ġsafe Ġto Ġcall Ġsince Ġboth Ġrecording Ġand ĊĠĠĠĠĠĠĠ Ġ// Ġcamera Ġparameters Ġare Ġgetting Ġset Ġby Ġthe Ġsame Ġthread Ġand Ġprocess . ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// stackoverflow . com / a / 1 4 8 5 5 6 6 8 / 1 7 7 7 9 1 4 ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm Camera !!. parameters Ġ= Ġm Camera Parameters ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" Record Ġset Parameters Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdevice Orientation Ġ= Ġdisplay Orientation To Orientation Enum ( m Device Orientation ) ĊĠĠĠĠĠĠĠ Ġm Callback . on Recording Start ( path , Ġif Ġ( m Orientation Ġ!= ĠConstants . OR IENTATION _ AUTO ) Ġm Orientation Ġelse Ġdevice Orientation , Ġdevice Orientation ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m Play Sound On Record ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsound . play ( Media Action Sound . START _ VIDEO _ RECORD ING ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Is Recording . set ( false ) ĊĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" Record Ġstart Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfalse ĊĠ Ġ} ĊĊĠ Ġpublic Ġoverride Ġfun Ġstop Recording () Ġ{ ĊĠĠĠ Ġif Ġ( m Is Recording . compare AndSet ( true , Ġfalse )) Ġ{ ĊĠĠĠĠĠ Ġstop Media Recorder () ĊĠĠĠĠĠ Ġif Ġ( m Camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Camera !!. lock () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( must Update Surface ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Surface () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġpause Recording () Ġ{ ĊĠĠĠ Ġpause Media Recorder () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġresume Recording () Ġ{ ĊĠĠĠ Ġresume Media Recorder () ĊĠ Ġ} ĊĊĠ Ġoverride Ġval Ġcamera Orientation : ĠInt ĊĠĠĠ Ġget () Ġ= Ġm Camera Info . orientation ĊĊĠ Ġoverride Ġfun Ġset Display Orientation ( display Orientation : ĠInt ) Ġ{ ĊĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( m Display Orientation Ġ== Ġdisplay Orientation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġm Display Orientation Ġ= Ġdisplay Orientation ĊĠĠĠĠĠ Ġif Ġ( is Camera Opened ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġneeds To Stop Preview : ĠBoolean Ġ= Ġm Is Preview Active ĊĠĠĠĠĠĠĠ Ġif Ġ( need sTo Stop Preview ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm Camera !!. stop Preview () ĊĠĠĠĠĠĠĠĠĠ Ġm Is Preview Active Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm Camera !!. set Display Orientation ( calc Display Orientation ( display Orientation )) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" set Display Orientation Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( need sTo Stop Preview ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġstart Camera Preview () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġpublic Ġoverride Ġfun Ġset Device Orientation ( device Orientation : ĠInt ) Ġ{ ĊĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( m Device Orientation Ġ== Ġdevice Orientation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġm Device Orientation Ġ= Ġdevice Orientation ĊĠĠĠĠĠ Ġif Ġ( is Camera Opened Ġ&& Ġ( m Orientation Ġ== ĠConstants . OR IENTATION _ AUTO ) Ġ&& Ġ! m Is Recording . get () Ġ&& Ġ! is Picture Capture InProgress . get ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Camera Parameters !!. setRotation ( calc Camera Rotation ( device Orientation )) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm Camera !!. set Parameters ( m Camera Parameters ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" set Parameters Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġset Preview Texture ( surface Texture : ĠSurface Texture ) Ġ{ ĊĠĠĠ Ġm Bg Handler . post ( object Ġ: ĠRunnable Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Camera Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Preview Texture Ġ= Ġsurface Texture ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġm Camera !!. stop Preview () ĊĠĠĠĠĠĠĠĠĠ Ġm Is Preview Active Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( surface Texture Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. set Preview Texture ( m Preview . surface Texture Ġas ĠSurface Texture ) ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. set Preview Texture ( surface Texture ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġm Preview Texture Ġ= Ġsurface Texture ĊĠĠĠĠĠĠĠĠĠ Ġstart Camera Preview () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" set Preview Texture Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġoverride Ġval Ġpreview Size : ĠSize ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠ Ġval Ġcamera Size Ġ= Ġm Camera Parameters !!. preview Size ĊĠĠĠĠĠ Ġreturn ĠSize ( camera Size . width , Ġcamera Size . height ) ĊĠĠĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThis Ġre writes Ġ[. m Camera Id ] Ġand Ġ[. m Camera Info ]. ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġchoose Camera () Ġ{ ĊĠĠĠ Ġif Ġ(_ m Camera Id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= ĠCamera . getNumberOf Cam eras () ĊĠĠĠĠĠĠĠ Ġif Ġ( count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// throw Ġnew ĠRuntimeException (" No Ġcamera Ġavailable ."); ĊĠĠĠĠĠĠĠĠĠ Ġm Camera Id Ġ= ĠINVALID _ CAMERA _ ID ĊĠĠĠĠĠĠĠĠĠ ĠLog . w (" CAMERA _ 1 :: ", Ġ" getNumberOf Cam eras Ġreturned Ġ 0 . ĠNo Ġcamera Ġavailable .") ĊĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠCamera . get Camera Info ( i , Ġm Camera Info ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Camera Info . facing Ġ== Ġm Facing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera Id Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġno Ġcamera Ġfound , Ġset Ġthe Ġone Ġwe Ġhave ĊĠĠĠĠĠĠĠ Ġm Camera Id Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ ĠCamera . get Camera Info ( m Camera Id , Ġm Camera Info ) ĊĠĠĠĠĠ Ġ} Ġ// Ġget Camera Info Ġmay Ġfail Ġif Ġhardware Ġis Ġunavailable ĊĠĠĠĠĠ Ġ// Ġand Ġcrash Ġthe Ġwhole Ġapp . ĠReturn ĠINVALID _ CAMERA _ ID ĊĠĠĠĠĠ Ġ// Ġwhich Ġwill Ġin Ġturn Ġfire Ġa Ġmount Ġerror Ġevent ĊĠĠĠĠĠ Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" choose Camera Ġfailed .", Ġe ) ĊĠĠĠĠĠĠĠ Ġm Camera Id Ġ= ĠINVALID _ CAMERA _ ID ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġm Camera Id Ġ= Ġ_ m Camera Id !!. toInt () ĊĠĠĠĠĠĠĠ ĠCamera . get Camera Info ( m Camera Id , Ġm Camera Info ) ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Camera Id Ġ= ĠINVALID _ CAMERA _ ID ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġopen Camera (): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( m Camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġrelease Camera () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġin Ġcase Ġwe Ġgot Ġan Ġinvalid Ġcamera ĠID ĊĠĠĠ Ġ// Ġdue Ġto Ġno Ġcameras Ġor Ġinvalid ĠID Ġprovided , ĊĠĠĠ Ġ// Ġreturn Ġfalse Ġso Ġwe Ġcan Ġraise Ġa Ġmount Ġerror ĊĠĠĠ Ġif Ġ( m Camera Id Ġ== ĠINVALID _ CAMERA _ ID ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġval Ġcamera Ġ= ĠCamera . open ( m Camera Id ) ĊĠĠĠĠĠ Ġm Camera Ġ= Ġcamera ĊĠĠĠĠĠ Ġval Ġcamera Parameters Ġ= Ġcamera . parameters ĊĠĠĠĠĠ Ġm Camera Parameters Ġ= Ġcamera Parameters ĊĊĠĠĠĠĠ Ġ// ĠSupported Ġpreview Ġsizes ĊĠĠĠĠĠ Ġm Preview Sizes . clear () ĊĠĠĠĠĠ Ġfor Ġ( size : ĠCamera . Size Ġin Ġcamera Parameters . supported Preview Sizes ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Preview Sizes . add ( Size ( size . width , Ġsize . height )) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ// ĠSupported Ġpicture Ġsizes ; ĊĠĠĠĠĠ Ġm Picture Sizes . clear () ĊĠĠĠĠĠ Ġfor Ġ( size : ĠCamera . Size Ġin Ġcamera Parameters . supported Picture Sizes ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Picture Sizes . add ( Size ( size . width , Ġsize . height )) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ// Ġto Ġbe Ġconsistent Ġwith ĠCamera 2 , Ġand Ġto Ġprevent Ġcrashes Ġon Ġsome Ġdevices ĊĠĠĠĠĠ Ġ// Ġdo Ġnot Ġallow Ġpreview Ġsizes Ġthat Ġare Ġnot Ġalso Ġin Ġthe Ġpicture Ġsizes Ġset ĊĠĠĠĠĠ Ġfor Ġ( aspect Ratio : ĠAs pect Ratio Ġin Ġm Preview Sizes . rat ios ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Picture Sizes . sizes ( aspect Ratio ) Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm Preview Sizes . remove ( aspect Ratio ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ// ĠAs pect Ratio ĊĠĠĠĠĠ Ġif Ġ( m AspectRatio Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm AspectRatio Ġ= ĠConstants . DEFAULT _ AS PECT _ RATIO ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġadjust Camera Parameters () ĊĠĠĠĠĠ Ġcamera . set Display Orientation ( calc Display Orientation ( m Display Orientation )) ĊĠĠĠĠĠ Ġm Callback . on Camera Opened () ĊĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġchoose AspectRatio (): ĠAs pect Ratio ? Ġ{ ĊĠĠĠ Ġvar Ġr : ĠAs pect Ratio ? Ġ= Ġnull ĊĠĠĠ Ġfor Ġ( ratio : ĠAs pect Ratio Ġin Ġm Preview Sizes . rat ios ()) Ġ{ ĊĠĠĠĠĠ Ġr Ġ= Ġratio ĊĠĠĠĠĠ Ġif Ġ( ratio . equals ( Constants . DEFAULT _ AS PECT _ RATIO )) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġratio ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġr ĊĠ Ġ} ĊĊĠ Ġfun Ġadjust Camera Parameters () Ġ{ ĊĠĠĠ Ġvar Ġsizes Ġ= Ġm Preview Sizes . sizes ( m AspectRatio ) ĊĠĠĠ Ġif Ġ( sizes Ġ== Ġnull ) Ġ{ Ġ// ĠNot Ġsupported ĊĠĠĠĠĠ ĠLog . w (" CAMERA _ 1 :: ", Ġ" adjust Camera Parameters Ġreceived Ġan Ġunsupported Ġaspect Ġratio Ġvalue Ġand Ġwill Ġbe Ġignored .") ĊĠĠĠĠĠ Ġm AspectRatio Ġ= Ġchoose AspectRatio () ĊĠĠĠĠĠ Ġsizes Ġ= Ġm Preview Sizes . sizes ( m AspectRatio ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġmake Ġsure Ġboth Ġpreview Ġand Ġpicture Ġsize Ġare Ġalways ĊĠĠĠ Ġ// Ġvalid Ġfor Ġthe Ġcurrently Ġchosen Ġcamera Ġand Ġaspect Ġratio ĊĠĠĠ Ġval Ġsize Ġ= Ġchoose Opt imal Size ( sizes ) ĊĠĠĠ Ġvar Ġpicture Size : ĠSize ? Ġ= Ġnull ĊĊĠĠĠ Ġ// Ġdo Ġnot Ġalter Ġm Picture Size ĊĠĠĠ Ġ// Ġsince Ġit Ġmay Ġbe Ġvalid Ġfor Ġother Ġcamera / aspect Ġratio Ġupdates ĊĠĠĠ Ġ// Ġjust Ġmake Ġsure Ġwe Ġget Ġthe Ġright Ġand Ġmost Ġsuitable Ġvalue ĊĠĠĠ Ġif Ġ( m Picture Size Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġpicture Size Ġ= Ġget Best Size Match ( ĊĠĠĠĠĠĠĠ Ġm Picture Size !!. width , ĊĠĠĠĠĠĠĠ Ġm Picture Size !!. height , ĊĠĠĠĠĠĠĠ Ġm Picture Sizes . sizes ( m AspectRatio ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġpicture Size Ġ= Ġget Best Size Match ( ĊĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠ Ġm Picture Sizes . sizes ( m AspectRatio ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġneeds To Stop Preview Ġ= Ġm Is Preview Active ĊĠĠĠ Ġif Ġ( need sTo Stop Preview ) Ġ{ ĊĠĠĠĠĠ Ġm Camera !!. stop Preview () ĊĠĠĠĠĠ Ġm Is Preview Active Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĠĠĠ Ġm Camera Parameters !!. set Preview Size ( size !!. width , Ġsize . height ) ĊĠĠĠ Ġm Camera Parameters !!. set Picture Size ( picture Size !!. width , Ġpicture Size . height ) ĊĠĠĠ Ġif Ġ( m Orientation Ġ!= ĠConstants . OR IENTATION _ AUTO ) Ġ{ ĊĠĠĠĠĠ Ġm Camera Parameters !!. setRotation ( calc Camera Rotation ( orientation Enum To Rotation ( m Orientation ))) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġm Camera Parameters !!. setRotation ( calc Camera Rotation ( m Device Orientation )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġset Auto Focus Internal ( m Auto Focus ) ĊĠĠĠ Ġset Flash Internal ( m Flash ) ĊĠĠĠ Ġset Exposure Internal ( m Exposure ) ĊĠĠĠ Ġset AspectRatio ( m AspectRatio !! ) ĊĠĠĠ Ġset Zoom Internal ( m Zoom ) ĊĠĠĠ Ġset White Balance Internal ( m White Balance ) ĊĠĠĠ Ġset Sc anning Internal ( m Is Sc anning ) ĊĠĠĠ Ġset Play Sound Internal ( m Play Sound On Capture ) ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġm Camera !!. parameters Ġ= Ġm Camera Parameters ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" set Parameters Ġfailed ", Ġe ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( need sTo Stop Preview ) Ġ{ ĊĠĠĠĠĠ Ġstart Camera Preview () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġchoose Opt imal Size ( sizes : ĠSorted Set < Size >? ): ĠSize ? Ġ{ ĊĠĠĠ Ġif Ġ(! m Preview . is Ready ) Ġ{ Ġ// ĠNot Ġyet Ġla id Ġout ĊĠĠĠĠĠ Ġreturn Ġsizes !!. first () Ġ// ĠReturn Ġthe Ġsmallest Ġsize ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġdesired Width : ĠInt ĊĠĠĠ Ġval Ġdesired Height : ĠInt ĊĠĠĠ Ġval Ġsurface Width Ġ= Ġm Preview . width ĊĠĠĠ Ġval Ġsurface Height Ġ= Ġm Preview . height ĊĠĠĠ Ġif Ġ( is Land scape ( m Display Orientation )) Ġ{ ĊĠĠĠĠĠ Ġdesired Width Ġ= Ġsurface Height ĊĠĠĠĠĠ Ġdesired Height Ġ= Ġsurface Width ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġdesired Width Ġ= Ġsurface Width ĊĠĠĠĠĠ Ġdesired Height Ġ= Ġsurface Height ĊĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġresult : ĠSize ? Ġ= Ġnull ĊĠĠĠ Ġfor Ġ( size : ĠSize Ġin Ġsizes !! ) Ġ{ Ġ// ĠIterate Ġfrom Ġsmall Ġto Ġlarge ĊĠĠĠĠĠ Ġif Ġ( desired Width Ġ<= Ġsize . width Ġ&& Ġdesired Height Ġ<= Ġsize . height ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsize ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġresult Ġ= Ġsize ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġrelease Camera () Ġ{ ĊĠĠĠ Ġif Ġ( m Camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġm Camera !!. release () ĊĠĠĠĠĠ Ġm Camera Ġ= Ġnull ĊĠĠĠĠĠ Ġm Callback . on Camera Closed () ĊĊĠĠĠĠĠ Ġ// Ġreset Ġthese Ġflags ĊĠĠĠĠĠ Ġis Picture Capture InProgress . set ( false ) ĊĠĠĠĠĠ Ġm Is Recording . set ( false ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ// ĠMost Ġcredit : Ġhttps :// github . com / Camera Kit / cam er akit - android / blob / master / cam er akit - core / src / main / api 1 6 / com / w onder k il n / cam er akit / Camera 1 . java ĊĠ Ġpublic Ġoverride Ġfun Ġset Focus Area ( x : ĠFloat , Ġy : ĠFloat ) Ġ{ ĊĠĠĠ Ġm Bg Handler . post ( object Ġ: ĠRunnable Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( this @ Camera 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Camera Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnot Ġcreate Ġa Ġnew Ġobject , Ġuse Ġexisting . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameters : ĠParameters Ġ= Ġm Camera Parameters Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfocus Mode : ĠString ? Ġ= Ġparameters . focus Mode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrect : ĠRect Ġ= Ġcalculate Focus Area ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeter ing Areas : ĠMutable List < Area > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeter ing Areas . add ( Area ( rect , ĠF OC US _ METER ING _ AREA _ WEIGHT _ DEFAULT )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( parameters . max Num Focus Areas Ġ!= Ġ 0 ) Ġ&& Ġ( focus Mode Ġ!= Ġnull ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ((( focus Mode Ġ== ĠCamera . Parameters . FOCUS _ MODE _ AUTO ) Ġ|| Ġ( focus Mode Ġ== ĠCamera . Parameters . FOCUS _ MODE _ MACRO ) Ġ|| Ġ( focus Mode Ġ== ĠCamera . Parameters . FOCUS _ MODE _ CONT IN UO US _ PI CTURE ) Ġ|| Ġ( focus Mode Ġ== ĠCamera . Parameters . FOCUS _ MODE _ CONT IN UO US _ VIDEO ))) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . focus Mode Ġ= ĠCamera . Parameters . FOCUS _ MODE _ AUTO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . focus Areas Ġ= Ġmeter ing Areas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parameters . max Num Met ering Areas Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . meter ing Areas Ġ= Ġmeter ing Areas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! parameters . supported Focus Modes . contains ( Camera . Parameters . FOCUS _ MODE _ AUTO )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ Ġ// cannot Ġauto Focus ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. parameters Ġ= Ġparameters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" set Parameters Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. auto Focus Ġ{ Ġsuccess , Ġcamera Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// reset Focus ( success , Ġcamera ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" auto Focus Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . max Num Met ering Areas Ġ> Ġ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! parameters . supported Focus Modes . contains ( Camera . Parameters . FOCUS _ MODE _ AUTO )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ Ġ// cannot Ġauto Focus ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . focus Mode Ġ= ĠCamera . Parameters . FOCUS _ MODE _ AUTO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . focus Areas Ġ= Ġmeter ing Areas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . meter ing Areas Ġ= Ġmeter ing Areas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. parameters Ġ= Ġparameters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" set Parameters Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. auto Focus Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// reset Focus ( success , Ġcamera ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" auto Focus Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. auto Focus Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// m Camera . cancel Auto Focus (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" auto Focus Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġreset Focus ( success : ĠBoolean , Ġcamera : ĠCamera ) Ġ{ ĊĠĠĠ Ġm Handler . remove Callbacks And Messages ( null ) ĊĠĠĠ Ġm Handler . post Delayed ( object Ġ: ĠRunnable Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm Camera !!. cancel Auto Focus () ĊĊĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnot Ġcreate Ġa Ġnew Ġobject , Ġuse Ġexisting . ĊĠĠĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= Ġm Camera Parameters Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( parameters . focus Mode Ġ!== ĠCamera . Parameters . FOCUS _ MODE _ CONT IN UO US _ PI CTURE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . focus Mode Ġ= ĠCamera . Parameters . FOCUS _ MODE _ CONT IN UO US _ PI CTURE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . focus Areas Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . meter ing Areas Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. parameters Ġ= Ġparameters ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" set Parameters Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġm Camera !!. cancel Auto Focus () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}, ĠDEL AY _ M ILL IS _ BEFORE _ RESET TING _ FOCUS . to Long ()) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcalculate Focus Area ( x : ĠFloat , Ġy : ĠFloat ): ĠRect Ġ{ ĊĠĠĠ Ġval Ġpadding Ġ= ĠF OC US _ AREA _ SIZE _ DEFAULT Ġ/ Ġ 2 ĊĠĠĠ Ġval Ġcenter X Ġ= Ġ( x Ġ* Ġ 2 0 0 0 ). toInt () ĊĠĠĠ Ġval Ġcenter Y Ġ= Ġ( y Ġ* Ġ 2 0 0 0 ). toInt () ĊĠĠĠ Ġvar Ġleft Ġ= Ġcenter X Ġ- Ġpadding ĊĠĠĠ Ġvar Ġtop Ġ= Ġcenter Y Ġ- Ġpadding ĊĠĠĠ Ġvar Ġright Ġ= Ġcenter X Ġ+ Ġpadding ĊĠĠĠ Ġvar Ġbottom Ġ= Ġcenter Y Ġ+ Ġpadding ĊĠĠĠ Ġif Ġ( left Ġ< Ġ 0 ) Ġleft Ġ= Ġ 0 ĊĠĠĠ Ġif Ġ( right Ġ> Ġ 2 0 0 0 ) Ġright Ġ= Ġ 2 0 0 0 ĊĠĠĠ Ġif Ġ( top Ġ< Ġ 0 ) Ġtop Ġ= Ġ 0 ĊĠĠĠ Ġif Ġ( bottom Ġ> Ġ 2 0 0 0 ) Ġbottom Ġ= Ġ 2 0 0 0 ĊĠĠĠ Ġreturn ĠRect ( left Ġ- Ġ 1 0 0 0 , Ġtop Ġ- Ġ 1 0 0 0 , Ġright Ġ- Ġ 1 0 0 0 , Ġbottom Ġ- Ġ 1 0 0 0 ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠCalculate Ġdisplay Ġorientation ĊĠĠ Ġ* Ġhttps :// developer . android . com / reference / android / hardware / Camera . html # set Display Orientation ( int ) ĊĠĠ Ġ* ĊĠĠ Ġ* ĠThis Ġcalculation Ġis Ġused Ġfor Ġorient ing Ġthe Ġpreview ĊĠĠ Ġ* ĊĠĠ Ġ* ĠNote : ĠThis Ġis Ġnot Ġthe Ġsame Ġcalculation Ġas Ġthe Ġcamera Ġrotation ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġscreen Orientation Degrees ĠScreen Ġorientation Ġin Ġdegrees ĊĠĠ Ġ* Ġ@ return ĠNumber Ġof Ġdegrees Ġrequired Ġto Ġrotate Ġpreview ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġcalc Display Orientation ( screen Orientation Degrees : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( m Camera Info . facing Ġ== ĠCamera Info . CAMERA _ F ACING _ FRONT ) Ġ{ ĊĠĠĠĠĠ Ġ( 3 6 0 Ġ- Ġ( m Camera Info . orientation Ġ+ Ġscreen Orientation Degrees ) Ġ% Ġ 3 6 0 ) Ġ% Ġ 3 6 0 ĊĠĠĠ Ġ} Ġelse Ġ{ Ġ Ġ// Ġback - facing ĊĠĠĠĠĠ Ġ( m Camera Info . orientation Ġ- Ġscreen Orientation Degrees Ġ+ Ġ 3 6 0 ) Ġ% Ġ 3 6 0 ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠCalculate Ġcamera Ġrotation ĊĠĠ Ġ* ĊĠĠ Ġ* ĠThis Ġcalculation Ġis Ġapplied Ġto Ġthe Ġoutput ĠJPEG Ġeither Ġvia ĠEx if ĠOrientation Ġtag ĊĠĠ Ġ* Ġor Ġby Ġactually Ġtransform ing Ġthe Ġbitmap . Ġ( Determin ed Ġby Ġvendor Ġcamera ĠAPI Ġimplementation ) ĊĠĠ Ġ* ĊĠĠ Ġ* ĠNote : ĠThis Ġis Ġnot Ġthe Ġsame Ġcalculation Ġas Ġthe Ġdisplay Ġorientation ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġscreen Orientation Degrees ĠScreen Ġorientation Ġin Ġdegrees ĊĠĠ Ġ* Ġ@ return ĠNumber Ġof Ġdegrees Ġto Ġrotate Ġimage Ġin Ġorder Ġfor Ġit Ġto Ġview Ġcorrectly . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġcalc Camera Rotation ( screen Orientation Degrees : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġif Ġ( m Camera Info . facing Ġ== ĠCamera Info . CAMERA _ F ACING _ BACK ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġ( m Camera Info . orientation Ġ+ Ġscreen Orientation Degrees ) Ġ% Ġ 3 6 0 ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġback - facing ĊĠĠĠ Ġval Ġlandscape Flip Ġ= Ġif Ġ( is Land scape ( screen Orientation Degrees )) Ġ 1 8 0 Ġelse Ġ 0 ĊĠĠĠ Ġreturn Ġ( m Camera Info . orientation Ġ+ Ġscreen Orientation Degrees Ġ+ Ġlandscape Flip ) Ġ% Ġ 3 6 0 ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠTest Ġif Ġthe Ġsupplied Ġorientation Ġis Ġin Ġlandscape . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġorientation Degrees ĠOrientation Ġin Ġdegrees Ġ( 0 , 9 0 , 1 8 0 , 2 7 0 ) ĊĠĠ Ġ* Ġ@ return ĠTrue Ġif Ġin Ġlandscape , Ġfalse Ġif Ġpor trait ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġis Land scape ( orientation Degrees : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġ( orientation Degrees Ġ== ĠConstants . LAND SC APE _ 9 0 Ġ|| ĊĠĠĠĠĠ Ġorientation Degrees Ġ== ĠConstants . LAND SC APE _ 2 7 0 ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ@ return Ġ` true ` Ġif Ġ[. m Camera Parameters ] Ġwas Ġmodified . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġset Auto Focus Internal ( auto Focus : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠ Ġm Auto Focus Ġ= Ġauto Focus ĊĠĠĠ Ġif Ġ( is Camera Opened ) Ġ{ ĊĠĠĠĠĠ Ġval Ġmodes Ġ= Ġm Camera Parameters !!. supported Focus Modes ĊĠĠĠĠĠ Ġif Ġ( auto Focus Ġ&& Ġmodes . contains ( Camera . Parameters . FOCUS _ MODE _ CONT IN UO US _ PI CTURE )) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Camera Parameters !!. focus Mode Ġ= ĠCamera . Parameters . FOCUS _ MODE _ CONT IN UO US _ PI CTURE ĊĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( m Is Sc anning Ġ&& Ġmodes . contains ( Camera . Parameters . FOCUS _ MODE _ MACRO )) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Camera Parameters !!. focus Mode Ġ= ĠCamera . Parameters . FOCUS _ MODE _ MACRO ĊĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( modes . contains ( Camera . Parameters . FOCUS _ MODE _ FIXED )) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Camera Parameters !!. focus Mode Ġ= ĠCamera . Parameters . FOCUS _ MODE _ FIXED ĊĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( modes . contains ( Camera . Parameters . FOCUS _ MODE _ INFINITY )) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Camera Parameters !!. focus Mode Ġ= ĠCamera . Parameters . FOCUS _ MODE _ INFINITY ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġm Camera Parameters !!. focus Mode Ġ= Ġmodes [ 0 ] ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ@ return Ġ` true ` Ġif Ġ[. m Camera Parameters ] Ġwas Ġmodified . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġset Flash Internal ( flash : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( is Camera Opened ) Ġ{ ĊĠĠĠĠĠ Ġval Ġmodes Ġ= Ġm Camera Parameters !!. supported Flash Modes ĊĠĠĠĠĠ Ġvar Ġmode Ġ= ĠFL ASH _ MODES [ flash ] ĊĠĠĠĠĠ Ġif Ġ( modes Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( modes . contains ( mode )) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( mode Ġ== ĠParameters . FLASH _ MODE _ ON Ġ&& Ġmodes . contains ( Parameters . FLASH _ MODE _ TOR CH )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġmode Ġ= ĠParameters . FLASH _ MODE _ TOR CH ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Camera Parameters !!. flash Mode Ġ= Ġmode ĊĠĠĠĠĠĠĠ Ġm Flash Ġ= Ġflash ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġcurrent Mode Ġ= ĠFL ASH _ MODES [ m Flash ] ĊĠĠĠĠĠ Ġif Ġ(! modes . contains ( current Mode )) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Camera Parameters !!. flash Mode Ġ= ĠCamera . Parameters . FLASH _ MODE _ OFF ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġm Flash Ġ= Ġflash ĊĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġset Exposure Internal ( ex posure : ĠFloat ): ĠBoolean Ġ{ ĊĠĠĠ Ġm Exposure Ġ= Ġexposure ĊĠĠĠ Ġif Ġ( is Camera Opened ) Ġ{ ĊĠĠĠĠĠ Ġval Ġmin Exposure Ġ= Ġm Camera Parameters !!. min Exposure Comp ensation ĊĠĠĠĠĠ Ġval Ġmax Exposure Ġ= Ġm Camera Parameters !!. max Exposure Comp ensation ĊĠĠĠĠĠ Ġif Ġ( min Exposure Ġ!= Ġmax Exposure ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġscaled Value Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( m Exposure Ġin Ġ 0 . 0 .. 1 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġscaled Value Ġ= Ġ( m Exposure Ġ* Ġ( max Exposure Ġ- Ġmin Exposure )). toInt () Ġ+ Ġmin Exposure ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Camera Parameters !!. ex posure Comp ensation Ġ= Ġscaled Value ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfalse ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ@ return Ġ` true ` Ġif Ġ[. m Camera Parameters ] Ġwas Ġmodified . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġset Zoom Internal ( zoom : ĠFloat ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( is Camera Opened Ġ&& Ġm Camera Parameters !!. is Zoom Supported ) Ġ{ ĊĠĠĠĠĠ Ġval Ġmax Zoom Ġ= Ġm Camera Parameters !!. max Zoom ĊĠĠĠĠĠ Ġval Ġscaled Value Ġ= Ġ( zoom Ġ* Ġmax Zoom ). toInt () ĊĠĠĠĠĠ Ġm Camera Parameters !!. zoom Ġ= Ġscaled Value ĊĠĠĠĠĠ Ġm Zoom Ġ= Ġzoom ĊĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġm Zoom Ġ= Ġzoom ĊĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ@ return Ġ` true ` Ġif Ġ[. m Camera Parameters ] Ġwas Ġmodified . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġset White Balance Internal ( white Balance : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠ Ġm White Balance Ġ= Ġwhite Balance ĊĠĠĠ Ġif Ġ( is Camera Opened ) Ġ{ ĊĠĠĠĠĠ Ġval Ġmodes Ġ= Ġm Camera Parameters !!. supported White Balance ĊĠĠĠĠĠ Ġval Ġmode Ġ= ĠW B _ MODES [ white Balance ] ĊĠĠĠĠĠ Ġif Ġ( modes Ġ!= Ġnull Ġ&& Ġmodes . contains ( mode )) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Camera Parameters !!. white Balance Ġ= Ġmode ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġcurrent Mode Ġ= ĠW B _ MODES [ m White Balance ] ĊĠĠĠĠĠ Ġif Ġ( modes Ġ== Ġnull Ġ|| Ġ! modes . contains ( current Mode )) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Camera Parameters !!. white Balance Ġ= ĠCamera . Parameters . WHITE _ BAL ANCE _ AUTO ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġset Sc anning Internal ( is Sc anning : ĠBoolean ) Ġ{ ĊĠĠĠ Ġm Is Sc anning Ġ= Ġis Sc anning ĊĠĠĠ Ġif Ġ( is Camera Opened ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( m Is Sc anning ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Camera !!. set Preview Callback ( this ) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġm Camera !!. set Preview Callback ( null ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġset Play Sound Internal ( play Sound On Capture : ĠBoolean ) Ġ{ ĊĠĠĠ Ġm Play Sound On Capture Ġ= Ġplay Sound On Capture ĊĠĠĠ Ġif Ġ( m Camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAlways Ġdisable Ġsh utter Ġsound , Ġand Ġplay Ġour Ġown . ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġbecause Ġnot Ġall Ġdevices Ġhon or Ġthis Ġvalue Ġwhen Ġset Ġto Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġif Ġ( android . os . Build . VERSION . SDK _ INT Ġ>= Ġandroid . os . Build . VERSION _ CODES . J EL LY _ BE AN _ MR 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm Camera !!. enable Sh utter Sound ( false ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġif Ġwe Ġfail Ġto Ġdisable Ġthe Ġsh utter Ġsound ĊĠĠĠĠĠĠĠ Ġ// Ġset Ġm Play Sound On Capture Ġto Ġfalse Ġsince Ġit Ġmeans ĊĠĠĠĠĠĠĠ Ġ// Ġwe Ġcannot Ġchange Ġit Ġand Ġthe Ġsystem Ġwill Ġplay Ġit ĊĠĠĠĠĠĠĠ Ġ// Ġplaying Ġthe Ġsound Ġourselves Ġalso Ġmakes Ġit Ġconsistent Ġwith ĠCamera 2 ĊĠĠĠĠĠĠĠ Ġif Ġ(! res ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm Play Sound On Capture Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" set Play Sound Internal Ġfailed ", Ġex ) ĊĠĠĠĠĠĠĠ Ġm Play Sound On Capture Ġ= Ġfalse ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġvar Ġplay Sound On Capture : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġm Play Sound On Capture ĊĠĠĠ Ġset ( play Sound On Capture ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( play Sound On Capture Ġ== Ġm Play Sound On Capture ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġset Play Sound Internal ( play Sound On Capture ) ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġvar Ġplay Sound On Record : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġm Play Sound On Record ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġm Play Sound On Record Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Preview Frame ( data : ĠByteArray , Ġcamera : ĠCamera ) Ġ{ ĊĠĠĠ Ġval Ġpreview Size Ġ= Ġm Camera Parameters !!. preview Size ĊĠĠĠ Ġm Callback . on Frame Preview ( data , Ġpreview Size . width , Ġpreview Size . height , Ġm Device Orientation ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠsetUp Media Recorder ( path : ĠString , Ġmax Duration : ĠInt , Ġmax FileSize : ĠInt , Ġrecord Audio : ĠBoolean , Ġprofile : ĠCam c order Profile , Ġfps : ĠInt ) Ġ{ ĊĠĠĠ Ġm Media Recorder Ġ= ĠMedia Recorder () ĊĠĠĠ Ġm Camera !!. unlock () ĊĠĠĠ Ġm Media Recorder !!. set Camera ( m Camera ) ĊĠĠĠ Ġm Media Recorder !!. set Video Source ( Media Recorder . Video Source . CAMERA ) ĊĠĠĠ Ġif Ġ( record Audio ) Ġ{ ĊĠĠĠĠĠ Ġm Media Recorder !!. set Audio Source ( Media Recorder . Audio Source . CAM C ORDER ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġm Media Recorder !!. setOutput File ( path ) ĊĠĠĠ Ġm Video Path Ġ= Ġpath ĊĠĠĠ Ġval Ġcam Profile : ĠCam c order Profile Ġ= Ġif Ġ( Cam c order Profile . has Profile ( m Camera Id , Ġprofile . quality )) Ġ{ ĊĠĠĠĠĠ ĠCam c order Profile . get ( m Camera Id , Ġprofile . quality ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ ĠCam c order Profile . get ( m Camera Id , ĠCam c order Profile . QUAL ITY _ HIGH ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġcam Profile . video Bit Rate Ġ= Ġprofile . video Bit Rate ĊĠĠĠ Ġset Cam c order Profile ( cam Profile , Ġrecord Audio , Ġfps ) ĊĠĠĠ Ġm Media Recorder !!. set Orientation Hint ( calc Camera Rotation ( if Ġ( m Orientation Ġ!= ĠConstants . OR IENTATION _ AUTO ) Ġorientation Enum To Rotation ( m Orientation ) Ġelse Ġm Device Orientation )) ĊĠĠĠ Ġif Ġ( max Duration Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠ Ġm Media Recorder !!. setMax Duration ( max Duration ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( max FileSize Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠ Ġm Media Recorder !!. setMax FileSize ( max FileSize . to Long ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġm Media Recorder !!. setOn Info Listener ( this ) ĊĠĠĠ Ġm Media Recorder !!. setOn Error Listener ( this ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġstop Media Recorder () Ġ{ ĊĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( m Media Recorder Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm Media Recorder !!. stop () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" stop Media Recorder Ġstop Ġfailed ", Ġex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm Media Recorder !!. reset () ĊĠĠĠĠĠĠĠĠĠ Ġm Media Recorder !!. release () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" stop Media Recorder Ġreset Ġfailed ", Ġex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Media Recorder Ġ= Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġm Callback . on Recording End () ĊĠĠĠĠĠ Ġif Ġ( m Play Sound On Record ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsound . play ( Media Action Sound . STOP _ VIDEO _ RECORD ING ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġdevice Orientation : ĠInt Ġ= Ġdisplay Orientation To Orientation Enum ( m Device Orientation ) ĊĠĠĠĠĠ Ġif Ġ( m Video Path Ġ== Ġnull Ġ|| Ġ! File ( m Video Path ). exists ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Callback . on Video Re corded ( null , Ġif Ġ( m Orientation Ġ!= ĠConstants . OR IENTATION _ AUTO ) Ġm Orientation Ġelse Ġdevice Orientation , Ġdevice Orientation ) ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġm Callback . on Video Re corded ( m Video Path , Ġif Ġ( m Orientation Ġ!= ĠConstants . OR IENTATION _ AUTO ) Ġm Orientation Ġelse Ġdevice Orientation , Ġdevice Orientation ) ĊĠĠĠĠĠ Ġm Video Path Ġ= Ġnull ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġpause Media Recorder () Ġ{ ĊĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 4 ) Ġ{ ĊĠĠĠĠĠ Ġm Media Recorder !!. pause () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġresume Media Recorder () Ġ{ ĊĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 4 ) Ġ{ ĊĠĠĠĠĠ Ġm Media Recorder !!. resume () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġval Ġsupported Preview F ps Range : ĠArrayList < IntArray > ĊĠĠĠ Ġget () Ġ= Ġm Camera Parameters !!. supported Preview F ps Range Ġas ĠArrayList < IntArray > ĊĊĠ Ġprivate Ġfun Ġis Compatible With Device ( fps : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġvalid Values : ĠArrayList < IntArray > Ġ= Ġsupported Preview F ps Range ĊĠĠĠ Ġval Ġaccurate F ps Ġ= Ġfps Ġ* Ġ 1 0 0 0 ĊĠĠĠ Ġfor Ġ( row : ĠInt Array Ġin Ġvalid Values ) Ġ{ ĊĠĠĠĠĠ Ġval Ġis Included Ġ= Ġaccurate F ps Ġ>= Ġrow [ 0 ] Ġ&& Ġaccurate F ps Ġ<= Ġrow [ 1 ] ĊĠĠĠĠĠ Ġval Ġgreater Then Zero Ġ= Ġaccurate F ps Ġ> Ġ 0 ĊĠĠĠĠĠ Ġval Ġcompatible With Device Ġ= Ġis Included Ġ&& Ġgreater Then Zero ĊĠĠĠĠĠ Ġif Ġ( compatible With Device ) Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ ĠLog . w (" CAMERA _ 1 :: ", Ġ" fps Ġ( frame PerSecond ) Ġreceived Ġan Ġunsupported Ġvalue Ġand Ġwill Ġbe Ġignored .") ĊĠĠĠ Ġreturn Ġfalse ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġset Cam c order Profile ( profile : ĠCam c order Profile , Ġrecord Audio : ĠBoolean , Ġfps : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġcompatible F ps Ġ= Ġif Ġ( is Compatible With Device ( fps )) Ġfps Ġelse Ġprofile . video Frame Rate ĊĠĠĠ Ġm Media Recorder !!. setOutput Format ( profile . file Format ) ĊĠĠĠ Ġm Media Recorder !!. set Video Frame Rate ( compatible F ps ) ĊĠĠĠ Ġm Media Recorder !!. set Video Size ( profile . video Frame Width , Ġprofile . video Frame Height ) ĊĠĠĠ Ġm Media Recorder !!. set Video Encoding Bit Rate ( profile . video Bit Rate ) ĊĠĠĠ Ġm Media Recorder !!. set Video Encoder ( profile . video Codec ) ĊĠĠĠ Ġif Ġ( record Audio ) Ġ{ ĊĠĠĠĠĠ Ġm Media Recorder !!. set Audio Encoding Bit Rate ( profile . audio Bit Rate ) ĊĠĠĠĠĠ Ġm Media Recorder !!. set Audio Channels ( profile . audio Channels ) ĊĠĠĠĠĠ Ġm Media Recorder !!. set Audio Sampling Rate ( profile . audio Sample Rate ) ĊĠĠĠĠĠ Ġm Media Recorder !!. set Audio Encoder ( profile . audio Codec ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Info ( mr : ĠMedia Recorder , Ġwhat : ĠInt , Ġextra : ĠInt ) Ġ{ ĊĠĠĠ Ġif Ġ( what Ġ== ĠMedia Recorder . MEDIA _ REC ORDER _ INFO _ MAX _ DURATION _ RE ACHED Ġ|| ĊĠĠĠĠĠ Ġwhat Ġ== ĠMedia Recorder . MEDIA _ REC ORDER _ INFO _ MAX _ FILE SIZE _ RE ACHED ) Ġ{ ĊĠĠĠĠĠ Ġstop Recording () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonError ( mr : ĠMedia Recorder , Ġwhat : ĠInt , Ġextra : ĠInt ) Ġ{ ĊĠĠĠ Ġstop Recording () ĊĠ Ġ} ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġpreview . set Callback ( object Ġ: ĠPreview Impl . Callback Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġon Surface Changed () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġif Ġwe Ġgot Ġour Ġsurface Ġdestroyed ĊĠĠĠĠĠĠĠ Ġ// Ġwe Ġmust Ġre - start Ġthe Ġcamera Ġand Ġsurface ĊĠĠĠĠĠĠĠ Ġ// Ġotherwise , Ġjust Ġupdate Ġour Ġsurface ĊĠĠĠĠĠĠĠ Ġsynchronized ( this @ Camera 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ(! surface Was Destroyed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Surface () ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bg Handler . post Ġ{ Ġstart () Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġon Surface Destroyed () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġneed Ġto Ġthis Ġearly Ġso Ġwe Ġdon 't Ġget Ġbuffer Ġerrors Ġdue Ġto Ġsu fr ace Ġgoing Ġaway . ĊĠĠĠĠĠĠĠ Ġ// ĠThen Ġcall Ġstop Ġin Ġbg Ġthread Ġsince Ġit Ġmight Ġbe Ġquite Ġslow Ġand Ġwill Ġfreeze ĊĠĠĠĠĠĠĠ Ġ// Ġthe ĠUI Ġor Ġcause Ġan ĠAN R Ġwhile Ġit Ġis Ġhappening . ĊĠĠĠĠĠĠĠ Ġsynchronized ( this @ Camera 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Camera Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlet Ġthe Ġinstance Ġknow Ġour Ġsurface Ġwas Ġdestroyed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġwe Ġmight Ġneed Ġto Ġre - create Ġit Ġand Ġrestart Ġthe Ġcamera ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsurface Was Destroyed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. set Preview Callback ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnote : Ġthis Ġmight Ġgive Ġa Ġdebug Ġmessage Ġthat Ġcan Ġbe Ġignored . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera !!. set Preview Display ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA _ 1 :: ", Ġ" on Surface Destroyed Ġpreview Ġcleanup Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Bg Handler . post Ġ{ Ġstop () Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ} Ċ } Ċ