in modules/swfutils/src/java/flash/util/SwfImageUtils.java [360:502]
public static void jpegDebugSegments( byte[] data )
{
JPEGIterator it = new JPEGIterator( data );
while (it.valid())
{
System.out.print( "offset " + it.offset() + ": " );
System.out.print( Integer.toHexString(it.code() & 0xff) + " (");
switch( it.code() )
{
case (byte)0xc0: System.out.print( "SOF0"); break;
case (byte)0xc1: System.out.print( "SOF1"); break;
case (byte)0xc2: System.out.print( "SOF2"); break;
case (byte)0xc3: System.out.print( "SOF3"); break;
case (byte)0xc4: System.out.print( "DHT"); break;
case (byte)0xc5: System.out.print( "SOF5"); break;
case (byte)0xc6: System.out.print( "SOF6"); break;
case (byte)0xc7: System.out.print( "SOF7"); break;
case (byte)0xc8: System.out.print( "JPGext"); break;
case (byte)0xc9: System.out.print( "SOF9"); break;
case (byte)0xca: System.out.print( "SOF10"); break;
case (byte)0xcb: System.out.print( "SOF11"); break;
case (byte)0xcc: System.out.print( "DAC"); break;
case (byte)0xcd: System.out.print( "SOF13"); break;
case (byte)0xce: System.out.print( "SOF14"); break;
case (byte)0xcf: System.out.print( "SOF15"); break;
case (byte)0xd0: System.out.print( "RST0"); break;
case (byte)0xd1: System.out.print( "RST1"); break;
case (byte)0xd2: System.out.print( "RST2"); break;
case (byte)0xd3: System.out.print( "RST3"); break;
case (byte)0xd4: System.out.print( "RST4"); break;
case (byte)0xd5: System.out.print( "RST5"); break;
case (byte)0xd6: System.out.print( "RST6"); break;
case (byte)0xd7: System.out.print( "RST7"); break;
case (byte)0xd8: System.out.print( "SOI"); break;
case (byte)0xd9: System.out.print( "EOI"); break;
case (byte)0xda: System.out.print( "SOS"); break;
case (byte)0xdb: System.out.print( "DQT"); break;
case (byte)0xdc: System.out.print( "DNL"); break;
case (byte)0xdd: System.out.print( "DRI"); break;
case (byte)0xde: System.out.print( "DHP"); break;
case (byte)0xdf: System.out.print( "EXP"); break;
case (byte)0xe0: System.out.print( "APP0"); break;
case (byte)0xe1: System.out.print( "APP1"); break;
case (byte)0xe2: System.out.print( "APP2"); break;
case (byte)0xe3: System.out.print( "APP3"); break;
case (byte)0xe4: System.out.print( "APP4"); break;
case (byte)0xe5: System.out.print( "APP5"); break;
case (byte)0xe6: System.out.print( "APP6"); break;
case (byte)0xe7: System.out.print( "APP7"); break;
case (byte)0xe8: System.out.print( "APP8"); break;
case (byte)0xe9: System.out.print( "APP9"); break;
case (byte)0xea: System.out.print( "APP10"); break;
case (byte)0xeb: System.out.print( "APP11"); break;
case (byte)0xec: System.out.print( "APP12"); break;
case (byte)0xed: System.out.print( "APP13"); break;
case (byte)0xee: System.out.print( "APP14"); break;
case (byte)0xef: System.out.print( "APP15"); break;
case (byte)0xf0: System.out.print( "JPG0"); break;
case (byte)0xf1: System.out.print( "JPG1"); break;
case (byte)0xf2: System.out.print( "JPG2"); break;
case (byte)0xf3: System.out.print( "JPG3"); break;
case (byte)0xf4: System.out.print( "JPG4"); break;
case (byte)0xf5: System.out.print( "JPG5"); break;
case (byte)0xf6: System.out.print( "JPG6"); break;
case (byte)0xf7: System.out.print( "JPG7"); break;
case (byte)0xf8: System.out.print( "JPG8"); break;
case (byte)0xf9: System.out.print( "JPG9"); break;
case (byte)0xfa: System.out.print( "JPG10"); break;
case (byte)0xfb: System.out.print( "JPG11"); break;
case (byte)0xfc: System.out.print( "JPG12"); break;
case (byte)0xfd: System.out.print( "JPG13"); break;
case (byte)0xfe: System.out.print( "COM"); break;
case (byte)0x00: System.out.print( "00?"); break;
case (byte)0x01: System.out.print( "TEM"); break;
default: System.out.print("???"); break;
}
System.out.print( ") ");
if ((it.code() == (byte) 0x00)
|| (it.code() == (byte) 0x01)
|| ((it.code() >= (byte) 0xd0) && (it.code() <= (byte) 0xd9 )))
System.out.print( "len=0");
else
System.out.print( "len=" + it.length() );
System.out.print( " size=" + it.size() );
int i = it.offset();
if ( it.code() == (byte)0xfe)
{
byte[] comment = new byte[it.length() + 1];
for ( int c = 0; c < it.length(); ++c )
comment[c] = data[i+2+c];
System.out.print( " COMMENT='" + comment + "'");
}
if ( it.code() == (byte)0xe0)
{
if (( data[i+4] == 'J')
&& (data[i+5] == 'F')
&& (data[i+6] == 'I')
&& (data[i+7] == 'F')
&& (data[i+8] == 0))
System.out.print(" JFIF");
}
if ( (it.code() == (byte)0xc0)
|| (it.code() == (byte)0xc1)
|| (it.code() == (byte)0xc2)
|| (it.code() == (byte)0xc3)
|| (it.code() == (byte)0xc5)
|| (it.code() == (byte)0xc6)
|| (it.code() == (byte)0xc7)
|| (it.code() == (byte)0xc8)
|| (it.code() == (byte)0xc9)
|| (it.code() == (byte)0xca)
|| (it.code() == (byte)0xcb)
|| (it.code() == (byte)0xcd)
|| (it.code() == (byte)0xce)
|| (it.code() == (byte)0xcf))
{
System.out.print( " precision = " + data[i+4]);
int y = ((data[i+5]&0xff)<<8) | (data[i+6]&0xff);
int x = ((data[i+7]&0xff)<<8) | (data[i+8]&0xff);
System.out.print( " dimensions = " + x + "," + y );
}
System.out.println(".");
it.next();
}
}