/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠTh ib ault ĠB . Ċ Ġ* Ċ Ġ* Ġ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 Ġio . github . th ib ault bee . stre amp ack . data Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . media . Media Codec Info . Codec Profile Level Ċ import Ġandroid . media . Media Format Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Size Ċ import Ġio . github . th ib ault bee . stre amp ack . internal . utils . is Por trait Ċ import Ġio . github . th ib ault bee . stre amp ack . internal . utils . is Video Ċ import Ġio . github . th ib ault bee . stre amp ack . stream ers . bases . Base Stream er Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* ĠVideo Ġconfiguration Ġclass . Ċ Ġ* ĠIf Ġyou Ġdon 't Ġknow Ġhow Ġto Ġset Ġclass Ġmembers , Ġ[ Video Ġencoding Ġrecommendations ]( https :// developer . android . com / guide / topics / media / media - formats # video - encoding ) Ġshould Ġgive Ġyou Ġhints . Ċ Ġ* Ċ Ġ* Ġ@ see Ġ[ Base Stream er . configure ] Ċ Ġ*/ Ċ class ĠVideo Config ( ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠVideo Ġencoder Ġmime Ġtype . ĊĠĠĠĠ Ġ* ĠOnly Ġ[ Media Format . MIME TYPE _ VIDEO _ AV C ] Ġand Ġ[ Media Format . MIME TYPE _ VIDEO _ HE VC ] Ġare Ġsupported Ġyet . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ** See ĠAlso :** Ġ[ Media Format ĠMIME TYPE _ VIDEO _* ]( https :// developer . android . com / reference / android / media / Media Format ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠmimeType : ĠString Ġ= ĠMedia Format . MIME TYPE _ VIDEO _ AV C , ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠVideo Ġencoder Ġbit rate Ġin Ġbits / s . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġstart Bit rate : ĠInt Ġ= Ġ 2 0 0 0 0 0 0 , ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠVideo Ġoutput Ġresolution Ġin Ġpixel . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġresolution : ĠSize Ġ= ĠSize ( 1 2 8 0 , Ġ 7 2 0 ), ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠVideo Ġfram erate . ĊĠĠĠĠ Ġ* ĠThis Ġis Ġa Ġbest Ġeffort Ġas Ġfew Ġcamera Ġcan Ġnot Ġgenerate Ġa Ġfixed Ġfram erate . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġfps : ĠInt Ġ= Ġ 3 0 , ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠVideo Ġencoder Ġprofile . ĠEn coders Ġmay Ġnot Ġsupport Ġrequested Ġprofile . ĠIn Ġthis Ġcase , ĠStream Pack Ġfallback s Ġto Ġdefault Ġprofile . ĊĠĠĠĠ Ġ* Ġ** ĠSee Ġ** Ġ[ Media Codec Info . Codec Profile Level ]( https :// developer . android . com / reference / android / media / Media Codec Info . Codec Profile Level ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġprofile : ĠInt Ġ= ĠgetDefault Profile ( mime Type ), ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠVideo Ġencoder Ġlevel . ĠEn coders Ġmay Ġnot Ġsupport Ġrequested Ġlevel . ĠIn Ġthis Ġcase , ĠStream Pack Ġfallback s Ġto Ġdefault Ġlevel . ĊĠĠĠĠ Ġ* Ġ** ĠSee Ġ** Ġ[ Media Codec Info . Codec Profile Level ]( https :// developer . android . com / reference / android / media / Media Codec Info . Codec Profile Level ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġlevel : ĠInt Ġ= ĠgetDefault Level ( mime Type ) Ċ ) Ġ: ĠConfig ( mime Type , Ġstart Bit rate ) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( mime Type . is Video ()) Ġ{ Ġ" MimeType Ġmust Ġbe Ġvideo " Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġresolution Ġaccording Ġto Ġdevice Ġorientation ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext Ġactivity Ġcontext ĊĠĠĠĠ Ġ* Ġ@ return Ġorient ed Ġresolution ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Oriented Resolution ( context : ĠContext ): ĠSize Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( context . is Por trait ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSize ( resolution . height , Ġresolution . width ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSize ( resolution . width , Ġresolution . height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠgetDefault Profile ( mime Type : ĠString ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( mime Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Format . MIME TYPE _ VIDEO _ AV C Ġ-> ĠCodec Profile Level . AV C Profile High ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Format . MIME TYPE _ VIDEO _ HE VC Ġ-> ĠCodec Profile Level . HE VC Profile Main ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIOException (" Not Ġsupported Ġmime Ġtype : Ġ$ mime Type ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠgetDefault Level ( mime Type : ĠString ) Ġ= Ġwhen Ġ( mime Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Format . MIME TYPE _ VIDEO _ AV C Ġ-> Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCodec Profile Level . AV C Level 6 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCodec Profile Level . AV C Level 5 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Format . MIME TYPE _ VIDEO _ HE VC Ġ-> ĠCodec Profile Level . HE V CM ain Tier Level 6 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIOException (" Not Ġsupported Ġmime Ġtype : Ġ$ mime Type ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ