package Ġcom . l my . hw vc native . processor Ċ Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroid . graphics . Surface Texture Ċ import Ġandroid . hardware . display . Display Manager Ċ import Ġandroid . hardware . display . Virtual Display Ċ import Ġandroid . media . projection . Media Projection Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Surface Ċ import Ġandroidx . annotation . Keep Ċ import Ġcom . l my . hw vc native . CPP Object Ċ Ċ @ Keep Ċ class ĠAl Display Recorder ( ĊĠĠĠ Ġprivate Ġval Ġmp : ĠMedia Projection , ĊĠĠĠ Ġprivate Ġval Ġdw : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġdh : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġdpi : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġfps : ĠInt Ġ= Ġ 3 0 Ċ ) Ġ: ĠCPP Object (), ĠSurface Texture . On Frame Available Listener Ġ{ ĊĠĠĠ Ġprivate Ġval Ġm Handler Ġ= ĠHandler ( Looper . get Main Looper ()) ĊĠĠĠ Ġprivate Ġvar Ġvd : ĠAl Virtual Display ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġon Record Progress Listener : Ġ(( Long ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlast Time Ġ= Ġ 0 L ĊĠĠĠ Ġprivate Ġval Ġdur Of Frame Ġ= Ġ 1 0 0 0 0 0 0 0 0 0 Ġ/ Ġfps ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġhandler Ġ= Ġcreate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Output FilePath ( filePath : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Native Null ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġset Output FilePath ( handler , ĠfilePath ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Format ( ĊĠĠĠĠĠĠĠ Ġwidth : ĠInt , Ġheight : ĠInt , Ġsample Format : ĠInt Ġ= Ġ 1 0 2 , ĊĠĠĠĠĠĠĠ Ġchannels : ĠInt Ġ= Ġ 2 , Ġsample Rate : ĠInt Ġ= Ġ 4 4 1 0 0 ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Native Null ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġset Format ( handler , Ġdw , Ġdh , Ġsample Format , Ġchannels , Ġsample Rate ) ĊĠĠĠĠĠĠĠ Ġset MaxSize ( width , Ġheight ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Bit rate ( bit rate : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Native Null ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġset Bit rate ( handler , Ġbit rate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Profile ( profile : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Native Null ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġset Profile ( handler , Ġprofile ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Preset ( preset : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Native Null ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġset Preset ( handler , Ġpreset ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Enable Hardware ( enable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Native Null ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġset Enable Hardware ( handler , Ġenable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset MaxSize ( width : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Native Null ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġset MaxSize ( handler , Ġwidth , Ġheight ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Native Null ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġstart ( handler ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpause () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Native Null ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġpause ( handler ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrelease () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Native Null ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġpost Event ( handler , ĠEVENT _ RELEASE ) ĊĠĠĠĠĠĠĠ Ġrelease ( handler ) ĊĠĠĠĠĠĠĠ Ġhandler Ġ= Ġ 0 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Frame Available ( surface Texture : ĠSurface Texture ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Native Null ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġpost Event ( handler , ĠEVENT _ DRAW ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Native Message ( what : ĠInt , Ġarg 1 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( what ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEVENT _ RELEASE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvd ?. release () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Al Display Recorder ", Ġ" release ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEVENT _ DRAW Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvd ?. draw () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= Ġvd !!. timestamp () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Time Ġ> Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ- Ġlast Time Ġ< Ġdur Of Frame ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Time Ġ= Ġtime Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Al Display Recorder ", Ġ" draw Ġ$ time ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( 0 L Ġ!= Ġhandler ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate ( handler , Ġvd !!. matrix (), Ġtime , Ġdw , Ġdh ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Native Prepared ( oes Tex : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( oes Tex Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog . i (" Al Display Recorder ", Ġ" OES Ġtex Ġ$ oes Tex ") ĊĠĠĠĠĠĠĠ Ġvd Ġ= ĠAl Virtual Display . open ( mp , Ġdw , Ġdh , Ġdpi , Ġo es Tex ) ĊĠĠĠĠĠĠĠ Ġvd ?. setOn Frame Available Listener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Record Progress ( time In Us : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Record Progress Listener ?. invoke ( time In Us ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Record Progress Listener ( listener : Ġ( Long ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Record Progress Listener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow At ( surface : ĠSurface ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Native Null ()) Ġreturn ĊĠĠĠĠĠĠĠ ĠLog . i (" Al Display Recorder ", Ġ" show At ") ĊĠĠĠĠĠĠĠ Ġshow At ( handler , Ġsurface ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcrop Output Size ( rect : ĠRect F ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Native Null ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġcrop Output Size ( handler , Ġrect . left , Ġrect . top , Ġrect . right , Ġrect . bottom ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġexternal Ġfun Ġcreate (): ĠLong ĊĠĠĠ Ġprivate Ġexternal Ġfun Ġshow At ( handler : ĠLong , Ġsurface : ĠSurface ) ĊĠĠĠ Ġprivate Ġexternal Ġfun Ġstart ( handler : ĠLong ) ĊĠĠĠ Ġprivate Ġexternal Ġfun Ġpause ( handler : ĠLong ) ĊĠĠĠ Ġprivate Ġexternal Ġfun Ġrelease ( handler : ĠLong ) ĊĠĠĠ Ġprivate Ġexternal Ġfun Ġpost Event ( handler : ĠLong , Ġwhat : ĠInt ) ĊĠĠĠ Ġprivate Ġexternal Ġfun Ġinvalidate ( ĊĠĠĠĠĠĠĠ Ġhandler : ĠLong , Ġmatrix : ĠFloat Array , Ġts In Ns : ĠLong , ĊĠĠĠĠĠĠĠ Ġcw : ĠInt , Ġch : ĠInt ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġexternal Ġfun Ġset Output FilePath ( handler : ĠLong , ĠfilePath : ĠString ) ĊĠĠĠ Ġprivate Ġexternal Ġfun Ġset Format ( ĊĠĠĠĠĠĠĠ Ġhandler : ĠLong , Ġwidth : ĠInt , Ġheight : ĠInt , Ġsample Format : ĠInt , ĊĠĠĠĠĠĠĠ Ġchannels : ĠInt , Ġsample Rate : ĠInt ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġexternal Ġfun Ġcrop Output Size ( ĊĠĠĠĠĠĠĠ Ġhandler : ĠLong , Ġleft : ĠFloat , Ġtop : ĠFloat , ĊĠĠĠĠĠĠĠ Ġright : ĠFloat , Ġbottom : ĠFloat ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġexternal Ġfun Ġset MaxSize ( handler : ĠLong , Ġwidth : ĠInt , Ġheight : ĠInt ) ĊĊĠĠĠ Ġprivate Ġexternal Ġfun Ġset Bit rate ( handler : ĠLong , Ġbit rate : ĠInt ) ĊĊĠĠĠ Ġprivate Ġexternal Ġfun Ġset Profile ( handler : ĠLong , Ġprofile : ĠString ) ĊĊĠĠĠ Ġprivate Ġexternal Ġfun Ġset Preset ( handler : ĠLong , Ġpreset : ĠString ) ĊĠĠĠ Ġprivate Ġexternal Ġfun Ġset Enable Hardware ( handler : ĠLong , Ġenable : ĠBoolean ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEVENT _ PRE PARE Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEVENT _ RELEASE Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEVENT _ DRAW Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEVENT _ SWAP Ġ= Ġ 4 ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠAl Virtual Display Ġprivate Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġmp : ĠMedia Projection , ĊĠĠĠ Ġprivate Ġval Ġdw : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġdh : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġdpi : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġtex : ĠInt Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġvd : ĠVirtual Display ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtexture : ĠSurface Texture ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtransform Matrix : ĠFloat Array Ġ= ĠFloat Array ( 1 6 ) ĊĠĠĠ Ġprivate Ġval Ġcallback Ġ= Ġobject Ġ: ĠVirtual Display . Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Res umed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Al Display Recorder ", Ġ" on Res umed ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Stopped () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Al Display Recorder ", Ġ" on Stopped ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Paused () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Al Display Recorder ", Ġ" on Paused ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i (" Al Display Recorder ", Ġ" setup Ġ$ dw Ġx Ġ$ dh , Ġ$ dpi ") ĊĠĠĠĠĠĠĠ Ġtexture Ġ= ĠSurface Texture ( tex ) ĊĠĠĠĠĠĠĠ Ġ// ĠglGet Int ĊĠĠĠĠĠĠĠ Ġtexture ?. setDefault BufferSize ( dw , Ġdh ) ĊĠĠĠĠĠĠĠ Ġvd Ġ= Ġmp . create Virtual Display ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" hw vc ", Ġdw , Ġdh , Ġdpi , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDisplay Manager . VIRTUAL _ DISPLAY _ FLAG _ AUTO _ MIR ROR , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSurface ( texture ), Ġcallback , ĠHandler ( Looper . get Main Looper ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Frame Available Listener ( l : ĠSurface Texture . On Frame Available Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtexture ?. setOn Frame Available Listener ( l ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdraw () Ġ{ ĊĠĠĠĠĠĠĠ Ġtexture ?. update TexImage () ĊĠĠĠĠĠĠĠ Ġtexture ?. get Transform Matrix ( transform Matrix ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtimestamp (): ĠLong Ġ= Ġtexture !!. timestamp ĊĊĠĠĠ Ġfun Ġmatrix (): ĠFloat Array Ġ= Ġtransform Matrix ĊĊĠĠĠ Ġfun Ġrelease () Ġ{ ĊĠĠĠĠĠĠĠ Ġvd ?. release () ĊĠĠĠĠĠĠĠ Ġmp . stop () ĊĠĠĠĠĠĠĠ Ġtexture ?. release () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġopen ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmp : ĠMedia Projection , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdpi : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtex : ĠInt ĊĠĠĠĠĠĠĠ Ġ): ĠAl Virtual Display Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAl Virtual Display ( mp , Ġwidth , Ġheight , Ġdpi , Ġtex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }