package Ġcom . jad yn . ai . media learn . camera Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . graphics . Surface Texture Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Handler Thread Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . util . Size Ċ import Ġandroid . view . Surface Ċ import Ġandroid . view . Texture View Ċ import Ġcom . jad yn . ai . media learn . R Ċ import Ġcom . jad yn . ai . media learn . codec . Ai Lo i Video Encoder Ċ import Ġcom . jad yn . ai . media learn . permissions . Rx Permissions Ċ import Ġkotlinx . android . synt hetic . main . activity _ camera 2 .* Ċ Ċ val ĠTAG Ġ= Ġ" ce ce " Ċ Ċ class ĠCamera 2 Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġbackground Thread : ĠHandler Thread ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġbackground Handler : ĠHandler ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġcamera 2 Ops : ĠCamera 2 Ops ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġai Lo i Video Encoder : ĠA i Lo i Video Encoder ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ camera 2 ) ĊĠĠĠĠĠĠĠ Ġtv _ record . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRx Permissions ( this ). request ( Manifest . permission . RECORD _ AUDIO ). do On Next Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera 2 Ops ?. toggle Record ( ai Lo i Video Encoder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. subscribe () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠRx Permissions ( this ). request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Next Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture _ view . surface Texture Listener Ġ= Ġobject Ġ: ĠTexture View . Surface Texture Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Surface Texture Size Changed ( surface : ĠSurface Texture ?, Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Surface Texture Updated ( surface : ĠSurface Texture ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Surface Texture Destroyed ( surface : ĠSurface Texture ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera 2 Ops ?. release () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Thread ?. quit S af ely () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Surface Texture Available ( surface : ĠSurface Texture ?, Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Background Thread () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera 2 Ops Ġ= ĠCamera 2 Ops ( this @ Camera 2 Activity , ĠSize ( width , Ġheight )) Ġ{ Ġc , Ġs Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 0 1 9 / 1 / 2 - 1 7 : 3 8 Ġ ç« ĸ å±ı è§Ĩé¢ĳ ä½¿çĶ¨ é«ĺ ä½ľ å®½ ï¼Į å®½ ä½ľ é«ĺ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġai Lo i Video Encoder Ġ= ĠA i Lo i Video Encoder ( s . height , Ġs . width , Ġ 2 0 0 0 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Camera 2 Activity . texture _ view . set AspectRatio ( s . height , Ġs . width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . open Camera ( Surface ( texture _ view . surface Texture . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetDefault BufferSize ( s . height , Ġs . width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ})) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . record Prepared Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Camera 2 Activity . run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Camera 2 Activity . tv _ record . text Ġ= Ġ" å½ķ åĪ¶ ä¸Ń " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . record Stopped Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Camera 2 Activity . run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Camera 2 Activity . tv _ record . text Ġ= Ġ" å½ķ åĥı " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture _ view . keep Screen On Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Background Thread () Ġ{ ĊĠĠĠĠĠĠĠ Ġbackground Thread Ġ= ĠHandler Thread (" Camera Background ") ĊĠĠĠĠĠĠĠ Ġbackground Thread ?. start () ĊĠĠĠĠĠĠĠ Ġbackground Handler Ġ= ĠHandler ( background Thread ?. lo oper ) ĊĠĠĠ Ġ} Ċ } Ċ