[ID3 Dev] Why is footer not included in total size?

Ray Manning ray at homeautomationdev.com
Tue Nov 14 02:56:17 PST 2006

Good point. I was recently wondering the same thing (as well as why someone
would want to start a tag search from the end of a file in the first
place!). The footer does seem like it may, in some situation, for someone,
solve a problem but IMO, it shouldn't foist knowledge of itself into the
interpretation of the size field. To interpret the size field, you now have
to understand the flags as well as choose the proper calculation in order to
determine how many bytes are included in the tag. Overly complex, and as you
mention a breaking change. I see no reason why it couldn't have been made
part of the size field and have a fixed position at the last 10 bytes of the

I actually contemplated always outputing a footer in the tags I write since
it's simple to do and it removes the potential for a false sync signal
should the last byte of the tag be 0xFF. I decided against it due to the
potential incompatibility problems.

I tried to imagine why you might want to exclude the footer from the size
but I've come up blank. The closest I've come is that making a copy of the
tag at the end of the file can be as simple as a literal copy of the tag and
append the 10 byte footer. That should be sufficient for a tag search
starting from the end of the file but it wouldn't be complete since, you'd
have to whack the header flags to indicate the presence of the footer (I
smell the potential for an inconsistency between the header and footer
here -- what would it mean to read a footer that doesn't have the footer bit

Assuming one buys into the idea that the header size should include the
footer, is there any real reason to keep the footer flag? As far as I can
tell, that flag is only present to allow you to "fix" the size calculation
when skipping the tag. No one is going to be checking that flag in order to
verify the 10 bytes following the tag are actually a footer. The flag does
give you one more significant bit for verification when searching for a
footer, but skipping to the header from the footer and verifying the header
should be more than sufficient.

- Ray
  -----Original Message-----
  From: Jim [mailto:jmartin92 at comcast.net]
  Sent: Monday, November 13, 2006 11:22 PM
  To: id3v2 at id3.org
  Subject: [ID3 Dev] Why is footer not included in total size?


  I am wondering what the reasoning was behind the size stored in ID3v2.4
tags not including the size of the footer (if present).

  I've been looking through the source code for some utilities for MP3 files
and some other audio file types.  Many of these utilities use a simple
method for skipping over the ID3v2 tag if it is there.  They read the first
10 bytes of the file, do some simple checking (look for 'ID3', check that
version bytes are less than $FF and in some cases check that size bytes are
syncsafe, i.e. < $80) and if it looks like a tag, convert the size and skip
that many bytes ahead (+ 10 bytes for header).  Most of these utilities
would be broken if the tag has a footer.  They don't do any specific version
checking or checking of the flags byte.

  If the size stored in ID3v2.4 tags included the footer size (if it is
present), it would make these tags much more backwards compatible.  (I know
it is a pretty easy change to add checking for the footer flag but wouldn't
it have been better to make it compatible with older apps that don't really
need to read the tag, just skip it?)   Were there reasons that came up
during development why it was done the way it is?  If so, I'd appreciate if
someone could share them with me.  Or if there is somewhere I can read about
this (like some archive of the mailing list) I would appreciate someone
pointing me in the right direction.


  Jim Martin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.id3.org/pipermail/id3v2/attachments/20061114/0c6f8982/attachment.html>

More information about the ID3v2 mailing list