[ID3 Dev] Reading the MCDI frame

Troy Watson drtwox at gmail.com
Mon Jul 14 19:54:08 PDT 2008


On 7/14/08, Ben Bennett <fiji at ayup.limey.net> wrote:
> On Mon, Jul 14, 2008 at 06:27:04PM +1000, Troy Watson wrote:
>> typedef struct {
>>   char name[4];
>>   unsigned int size;
>>   char flags[2];
>> } ID3_FRAME;
>> ID3_FRAME id3_frame;
>
> This is the start of a problem.  The size is not a uint in 2.4, see
> http://id3.org/id3v2.4.0-structure section 4:
>
>      Frame ID      $xx xx xx xx  (four characters)
>      Size      4 * %0xxxxxxx
>      Flags         $xx xx
>
>    The frame ID is followed by a size descriptor containing the size
>    of
>    the data in the final frame, after encryption, compression and
>    unsynchronisation. The size is excluding the frame header ('total
>    frame size' - 10 bytes) and stored as a 32 bit synchsafe integer.
>
> So you need to do some bitshifting.  From your example below, the size
> is 0x00 0x00 0x01 0x38.  Ignoring the first two zero bytes you have:
>   0x01: 0000 0001
>   0x38: 0011 1000
> Dropping the first column gives:
>         *000 0001
>         *011 1000
> And re-packing into bytes:
>         1011 1000
> Which is 0xB8 (184 decmal).

Thank you very much. I knew it was a simple thing.

> BUT BEWARE.  iTunes makes the same error you made when writing 2.4
> tags.  They do not write syncsafe sizes so you have to be aware of
> that and sanity check to see if you got something that looks like a
> valid frame header and be prepared to try the un-syncsafe version to
> see if it is better.  (Some small notes are at http://id3.org/iTunes)
>
>        	  -ben
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: id3v2-unsubscribe at id3.org
> For additional commands, e-mail: id3v2-help at id3.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: id3v2-unsubscribe at id3.org
For additional commands, e-mail: id3v2-help at id3.org



More information about the ID3v2 mailing list