private Tag decodeTag()

in modules/swfutils/src/java/flash/swf/TagDecoder.java [215:414]


    private Tag decodeTag(int type, int length) throws IOException
    {
        Tag t;
        int pos = r.getOffset();

        switch (type)
        {
        case stagProductInfo:
            t = decodeSerialNumber();
            break;
        case stagShowFrame:
            t = new ShowFrame();
            break;
        case stagMetadata:
            t = decodeMetadata();
            break;
        case stagDefineShape:
        case stagDefineShape2:
        case stagDefineShape3:
        case stagDefineShape4:
            t = decodeDefineShape(type);
            break;
        case stagPlaceObject:
            t = decodePlaceObject(length);
            break;
        case stagRemoveObject:
        case stagRemoveObject2:
            t = decodeRemoveObject(type);
            break;
        case stagDefineBinaryData:
            t = decodeDefineBinaryData(length);
            break;
        case stagDefineBits:
            t = decodeDefineBits(length);
            break;
        case stagDefineButton:
            t = decodeDefineButton(length);
            break;
        case stagJPEGTables:
            t = jpegTables = decodeJPEGTables(length);
            break;
        case stagSetBackgroundColor:
            t = decodeSetBackgroundColor();
            break;
        case stagDefineFont:
            t = decodeDefineFont();
            break;
        case stagDefineText:
        case stagDefineText2:
            t = decodeDefineText(type);
            break;
        case stagDoAction:
            t = decodeDoAction(length);
            break;
        case stagDefineFontInfo:
        case stagDefineFontInfo2:
            t = decodeDefineFontInfo(type, length);
            break;
        case stagDefineSound:
            t = decodeDefineSound(length);
            break;
        case stagStartSound:
            t = decodeStartSound();
            break;
        case stagDefineButtonSound:
            t = decodeDefineButtonSound();
            break;
        case stagSoundStreamHead2:
        case stagSoundStreamHead:
            t = decodeSoundStreamHead(type);
            break;
        case stagSoundStreamBlock:
            t = decodeSoundStreamBlock(length);
            break;
        case stagDefineBitsLossless:
            t = decodeDefineBitsLossless(length);
            break;
        case stagDefineBitsJPEG2:
            t = decodeDefineJPEG2(length);
            break;
        case stagDefineButtonCxform:
            t = decodeDefineButtonCxform();
            break;
        case stagProtect:
            t = decodeProtect(length);
            break;
        case stagPlaceObject2:
            t = decodePlaceObject23(stagPlaceObject2, length);
            break;
        case stagPlaceObject3:
            t = decodePlaceObject23(stagPlaceObject3, length);
            break;
        case stagDefineButton2:
            t = decodeDefineButton2(length);
            break;
        case stagDefineBitsJPEG3:
            t = decodeDefineJPEG3(length);
            break;
        case stagDefineBitsLossless2:
            t = decodeDefineBitsLossless2(length);
            break;
        case stagDefineEditText:
            t = decodeDefineEditText();
            break;
        case stagDefineSprite:
            t = decodeDefineSprite(pos+length);
            break;
        case stagDefineScalingGrid:
            t = decodeDefineScalingGrid();
            break;
        case stagFrameLabel:
            t = decodeFrameLabel(length);
            break;
        case stagDefineMorphShape:
            t = decodeDefineMorphShape();
            break;
        case stagDefineMorphShape2:
            t = decodeDefineMorphShape2();
            break;
        case stagDefineFont2:
            t = decodeDefineFont2();
            break;
        case stagDefineFont3:
            t = decodeDefineFont3();
            break;
        case stagDefineFont4:
            t = decodeDefineFont4(length);
            break;
        case stagExportAssets:
            t = decodeExportAssets();
            break;
        case stagImportAssets:
        case stagImportAssets2:
            t = decodeImportAssets(type);
            break;
        case stagEnableDebugger2:
        case stagEnableDebugger:
            t = decodeEnableDebugger(type);
            break;
        case stagDoInitAction:
            t = decodeDoInitAction(length);
            break;
        case stagDefineVideoStream:
            t = decodeDefineVideoStream();
            break;
        case stagVideoFrame:
            t = decodeVideoFrame(length);
            break;
        case stagDebugID:
            t = decodeDebugID(type, length);
            break;
        case stagScriptLimits:
            t = decodeScriptLimits();
            break;
        case stagSetTabIndex:
            t = decodeSetTabIndex();
            break;
        case stagDoABC:
        case stagDoABC2:
            t = decodeDoABC(type, length);
            break;
        case stagSymbolClass:
            t = decodeSymbolClass();
            break;
        case stagFileAttributes:
            t = decodeFileAttributes();
            break;
        case stagEnableTelemetry:
            t = decodeEnableTelemetry();
            break;
        case stagDefineFontAlignZones:
            t = decodeDefineFontAlignZones();
            break;
        case stagCSMTextSettings:
            t = decodeCSMTextSettings();
            break;
        case stagDefineSceneAndFrameLabelData:
            t = decodeDefineSceneAndFrameData(length);
            break;
        case stagDefineFontName:
            t = decodeDefineFontName();
            break;
        default:
            t = decodeUnknown(length, type);
            break;
        }

        int consumed = r.getOffset() - pos;

        // [preilly] It looks like past Authoring tools have generated some SWF's with
        // stagSoundStreamHead tags of length 4 with compression set to mp3, but the tag
        // really has 6 bytes in it and the player always reads the 6 bytes, so ignore the
        // difference between the consumed and the length for this special case.
        if ((consumed != length) && (type == stagSoundStreamHead) && (consumed != (length + 2)))
        {
            throw new SwfFormatException(TagValues.names[type] + " at pos "+pos+ ": " + consumed +
                                  " bytes were read. " + length + " byte were required.");
        }
        return t;
    }