Return to Basic Components of a SV8 stream.
Detect components:
Read two octets and then lookup in the following table:
| Range | Possible meaning | 
| 0000...1FFF | Length Label | 
| 0000...0001 | impossible | 
| 0002...1FFF | possible | 
| 2000...3FFF | Cutted SV8 Audioframe | 
| 2000...31FE | possible | 
| 31FF...3FFF | impossible | 
| 3FFF...7FFF | Tags, Sync Labels, Header | 
| 4150 | APE Tag 2.0 | 
| 4944 | ID3 Version 2.x Tag | 
| 4D50 | SV7 / SV8 Header | 
| 5441 | ID3 Version 1.x Tag | 
| 664B | Transport Streaming Synchronization Label | 
| 8000...FFDF | raw SV8 Audio frame | 
| FFE0...FFFF | MPEG Layer 1, 2 or 3 Frame | 
| FFE0...FFE7 | MPEG 2.5 | 
| FFF0...FFF7 | MPEG 2 | 
| FFF7...FFFF | MPEG 1 | 
This only showns what may be possible. There're additional restriction which can be used to check validy of the component.
Determine size of components:
Resynchronization of Interchange File Format:
    uint8_t*  p;                                        // Pointer to data stream
    uint16_t  len_pre;
    uint16_t  len_post;
repeat:
    while ( (p[0] & 0xE0)  ||  (p[2] & 0xE0) )          // search for two length labels (p=1.5%)
        p++;
    len_pre  = p[2]           * 256 + p[3];             // decode pre and post length label
    len_post = p[4 + len_pre] * 256 + p[5 + len_pre];
    if ( len_pre != len_post ) {                        // they should be the same, otherwise continue with next byte (p=2ppm)
        p++;
        goto repeat;
    }
    if ( p[6 + len_pre] & 0xE0 ) {                      // after the post length label the pre length label of the next frame (p=0.24ppm)
        p++;                                            // should be available
        goto repeat;
    }
    if ( determine_len (p+4) != len_pre ) {             // test length of stream contents against length labels (p<1ppb)
        p++;
        goto repeat;
    }
    p += 4;
    // p points to the start of a raw audio frame
![[eMail]](../img/E-Mail.gif) 
      ![[Addr]](../img/SPAM.png)