/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠA ly nx ĠZ hou Ċ Ġ* Ċ Ġ* Ġ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 Ġxyz . al yn x . liv ew all paper Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . media . Media Metadata Retriever Ċ import Ġandroid . net . Uri Ċ import Ġandroid . opengl . GLES 2 0 Ċ import Ġandroid . opengl . GLES 3 0 Ċ import Ġandroid . util . Log Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Reader Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . round ToInt Ċ Ċ internal Ġobject ĠUtils Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcreate Video Thumbnail From Uri ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠActivity Ġcontext Ġor Ġapplication Ġcontext . ĊĠĠĠĠ Ġ* Ġ@ param Ġuri ĠVideo Ġuri . ĊĠĠĠĠ Ġ* Ġ@ return ĠBitmap Ġthumbnail ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠHack ed Ġfrom ĠThumb nail Utils . create Video Thumbnail ()' s Ġcode . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate Video Thumbnail From Uri ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuri : ĠUri ĊĠĠĠ Ġ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġbitmap : ĠBitmap ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġretrie ver Ġ= ĠMedia Metadata Retriever () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretrie ver . set DataSource ( context , Ġuri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= Ġretrie ver . get Frame At Time (- 1 ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAssume Ġthis Ġis Ġa Ġcorrupt Ġvideo Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġ// ĠAssume Ġthis Ġis Ġa Ġcorrupt Ġvideo Ġfile . ĊĠĠĠĠĠĠĠ Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretrie ver . release () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIgnore Ġfailures Ġwhile Ġcleaning Ġup . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( bitmap Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠScale Ġdown Ġthe Ġbitmap Ġif Ġit 's Ġtoo Ġlarge . ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġbitmap . width ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġbitmap . height ĊĠĠĠĠĠĠĠ Ġval Ġmax Ġ= Ġmax ( width , Ġheight ) ĊĠĠĠĠĠĠĠ Ġif Ġ( max Ġ> Ġ 5 1 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġ 5 1 2 f Ġ/ Ġmax ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw Ġ= Ġ( scale Ġ* Ġwidth ). round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġh Ġ= Ġ( scale Ġ* Ġheight ). round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= ĠBitmap . create Scaled Bitmap ( bitmap , Ġw , Ġh , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Throws ( RuntimeException :: class ) ĊĠĠĠ Ġfun Ġcompile Shader Resource GLES 3 0 ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshader Type : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshader Res : ĠInt ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġcontext . resources . open Raw Resource ( shader Res ) ĊĠĠĠĠĠĠĠ Ġval Ġbuffered Reader Ġ= ĠBufferedReader ( InputStream Reader ( inputStream )) ĊĠĠĠĠĠĠĠ Ġvar Ġline : ĠString ? ĊĠĠĠĠĠĠĠ Ġval ĠstringBuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( buffered Reader . readLine (). also Ġ{ Ġline Ġ= Ġit Ġ} Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ('\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġshader Source Ġ= ĠstringBuilder . toString () ĊĠĠĠĠĠĠĠ Ġval Ġshader Ġ= ĠGLES 3 0 . gl Create Shader ( shader Type ) ĊĠĠĠĠĠĠĠ Ġif Ġ( shader Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Failed Ġto Ġcreate Ġshader ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Shader Source ( shader , Ġshader Source ) ĊĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Compile Shader ( shader ) ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= ĠInt Array ( 1 ) ĊĠĠĠĠĠĠĠ ĠGLES 3 0 . glGet Shader iv ( shader , ĠGLES 3 0 . GL _ COMPILE _ STATUS , Ġstatus , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( status [ 0 ] Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠGLES 3 0 . glGet Shader Info Log ( shader ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Delete Shader ( shader ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( log ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġshader ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Throws ( RuntimeException :: class ) ĊĠĠĠ Ġfun Ġlink Program GLES 3 0 ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvert Shader : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrag Shader : ĠInt ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprogram Ġ= ĠGLES 3 0 . gl Create Program () ĊĠĠĠĠĠĠĠ Ġif Ġ( program Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Failed Ġto Ġcreate Ġprogram ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Attach Shader ( program , Ġvert Shader ) ĊĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Attach Shader ( program , Ġfrag Shader ) ĊĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Link Program ( program ) ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= ĠInt Array ( 1 ) ĊĠĠĠĠĠĠĠ ĠGLES 3 0 . glGet Program iv ( program , ĠGLES 3 0 . GL _ LINK _ STATUS , Ġstatus , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( status [ 0 ] Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠGLES 3 0 . glGet Program Info Log ( program ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Delete Program ( program ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( log ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġprogram ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Throws ( RuntimeException :: class ) ĊĠĠĠ Ġfun Ġcompile Shader Resource GLES 2 0 ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshader Type : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshader Res : ĠInt ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġcontext . resources . open Raw Resource ( shader Res ) ĊĠĠĠĠĠĠĠ Ġval Ġbuffered Reader Ġ= ĠBufferedReader ( InputStream Reader ( inputStream )) ĊĠĠĠĠĠĠĠ Ġvar Ġline : ĠString ? ĊĠĠĠĠĠĠĠ Ġval ĠstringBuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( buffered Reader . readLine (). also Ġ{ Ġline Ġ= Ġit Ġ} Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ('\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġshader Source Ġ= ĠstringBuilder . toString () ĊĠĠĠĠĠĠĠ Ġval Ġshader Ġ= ĠGLES 2 0 . gl Create Shader ( shader Type ) ĊĠĠĠĠĠĠĠ Ġif Ġ( shader Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Failed Ġto Ġcreate Ġshader ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Shader Source ( shader , Ġshader Source ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Compile Shader ( shader ) ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= ĠInt Array ( 1 ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . glGet Shader iv ( shader , ĠGLES 2 0 . GL _ COMPILE _ STATUS , Ġstatus , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( status [ 0 ] Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠGLES 2 0 . glGet Shader Info Log ( shader ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Delete Shader ( shader ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( log ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġshader ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Throws ( RuntimeException :: class ) ĊĠĠĠ Ġfun Ġlink Program GLES 2 0 ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvert Shader : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrag Shader : ĠInt ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprogram Ġ= ĠGLES 2 0 . gl Create Program () ĊĠĠĠĠĠĠĠ Ġif Ġ( program Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Failed Ġto Ġcreate Ġprogram ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Attach Shader ( program , Ġvert Shader ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Attach Shader ( program , Ġfrag Shader ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Link Program ( program ) ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= ĠInt Array ( 1 ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . glGet Program iv ( program , ĠGLES 2 0 . GL _ LINK _ STATUS , Ġstatus , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( status [ 0 ] Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠGLES 2 0 . glGet Program Info Log ( program ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Delete Program ( program ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( log ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġprogram ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġdebug ( tag : ĠString , Ġmessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( tag , Ġmessage ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ