/* Ċ Ġ* ĠCopyright Ġ 2 0 0 2 - 2 0 1 9 ĠD rew ĠNo akes Ġand Ġcontributors Ċ Ġ* Ċ Ġ* ĠĠĠ Ġ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 . Ċ Ġ* Ċ Ġ* ĠMore Ġinformation Ġabout Ġthis Ġproject Ġis Ġavailable Ġat : Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttps :// d rew no akes . com / code / ex if / Ċ Ġ* ĠĠĠ Ġhttps :// github . com / d rew no akes / metadata - extractor Ċ Ġ*/ Ċ package Ġcom . d rew . im aging . jpeg Ċ Ċ /** Ċ Ġ* ĠAn Ġenumeration Ġof Ġthe Ġknown Ġsegment Ġtypes Ġfound Ġin ĠJPEG Ġfiles . Ċ Ġ* Ċ Ġ* Ċ Ġ* Ġ Ġ* Ġhttp :// www . o zh iker . com / electron ics / pj mt / jpeg _ info / app _ segments . html Ċ Ġ* Ġ Ġ* Ġhttp :// www . s no . phy . que ens u . ca /~ phil / ex if tool / Tag Names / JPEG . html Ċ Ġ* Ċ Ġ* Ċ Ġ* Ġ@ author ĠD rew ĠNo akes Ġhttps :// d rew no akes . com Ċ Ġ*/ Ċ enum Ġclass ĠJ peg Segment Type ( val ĠbyteValue : ĠByte , Ġval Ġcan Contain Metadata : ĠBoolean ) Ġ{ ĊĠ Ġ/** ĠAPP 0 ĠJPEG Ġsegment Ġidentifier . ĠCommon ly Ġcontains ĠJ FI F , ĠJ F XX . Ġ Ġ*/ ĊĠ ĠAPP 0 ( 0 xE 0 . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠAPP 1 ĠJPEG Ġsegment Ġidentifier . ĠCommon ly Ġcontains ĠEx if . ĠX MP Ġdata Ġis Ġalso Ġkept Ġin Ġhere , Ġthough Ġusually Ġin Ġa Ġsecond Ġinstance . Ġ Ġ*/ ĊĠ ĠAPP 1 ( 0 xE 1 . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠAPP 2 ĠJPEG Ġsegment Ġidentifier . ĠCommon ly Ġcontains ĠI CC . Ġ Ġ*/ ĊĠ ĠAPP 2 ( 0 xE 2 . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠAPP 3 ĠJPEG Ġsegment Ġidentifier . Ġ Ġ*/ ĊĠ ĠAPP 3 ( 0 xE 3 . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠAPP 4 ĠJPEG Ġsegment Ġidentifier . Ġ Ġ*/ ĊĠ ĠAPP 4 ( 0 xE 4 . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠAPP 5 ĠJPEG Ġsegment Ġidentifier . Ġ Ġ*/ ĊĠ ĠAPP 5 ( 0 xE 5 . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠAPP 6 ĠJPEG Ġsegment Ġidentifier . Ġ Ġ*/ ĊĠ ĠAPP 6 ( 0 xE 6 . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠAPP 7 ĠJPEG Ġsegment Ġidentifier . Ġ Ġ*/ ĊĠ ĠAPP 7 ( 0 xE 7 . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠAPP 8 ĠJPEG Ġsegment Ġidentifier . Ġ Ġ*/ ĊĠ ĠAPP 8 ( 0 xE 8 . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠAPP 9 ĠJPEG Ġsegment Ġidentifier . Ġ Ġ*/ ĊĠ ĠAPP 9 ( 0 xE 9 . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠAPP A Ġ( App 1 0 ) ĠJPEG Ġsegment Ġidentifier . ĠCan Ġcontain ĠUnicode Ġcomments , Ġthough Ġ[ J peg Segment Type . COM ] Ġis Ġmore Ġcommonly Ġused Ġfor Ġcomments . Ġ Ġ*/ ĊĠ ĠAPP A ( 0 xE A . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠAPP B Ġ( App 1 1 ) ĠJPEG Ġsegment Ġidentifier . Ġ Ġ*/ ĊĠ ĠAPP B ( 0 xE B . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠAP PC Ġ( App 1 2 ) ĠJPEG Ġsegment Ġidentifier . Ġ Ġ*/ ĊĠ ĠAP PC ( 0 xE C . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠAPP D Ġ( App 1 3 ) ĠJPEG Ġsegment Ġidentifier . ĠCommon ly Ġcontains ĠIPT C , ĠPh otos hop Ġdata . Ġ Ġ*/ ĊĠ ĠAPP D ( 0 xED . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠAP PE Ġ( App 1 4 ) ĠJPEG Ġsegment Ġidentifier . ĠCommon ly Ġcontains ĠAdobe Ġdata . Ġ Ġ*/ ĊĠ ĠAP PE ( 0 xEE . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠAPP F Ġ( App 1 5 ) ĠJPEG Ġsegment Ġidentifier . Ġ Ġ*/ ĊĠ ĠAPP F ( 0 xEF . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠStart ĠOf ĠImage Ġsegment Ġidentifier . Ġ Ġ*/ ĊĠ ĠSO I ( 0 xD 8 . to Byte (), Ġfalse ), ĊĠ Ġ/** ĠDefine ĠQuant ization ĠTable Ġsegment Ġidentifier . Ġ Ġ*/ ĊĠ ĠD QT ( 0 x DB . to Byte (), Ġfalse ), ĊĠ Ġ/** ĠDefine ĠNumber Ġof ĠLines Ġsegment Ġidentifier . Ġ Ġ*/ ĊĠ ĠD NL ( 0 xDC . to Byte (), Ġfalse ), ĊĠ Ġ/** ĠDefine ĠRestart ĠInterval Ġsegment Ġidentifier . Ġ Ġ*/ ĊĠ ĠDRI ( 0 x DD . to Byte (), Ġfalse ), ĊĠ Ġ/** ĠDefine ĠH ierarchical ĠPro gression Ġsegment Ġidentifier . Ġ Ġ*/ ĊĠ ĠD HP ( 0 x DE . to Byte (), Ġfalse ), ĊĠ Ġ/** ĠEXP and Ġreference Ġcomponent ( s ) Ġsegment Ġidentifier . Ġ Ġ*/ ĊĠ ĠEXP ( 0 x DF . to Byte (), Ġfalse ), ĊĠ Ġ/** ĠDefine ĠH uff man ĠTable Ġsegment Ġidentifier . Ġ Ġ*/ ĊĠ ĠD HT ( 0 xC 4 . to Byte (), Ġfalse ), ĊĠ Ġ/** ĠDefine ĠArithmetic ĠCoding Ġcondition ing Ġsegment Ġidentifier . Ġ Ġ*/ ĊĠ ĠDAC ( 0 xCC . to Byte (), Ġfalse ), ĊĠ Ġ/** ĠStart - of - Frame Ġ( 0 ) Ġsegment Ġidentifier Ġfor ĠBase line ĠD CT . Ġ Ġ*/ ĊĠ ĠS OF 0 ( 0 xC 0 . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠStart - of - Frame Ġ( 1 ) Ġsegment Ġidentifier Ġfor ĠExtended Ġsequential ĠD CT . Ġ Ġ*/ ĊĠ ĠS OF 1 ( 0 xC 1 . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠStart - of - Frame Ġ( 2 ) Ġsegment Ġidentifier Ġfor ĠProgress ive ĠD CT . Ġ Ġ*/ ĊĠ ĠS OF 2 ( 0 xC 2 . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠStart - of - Frame Ġ( 3 ) Ġsegment Ġidentifier Ġfor ĠLoss less Ġ( sequential ). Ġ Ġ*/ ĊĠ ĠS OF 3 ( 0 xC 3 . to Byte (), Ġtrue ), Ġ Ġ// ĠĠĠ Ġ/** ĠStart - of - Frame Ġ( 4 ) Ġsegment Ġidentifier . Ġ*/ Ċ // ĠĠĠ ĠS OF 4 (( byte ) 0 xC 4 , Ġtrue ), ĊĠ Ġ/** ĠStart - of - Frame Ġ( 5 ) Ġsegment Ġidentifier Ġfor ĠD iffer ential Ġsequential ĠD CT . Ġ Ġ*/ ĊĠ ĠS OF 5 ( 0 xC 5 . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠStart - of - Frame Ġ( 6 ) Ġsegment Ġidentifier Ġfor ĠD iffer ential Ġprogress ive ĠD CT . Ġ Ġ*/ ĊĠ ĠS OF 6 ( 0 xC 6 . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠStart - of - Frame Ġ( 7 ) Ġsegment Ġidentifier Ġfor ĠD iffer ential Ġloss less Ġ( sequential ). Ġ Ġ*/ ĊĠ ĠS OF 7 ( 0 xC 7 . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠReserved Ġfor ĠJPEG Ġextensions . Ġ Ġ*/ ĊĠ ĠJ PG ( 0 xC 8 . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠStart - of - Frame Ġ( 9 ) Ġsegment Ġidentifier Ġfor ĠExtended Ġsequential ĠD CT . Ġ Ġ*/ ĊĠ ĠS OF 9 ( 0 xC 9 . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠStart - of - Frame Ġ( 1 0 ) Ġsegment Ġidentifier Ġfor ĠProgress ive ĠD CT . Ġ Ġ*/ ĊĠ ĠS OF 1 0 ( 0 x CA . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠStart - of - Frame Ġ( 1 1 ) Ġsegment Ġidentifier Ġfor ĠLoss less Ġ( sequential ). Ġ Ġ*/ ĊĠ ĠS OF 1 1 ( 0 x CB . to Byte (), Ġtrue ), Ġ Ġ// ĠĠĠ Ġ/** ĠStart - of - Frame Ġ( 1 2 ) Ġsegment Ġidentifier . Ġ*/ Ċ // ĠĠĠ ĠS OF 1 2 (( byte ) 0 xCC , Ġtrue ), ĊĠ Ġ/** ĠStart - of - Frame Ġ( 1 3 ) Ġsegment Ġidentifier Ġfor ĠD iffer ential Ġsequential ĠD CT . Ġ Ġ*/ ĊĠ ĠS OF 1 3 ( 0 x CD . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠStart - of - Frame Ġ( 1 4 ) Ġsegment Ġidentifier Ġfor ĠD iffer ential Ġprogress ive ĠD CT . Ġ Ġ*/ ĊĠ ĠS OF 1 4 ( 0 x CE . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠStart - of - Frame Ġ( 1 5 ) Ġsegment Ġidentifier Ġfor ĠD iffer ential Ġloss less Ġ( sequential ). Ġ Ġ*/ ĊĠ ĠS OF 1 5 ( 0 x CF . to Byte (), Ġtrue ), ĊĠ Ġ/** ĠJPEG Ġcomment Ġsegment Ġidentifier Ġfor Ġcomments . Ġ Ġ*/ ĊĠ ĠCOM ( 0 xFE . to Byte (), Ġtrue ); ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġval Ġcan Contain Metadata Types : ĠCollection < J peg Segment Type > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠ Ġval Ġsegment Types Ġ= ĠArrayList < J peg Segment Type >() ĊĠĠĠĠĠ Ġfor Ġ( segment Type Ġin ĠJ peg Segment Type :: class . java . enum Constants ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( segment Type . can Contain Metadata ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsegment Types . add ( segment Type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġsegment Types ĊĠĠĠ Ġ} ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġfrom Byte ( segment Type Byte : ĠByte ): ĠJ peg Segment Type ? Ġ{ ĊĠĠĠĠĠ Ġfor Ġ( segment Type Ġin ĠJ peg Segment Type :: class . java . enum Constants ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( segment Type . byte Value Ġ== Ġsegment Type Byte ) Ġreturn Ġsegment Type ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ