package Ġcom . example . learning audio and video . camera 2 stream Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Surface Texture Ċ import Ġandroid . hardware . camera 2 .* Ċ import Ġandroid . media . Media Codec Ċ import Ġandroid . media . Media Codec Info Ċ import Ġandroid . media . Media Format Ċ import Ġandroid . opengl . GLES 2 0 Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . System Clock Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Surface Ċ import Ġandroid . view . Surface Holder Ċ import Ġandroid . view . Surface View Ċ import Ġandroidx . annotation . NonNull Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġcom . example . learning audio and video . R Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . io . IOException Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . util .* Ċ import Ġjavax . micro edition . kh ronos . openg les . GL 1 0 ĊĊ Ċ class ĠCamera 2 Stream Activity Ġ: ĠAppCompatActivity ( R . layout . activity _ camera 2 _ stream ), ĠSurface Texture . On Frame Available Listener Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġpreview Surface : ĠSurface View ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġpreview Surface Holder : ĠSurface Holder ? Ġ= Ġnull ĊĊĠĠĠ Ġ// Ġ é¢Ħ è§Ī æµģ ĊĠĠĠ Ġprivate Ġvar Ġmedia Preview Encode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠMedia Codec ? Ġ= Ġnull ĊĊĠĠĠ Ġ// Ġæĭ į çħ§ æµģ ĊĠĠĠ Ġprivate Ġvar Ġmedia Capture Encode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠMedia Codec ? Ġ= Ġnull ĊĊĠĠĠ Ġ// Ġ é¢Ħ è§Ī ç¼ĸçłģ æł¼å¼ı ĊĠĠĠ Ġprivate Ġvar Ġmedia Preview Format ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠMedia Format ? Ġ= Ġnull ĊĊĠĠĠ Ġ// Ġæĭ į æĳ Ħ ç¼ĸçłģ æł¼å¼ı ĊĠĠĠ Ġprivate Ġvar Ġmedia Capture Format ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠMedia Format ? Ġ= Ġnull ĊĊĠĠĠ Ġ// é¢Ħ è§Ī æµģ ä½¿çĶ¨çļĦ surface ĊĠĠĠ Ġprivate Ġvar Ġmedia Preview Surface ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠSurface ? Ġ= Ġnull ĊĊĠĠĠ Ġ// æĭ į æĳ Ħ æµģ ä½¿çĶ¨çļĦ surface ĊĠĠĠ Ġprivate Ġvar Ġmedia Capture Surface ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠSurface ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Preview Builder : ĠCapture Request . Builder ? Ġ= Ġnull ĊĊĠĠĠ Ġ// åİĭç¼© æł¼å¼ı ĊĠĠĠ Ġprivate Ġval Ġcodec Type Ġ= ĠMedia Format . MIME TYPE _ VIDEO _ AV C ĊĊĠĠĠ Ġprivate Ġvar Ġcamera Device Ġ// camera ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠCamera Device ? Ġ= Ġnull ĊĊĠĠĠ Ġ// å½ķ åĪ¶ æłĩ å¿Ĺ ĊĠĠĠ Ġprivate Ġvar Ġup Record Flag Ġ= Ġfalse ĊĊĠĠĠ Ġ// å½ķ åĪ¶ æłĩ å¿Ĺ ĊĠĠĠ Ġprivate Ġval Ġsave Record Flag Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġup Buffer Info : ĠMedia Codec . Buffer Info ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġsave Buffer Info : ĠMedia Codec . Buffer Info ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġcamera Character istics : ĠCamera Character istics ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Surface Texture Ġ: ĠSurface Texture ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġm Surface Texture Ġ= ĠSurface Texture ( 1 ) ĊĠĠĠĠĠĠĠ Ġm Surface Texture !!. setOn Frame Available Listener ( this ) ĊĠĠĠĠĠĠĠ Ġpreview Surface Ġ= ĠfindViewById ( R . id . preview Surface ) ĊĠĠĠĠĠĠĠ Ġpreview Surface Holder Ġ= Ġpreview Surface !!. holder ĊĠĠĠĠĠĠĠ Ġpreview Surface Holder !!. add Callback ( object Ġ: ĠSurface Holder . Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsurface Created ( holder : ĠSurface Holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Camera ( 1 9 2 0 , Ġ 1 0 8 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsurface Changed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder : ĠSurface Holder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsurface Destroyed ( holder : ĠSurface Holder ) Ġ{} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* open Ġcamera */ ĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġprivate Ġfun Ġopen Camera ( width : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* èİ·å¾Ĺ çĽ¸ æľº ç®¡çĲĨ æľįåĬ¡ */ ĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . getSystem Service ( Context . CAMERA _ SERVICE ) Ġas ĠCamera Manager ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* èİ·åıĸ Camera ID åĪĹè¡¨ */ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcam eral ist Ġ= Ġmanager . camera IdList ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . open Camera ( cam eral ist [ 0 ], ĠCamera Open Callback , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠCamera AccessException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* close Ġcamera */ ĊĠĠĠ Ġprivate Ġfun Ġclose Camera () Ġ{} ĊĊĠĠĠ Ġ/* æĳ Ħ åĥı å¤´ æīĵå¼Ģ åĽŀè°ĥ */ ĊĠĠĠ Ġvar ĠCamera Open Callback : ĠCamera Device . State Callback Ġ= Ġobject Ġ: ĠCamera Device . State Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Opened (@ NonNull Ġcamera : ĠCamera Device ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Device Ġ= Ġcamera ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprepare Encoder ( camera ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Disconnected (@ NonNull Ġcamera : ĠCamera Device ) Ġ{} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError (@ NonNull Ġcamera : ĠCamera Device , Ġerror : ĠInt ) Ġ{} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Frame Available ( gl : ĠGL 1 0 ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e (" WJ X ", Ġ" on Draw Frame ...") ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġprepare Encoder ( camera Ġ: ĠCamera Device ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġup Buffer Info Ġ= ĠMedia Codec . Buffer Info () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĪĽå»º ç¼ĸçłģ åĻ¨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Encode Ġ= ĠMedia Codec . create Encoder ByType ( codec Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// è®¾ç½® ç¼ĸçłģ åıĤæķ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Format Ġ= ĠMedia Format . create Video Format ( codec Type , Ġ 1 2 8 0 , Ġ 7 2 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// è®¾ç½® é¢ľèī² æł¼å¼ı ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Format !!. set Integer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Format . KEY _ COLOR _ FORMAT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Codec Info . Codec Capabilities . COLOR _ Format Surface ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® æ¯Ķ çī¹ çİĩ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Format !!. set Integer ( Media Format . KEY _ BIT _ RATE , Ġ 2 0 0 0 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® å¸ § çİĩ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Format !!. set Integer ( Media Format . KEY _ FRAME _ RATE , Ġ 2 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® åħ³éĶ® å¸ § éĹ´ éļĶ æĹ¶éĹ´ ï¼Ī S ï¼ī ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Format !!. set Integer ( Media Format . KEY _ I _ FRAME _ INTERVAL , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå°Ĩ è®¾ç½® å¥½çļĦ åıĤæķ° éħįç½® ç»Ļ ç¼ĸçłģ åĻ¨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Encode !!. configure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Format , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Codec . CONFIGURE _ FLAG _ ENCODE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ä½¿çĶ¨ surface ä»£ æĽ¿ medi ac ode c æķ°æį® è¾ĵåħ¥ buffer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Surface Ġ= ĠSurface ( m Surface Texture ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Encode !!. create Input Surface () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Buffer Info Ġ= ĠMedia Codec . Buffer Info () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Capture Encode Ġ= ĠMedia Codec . create Encoder ByType ( codec Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Capture Format Ġ= ĠMedia Format . create Video Format ( codec Type , Ġ 1 9 2 0 , Ġ 1 0 8 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Capture Format !!. set Integer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Format . KEY _ COLOR _ FORMAT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Codec Info . Codec Capabilities . COLOR _ Format Surface ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Capture Format !!. set Integer ( Media Format . KEY _ BIT _ RATE , Ġ 4 0 0 0 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Capture Format !!. set Integer ( Media Format . KEY _ FRAME _ RATE , Ġ 2 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Capture Format !!. set Integer ( Media Format . KEY _ I _ FRAME _ INTERVAL , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Capture Encode !!. configure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Capture Format , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Codec . CONFIGURE _ FLAG _ ENCODE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Capture Surface Ġ= Ġmedia Capture Encode !!. create Input Surface () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// è®¾ç½® é¢Ħ è§Ī å° º å¯ ¸ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Surface Holder !!. set Fixed Size ( 1 9 2 0 , Ġ 1 0 8 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠåĪĽå»º é¢Ħ è§Ī è¯·æ±Ĥ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Preview Builder Ġ= Ġcamera . create Capture Request ( Camera Device . TEMPLATE _ PRE VIEW ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Preview Builder !!. add Target ( preview Surface Holder !!. surface ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Preview Builder !!. add Target ( media Preview Surface !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Preview Builder !!. add Target ( media Capture Surface !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĪĽå»º ä¼ļ è¯Ŀ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera . create Capture Session ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArrays . asList < Surface >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Surface Holder !!. surface , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Capture Surface , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Surface ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĠSession callback , Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠCamera AccessException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* å½ķ åĪ¶ è§Ĩé¢ĳ åĽŀè°ĥ */ ĊĠĠĠ Ġvar ĠSession callback : ĠCamera Capture Session . State Callback Ġ= ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠCamera Capture Session . State Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Configured (@ NonNull Ġsession : ĠCamera Capture Session ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Media Codec Recording () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession . set Repe ating Request ( m Preview Builder !!. build (), Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠCamera AccessException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// å¼Ģå§ĭ å½ķ åĪ¶ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Configure Failed (@ NonNull Ġsession : ĠCamera Capture Session ) Ġ{} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* å¼Ģå§ĭ å½ķ åĪ¶ è§Ĩé¢ĳ */ ĊĠĠĠ Ġprivate Ġfun Ġstart Media Codec Recording () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* é¢Ħ è§Ī æµģ æ¨¡ æĭŁ å½ķ åĪ¶ ï¼Į ä¿ĿåŃĺ åĪ° æľ¬åľ° */ ĊĠĠĠĠĠĠĠ Ġval Ġrecord Thread : ĠThread Ġ= Ġobject Ġ: ĠThread () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . run () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( media Preview Encode Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Media Codec ", Ġ" é¢Ħ è§Ī æµģ å¼Ģå§ĭ å½ķ åĪ¶ ################ ### ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup Record Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Encode !!. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( up Record Flag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġmedia Preview Encode !!. de queue Output Buffer ( up Buffer Info !! , Ġ 1 0 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( status Ġ== ĠMedia Codec . INFO _ TRY _ AG AIN _ L ATER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" M dia Codec Ġ", Ġ" Ġtime Ġout ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( status Ġ== ĠMedia Codec . INFO _ OUTPUT _ FORMAT _ CHANGED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Media Codec ", Ġ" format Ġchanged ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( status Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġmedia Preview Encode !!. getOutput Buffer ( status ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup Buffer Info !!. presentation Time Us Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Clock . uptime Millis () Ġ* Ġ 1 0 0 0 Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrain Encoder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreleasing Ġbuffer Ġis Ġimportant ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Encode !!. release Output Buffer ( status , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Of Stream Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup Buffer Info !!. flags Ġand ĠMedia Codec . BUFFER _ FLAG _ END _ OF _ STREAM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( end Of Stream Ġ== ĠMedia Codec . BUFFER _ FLAG _ END _ OF _ STREAM ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Surface !!. release () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Surface Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Encode !!. stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Encode !!. release () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Encode Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ å¼Ģå§ĭ å½ķ åĪ¶ ĊĠĠĠĠĠĠĠ Ġrecord Thread . start () ĊĊĊĠĠĠĠĠĠĠ Ġ/* ä¿ĿåŃĺ åĪ° æĭ į æĳ Ħ æµģ å½ķ åĪ¶ */ ĊĠĠĠĠĠĠĠ Ġval Ġrecord Thread 1 : ĠThread Ġ= Ġobject Ġ: ĠThread () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . run () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( media Capture Encode Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Media Codec ", Ġ" æĭ į æĳ Ħ æµģ å¼Ģå§ĭ å½ķ åĪ¶ ################ ### ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup Record Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Capture Encode !!. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( up Record Flag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġmedia Capture Encode !!. de queue Output Buffer ( save Buffer Info !! , Ġ 1 0 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( status Ġ== ĠMedia Codec . INFO _ TRY _ AG AIN _ L ATER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" M dia Codec Ġ", Ġ" Ġtime Ġout ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( status Ġ== ĠMedia Codec . INFO _ OUTPUT _ FORMAT _ CHANGED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Media Codec ", Ġ" format Ġchanged ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( status Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġmedia Capture Encode !!. getOutput Buffer ( status ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Buffer Info !!. presentation Time Us Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Clock . uptime Millis () Ġ* Ġ 1 0 0 0 Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrain Encoder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreleasing Ġbuffer Ġis Ġimportant ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Capture Encode !!. release Output Buffer ( status , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Of Stream Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Buffer Info !!. flags Ġand ĠMedia Codec . BUFFER _ FLAG _ END _ OF _ STREAM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( end Of Stream Ġ== ĠMedia Codec . BUFFER _ FLAG _ END _ OF _ STREAM ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Capture Surface !!. release () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Capture Surface Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Capture Encode !!. stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Capture Encode !!. release () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Capture Encode Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrecord Thread 1 . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Surface !!. release () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Encode !!. stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Encode !!. release () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Device !!. close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Capture Surface !!. release () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Capture Encode !!. stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Capture Encode !!. release () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrelease () Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠSurface ( Surface Texture ( 1 )) ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġprivate Ġfun Ġdrain Encoder ( end Of Stream : ĠBoolean ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval ĠTIME OUT _ USE C Ġ= Ġ 1 0 0 0 0 Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( end Of Stream ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom . android . graf ika . Soft Input Surface Activity . TAG , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" drain Encoder ($ end Of Stream )" Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( end Of Stream ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Encode !!. signal EndOf InputStream () Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġvar Ġencoder Output Buffers : ĠArray < ByteBuffer ?> Ġ= Ġmedia Preview Encode . getOutput Buffers () Ċ // ĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġencoder Status : ĠInt Ġ= Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Encode . de queue Output Buffer ( m Buffer Info , ĠTIME OUT _ USE C . to Long ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( encoder Status Ġ== ĠMedia Codec . INFO _ TRY _ AG AIN _ L ATER ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno Ġoutput Ġavailable Ġyet Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! end Of Stream ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak Ġ// Ġout Ġof Ġwhile Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( com . android . graf ika . Soft Input Surface Activity . VERBOSE ) ĠLog . d ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom . android . graf ika . Soft Input Surface Activity . TAG , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" no Ġoutput Ġavailable , Ġspin ning Ġto Ġawait ĠEOS " Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( encoder Status Ġ== ĠMedia Codec . INFO _ OUTPUT _ BUFFER S _ CHANGED ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnot Ġexpected Ġfor Ġan Ġencoder Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencoder Output Buffers Ġ= Ġmedia Preview Encode !!. getOutput Buffers () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( encoder Status Ġ== ĠMedia Codec . INFO _ OUTPUT _ FORMAT _ CHANGED ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshould Ġhappen Ġbefore Ġreceiving Ġbuffers , Ġand Ġshould Ġonly Ġhappen Ġonce Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Mux er Started ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" format Ġchanged Ġtwice ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Format : ĠMedia Format Ġ= Ġmedia Preview Encode !!. getOutput Format () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom . android . graf ika . Soft Input Surface Activity . TAG , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" encoder Ġoutput Ġformat Ġchanged : Ġ$ new Format " Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnow Ġthat Ġwe Ġhave Ġthe ĠMagic ĠGood ies , Ġstart Ġthe Ġmux er Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Track Index Ġ= Ġm Mux er . add Track ( new Format ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Mux er . start () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Mux er Started Ġ= Ġtrue Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( encoder Status Ġ< Ġ 0 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom . android . graf ika . Soft Input Surface Activity . TAG , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" unexpected Ġresult Ġfrom Ġencoder . de queue Output Buffer : Ġ" Ġ+ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencoder Status Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlet 's Ġignore Ġit Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġencoded Data Ġ= Ġencoder Output Buffers [ encoder Status ] Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠRuntimeException ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" encoder Output Buffer Ġ" Ġ+ Ġencoder Status Ġ+ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġwas Ġnull " Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Buffer Info . flags Ġand ĠMedia Codec . BUFFER _ FLAG _ CODEC _ CONFIG Ġ!= Ġ 0 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġcodec Ġconfig Ġdata Ġwas Ġpulled Ġout Ġand Ġfed Ġto Ġthe Ġmux er Ġwhen Ġwe Ġgot Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe ĠINFO _ OUTPUT _ FORMAT _ CHANGED Ġstatus . Ġ ĠIgnore Ġit . Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( com . android . graf ika . Soft Input Surface Activity . VERBOSE ) ĠLog . d ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom . android . graf ika . Soft Input Surface Activity . TAG , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ign oring ĠBUFFER _ FLAG _ CODEC _ CONFIG " Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Buffer Info . size Ġ= Ġ 0 Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Buffer Info . size Ġ!= Ġ 0 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m Mux er Started ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" mux er Ġhasn 't Ġstarted ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadjust Ġthe ĠByteBuffer Ġvalues Ġto Ġmatch ĠBuffer Info Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencoded Data . position ( m Buffer Info . offset ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencoded Data . limit ( m Buffer Info . offset Ġ+ Ġm Buffer Info . size ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Buffer Info . presentation Time Us Ġ= Ġm Fake Pts Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Fake Pts Ġ+= Ġ 1 0 0 0 0 0 0 L Ġ/ Ġcom . android . graf ika . Soft Input Surface Activity . FR AMES _ PER _ SECOND Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Mux er . write Sample Data ( m Track Index , Ġencoded Data , Ġm Buffer Info ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( com . android . graf ika . Soft Input Surface Activity . VERBOSE ) ĠLog . d ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom . android . graf ika . Soft Input Surface Activity . TAG , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" sent Ġ" Ġ+ Ġm Buffer Info . size Ġ+ Ġ" Ġbytes Ġto Ġmux er " Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Preview Encode !!. release Output Buffer ( encoder Status , Ġfalse ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Buffer Info . flags Ġand ĠMedia Codec . BUFFER _ FLAG _ END _ OF _ STREAM Ġ!= Ġ 0 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! end Of Stream ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom . android . graf ika . Soft Input Surface Activity . TAG , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" re ached Ġend Ġof Ġstream Ġunexpected ly " Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak Ġ// Ġout Ġof Ġwhile Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Frame Available ( surface Texture : ĠSurface Texture ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e (" WJ X ", Ġ" on frame Ġavailable "); ĊĠĠĠ Ġ} Ċ }