/* Ċ Ġ* ĠCopyright Ġ@ Ġ 2 0 1 8 Ġ- Ġpresent Ġ 8 x 8 , ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . j its i . nl j . rtp . codec . vp 9 Ċ Ċ import Ġorg . j its i . nl j . Media Source Desc Ċ import Ġorg . j its i . nl j . Packet Info Ċ import Ġorg . j its i . nl j . find R tp Layer Desc Ċ import Ġorg . j its i . nl j . rtp . codec . Video Codec Parser Ċ import Ġorg . j its i . nl j . util . StateChange Logger Ċ import Ġorg . j its i . rtp . extensions . to Hex Ċ import Ġorg . j its i . utils . logging 2 . Logger Ċ import Ġorg . j its i . utils . logging 2 . create Child Logger Ċ Ċ /** Ċ Ġ* ĠSome Ġ[ Vp 9 Packet ] Ġfields Ġare Ġnot Ġable Ġto Ġbe Ġdetermined Ġby Ġlooking Ġat Ġa Ġsingle ĠV P 9 Ġpacket Ġ( for Ġexample Ġthe Ġscal ability Ċ Ġ* Ġstructure Ġis Ġonly Ġcarried Ġin Ġkey frames ). Ġ ĠThis Ġclass Ġupdates Ġthe Ġlayer Ġdescriptions Ġwith Ġinformation Ċ Ġ* Ġfrom Ġframes , Ġand Ġalso Ġdiag no ses Ġpacket Ġformat Ġvariants Ġthat Ġthe ĠJ its i Ġvideo bridge Ġwon 't Ġbe Ġable Ġto Ġroute . Ċ Ġ*/ Ċ class ĠV p 9 Parser ( ĊĠĠĠ Ġsources : ĠArray < Media Source Desc >, ĊĠĠĠ Ġparent Logger : ĠLogger Ċ ) Ġ: ĠVideo Codec Parser ( sources ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= Ġcreate Child Logger ( parent Logger ) ĊĊĠĠĠ Ġprivate Ġval Ġpicture Id State Ġ= ĠState Change Logger (" missing Ġpicture Ġid ", Ġlogger ) ĊĠĠĠ Ġprivate Ġval Ġextended Picture Id State Ġ= ĠState Change Logger (" missing Ġextended Ġpicture ĠID ", Ġlogger ) ĊĠĠĠ Ġprivate Ġvar Ġnum Spatial Layers Ġ= Ġ- 1 ĊĊĠĠĠ Ġ/** ĠEn codings Ġwe 've Ġactually Ġseen . Ġ ĠUsed Ġto Ġclear Ġout Ġinferred - from - signal ing Ġencoding Ġinformation . Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġs src s Seen Ġ= ĠHashSet < Long >() ĊĊĠĠĠ Ġoverride Ġfun Ġparse ( packet Info : ĠPacket Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvp 9 Packet Ġ= Ġpacket Info . packet As < Vp 9 Packet >() ĊĊĠĠĠĠĠĠĠ Ġs src s Seen . add ( vp 9 Packet . ss rc ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( vp 9 Packet . has Scal ability Structure ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġhandle Ġcase Ġwhere Ġnew ĠSS Ġis Ġfrom Ġa Ġpacket Ġolder Ġthan Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġlatest ĠSS Ġwe 've Ġseen . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpacket Spatial Layers Ġ= Ġvp 9 Packet . scal ability Structure Num Spatial ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( packet Spatial Layers Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( num Spatial Layers Ġ!= Ġ- 1 Ġ&& Ġnum Spatial Layers Ġ!= Ġpacket Spatial Layers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpacket Info . layer ing Changed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum Spatial Layers Ġ= Ġpacket Spatial Layers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Source Desc And R tp Encoding Desc ( vp 9 Packet )?. let Ġ{ Ġ( src , Ġenc ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvp 9 Packet . get Scal ability Structure ( eid Ġ= Ġenc . layers [ 0 ]. eid )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc . set Encoding Layers ( it . layers , Ġvp 9 Packet . ss rc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( other Enc Ġin Ġsrc . rtp En codings ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! ss rc s Seen . contains ( other Enc . primary SS RC )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc . set Encoding Layers ( empty Array (), Ġother Enc . primary SS RC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠTODO : Ġwe Ġneed Ġa Ġway Ġto Ġrestore Ġthe Ġencoding Ġdesc 's Ġold Ġlayer Ġset Ġif Ġit Ġswitches Ġback Ġto Ġsome Ġother Ġcodec ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ Ġ( i . e . ĠV P 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( vp 9 Packet . spatial Layer Index Ġ> Ġ 0 Ġ&& Ġvp 9 Packet . is Inter Picture Predict ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCheck Ġif Ġthis Ġlayer Ġis Ġusing ĠK - SVC . Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠNote : ĠIn ĠK - SVC Ġmode , Ġthis Ġentirely Ġignores Ġthe Ġbit rate Ġof Ġlower - layer Ġkey frames ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġwhen Ġcalculating Ġlayers ' Ġbit rates . Ġ ĠThese Ġvalues Ġare Ġsmall Ġenough Ġthis Ġis Ġprobably ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġfine , Ġbut Ġre visit Ġthis Ġif Ġit Ġturns Ġout Ġto Ġbe Ġa Ġproblem . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind R tp Layer Desc ( vp 9 Packet )?. use Soft Dependencies Ġ= Ġvp 9 Packet . uses Inter Layer Dependency ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpicture Id State . setState ( vp 9 Packet . has Picture Id , Ġvp 9 Packet ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Packet ĠData : Ġ${ vp 9 Packet . to Hex ( 8 0 )}" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġextended Picture Id State . setState ( vp 9 Packet . has Extended Picture Id , Ġvp 9 Packet ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Packet ĠData : Ġ${ vp 9 Packet . to Hex ( 8 0 )}" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ