package Ġcom . h eng . record . video . view . media . encoder Ċ Ċ import Ġandroid . media . Media Codec Ċ import Ġandroid . media . Media Format Ċ import Ġcom . h eng . record . video . view . utils . Log Utils Ċ import Ġcom . h eng . record . video . view . media . Frame Ċ import Ġcom . h eng . record . video . view . media . MM ux er Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġ ç¼ĸçłģ åĻ¨ Ċ Ġ*/ ĊĊ Ċ abstract Ġclass ĠBase Encoder ( ĊĠĠĠ Ġprivate Ġval Ġmux er : ĠM Mux er , ĊĠĠĠ Ġprotected Ġval Ġwidth : ĠInt Ġ= Ġ- 1 , ĊĠĠĠ Ġprotected Ġval Ġheight : ĠInt Ġ= Ġ- 1 Ċ ) Ġ: ĠRunnable Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġthis . java Class . simple Name ĊĠĠĠ Ġprivate Ġval Ġm Lock Ġ= ĠObject () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmedia Codec : ĠMedia Codec ĊĊĠĠĠ Ġ// æĺ¯åĲ¦ ç»ĵæĿŁ ĊĠĠĠ Ġprivate Ġvar Ġis E os Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĿå§ĭåĮĸ ç¼ĸçłģ åĻ¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit Codec () Ġ{ ĊĠĠĠĠĠĠĠ Ġmedia Codec Ġ= ĠMedia Codec . create Encoder ByType ( encode Type ()) ĊĠĠĠĠĠĠĠ Ġbuffer Info Ġ= ĠMedia Codec . Buffer Info () ĊĠĠĠĠĠĠĠ Ġconfig Encoder ( media Codec ) ĊĠĠĠĠĠĠĠ Ġmedia Codec . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ ç¼ĸçłģ å¸ § åºıåĪĹ ĊĠĠĠ Ġprivate Ġvar Ġm Frames Ġ= ĠLinkedList < Frame >() ĊĠĠĠ Ġ// Ġå½ĵåīį ç¼ĸçłģ å¸ § ä¿¡æģ¯ ĊĠĠĠ Ġprivate Ġvar Ġbuffer Info Ġ= ĠMedia Codec . Buffer Info () ĊĊĠĠĠ Ġ// ĠĠĠ Ġprivate Ġvar ĠstartTime Ġ= Ġ- 1 L ĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġis E os Ġ= Ġfalse Ċ // ĠĠĠĠĠĠĠ ĠstartTime Ġ= Ġ- 1 L ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Frames ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Frames . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! is E os ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( m Frames . isNotEmpty () Ġ&& Ġ! is E os ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġsynchronized ( m Frames ) Ġ{ Ġm Frames . remove First () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencode Man ually () Ġ-> Ġencode ( frame ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe . buffer Ġ== Ġnull Ġ-> Ġ{ Ġ// Ġå¦Ĥæŀľ æĺ¯ èĩªåĬ¨ ç¼ĸçłģ ï¼Ī æ¯Ķå¦Ĥ è§Ĩé¢ĳ ï¼īï¼Į éģĩ åĪ° ç»ĵæĿŁ å¸ § çļĦæĹ¶åĢĻ ï¼Į çĽ´æİ¥ ç»ĵæĿŁ æİī Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . d ( TAG , Ġ" åıĳéĢģ ç¼ĸçłģ ç»ĵæĿŁ æłĩ å¿Ĺ ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġmay Ġonly Ġbe Ġused Ġwith Ġen coders Ġreceiving Ġinput Ġfrom Ġa ĠSurface Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Codec . signal EndOf InputStream () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis E os Ġ= Ġtrue Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åıĸ åĩº æķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrain () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is E os ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwait Encode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! encode Man ually ()) Ġ{// å¦Ĥæŀľ æĺ¯ èĩªåĬ¨ çļĦ Ġï¼Į éľĢè¦ģ åıĳéĢģ ç»ĵæĿŁ çļĦ æłĩè®° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Codec . signal EndOf InputStream () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġde queue Input Buffer Index Ġ= Ġmedia Codec . de queue Input Buffer (- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Codec . queue Input Buffer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde queue Input Buffer Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Info . presentation Time Us , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Codec . BUFFER _ FLAG _ END _ OF _ STREAM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdone () ĊĠĠĠĠĠĠĠ ĠLog Utils . d ( TAG , Ġ" ç¼ĸçłģ å®ĮæĪĲ ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç¼ĸçłģ ç»ĵæĿŁ ï¼Į æĺ¯åĲ¦ èµĦæºĲ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdone () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . i ( TAG , Ġ" release ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Codec . stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Codec . release () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelease ( mux er ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġrelease ( mux er : ĠM Mux er ) ĊĊĠĠĠ Ġprivate Ġfun Ġencode ( frame : ĠFrame ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġde queue Input Buffer Index Ġ= Ġmedia Codec . de queue Input Buffer (- 1 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( de queue Input Buffer Index Ġ> Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbyte Buffer Ġ= Ġmedia Codec . input Buffers [ de queue Input Buffer Index ] Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbyte Buffer . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( frame . buffer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbyte Buffer . put ( frame . buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( frame . buffer Ġ== Ġnull Ġ|| Ġframe . buffer Info . size Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis E os Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Codec . queue Input Buffer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde queue Input Buffer Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe . buffer Info . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe . buffer Info . presentation Time Us , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çŃīå¾ħ ç¼ĸçłģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġwait Encode () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( m Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Lock . wait () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĢļçŁ¥ è§£ çłģ çº¿ç¨ĭ ç»§ç»Ń è¿Ĳè¡Į ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġnotify Encode () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Lock . notify All () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åıĸ åĩº æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdrain () Ġ{ ĊĠĠĠĠĠĠĠ Ġloop @ Ġwhile Ġ(! is E os ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Index Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Codec . de queue Output Buffer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Info , Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" drain Ġ- Ġtime ãĢĭ ${ buffer Info . presentation Time Us } Ġbuffer Info . flag :${ buffer Info . flags } Ġindex :$ output Index " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( output Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Codec . INFO _ OUTPUT _ BUFFER S _ CHANGED Ġ-> Ġcontinue @ loop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Codec . INFO _ TRY _ AG AIN _ L ATER Ġ-> Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Codec . INFO _ OUTPUT _ FORMAT _ CHANGED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Track ( mux er , Ġmedia Codec . output Format ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( buffer Info . flags Ġ== ĠMedia Codec . BUFFER _ FLAG _ CODEC _ CONFIG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠS PS Ġor ĠP PS , Ġwhich Ġshould Ġbe Ġpassed Ġby ĠMedia Format . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Codec . release Output Buffer ( output Index , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue @ loop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is E os ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĠéĢļè¿ĩ è®¾ç½® ĠE GL Ext . e gl Presentation Time ANDROID ( m E gl Display , Ġe gl Surface , Ġn secs ) Ġåı¯ä»¥ ä¿Ŀè¯ģ è§Ĩé¢ĳ æĹ¶éĹ´ ä¸Ģèĩ´ */ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġèİ·åıĸ çļĦ è§Ĩé¢ĳ æĹ¶éĹ´ ä¸įæĺ¯ ä»İ 0 å¼Ģå§ĭ Ġ Ġ ä¸ºäºĨ ä½¿ éŁ³ è§Ĩé¢ĳ åĲĮæŃ¥ ï¼Į å°Ĩ ç¬¬ ä¸Ģæ¬¡ ç¼ĸçłģ çļĦæĹ¶éĹ´ ç½® ä¸º 0 ï¼Į å¹¶ è®°å½ķ å¼Ģå§ĭ æĹ¶éĹ´ ï¼Į æ¯ıæ¬¡ éĩį ç½® ä¸º æĹ¶éĹ´ å·® Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( startTime Ġ== Ġ- 1 L ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= Ġbuffer Info . presentation Time Us Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Info . presentation Time Us Ġ= Ġ 0 Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Info . presentation Time Us Ġ= Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Info . presentation Time Us Ġ- ĠstartTime Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" drain Ġ- Ġbuffer Info . flags : ãĢĭ ${ buffer Info . flags } Ġ Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" buffer Info . presentation Time Us :${ buffer Info . presentation Time Us } Ġ Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" buffer Info . size :${ buffer Info . size } Ġ Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" buffer Info . offset :${ buffer Info . offset } Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Buffer Ġ= Ġmedia Codec . output Buffers [ output Index ] Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Data ( mux er , Ġoutput Buffer , Ġbuffer Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Codec . release Output Buffer ( output Index , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġwrite Data ( mux er : ĠM Mux er , Ġbyte Buffer : ĠByteBuffer , Ġbuffer Info : ĠMedia Codec . Buffer Info ) ĊĊĠĠĠ Ġabstract Ġfun Ġadd Track ( mux er : ĠM Mux er , Ġformat : ĠMedia Format ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå°Ĩ ä¸Ģ å¸ § æķ°æį® åİĭ åħ¥ éĺŁåĪĹ ï¼Į çŃīå¾ħ ç¼ĸçłģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġencode One Frame ( frame : ĠFrame ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is E os ) Ġreturn ĊĠĠĠĠĠĠĠ ĠLog Utils . d ( TAG , Ġ" encode One Frame ->$ frame ") ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Frames ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Frames . add Last ( frame ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnotify Encode () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç¼ĸçłģ ç±»åŀĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġencode Type (): ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġéħįç½® ç¼ĸçłģ åĻ¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġconfig Encoder ( media Codec : ĠMedia Codec ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ æīĭåĬ¨ ç¼ĸçłģ ĊĠĠĠĠ Ġ* Ġ è§Ĩé¢ĳ ï¼ļ false Ġ éŁ³ é¢ĳ ï¼ļ true ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ æ³¨ ï¼ļ è§Ĩé¢ĳ ç¼ĸçłģ éĢļè¿ĩ Surface ï¼Į Media Codec èĩªåĬ¨ å®ĮæĪĲ ç¼ĸçłģ ï¼Ľ éŁ³ é¢ĳ æķ°æį® éľĢè¦ģ çĶ¨æĪ· èĩªå·± åİĭ åħ¥ ç¼ĸçłģ ç¼ĵ åĨ² åĮº ï¼Į å®ĮæĪĲ ç¼ĸçłģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġencode Man ually () Ġ= Ġtrue ĊĊĠĠĠ Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Codec () ĊĠĠĠĠĠĠĠ ĠThread ( this ). start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġis E os Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġnotify Encode () ĊĠĠĠ Ġ} Ċ }