# README
Overview
This project parses a ISO 14496-12 Base Media Format stream. MP4, HEIF/HEIC, and many other media formats extend the BMF format. However, the standard is difficult to read and the format difficult to parse. This project allows you to abstract all of that away as well as to provide a roadmap for interested parties to understand the BMF. There is very complete unit-test coverage and the implementation takes advantage of the recursive nature of the format, thus making it simpler than all other implementations existing at the time that this project was delivered.
This project primarily hosts only the box-types defined in the BMF specification, which are, in general, applicable to allow formats. To extend this project for additional boxes defined in specific formats, simply import this project and register factories for those box-types.
Commands
Some programs are provided to help investigate/debug BMF streams.
bmf_info
Dump the box hierarchy from the stream. Unrecognized box-types will be noted and skipped. Several representations of the boxes will be printed along with extent information.
$ go run command/bmf_info/main.go -f assets/image.heic
Tree:
> [ROOT]
> ftyp NAME=[ftyp] PARENT=[ROOT] START=(0x0000000000000000) SIZE=(24) MAJOR-BRAND=[heic] MINOR-VER=(0x00000000) COMPAT-BRANDS=[mif1,heic]
> mdat NAME=[mdat] PARENT=[ROOT] START=(0x00000000000016a5) SIZE=(2988597)
> meta NAME=[meta] PARENT=[ROOT] START=(0x0000000000000018) SIZE=(5773)
> hdlr NAME=[hdlr] PARENT=[meta] START=(0x0000000000000024) SIZE=(34) VER=(0x00) FLAGS=(0x00000000) HANDLER=[pict] HDLR-NAME=(0)[]
> idat NAME=[idat] PARENT=[meta] START=(0x0000000000001365) SIZE=(16) DATA-SIZE=(8)
> iinf NAME=[iinf] PARENT=[meta] START=(0x0000000000000078) SIZE=(1064) ENTRY-COUNT=(50) LOADED-ITEMS=(50)
> infe NAME=[infe] PARENT=[iinf] START=(0x0000000000000086) SIZE=(21) VER=(2) ITEM-ID=(1) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x000000000000009b) SIZE=(21) VER=(2) ITEM-ID=(2) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x00000000000000b0) SIZE=(21) VER=(2) ITEM-ID=(3) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x00000000000000c5) SIZE=(21) VER=(2) ITEM-ID=(4) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x00000000000000da) SIZE=(21) VER=(2) ITEM-ID=(5) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x00000000000000ef) SIZE=(21) VER=(2) ITEM-ID=(6) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x0000000000000104) SIZE=(21) VER=(2) ITEM-ID=(7) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x0000000000000119) SIZE=(21) VER=(2) ITEM-ID=(8) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x000000000000012e) SIZE=(21) VER=(2) ITEM-ID=(9) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x0000000000000143) SIZE=(21) VER=(2) ITEM-ID=(10) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x0000000000000158) SIZE=(21) VER=(2) ITEM-ID=(11) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x000000000000016d) SIZE=(21) VER=(2) ITEM-ID=(12) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x0000000000000182) SIZE=(21) VER=(2) ITEM-ID=(13) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x0000000000000197) SIZE=(21) VER=(2) ITEM-ID=(14) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x00000000000001ac) SIZE=(21) VER=(2) ITEM-ID=(15) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x00000000000001c1) SIZE=(21) VER=(2) ITEM-ID=(16) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x00000000000001d6) SIZE=(21) VER=(2) ITEM-ID=(17) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x00000000000001eb) SIZE=(21) VER=(2) ITEM-ID=(18) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x0000000000000200) SIZE=(21) VER=(2) ITEM-ID=(19) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x0000000000000215) SIZE=(21) VER=(2) ITEM-ID=(20) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x000000000000022a) SIZE=(21) VER=(2) ITEM-ID=(21) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x000000000000023f) SIZE=(21) VER=(2) ITEM-ID=(22) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x0000000000000254) SIZE=(21) VER=(2) ITEM-ID=(23) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x0000000000000269) SIZE=(21) VER=(2) ITEM-ID=(24) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x000000000000027e) SIZE=(21) VER=(2) ITEM-ID=(25) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x0000000000000293) SIZE=(21) VER=(2) ITEM-ID=(26) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x00000000000002a8) SIZE=(21) VER=(2) ITEM-ID=(27) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x00000000000002bd) SIZE=(21) VER=(2) ITEM-ID=(28) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x00000000000002d2) SIZE=(21) VER=(2) ITEM-ID=(29) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x00000000000002e7) SIZE=(21) VER=(2) ITEM-ID=(30) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x00000000000002fc) SIZE=(21) VER=(2) ITEM-ID=(31) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x0000000000000311) SIZE=(21) VER=(2) ITEM-ID=(32) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x0000000000000326) SIZE=(21) VER=(2) ITEM-ID=(33) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x000000000000033b) SIZE=(21) VER=(2) ITEM-ID=(34) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x0000000000000350) SIZE=(21) VER=(2) ITEM-ID=(35) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x0000000000000365) SIZE=(21) VER=(2) ITEM-ID=(36) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x000000000000037a) SIZE=(21) VER=(2) ITEM-ID=(37) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x000000000000038f) SIZE=(21) VER=(2) ITEM-ID=(38) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x00000000000003a4) SIZE=(21) VER=(2) ITEM-ID=(39) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x00000000000003b9) SIZE=(21) VER=(2) ITEM-ID=(40) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x00000000000003ce) SIZE=(21) VER=(2) ITEM-ID=(41) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x00000000000003e3) SIZE=(21) VER=(2) ITEM-ID=(42) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x00000000000003f8) SIZE=(21) VER=(2) ITEM-ID=(43) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x000000000000040d) SIZE=(21) VER=(2) ITEM-ID=(44) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x0000000000000422) SIZE=(21) VER=(2) ITEM-ID=(45) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x0000000000000437) SIZE=(21) VER=(2) ITEM-ID=(46) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x000000000000044c) SIZE=(21) VER=(2) ITEM-ID=(47) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x0000000000000461) SIZE=(21) VER=(2) ITEM-ID=(48) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
> infe NAME=[infe] PARENT=[iinf] START=(0x0000000000000476) SIZE=(21) VER=(2) ITEM-ID=(49) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[grid]
> infe NAME=[infe] PARENT=[iinf] START=(0x000000000000048b) SIZE=(21) VER=(2) ITEM-ID=(50) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[Exif]
> iloc NAME=[iloc] PARENT=[meta] START=(0x0000000000001375) SIZE=(816) OFFSET-SIZE=(4) LENGTH-SIZE=(4) BASE-OFFSET-SIZE=(0) INDEX-SIZE=(0) ITEMS=(50)
> iref NAME=[iref] PARENT=[meta] START=(0x00000000000004a0) SIZE=(134)
> cdsc NAME=[cdsc] PARENT=[iref] START=(0x0000000000000518) SIZE=(14) VER=(0) FROM-ITEM-ID=(50) TO-ITEM-IDS=(1)[49]
> pitm NAME=[pitm] PARENT=[meta] START=(0x000000000000006a) SIZE=(14) ID=(49)
Item extents:
ID=(1) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x000000000000170d) LENGTH=(106458) INDEX=(0x0000000000000000)
ID=(2) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x000000000001b6e7) LENGTH=(105758) INDEX=(0x0000000000000000)
ID=(3) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x0000000000035405) LENGTH=(87314) INDEX=(0x0000000000000000)
ID=(4) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x000000000004a917) LENGTH=(82208) INDEX=(0x0000000000000000)
ID=(5) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x000000000005ea37) LENGTH=(77772) INDEX=(0x0000000000000000)
ID=(6) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x0000000000071a03) LENGTH=(68112) INDEX=(0x0000000000000000)
ID=(7) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x0000000000082413) LENGTH=(61441) INDEX=(0x0000000000000000)
ID=(8) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x0000000000091414) LENGTH=(46713) INDEX=(0x0000000000000000)
ID=(9) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x000000000009ca8d) LENGTH=(97790) INDEX=(0x0000000000000000)
ID=(10) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x00000000000b488b) LENGTH=(79233) INDEX=(0x0000000000000000)
ID=(11) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x00000000000c7e0c) LENGTH=(65941) INDEX=(0x0000000000000000)
ID=(12) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x00000000000d7fa1) LENGTH=(77606) INDEX=(0x0000000000000000)
ID=(13) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x00000000000eaec7) LENGTH=(75869) INDEX=(0x0000000000000000)
ID=(14) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x00000000000fd724) LENGTH=(70969) INDEX=(0x0000000000000000)
ID=(15) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x000000000010ec5d) LENGTH=(62687) INDEX=(0x0000000000000000)
ID=(16) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x000000000011e13c) LENGTH=(43779) INDEX=(0x0000000000000000)
ID=(17) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x0000000000128c3f) LENGTH=(79400) INDEX=(0x0000000000000000)
ID=(18) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x000000000013c267) LENGTH=(41237) INDEX=(0x0000000000000000)
ID=(19) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x000000000014637c) LENGTH=(85224) INDEX=(0x0000000000000000)
ID=(20) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x000000000015b064) LENGTH=(68337) INDEX=(0x0000000000000000)
ID=(21) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x000000000016bb55) LENGTH=(69720) INDEX=(0x0000000000000000)
ID=(22) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x000000000017cbad) LENGTH=(74768) INDEX=(0x0000000000000000)
ID=(23) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x000000000018efbd) LENGTH=(62391) INDEX=(0x0000000000000000)
ID=(24) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x000000000019e374) LENGTH=(44776) INDEX=(0x0000000000000000)
ID=(25) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x00000000001a925c) LENGTH=(68771) INDEX=(0x0000000000000000)
ID=(26) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x00000000001b9eff) LENGTH=(47892) INDEX=(0x0000000000000000)
ID=(27) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x00000000001c5a13) LENGTH=(78849) INDEX=(0x0000000000000000)
ID=(28) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x00000000001d8e14) LENGTH=(102067) INDEX=(0x0000000000000000)
ID=(29) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x00000000001f1cc7) LENGTH=(62580) INDEX=(0x0000000000000000)
ID=(30) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x000000000020113b) LENGTH=(66594) INDEX=(0x0000000000000000)
ID=(31) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x000000000021155d) LENGTH=(58191) INDEX=(0x0000000000000000)
ID=(32) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x000000000021f8ac) LENGTH=(40817) INDEX=(0x0000000000000000)
ID=(33) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x000000000022981d) LENGTH=(45664) INDEX=(0x0000000000000000)
ID=(34) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x0000000000234a7d) LENGTH=(51571) INDEX=(0x0000000000000000)
ID=(35) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x00000000002413f0) LENGTH=(71166) INDEX=(0x0000000000000000)
ID=(36) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x00000000002529ee) LENGTH=(99140) INDEX=(0x0000000000000000)
ID=(37) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x000000000026ad32) LENGTH=(64330) INDEX=(0x0000000000000000)
ID=(38) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x000000000027a87c) LENGTH=(54317) INDEX=(0x0000000000000000)
ID=(39) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x0000000000287ca9) LENGTH=(37963) INDEX=(0x0000000000000000)
ID=(40) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x00000000002910f4) LENGTH=(15584) INDEX=(0x0000000000000000)
ID=(41) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x0000000000294dd4) LENGTH=(40280) INDEX=(0x0000000000000000)
ID=(42) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x000000000029eb2c) LENGTH=(39766) INDEX=(0x0000000000000000)
ID=(43) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x00000000002a8682) LENGTH=(55853) INDEX=(0x0000000000000000)
ID=(44) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x00000000002b60af) LENGTH=(64668) INDEX=(0x0000000000000000)
ID=(45) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x00000000002c5d4b) LENGTH=(44827) INDEX=(0x0000000000000000)
ID=(46) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x00000000002d0c66) LENGTH=(17766) INDEX=(0x0000000000000000)
ID=(47) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x00000000002d51cc) LENGTH=(14400) INDEX=(0x0000000000000000)
ID=(48) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[hvc1]
- OFFSET=(0x00000000002d8a0c) LENGTH=(9934) INDEX=(0x0000000000000000)
ID=(49) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[grid]
- OFFSET=(0x0000000000000000) LENGTH=(8) INDEX=(0x0000000000000000)
ID=(50) DATA-REF-INDEX=(0) BASE-OFFSET=(0x0000) EXTENT-COUNT=(1) TYPE=[Exif]
- OFFSET=(0x00000000000016b5) LENGTH=(88) INDEX=(0x0000000000000000)
Index:
ftyp(0): [ftyp] NAME=[ftyp] PARENT=[ROOT] START=(0x0000000000000000) SIZE=(24) MAJOR-BRAND=[heic] MINOR-VER=(0x00000000) COMPAT-BRANDS=[mif1,heic]
mdat(0): [mdat] NAME=[mdat] PARENT=[ROOT] START=(0x00000000000016a5) SIZE=(2988597)
meta(0): [meta] NAME=[meta] PARENT=[ROOT] START=(0x0000000000000018) SIZE=(5773)
meta.hdlr(0): [hdlr] NAME=[hdlr] PARENT=[meta] START=(0x0000000000000024) SIZE=(34) VER=(0x00) FLAGS=(0x00000000) HANDLER=[pict] HDLR-NAME=(0)[]
meta.idat(0): [idat] NAME=[idat] PARENT=[meta] START=(0x0000000000001365) SIZE=(16) DATA-SIZE=(8)
meta.iinf(0): [iinf] NAME=[iinf] PARENT=[meta] START=(0x0000000000000078) SIZE=(1064) ENTRY-COUNT=(50) LOADED-ITEMS=(50)
meta.iinf.infe(0): [infe] NAME=[infe] PARENT=[iinf] START=(0x0000000000000086) SIZE=(21) VER=(2) ITEM-ID=(1) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(1): [infe] NAME=[infe] PARENT=[iinf] START=(0x000000000000009b) SIZE=(21) VER=(2) ITEM-ID=(2) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(10): [infe] NAME=[infe] PARENT=[iinf] START=(0x0000000000000158) SIZE=(21) VER=(2) ITEM-ID=(11) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(11): [infe] NAME=[infe] PARENT=[iinf] START=(0x000000000000016d) SIZE=(21) VER=(2) ITEM-ID=(12) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(12): [infe] NAME=[infe] PARENT=[iinf] START=(0x0000000000000182) SIZE=(21) VER=(2) ITEM-ID=(13) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(13): [infe] NAME=[infe] PARENT=[iinf] START=(0x0000000000000197) SIZE=(21) VER=(2) ITEM-ID=(14) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(14): [infe] NAME=[infe] PARENT=[iinf] START=(0x00000000000001ac) SIZE=(21) VER=(2) ITEM-ID=(15) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(15): [infe] NAME=[infe] PARENT=[iinf] START=(0x00000000000001c1) SIZE=(21) VER=(2) ITEM-ID=(16) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(16): [infe] NAME=[infe] PARENT=[iinf] START=(0x00000000000001d6) SIZE=(21) VER=(2) ITEM-ID=(17) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(17): [infe] NAME=[infe] PARENT=[iinf] START=(0x00000000000001eb) SIZE=(21) VER=(2) ITEM-ID=(18) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(18): [infe] NAME=[infe] PARENT=[iinf] START=(0x0000000000000200) SIZE=(21) VER=(2) ITEM-ID=(19) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(19): [infe] NAME=[infe] PARENT=[iinf] START=(0x0000000000000215) SIZE=(21) VER=(2) ITEM-ID=(20) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(2): [infe] NAME=[infe] PARENT=[iinf] START=(0x00000000000000b0) SIZE=(21) VER=(2) ITEM-ID=(3) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(20): [infe] NAME=[infe] PARENT=[iinf] START=(0x000000000000022a) SIZE=(21) VER=(2) ITEM-ID=(21) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(21): [infe] NAME=[infe] PARENT=[iinf] START=(0x000000000000023f) SIZE=(21) VER=(2) ITEM-ID=(22) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(22): [infe] NAME=[infe] PARENT=[iinf] START=(0x0000000000000254) SIZE=(21) VER=(2) ITEM-ID=(23) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(23): [infe] NAME=[infe] PARENT=[iinf] START=(0x0000000000000269) SIZE=(21) VER=(2) ITEM-ID=(24) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(24): [infe] NAME=[infe] PARENT=[iinf] START=(0x000000000000027e) SIZE=(21) VER=(2) ITEM-ID=(25) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(25): [infe] NAME=[infe] PARENT=[iinf] START=(0x0000000000000293) SIZE=(21) VER=(2) ITEM-ID=(26) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(26): [infe] NAME=[infe] PARENT=[iinf] START=(0x00000000000002a8) SIZE=(21) VER=(2) ITEM-ID=(27) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(27): [infe] NAME=[infe] PARENT=[iinf] START=(0x00000000000002bd) SIZE=(21) VER=(2) ITEM-ID=(28) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(28): [infe] NAME=[infe] PARENT=[iinf] START=(0x00000000000002d2) SIZE=(21) VER=(2) ITEM-ID=(29) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(29): [infe] NAME=[infe] PARENT=[iinf] START=(0x00000000000002e7) SIZE=(21) VER=(2) ITEM-ID=(30) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(3): [infe] NAME=[infe] PARENT=[iinf] START=(0x00000000000000c5) SIZE=(21) VER=(2) ITEM-ID=(4) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(30): [infe] NAME=[infe] PARENT=[iinf] START=(0x00000000000002fc) SIZE=(21) VER=(2) ITEM-ID=(31) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(31): [infe] NAME=[infe] PARENT=[iinf] START=(0x0000000000000311) SIZE=(21) VER=(2) ITEM-ID=(32) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(32): [infe] NAME=[infe] PARENT=[iinf] START=(0x0000000000000326) SIZE=(21) VER=(2) ITEM-ID=(33) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(33): [infe] NAME=[infe] PARENT=[iinf] START=(0x000000000000033b) SIZE=(21) VER=(2) ITEM-ID=(34) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(34): [infe] NAME=[infe] PARENT=[iinf] START=(0x0000000000000350) SIZE=(21) VER=(2) ITEM-ID=(35) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(35): [infe] NAME=[infe] PARENT=[iinf] START=(0x0000000000000365) SIZE=(21) VER=(2) ITEM-ID=(36) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(36): [infe] NAME=[infe] PARENT=[iinf] START=(0x000000000000037a) SIZE=(21) VER=(2) ITEM-ID=(37) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(37): [infe] NAME=[infe] PARENT=[iinf] START=(0x000000000000038f) SIZE=(21) VER=(2) ITEM-ID=(38) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(38): [infe] NAME=[infe] PARENT=[iinf] START=(0x00000000000003a4) SIZE=(21) VER=(2) ITEM-ID=(39) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(39): [infe] NAME=[infe] PARENT=[iinf] START=(0x00000000000003b9) SIZE=(21) VER=(2) ITEM-ID=(40) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(4): [infe] NAME=[infe] PARENT=[iinf] START=(0x00000000000000da) SIZE=(21) VER=(2) ITEM-ID=(5) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(40): [infe] NAME=[infe] PARENT=[iinf] START=(0x00000000000003ce) SIZE=(21) VER=(2) ITEM-ID=(41) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(41): [infe] NAME=[infe] PARENT=[iinf] START=(0x00000000000003e3) SIZE=(21) VER=(2) ITEM-ID=(42) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(42): [infe] NAME=[infe] PARENT=[iinf] START=(0x00000000000003f8) SIZE=(21) VER=(2) ITEM-ID=(43) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(43): [infe] NAME=[infe] PARENT=[iinf] START=(0x000000000000040d) SIZE=(21) VER=(2) ITEM-ID=(44) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(44): [infe] NAME=[infe] PARENT=[iinf] START=(0x0000000000000422) SIZE=(21) VER=(2) ITEM-ID=(45) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(45): [infe] NAME=[infe] PARENT=[iinf] START=(0x0000000000000437) SIZE=(21) VER=(2) ITEM-ID=(46) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(46): [infe] NAME=[infe] PARENT=[iinf] START=(0x000000000000044c) SIZE=(21) VER=(2) ITEM-ID=(47) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(47): [infe] NAME=[infe] PARENT=[iinf] START=(0x0000000000000461) SIZE=(21) VER=(2) ITEM-ID=(48) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(48): [infe] NAME=[infe] PARENT=[iinf] START=(0x0000000000000476) SIZE=(21) VER=(2) ITEM-ID=(49) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[grid]
meta.iinf.infe(49): [infe] NAME=[infe] PARENT=[iinf] START=(0x000000000000048b) SIZE=(21) VER=(2) ITEM-ID=(50) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[Exif]
meta.iinf.infe(5): [infe] NAME=[infe] PARENT=[iinf] START=(0x00000000000000ef) SIZE=(21) VER=(2) ITEM-ID=(6) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(6): [infe] NAME=[infe] PARENT=[iinf] START=(0x0000000000000104) SIZE=(21) VER=(2) ITEM-ID=(7) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(7): [infe] NAME=[infe] PARENT=[iinf] START=(0x0000000000000119) SIZE=(21) VER=(2) ITEM-ID=(8) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(8): [infe] NAME=[infe] PARENT=[iinf] START=(0x000000000000012e) SIZE=(21) VER=(2) ITEM-ID=(9) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iinf.infe(9): [infe] NAME=[infe] PARENT=[iinf] START=(0x0000000000000143) SIZE=(21) VER=(2) ITEM-ID=(10) PROTECTION-INDEX=(0) NAME=[] ITEM-TYPE=[hvc1]
meta.iloc(0): [iloc] NAME=[iloc] PARENT=[meta] START=(0x0000000000001375) SIZE=(816) OFFSET-SIZE=(4) LENGTH-SIZE=(4) BASE-OFFSET-SIZE=(0) INDEX-SIZE=(0) ITEMS=(50)
meta.iref(0): [iref] NAME=[iref] PARENT=[meta] START=(0x00000000000004a0) SIZE=(134)
meta.iref.cdsc(0): [cdsc] NAME=[cdsc] PARENT=[iref] START=(0x0000000000000518) SIZE=(14) VER=(0) FROM-ITEM-ID=(50) TO-ITEM-IDS=(1)[49]
meta.pitm(0): [pitm] NAME=[pitm] PARENT=[meta] START=(0x000000000000006a) SIZE=(14) ID=(49)
bmf_write_extents
This dumps stored extent data to a temporary directory.
$ go run command/bmf_write_extents/main.go -f assets/image.heic
Writing extents to [/tmp/529819719].
Writing [/tmp/529819719/extent.1.0.hvc1] (106458 bytes).
Writing [/tmp/529819719/extent.2.0.hvc1] (105758 bytes).
Writing [/tmp/529819719/extent.3.0.hvc1] (87314 bytes).
Writing [/tmp/529819719/extent.4.0.hvc1] (82208 bytes).
Writing [/tmp/529819719/extent.5.0.hvc1] (77772 bytes).
Writing [/tmp/529819719/extent.6.0.hvc1] (68112 bytes).
Writing [/tmp/529819719/extent.7.0.hvc1] (61441 bytes).
Writing [/tmp/529819719/extent.8.0.hvc1] (46713 bytes).
Writing [/tmp/529819719/extent.9.0.hvc1] (97790 bytes).
Writing [/tmp/529819719/extent.10.0.hvc1] (79233 bytes).
...