package Ġcom . home soft . encoder Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . media . Media Codec List Ċ import Ġandroid . media . Media Codec List . REG ULAR _ CODE CS Ċ import Ġandroid . util . Log Ċ import Ġandroidx . annotation . Raw Res Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ Ċ /* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠIs ra el ĠF lo res Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ Ċ class ĠM ux er ( private Ġval Ġcontext : ĠContext , Ġprivate Ġval Ġfile : ĠFile ) Ġ{ ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġconfig : ĠM ux er Config ) Ġ: Ġthis ( context , Ġconfig . file ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmux er Config Ġ= Ġconfig ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠM ux er :: class . java . simple Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠInitialize Ġa Ġdefault Ġconfiguration ĊĠĠĠ Ġprivate Ġvar Ġmux er Config : ĠM ux er Config Ġ= ĠM ux er Config ( file ) ĊĠĠĠ Ġprivate Ġvar Ġmux ing Completion Listener : ĠM ux ing Completion Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuild Ġthe ĠM ux er Ġwith Ġa Ġcustom Ġ[ Mux er Config ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġconfig : Ġmux er Ġconfiguration Ġobject ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Mux er Config ( config : ĠM ux er Config ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmux er Config Ġ= Ġconfig ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Mux er Config () Ġ= Ġmux er Config ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠList Ġcontaining Ġimages Ġin Ġany Ġof Ġthe Ġfollowing Ġformats : ĊĠĠĠĠ Ġ* Ġ[ Bitmap ] Ġ[@ Draw Res ĠInt ] Ġ[ Canvas ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmux ( image List : ĠList < Any >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Raw Res Ġaudio Track : ĠInt ? Ġ= Ġnull ): ĠM ux ing Result Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠReturns Ġon Ġa Ġcallback Ġa Ġfinished Ġvideo ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Generating Ġvideo ") ĊĠĠĠĠĠĠĠ Ġval Ġframe Builder Ġ= ĠFrame Builder ( context , Ġmux er Config , Ġaudio Track ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe Builder . start () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Start ĠEncoder ĠFailed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmux ing Completion Listener ?. on Video Error ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠM ux ing Error (" Start Ġencoder Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( image Ġin Ġimage List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe Builder . create Frame ( image ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRelease Ġthe Ġvideo Ġcodec Ġso Ġwe Ġcan Ġmux Ġin Ġthe Ġaudio Ġframes Ġseparately ĊĠĠĠĠĠĠĠ Ġframe Builder . release Video Codec () ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġaudio ĊĠĠĠĠĠĠĠ Ġframe Builder . mux Audio Frames () ĊĊĠĠĠĠĠĠĠ Ġ// ĠRelease Ġeverything ĊĠĠĠĠĠĠĠ Ġframe Builder . release Audio Extractor () ĊĠĠĠĠĠĠĠ Ġframe Builder . release Mux er () ĊĊĠĠĠĠĠĠĠ Ġmux ing Completion Listener ?. on Video Successful ( file ) ĊĠĠĠĠĠĠĠ Ġreturn ĠM ux ing Success ( file ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġmux Async ( image List : ĠList < Any >, Ġ@ Raw Res Ġaudio Track : ĠInt ? Ġ= Ġnull ): ĠM ux ing Result Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmux ( image List , Ġaudio Track ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Mux ing Completed Listener ( mux ing Completion Listener : ĠM ux ing Completion Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . mux ing Completion Listener Ġ= Ġmux ing Completion Listener ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġis Codec Supported ( mime Type : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġcodecs Ġ= ĠMedia Codec List ( REG ULAR _ CODE CS ) ĊĠĠĠ Ġfor Ġ( codec Ġin Ġcodecs . codec Infos ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! codec . is Encoder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( type Ġin Ġcodec . supported Types ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠmimeType ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfalse Ċ } Ċ