/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 Ġ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 Ġandroidx . camera . camera 2 . pipe Ċ Ċ import Ġandroid . hardware . camera 2 . Camera Character istics Ċ import Ġandroid . hardware . camera 2 . Capture Request Ċ import Ġandroid . hardware . camera 2 . Capture Result Ċ import Ġandroid . hardware . camera 2 . Total Capture Result Ċ import Ġandroid . hardware . camera 2 . params . Stream Configuration Map Ċ import Ġandroid . view . Surface Ċ Ċ /** Ċ Ġ* ĠA Ġmap - like Ġinterface Ġused Ġto Ġdescribe Ġor Ġinteract Ġwith Ġmetadata Ġfrom ĠCamera Pipe Ġand ĠCamera 2 . Ċ Ġ* Ċ Ġ* ĠThese Ġinterfaces Ġare Ġdesigned Ġto Ġwrap Ġnative Ġcamera 2 Ġmetadata Ġobjects Ġin Ġa Ġway Ġthat Ġallows Ċ Ġ* Ġadditional Ġvalues Ġto Ġbe Ġpassed Ġback Ġinternally Ġcomputed Ġvalues , Ġstate , Ġor Ġcontrol Ġvalues . Ċ Ġ* Ċ Ġ* ĠThese Ġinterfaces Ġare Ġread - only . Ċ Ġ*/ Ċ interface ĠMetadata Ġ{ ĊĠĠĠ Ġoperator Ġfun Ġ< T > Ġget ( key : ĠKey < T >): ĠT ? ĊĠĠĠ Ġfun Ġ< T > Ġget OrDefault ( key : ĠKey < T >, Ġdefault : ĠT ): ĠT ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMetadata Ġkeys Ġprovide Ġvalues Ġor Ġcontrols Ġthat Ġare Ġprovided Ġor Ġcomputed Ġby ĠCamera Pipe . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠKey < T > Ġprivate Ġconstructor ( private Ġval Ġname : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġval Ġkeys : ĠMutable Set < String > Ġ= ĠHashSet () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġwill Ġcreate Ġa Ġnew ĠKey Ġinstance , Ġand Ġwill Ġcheck Ġto Ġsee Ġthat Ġthe Ġkey Ġhas Ġnot Ġbeen ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġpreviously Ġcreated Ġsomewhere Ġelse . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġfun Ġ< T > Ġcreate ( name : ĠString ): ĠKey < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( keys . add ( name )) Ġ{ Ġ"$ name Ġis Ġalready Ġdefined !" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKey ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġname ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠCamera Metadata Ġis Ġa Ġwrapper Ġaround Ġ[ Camera Character istics ]. Ċ Ġ* Ċ Ġ* ĠIn Ġsome Ġcases Ġthe Ġproperties Ġon Ġthis Ġinterface Ġwill Ġprovide Ġfaster Ġor Ġmore Ġbackwards Ġcompatible Ċ Ġ* Ġaccess Ġto Ġfeatures Ġthat Ġare Ġonly Ġavailable Ġon Ġnewer Ġversions Ġof Ġthe ĠOS . Ċ Ġ*/ Ċ interface ĠCamera Metadata Ġ: ĠMetadata , ĠUnsafe Wrapper < Camera Character istics > Ġ{ ĊĠĠĠ Ġoperator Ġfun Ġ< T > Ġget ( key : ĠCamera Character istics . Key < T >): ĠT ? ĊĠĠĠ Ġfun Ġ< T > Ġget OrDefault ( key : ĠCamera Character istics . Key < T >, Ġdefault : ĠT ): ĠT ĊĊĠĠĠ Ġval Ġcamera : ĠCamera Id ĊĠĠĠ Ġval Ġis Red acted : ĠBoolean ĊĊĠĠĠ Ġval Ġkeys : ĠSet < Camera Character istics . Key <* >> ĊĠĠĠ Ġval Ġrequest Keys : ĠSet < Capture Request . Key <* >> ĊĠĠĠ Ġval Ġresult Keys : ĠSet < Capture Result . Key <* >> ĊĠĠĠ Ġval Ġsession Keys : ĠSet < Capture Request . Key <* >> ĊĠĠĠ Ġval Ġphysical Camera Ids : ĠSet < Camera Id > ĊĠĠĠ Ġval Ġphysical Request Keys : ĠSet < Capture Request . Key <* >> ĊĊĠĠĠ Ġval Ġstream Map : ĠStream Configuration Map Ċ } Ċ Ċ /** Ċ Ġ* ĠRequest Metadata Ġwraps Ġtogether Ġall Ġof Ġthe Ġinformation Ġabout Ġspecific ĠCapture Request Ġthat Ġwas Ċ Ġ* Ġsubmitted Ġto ĠCamera 2 . Ċ Ġ* Ċ Ġ* Ġ< p > ĠThis Ġclass Ġis Ġdistinct Ġfrom Ġ[ Request ] Ġwhich Ġis Ġused Ġto Ġconfigure Ġand Ġissue Ġa Ġrequest Ġto Ġthe Ċ Ġ* Ġ[ Camera Graph ]. ĠThis Ġclass Ġwill Ġreport Ġthe Ġactual Ġkeys Ġ/ Ġvalues Ġthat Ġwere Ġsent Ġto Ġcamera 2 Ġ( if Ċ Ġ* Ġdifferent ) Ġfrom Ġthe Ġrequest Ġthat Ġwas Ġused Ġto Ġcreate Ġthe ĠCamera 2 Ġ[ Capture Request ]. Ċ Ġ*/ Ċ interface ĠRequest Metadata Ġ: ĠMetadata , ĠUnsafe Wrapper < Capture Request > Ġ{ ĊĠĠĠ Ġoperator Ġfun Ġ< T > Ġget ( key : ĠCapture Request . Key < T >): ĠT ? ĊĠĠĠ Ġfun Ġ< T > Ġget OrDefault ( key : ĠCapture Request . Key < T >, Ġdefault : ĠT ): ĠT ĊĊĠĠĠ Ġ/** ĠThe Ġactual ĠCamera 2 Ġtemplate Ġthat Ġwas Ġused Ġwhen Ġcreating Ġthis Ġ[ Capture Request ] Ġ*/ ĊĠĠĠ Ġval Ġtemplate : ĠRequest Template ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA ĠMap Ġof ĠStream Id ( s ) Ġthat Ġwere Ġsubmitted Ġwith Ġthis ĠCapture Request Ġand Ġthe ĠSurface ( s ) Ġused ĊĠĠĠĠ Ġ* Ġf ot Ġthis Ġrequest . ĠIt 's Ġpossible Ġthat Ġnot Ġall Ġof Ġthe Ġstream Id 's Ġspecified Ġin Ġthe Ġ[ Request ] ĊĠĠĠĠ Ġ* Ġare Ġpresent Ġin Ġthe ĠCapture Request . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġstreams : ĠMap < Stream Id , ĠSurface > ĊĊĠĠĠ Ġ/** ĠThe Ġrequest Ġobject Ġthat Ġwas Ġused Ġto Ġcreate Ġthis Ġ[ Capture Request ] Ġ*/ ĊĠĠĠ Ġval Ġrequest : ĠRequest ĊĊĠĠĠ Ġ/** ĠAn Ġinternal Ġnumber Ġused Ġto Ġidentify Ġa Ġspecific Ġ[ Capture Request ] Ġ*/ ĊĠĠĠ Ġval Ġrequest Number : ĠRequest Number ĊĊĠĠĠ Ġ/** ĠThe Ġandroid Ġ" sequence Ġid " Ġthat Ġis Ġgenerated Ġby Ġcamera 2 Ġwhen Ġsubmitting Ġ[ Capture Request ]' s Ġ*/ ĊĠĠĠ Ġval Ġsequence Number : ĠSequence Number Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Frame Info ] Ġis Ġa Ġwrapper Ġaround Ġ[ Total Capture Result ]. Ċ Ġ*/ Ċ interface ĠFrame Info Ġ: ĠUnsafe Wrapper < Total Capture Result > Ġ{ ĊĠĠĠ Ġval Ġmetadata : ĠFrame Metadata ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIf Ġthis Ġ[ Frame Info ] Ġwas Ġproduced Ġfrom Ġa Ġlogical Ġcamera Ġthere Ġwill Ġbe Ġmetadata Ġassociated Ġwith ĊĠĠĠĠ Ġ* Ġthe Ġphysical Ġstreams Ġthat Ġwere Ġsent Ġto Ġthe Ġcamera . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġget ( camera : ĠCamera Id ): ĠFrame Metadata ? ĊĊĠĠĠ Ġval Ġcamera : ĠCamera Id ĊĠĠĠ Ġval Ġframe Number : ĠFrame Number ĊĠĠĠ Ġval Ġrequest Metadata : ĠRequest Metadata Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Frame Metadata ] Ġis Ġa Ġwrapper Ġaround Ġ[ Capture Result ]. Ċ Ġ*/ Ċ interface ĠFrame Metadata Ġ: ĠMetadata , ĠUnsafe Wrapper < Capture Result > Ġ{ ĊĠĠĠ Ġoperator Ġfun Ġ< T > Ġget ( key : ĠCapture Result . Key < T >): ĠT ? ĊĠĠĠ Ġfun Ġ< T > Ġget OrDefault ( key : ĠCapture Result . Key < T >, Ġdefault : ĠT ): ĠT ĊĊĠĠĠ Ġval Ġcamera : ĠCamera Id ĊĠĠĠ Ġval Ġframe Number : ĠFrame Number ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExtra Ġmetadata Ġwill Ġoverride Ġvalues Ġdefined Ġby Ġthe Ġwrapped ĠCapture Result Ġobject . ĠThis Ġis ĊĠĠĠĠ Ġ* Ġexposed Ġseparately Ġto Ġallow Ġother Ġsystems Ġto Ġknow Ġwhat Ġis Ġaltered Ġrelative Ġto ĠCamera 2 . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġextra Metadata : ĠMap < *, ĠAny ?> Ċ } Ċ Ċ /** Ċ Ġ* ĠThis Ġdefines Ġa Ġmetadata Ġtransform Ġthat Ġwill Ġbe Ġapplied Ġto Ġthe Ġdata Ġproduced Ġby Ċ Ġ* Ġ[ Request . Listener . on Total Capture Result ]. ĠThe Ġreturned Ġmap Ġwill Ġoverride Ġthe Ġvalues Ġreturned Ġby Ċ Ġ* ĠTotal Capture Result . ĠSetting Ġthe Ġoffset Ġand Ġwindow Ġsize Ġwill Ġcause Ġthe Ċ Ġ* Ġ[ Request . Listener . onComplete ] Ġmethod Ġto Ġbe Ġdelayed Ġso Ġthat Ġthe Ġtransform Ġcan Ġbe Ġrun Ġon Ġfuture Ċ Ġ* Ġmetadata . Ċ Ġ*/ Ċ data Ġclass ĠMetadata Transform ( ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġdefines Ġthe Ġnumber Ġof Ġhistorical Ġ[ Total Capture Result ] Ġobjects Ġthis Ġtransform Ġis ĊĠĠĠĠ Ġ* Ġallowed Ġto Ġlook Ġat . ĠSetting Ġthis Ġvalue Ġto Ġ> Ġ 0 Ġincreases Ġthe Ġnumber Ġof Ġ[ Total Capture Result ] ĊĠĠĠĠ Ġ* Ġthe Ġ[ Camera Graph ] Ġwill Ġhold Ġon Ġto . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġpast : ĠInt Ġ= Ġ 0 , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġdefines Ġthe Ġnumber Ġof Ġfuture Ġ[ Total Capture Result ] Ġobjects Ġthis Ġtransform Ġis Ġallowed Ġto ĊĠĠĠĠ Ġ* Ġlook Ġat . ĠSetting Ġthis Ġvalue Ġto Ġ> Ġ 0 Ġwill Ġcause Ġ[ Request . Listener . onComplete ] Ġto Ġbe Ġdelayed ĊĠĠĠĠ Ġ* Ġby Ġthe Ġnumber Ġof Ġframes Ġspecified Ġhere . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġfuture : ĠInt Ġ= Ġ 0 , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġtransform Ġfunction Ġwill Ġbe Ġinvoked Ġat Ġhigh Ġspeed , Ġand Ġmay Ġbe Ġinvoked Ġmultiple Ġtimes Ġif ĊĠĠĠĠ Ġ* Ġcorrect ing Ġphysical Ġcamera Ġresults . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġthe Ġreturned Ġvalues Ġshould Ġbe Ġlimited Ġto Ġvalues Ġthat Ġwill Ġoverride Ġthe Ġdefault Ġvalues Ġthat ĊĠĠĠĠ Ġ* Ġare Ġset Ġon Ġthe ĠTotal Capture Result Ġfor Ġthis Ġframe . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtransform Fn : ĠTransform Fn Ġ= Ġobject Ġ: ĠTransform Fn Ġ{} Ċ ) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( past Ġ>= Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġcheck ( future Ġ>= Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠTransform Fn Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcompute Overrides For ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult : ĠFrame Info , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera : ĠCamera Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelated : ĠList < Frame Info ?> ĊĠĠĠĠĠĠĠ Ġ): ĠMap < *, ĠAny ?> Ġ= Ġempty Map < Any , ĠAny ?> () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Request Template ] Ġindicates Ġwhich Ġpreset Ġset Ġlist Ġof Ġparameters Ġwill Ġbe Ġapplied Ġto Ġa Ġrequest Ġby Ċ Ġ* Ġdefault . ĠThese Ġvalues Ġare Ġdefined Ġby Ġcamera 2 . Ċ Ġ*/ Ċ @ Suppress (" EXPERIMENT AL _ FEATURE _ WARNING ") Ċ inline Ġclass ĠRequest Template ( val Ġvalue : ĠInt ) Ċ Ċ /** Ċ Ġ* ĠA Ġ[ SequenceNumber ] Ġis Ġthe Ġidentifier Ġthat Ġis Ġreturned Ġwhen Ġa Ġsingle Ġor Ġrepe ating Ġcapture Ġrequest Ċ Ġ* Ġis Ġsubmitted Ġto Ġthe Ġcamera Ġand Ġrepresents Ġthat Ġ" sequence " Ġof Ġcaptures . Ċ Ġ*/ Ċ @ Suppress (" EXPERIMENT AL _ FEATURE _ WARNING ") Ċ inline Ġclass ĠSequence Number ( val Ġvalue : ĠInt ) Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Request Number ] Ġis Ġan Ġart ificial Ġidentifier Ġthat Ġis Ġcreated Ġfor Ġeach Ġrequest Ġthat Ġis Ġsubmitted Ċ Ġ* Ġto Ġthe ĠCamera . Ċ Ġ*/ Ċ @ Suppress (" EXPERIMENT AL _ FEATURE _ WARNING ") Ċ inline Ġclass ĠRequest Number ( val Ġvalue : ĠLong ) Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Frame Number ] Ġis Ġthe Ġidentifier Ġthat Ġrepresents Ġa Ġspecific Ġexposure Ġby Ġthe ĠCamera . ĠFrame Numbers Ċ Ġ* Ġincrease Ġwithin Ġa Ġspecific ĠCamera Capture Session , Ġand Ġare Ġnot Ġcreated Ġuntil Ġthe ĠHAL Ġbegins Ċ Ġ* Ġprocessing Ġa Ġrequest . Ċ Ġ*/ Ċ @ Suppress (" EXPERIMENT AL _ FEATURE _ WARNING ") Ċ inline Ġclass ĠFrame Number ( val Ġvalue : ĠLong ) Ċ Ċ /** Ċ Ġ* ĠThis Ġis Ġa Ġtimestamp Ġfrom Ġthe ĠCamera , Ġand Ġcorresponds Ġto Ġthe Ġnan ose cond Ġexposure Ġtime Ġof Ġa ĠFrame . Ċ Ġ* ĠWhile Ġthe Ġvalue Ġis Ġexpressed Ġin Ġnano - seconds , Ġthe Ġprecision Ġmay Ġbe Ġmuch Ġlower . ĠIn Ġaddition , Ġthe Ċ Ġ* Ġtime - base Ġof Ġthe ĠCamera Ġis Ġundefined , Ġalthough Ġit 's Ġcommon Ġfor Ġit Ġto Ġbe Ġin Ġeither ĠMon otonic Ġor Ċ Ġ* ĠReal time . Ċ Ġ* Ċ Ġ* Ġ< p > ĠTimestamp Ġmay Ġdiffer Ġfrom Ġtimestamps Ġthat Ġare Ġobtained Ġfrom Ġother Ġparts Ġof Ġthe ĠCamera Ġand Ċ Ġ* Ġmedia Ġsystems Ġwithin Ġthe Ġsame Ġdevice . ĠFor Ġexample , Ġit 's Ġcommon Ġfor Ġhigh Ġfrequency Ġsensors Ġto Ċ Ġ* Ġoperate Ġbased Ġon Ġa Ġreal - time Ġclock , Ġwhile Ġaudio / visual Ġsystems Ġcommonly Ġoperate Ġbased Ġon Ġa Ċ Ġ* Ġmon otonic Ġclock . Ċ Ġ*/ Ċ @ Suppress (" EXPERIMENT AL _ FEATURE _ WARNING ") Ċ inline Ġclass ĠCamera Timestamp ( val Ġvalue : ĠLong ) Ċ Ċ /** Ċ Ġ* ĠUtility Ġfunction Ġto Ġhelp Ġdeal Ġwith Ġthe Ġunsafe Ġnature Ġof Ġthe Ġtyped ĠKey / Value Ġpairs . Ċ Ġ*/ Ċ fun ĠCapture Request . Builder . write Parameters ( parameters : ĠMap < *, ĠAny >) Ġ{ ĊĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġparameters ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrite Parameter ( key , Ġvalue ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠUtility Ġfunction Ġto Ġhelp Ġdeal Ġwith Ġthe Ġunsafe Ġnature Ġof Ġthe Ġtyped ĠKey / Value Ġpairs . Ċ Ġ*/ Ċ fun ĠCapture Request . Builder . write Parameter ( key : ĠAny ?, Ġvalue : ĠAny ?) Ġ{ ĊĠĠĠ Ġif Ġ( key Ġ!= Ġnull Ġ&& Ġkey Ġis ĠCapture Request . Key <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġthis . set ( key Ġas ĠCapture Request . Key < Any >, Ġvalue ) ĊĠĠĠ Ġ} Ċ } Ċ