/* Ċ Ġ* Ġ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 . metadata . mov Ċ Ċ import Ġcom . d rew . im aging . quick time . Quick Time Handler Ċ import Ġcom . d rew . lang . Sequential ByteArray Reader Ċ import Ġcom . d rew . lang . Sequential Reader Ċ import Ġcom . d rew . lang . get 1 Jan 1 9 0 4 Epoch Date Ċ import Ġcom . d rew . metadata . Metadata Ċ import Ġcom . d rew . metadata . mov . atoms . Atom Ċ import Ġcom . d rew . metadata . mov . media . Quick Time Media Directory Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* ĠClasses Ġthat Ġextend Ġthis Ġclass Ġshould Ġbe Ġfrom Ġthe Ġmedia Ġdat Ġatom Ġtypes : Ċ Ġ* Ġhttps :// developer . apple . com / library / content / documentation / Quick Time / QT FF / QT FF Ch ap 3 / qt ff 3 . html # // apple _ ref / doc / uid / TP 4 0 0 0 0 9 3 9 - CH 2 0 5 - SW 1 Ċ Ġ* Ċ Ġ* Ġ@ author ĠPay ton ĠGar land Ċ Ġ*/ Ċ abstract Ġclass ĠQuick Time Media Handler < T Ġ: ĠQuick Time Directory >( metadata : ĠMetadata , Ġcontext : ĠQuick Time Context , Ġdirectory : ĠT ) Ġ: ĠQuick Time Handler < T >( metadata , Ġdirectory ) Ġ{ ĊĠ Ġoverride Ġfun Ġshould Accept Atom ( atom : ĠAtom ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġatom . type Ġ== Ġmedia Information Ġ|| Ġatom . type Ġ== ĠQuick Time Atom Types . ATOM _ SAMPLE _ DESCRIPTION Ġ|| Ġatom . type Ġ== ĠQuick Time Atom Types . ATOM _ TIME _ TO _ SAMPLE ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġshould Accept Container ( atom : ĠAtom ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġatom . type Ġ== ĠQuick Time Container Types . ATOM _ SAMPLE _ TABLE Ġ|| Ġatom . type Ġ== ĠQuick Time Container Types . ATOM _ MEDIA _ INFORMATION Ġ|| Ġatom . type Ġ== ĠQuick Time Container Types . ATOM _ MEDIA _ BASE Ġ|| Ġatom . type Ġ== Ġ" tm cd " ĊĠ Ġ} ĊĊĠ Ġ@ Throws ( IOException :: class ) ĊĠ Ġoverride Ġfun Ġprocess Atom ( atom : ĠAtom , Ġpayload : ĠByteArray ?, Ġcontext : ĠQuick Time Context ): ĠQuick Time Media Handler < *> Ġ{ ĊĠĠĠ Ġif Ġ( payload Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġval Ġreader : ĠSequential Reader Ġ= ĠSequential ByteArray Reader ( payload ) ĊĠĠĠĠĠ Ġwhen Ġ( atom . type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmedia Information Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġprocess Media Information ( reader , Ġatom ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠQuick Time Atom Types . ATOM _ SAMPLE _ DESCRIPTION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġprocess Sample Description ( reader , Ġatom ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠQuick Time Atom Types . ATOM _ TIME _ TO _ SAMPLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġprocess TimeTo Sample ( reader , Ġatom , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġprotected Ġabstract Ġval Ġmedia Information : ĠString ? ĊĠ Ġ@ Throws ( IOException :: class ) ĊĠ Ġprotected Ġabstract Ġfun Ġprocess Sample Description ( reader : ĠSequential Reader , Ġatom : ĠAtom ) ĊĊĠ Ġ@ Throws ( IOException :: class ) ĊĠ Ġprotected Ġabstract Ġfun Ġprocess Media Information ( reader : ĠSequential Reader , Ġatom : ĠAtom ) ĊĊĠ Ġ@ Throws ( IOException :: class ) ĊĠ Ġprotected Ġabstract Ġfun Ġprocess TimeTo Sample ( reader : ĠSequential Reader , Ġatom : ĠAtom , Ġcontext : ĠQuick Time Context ) ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġcontext . creation Time ?. let Ġ{ ĊĠĠĠĠĠ Ġdirectory . setDate ( ĊĠĠĠĠĠĠĠ ĠQuick Time Media Directory . TAG _ CRE ATION _ TIME , ĊĠĠĠĠĠĠĠ Ġget 1 Jan 1 9 0 4 Epoch Date ( it ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext . modification Time ?. let Ġ{ ĊĠĠĠĠĠ Ġdirectory . setDate ( ĊĠĠĠĠĠĠĠ ĠQuick Time Media Directory . TAG _ MO DIF ICATION _ TIME , ĊĠĠĠĠĠĠĠ Ġget 1 Jan 1 9 0 4 Epoch Date ( it ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ