public static void jpegDebugSegments()

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();
        }
    }