/*
 *			GPAC - Multimedia Framework C SDK
 *
 *			Copyright (c) Jean Le Feuvre 2000-2005
 *					All rights reserved
 *
 *  This file is part of GPAC / BIFS codec sub-project
 *
 *  GPAC is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU Lesser General Public License as published by
 *  the Free Software Foundation; either version 2, or (at your option)
 *  any later version.
 *
 *  GPAC is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Lesser General Public License for more details.	
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; see the file COPYING.  If not, write to
 *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 */


/*
	DO NOT MOFIFY - File generated on GMT Fri Dec 22 19:18:46 2006

	BY MPEG4Gen for GPAC Version 0.4.3-DEV
*/

#ifndef _NDT_H
#define _NDT_H

#include <gpac/nodes_mpeg4.h>



u32 ALL_GetNodeType(const u32 *table, const u32 count, u32 NodeTag, u32 Version);



/* NDT BIFS Version 1 */

#define SFWorldNode_V1_NUMBITS		7
#define SFWorldNode_V1_Count	100

static const u32 SFWorldNode_V1_TypeToTag[100] = {
 TAG_MPEG4_Anchor, TAG_MPEG4_AnimationStream, TAG_MPEG4_Appearance, TAG_MPEG4_AudioBuffer, TAG_MPEG4_AudioClip, TAG_MPEG4_AudioDelay, TAG_MPEG4_AudioFX, TAG_MPEG4_AudioMix, TAG_MPEG4_AudioSource, TAG_MPEG4_AudioSwitch, TAG_MPEG4_Background, TAG_MPEG4_Background2D, TAG_MPEG4_Billboard, TAG_MPEG4_Bitmap, TAG_MPEG4_Box, TAG_MPEG4_Circle, TAG_MPEG4_Collision, TAG_MPEG4_Color, TAG_MPEG4_ColorInterpolator, TAG_MPEG4_CompositeTexture2D, TAG_MPEG4_CompositeTexture3D, TAG_MPEG4_Conditional, TAG_MPEG4_Cone, TAG_MPEG4_Coordinate, TAG_MPEG4_Coordinate2D, TAG_MPEG4_CoordinateInterpolator, TAG_MPEG4_CoordinateInterpolator2D, TAG_MPEG4_Curve2D, TAG_MPEG4_Cylinder, TAG_MPEG4_CylinderSensor, TAG_MPEG4_DirectionalLight, TAG_MPEG4_DiscSensor, TAG_MPEG4_ElevationGrid, TAG_MPEG4_Expression, TAG_MPEG4_Extrusion, TAG_MPEG4_Face, TAG_MPEG4_FaceDefMesh, TAG_MPEG4_FaceDefTables, TAG_MPEG4_FaceDefTransform, TAG_MPEG4_FAP, TAG_MPEG4_FDP, TAG_MPEG4_FIT, TAG_MPEG4_Fog, TAG_MPEG4_FontStyle, TAG_MPEG4_Form, TAG_MPEG4_Group, TAG_MPEG4_ImageTexture, TAG_MPEG4_IndexedFaceSet, TAG_MPEG4_IndexedFaceSet2D, TAG_MPEG4_IndexedLineSet, TAG_MPEG4_IndexedLineSet2D, TAG_MPEG4_Inline, TAG_MPEG4_LOD, TAG_MPEG4_Layer2D, TAG_MPEG4_Layer3D, TAG_MPEG4_Layout, TAG_MPEG4_LineProperties, TAG_MPEG4_ListeningPoint, TAG_MPEG4_Material, TAG_MPEG4_Material2D, TAG_MPEG4_MovieTexture, TAG_MPEG4_NavigationInfo, TAG_MPEG4_Normal, TAG_MPEG4_NormalInterpolator, TAG_MPEG4_OrderedGroup, TAG_MPEG4_OrientationInterpolator, TAG_MPEG4_PixelTexture, TAG_MPEG4_PlaneSensor, TAG_MPEG4_PlaneSensor2D, TAG_MPEG4_PointLight, TAG_MPEG4_PointSet, TAG_MPEG4_PointSet2D, TAG_MPEG4_PositionInterpolator, TAG_MPEG4_PositionInterpolator2D, TAG_MPEG4_ProximitySensor2D, TAG_MPEG4_ProximitySensor, TAG_MPEG4_QuantizationParameter, TAG_MPEG4_Rectangle, TAG_MPEG4_ScalarInterpolator, TAG_MPEG4_Script, TAG_MPEG4_Shape, TAG_MPEG4_Sound, TAG_MPEG4_Sound2D, TAG_MPEG4_Sphere, TAG_MPEG4_SphereSensor, TAG_MPEG4_SpotLight, TAG_MPEG4_Switch, TAG_MPEG4_TermCap, TAG_MPEG4_Text, TAG_MPEG4_TextureCoordinate, TAG_MPEG4_TextureTransform, TAG_MPEG4_TimeSensor, TAG_MPEG4_TouchSensor, TAG_MPEG4_Transform, TAG_MPEG4_Transform2D, TAG_MPEG4_Valuator, TAG_MPEG4_Viewpoint, TAG_MPEG4_VisibilitySensor, TAG_MPEG4_Viseme, TAG_MPEG4_WorldInfo
};

#define SF3DNode_V1_NUMBITS		6
#define SF3DNode_V1_Count	52

static const u32 SF3DNode_V1_TypeToTag[52] = {
 TAG_MPEG4_Anchor, TAG_MPEG4_AnimationStream, TAG_MPEG4_Background, TAG_MPEG4_Background2D, TAG_MPEG4_Billboard, TAG_MPEG4_Collision, TAG_MPEG4_ColorInterpolator, TAG_MPEG4_Conditional, TAG_MPEG4_CoordinateInterpolator, TAG_MPEG4_CoordinateInterpolator2D, TAG_MPEG4_CylinderSensor, TAG_MPEG4_DirectionalLight, TAG_MPEG4_DiscSensor, TAG_MPEG4_Face, TAG_MPEG4_Fog, TAG_MPEG4_Form, TAG_MPEG4_Group, TAG_MPEG4_Inline, TAG_MPEG4_LOD, TAG_MPEG4_Layer2D, TAG_MPEG4_Layer3D, TAG_MPEG4_Layout, TAG_MPEG4_ListeningPoint, TAG_MPEG4_NavigationInfo, TAG_MPEG4_NormalInterpolator, TAG_MPEG4_OrderedGroup, TAG_MPEG4_OrientationInterpolator, TAG_MPEG4_PlaneSensor, TAG_MPEG4_PlaneSensor2D, TAG_MPEG4_PointLight, TAG_MPEG4_PositionInterpolator, TAG_MPEG4_PositionInterpolator2D, TAG_MPEG4_ProximitySensor2D, TAG_MPEG4_ProximitySensor, TAG_MPEG4_QuantizationParameter, TAG_MPEG4_ScalarInterpolator, TAG_MPEG4_Script, TAG_MPEG4_Shape, TAG_MPEG4_Sound, TAG_MPEG4_Sound2D, TAG_MPEG4_SphereSensor, TAG_MPEG4_SpotLight, TAG_MPEG4_Switch, TAG_MPEG4_TermCap, TAG_MPEG4_TimeSensor, TAG_MPEG4_TouchSensor, TAG_MPEG4_Transform, TAG_MPEG4_Transform2D, TAG_MPEG4_Valuator, TAG_MPEG4_Viewpoint, TAG_MPEG4_VisibilitySensor, TAG_MPEG4_WorldInfo
};

#define SF2DNode_V1_NUMBITS		5
#define SF2DNode_V1_Count	31

static const u32 SF2DNode_V1_TypeToTag[31] = {
 TAG_MPEG4_Anchor, TAG_MPEG4_AnimationStream, TAG_MPEG4_Background2D, TAG_MPEG4_ColorInterpolator, TAG_MPEG4_Conditional, TAG_MPEG4_CoordinateInterpolator2D, TAG_MPEG4_DiscSensor, TAG_MPEG4_Face, TAG_MPEG4_Form, TAG_MPEG4_Group, TAG_MPEG4_Inline, TAG_MPEG4_LOD, TAG_MPEG4_Layer2D, TAG_MPEG4_Layer3D, TAG_MPEG4_Layout, TAG_MPEG4_OrderedGroup, TAG_MPEG4_PlaneSensor2D, TAG_MPEG4_PositionInterpolator2D, TAG_MPEG4_ProximitySensor2D, TAG_MPEG4_QuantizationParameter, TAG_MPEG4_ScalarInterpolator, TAG_MPEG4_Script, TAG_MPEG4_Shape, TAG_MPEG4_Sound2D, TAG_MPEG4_Switch, TAG_MPEG4_TermCap, TAG_MPEG4_TimeSensor, TAG_MPEG4_TouchSensor, TAG_MPEG4_Transform2D, TAG_MPEG4_Valuator, TAG_MPEG4_WorldInfo
};

#define SFStreamingNode_V1_NUMBITS		3
#define SFStreamingNode_V1_Count	5

static const u32 SFStreamingNode_V1_TypeToTag[5] = {
 TAG_MPEG4_AnimationStream, TAG_MPEG4_AudioClip, TAG_MPEG4_AudioSource, TAG_MPEG4_Inline, TAG_MPEG4_MovieTexture
};

#define SFAppearanceNode_V1_NUMBITS		1
#define SFAppearanceNode_V1_Count	1

static const u32 SFAppearanceNode_V1_TypeToTag[1] = {
 TAG_MPEG4_Appearance
};

#define SFAudioNode_V1_NUMBITS		3
#define SFAudioNode_V1_Count	7

static const u32 SFAudioNode_V1_TypeToTag[7] = {
 TAG_MPEG4_AudioBuffer, TAG_MPEG4_AudioClip, TAG_MPEG4_AudioDelay, TAG_MPEG4_AudioFX, TAG_MPEG4_AudioMix, TAG_MPEG4_AudioSource, TAG_MPEG4_AudioSwitch
};

#define SFBackground3DNode_V1_NUMBITS		1
#define SFBackground3DNode_V1_Count	1

static const u32 SFBackground3DNode_V1_TypeToTag[1] = {
 TAG_MPEG4_Background
};

#define SFBackground2DNode_V1_NUMBITS		1
#define SFBackground2DNode_V1_Count	1

static const u32 SFBackground2DNode_V1_TypeToTag[1] = {
 TAG_MPEG4_Background2D
};

#define SFGeometryNode_V1_NUMBITS		5
#define SFGeometryNode_V1_Count	17

static const u32 SFGeometryNode_V1_TypeToTag[17] = {
 TAG_MPEG4_Bitmap, TAG_MPEG4_Box, TAG_MPEG4_Circle, TAG_MPEG4_Cone, TAG_MPEG4_Curve2D, TAG_MPEG4_Cylinder, TAG_MPEG4_ElevationGrid, TAG_MPEG4_Extrusion, TAG_MPEG4_IndexedFaceSet, TAG_MPEG4_IndexedFaceSet2D, TAG_MPEG4_IndexedLineSet, TAG_MPEG4_IndexedLineSet2D, TAG_MPEG4_PointSet, TAG_MPEG4_PointSet2D, TAG_MPEG4_Rectangle, TAG_MPEG4_Sphere, TAG_MPEG4_Text
};

#define SFColorNode_V1_NUMBITS		1
#define SFColorNode_V1_Count	1

static const u32 SFColorNode_V1_TypeToTag[1] = {
 TAG_MPEG4_Color
};

#define SFTextureNode_V1_NUMBITS		3
#define SFTextureNode_V1_Count	5

static const u32 SFTextureNode_V1_TypeToTag[5] = {
 TAG_MPEG4_CompositeTexture2D, TAG_MPEG4_CompositeTexture3D, TAG_MPEG4_ImageTexture, TAG_MPEG4_MovieTexture, TAG_MPEG4_PixelTexture
};

#define SFCoordinateNode_V1_NUMBITS		1
#define SFCoordinateNode_V1_Count	1

static const u32 SFCoordinateNode_V1_TypeToTag[1] = {
 TAG_MPEG4_Coordinate
};

#define SFCoordinate2DNode_V1_NUMBITS		1
#define SFCoordinate2DNode_V1_Count	1

static const u32 SFCoordinate2DNode_V1_TypeToTag[1] = {
 TAG_MPEG4_Coordinate2D
};

#define SFExpressionNode_V1_NUMBITS		1
#define SFExpressionNode_V1_Count	1

static const u32 SFExpressionNode_V1_TypeToTag[1] = {
 TAG_MPEG4_Expression
};

#define SFFaceDefMeshNode_V1_NUMBITS		1
#define SFFaceDefMeshNode_V1_Count	1

static const u32 SFFaceDefMeshNode_V1_TypeToTag[1] = {
 TAG_MPEG4_FaceDefMesh
};

#define SFFaceDefTablesNode_V1_NUMBITS		1
#define SFFaceDefTablesNode_V1_Count	1

static const u32 SFFaceDefTablesNode_V1_TypeToTag[1] = {
 TAG_MPEG4_FaceDefTables
};

#define SFFaceDefTransformNode_V1_NUMBITS		1
#define SFFaceDefTransformNode_V1_Count	1

static const u32 SFFaceDefTransformNode_V1_TypeToTag[1] = {
 TAG_MPEG4_FaceDefTransform
};

#define SFFAPNode_V1_NUMBITS		1
#define SFFAPNode_V1_Count	1

static const u32 SFFAPNode_V1_TypeToTag[1] = {
 TAG_MPEG4_FAP
};

#define SFFDPNode_V1_NUMBITS		1
#define SFFDPNode_V1_Count	1

static const u32 SFFDPNode_V1_TypeToTag[1] = {
 TAG_MPEG4_FDP
};

#define SFFITNode_V1_NUMBITS		1
#define SFFITNode_V1_Count	1

static const u32 SFFITNode_V1_TypeToTag[1] = {
 TAG_MPEG4_FIT
};

#define SFFogNode_V1_NUMBITS		1
#define SFFogNode_V1_Count	1

static const u32 SFFogNode_V1_TypeToTag[1] = {
 TAG_MPEG4_Fog
};

#define SFFontStyleNode_V1_NUMBITS		1
#define SFFontStyleNode_V1_Count	1

static const u32 SFFontStyleNode_V1_TypeToTag[1] = {
 TAG_MPEG4_FontStyle
};

#define SFTopNode_V1_NUMBITS		3
#define SFTopNode_V1_Count	4

static const u32 SFTopNode_V1_TypeToTag[4] = {
 TAG_MPEG4_Group, TAG_MPEG4_Layer2D, TAG_MPEG4_Layer3D, TAG_MPEG4_OrderedGroup
};

#define SFLinePropertiesNode_V1_NUMBITS		1
#define SFLinePropertiesNode_V1_Count	1

static const u32 SFLinePropertiesNode_V1_TypeToTag[1] = {
 TAG_MPEG4_LineProperties
};

#define SFMaterialNode_V1_NUMBITS		2
#define SFMaterialNode_V1_Count	2

static const u32 SFMaterialNode_V1_TypeToTag[2] = {
 TAG_MPEG4_Material, TAG_MPEG4_Material2D
};

#define SFNavigationInfoNode_V1_NUMBITS		1
#define SFNavigationInfoNode_V1_Count	1

static const u32 SFNavigationInfoNode_V1_TypeToTag[1] = {
 TAG_MPEG4_NavigationInfo
};

#define SFNormalNode_V1_NUMBITS		1
#define SFNormalNode_V1_Count	1

static const u32 SFNormalNode_V1_TypeToTag[1] = {
 TAG_MPEG4_Normal
};

#define SFTextureCoordinateNode_V1_NUMBITS		1
#define SFTextureCoordinateNode_V1_Count	1

static const u32 SFTextureCoordinateNode_V1_TypeToTag[1] = {
 TAG_MPEG4_TextureCoordinate
};

#define SFTextureTransformNode_V1_NUMBITS		1
#define SFTextureTransformNode_V1_Count	1

static const u32 SFTextureTransformNode_V1_TypeToTag[1] = {
 TAG_MPEG4_TextureTransform
};

#define SFViewpointNode_V1_NUMBITS		1
#define SFViewpointNode_V1_Count	1

static const u32 SFViewpointNode_V1_TypeToTag[1] = {
 TAG_MPEG4_Viewpoint
};

#define SFVisemeNode_V1_NUMBITS		1
#define SFVisemeNode_V1_Count	1

static const u32 SFVisemeNode_V1_TypeToTag[1] = {
 TAG_MPEG4_Viseme
};


u32 NDT_V1_GetNumBits(u32 NDT_Tag);
u32 NDT_V1_GetNodeTag(u32 Context_NDT_Tag, u32 NodeType);
u32 NDT_V1_GetNodeType(u32 NDT_Tag, u32 NodeTag);




/* NDT BIFS Version 2 */

#define SFWorldNode_V2_NUMBITS		4
#define SFWorldNode_V2_Count	12

static const u32 SFWorldNode_V2_TypeToTag[12] = {
 TAG_MPEG4_AcousticMaterial, TAG_MPEG4_AcousticScene, TAG_MPEG4_ApplicationWindow, TAG_MPEG4_BAP, TAG_MPEG4_BDP, TAG_MPEG4_Body, TAG_MPEG4_BodyDefTable, TAG_MPEG4_BodySegmentConnectionHint, TAG_MPEG4_DirectiveSound, TAG_MPEG4_Hierarchical3DMesh, TAG_MPEG4_MaterialKey, TAG_MPEG4_PerceptualParameters
};

#define SF3DNode_V2_NUMBITS		3
#define SF3DNode_V2_Count	3

static const u32 SF3DNode_V2_TypeToTag[3] = {
 TAG_MPEG4_AcousticScene, TAG_MPEG4_Body, TAG_MPEG4_DirectiveSound
};

#define SF2DNode_V2_NUMBITS		2
#define SF2DNode_V2_Count	2

static const u32 SF2DNode_V2_TypeToTag[2] = {
 TAG_MPEG4_ApplicationWindow, TAG_MPEG4_Body
};

#define SFGeometryNode_V2_NUMBITS		2
#define SFGeometryNode_V2_Count	1

static const u32 SFGeometryNode_V2_TypeToTag[1] = {
 TAG_MPEG4_Hierarchical3DMesh
};

#define SFMaterialNode_V2_NUMBITS		2
#define SFMaterialNode_V2_Count	2

static const u32 SFMaterialNode_V2_TypeToTag[2] = {
 TAG_MPEG4_AcousticMaterial, TAG_MPEG4_MaterialKey
};

#define SFBAPNode_V2_NUMBITS		2
#define SFBAPNode_V2_Count	1

static const u32 SFBAPNode_V2_TypeToTag[1] = {
 TAG_MPEG4_BAP
};

#define SFBDPNode_V2_NUMBITS		2
#define SFBDPNode_V2_Count	1

static const u32 SFBDPNode_V2_TypeToTag[1] = {
 TAG_MPEG4_BDP
};

#define SFBodyDefTableNode_V2_NUMBITS		2
#define SFBodyDefTableNode_V2_Count	1

static const u32 SFBodyDefTableNode_V2_TypeToTag[1] = {
 TAG_MPEG4_BodyDefTable
};

#define SFBodySegmentConnectionHintNode_V2_NUMBITS		2
#define SFBodySegmentConnectionHintNode_V2_Count	1

static const u32 SFBodySegmentConnectionHintNode_V2_TypeToTag[1] = {
 TAG_MPEG4_BodySegmentConnectionHint
};

#define SFPerceptualParameterNode_V2_NUMBITS		2
#define SFPerceptualParameterNode_V2_Count	1

static const u32 SFPerceptualParameterNode_V2_TypeToTag[1] = {
 TAG_MPEG4_PerceptualParameters
};


u32 NDT_V2_GetNumBits(u32 NDT_Tag);
u32 NDT_V2_GetNodeTag(u32 Context_NDT_Tag, u32 NodeType);
u32 NDT_V2_GetNodeType(u32 NDT_Tag, u32 NodeTag);




/* NDT BIFS Version 3 */

#define SFWorldNode_V3_NUMBITS		2
#define SFWorldNode_V3_Count	3

static const u32 SFWorldNode_V3_TypeToTag[3] = {
 TAG_MPEG4_TemporalTransform, TAG_MPEG4_TemporalGroup, TAG_MPEG4_ServerCommand
};

#define SF3DNode_V3_NUMBITS		2
#define SF3DNode_V3_Count	3

static const u32 SF3DNode_V3_TypeToTag[3] = {
 TAG_MPEG4_TemporalTransform, TAG_MPEG4_TemporalGroup, TAG_MPEG4_ServerCommand
};

#define SF2DNode_V3_NUMBITS		2
#define SF2DNode_V3_Count	3

static const u32 SF2DNode_V3_TypeToTag[3] = {
 TAG_MPEG4_TemporalTransform, TAG_MPEG4_TemporalGroup, TAG_MPEG4_ServerCommand
};

#define SFTemporalNode_V3_NUMBITS		2
#define SFTemporalNode_V3_Count	2

static const u32 SFTemporalNode_V3_TypeToTag[2] = {
 TAG_MPEG4_TemporalTransform, TAG_MPEG4_TemporalGroup
};


u32 NDT_V3_GetNumBits(u32 NDT_Tag);
u32 NDT_V3_GetNodeTag(u32 Context_NDT_Tag, u32 NodeType);
u32 NDT_V3_GetNodeType(u32 NDT_Tag, u32 NodeTag);




/* NDT BIFS Version 4 */

#define SFWorldNode_V4_NUMBITS		3
#define SFWorldNode_V4_Count	5

static const u32 SFWorldNode_V4_TypeToTag[5] = {
 TAG_MPEG4_InputSensor, TAG_MPEG4_MatteTexture, TAG_MPEG4_MediaBuffer, TAG_MPEG4_MediaControl, TAG_MPEG4_MediaSensor
};

#define SF3DNode_V4_NUMBITS		3
#define SF3DNode_V4_Count	5

static const u32 SF3DNode_V4_TypeToTag[5] = {
 TAG_MPEG4_InputSensor, TAG_MPEG4_MatteTexture, TAG_MPEG4_MediaBuffer, TAG_MPEG4_MediaControl, TAG_MPEG4_MediaSensor
};

#define SF2DNode_V4_NUMBITS		3
#define SF2DNode_V4_Count	5

static const u32 SF2DNode_V4_TypeToTag[5] = {
 TAG_MPEG4_InputSensor, TAG_MPEG4_MatteTexture, TAG_MPEG4_MediaBuffer, TAG_MPEG4_MediaControl, TAG_MPEG4_MediaSensor
};

#define SFTextureNode_V4_NUMBITS		1
#define SFTextureNode_V4_Count	1

static const u32 SFTextureNode_V4_TypeToTag[1] = {
 TAG_MPEG4_MatteTexture
};


u32 NDT_V4_GetNumBits(u32 NDT_Tag);
u32 NDT_V4_GetNodeTag(u32 Context_NDT_Tag, u32 NodeType);
u32 NDT_V4_GetNodeType(u32 NDT_Tag, u32 NodeTag);




/* NDT BIFS Version 5 */

#define SFWorldNode_V5_NUMBITS		6
#define SFWorldNode_V5_Count	39

static const u32 SFWorldNode_V5_TypeToTag[39] = {
 TAG_MPEG4_BitWrapper, TAG_MPEG4_CoordinateInterpolator4D, TAG_MPEG4_DepthImage, TAG_MPEG4_FFD, TAG_MPEG4_Implicit, TAG_MPEG4_XXLFM_Appearance, TAG_MPEG4_XXLFM_BlendList, TAG_MPEG4_XXLFM_FrameList, TAG_MPEG4_XXLFM_LightMap, TAG_MPEG4_XXLFM_SurfaceMapList, TAG_MPEG4_XXLFM_ViewMapList, TAG_MPEG4_MeshGrid, TAG_MPEG4_NonLinearDeformer, TAG_MPEG4_NurbsCurve, TAG_MPEG4_NurbsCurve2D, TAG_MPEG4_NurbsSurface, TAG_MPEG4_OctreeImage, TAG_MPEG4_XXParticles, TAG_MPEG4_XXParticleInitBox, TAG_MPEG4_XXPlanarObstacle, TAG_MPEG4_XXPointAttractor, TAG_MPEG4_PointTexture, TAG_MPEG4_PositionAnimator, TAG_MPEG4_PositionAnimator2D, TAG_MPEG4_PositionInterpolator4D, TAG_MPEG4_ProceduralTexture, TAG_MPEG4_Quadric, TAG_MPEG4_SBBone, TAG_MPEG4_SBMuscle, TAG_MPEG4_SBSegment, TAG_MPEG4_SBSite, TAG_MPEG4_SBSkinnedModel, TAG_MPEG4_SBVCAnimation, TAG_MPEG4_ScalarAnimator, TAG_MPEG4_SimpleTexture, TAG_MPEG4_SolidRep, TAG_MPEG4_SubdivisionSurface, TAG_MPEG4_SubdivSurfaceSector, TAG_MPEG4_WaveletSubdivisionSurface
};

#define SF3DNode_V5_NUMBITS		5
#define SF3DNode_V5_Count	17

static const u32 SF3DNode_V5_TypeToTag[17] = {
 TAG_MPEG4_BitWrapper, TAG_MPEG4_CoordinateInterpolator4D, TAG_MPEG4_DepthImage, TAG_MPEG4_FFD, TAG_MPEG4_OctreeImage, TAG_MPEG4_XXParticles, TAG_MPEG4_PositionAnimator, TAG_MPEG4_PositionAnimator2D, TAG_MPEG4_PositionInterpolator4D, TAG_MPEG4_SBBone, TAG_MPEG4_SBMuscle, TAG_MPEG4_SBSegment, TAG_MPEG4_SBSite, TAG_MPEG4_SBSkinnedModel, TAG_MPEG4_SBVCAnimation, TAG_MPEG4_ScalarAnimator, TAG_MPEG4_WaveletSubdivisionSurface
};

#define SF2DNode_V5_NUMBITS		4
#define SF2DNode_V5_Count	9

static const u32 SF2DNode_V5_TypeToTag[9] = {
 TAG_MPEG4_BitWrapper, TAG_MPEG4_PositionAnimator2D, TAG_MPEG4_SBBone, TAG_MPEG4_SBMuscle, TAG_MPEG4_SBSegment, TAG_MPEG4_SBSite, TAG_MPEG4_SBSkinnedModel, TAG_MPEG4_SBVCAnimation, TAG_MPEG4_ScalarAnimator
};

#define SFAppearanceNode_V5_NUMBITS		1
#define SFAppearanceNode_V5_Count	1

static const u32 SFAppearanceNode_V5_TypeToTag[1] = {
 TAG_MPEG4_XXLFM_Appearance
};

#define SFGeometryNode_V5_NUMBITS		4
#define SFGeometryNode_V5_Count	10

static const u32 SFGeometryNode_V5_TypeToTag[10] = {
 TAG_MPEG4_BitWrapper, TAG_MPEG4_Implicit, TAG_MPEG4_MeshGrid, TAG_MPEG4_NonLinearDeformer, TAG_MPEG4_NurbsCurve, TAG_MPEG4_NurbsCurve2D, TAG_MPEG4_NurbsSurface, TAG_MPEG4_Quadric, TAG_MPEG4_SolidRep, TAG_MPEG4_SubdivisionSurface
};

#define SFTextureNode_V5_NUMBITS		1
#define SFTextureNode_V5_Count	1

static const u32 SFTextureNode_V5_TypeToTag[1] = {
 TAG_MPEG4_ProceduralTexture
};

#define SFDepthImageNode_V5_NUMBITS		1
#define SFDepthImageNode_V5_Count	1

static const u32 SFDepthImageNode_V5_TypeToTag[1] = {
 TAG_MPEG4_DepthImage
};

#define SFBlendListNode_V5_NUMBITS		1
#define SFBlendListNode_V5_Count	1

static const u32 SFBlendListNode_V5_TypeToTag[1] = {
 TAG_MPEG4_XXLFM_BlendList
};

#define SFFrameListNode_V5_NUMBITS		1
#define SFFrameListNode_V5_Count	1

static const u32 SFFrameListNode_V5_TypeToTag[1] = {
 TAG_MPEG4_XXLFM_FrameList
};

#define SFLightMapNode_V5_NUMBITS		1
#define SFLightMapNode_V5_Count	1

static const u32 SFLightMapNode_V5_TypeToTag[1] = {
 TAG_MPEG4_XXLFM_LightMap
};

#define SFSurfaceMapNode_V5_NUMBITS		1
#define SFSurfaceMapNode_V5_Count	1

static const u32 SFSurfaceMapNode_V5_TypeToTag[1] = {
 TAG_MPEG4_XXLFM_SurfaceMapList
};

#define SFViewMapNode_V5_NUMBITS		1
#define SFViewMapNode_V5_Count	1

static const u32 SFViewMapNode_V5_TypeToTag[1] = {
 TAG_MPEG4_XXLFM_ViewMapList
};

#define SFParticleInitializerNode_V5_NUMBITS		1
#define SFParticleInitializerNode_V5_Count	1

static const u32 SFParticleInitializerNode_V5_TypeToTag[1] = {
 TAG_MPEG4_XXParticleInitBox
};

#define SFInfluenceNode_V5_NUMBITS		2
#define SFInfluenceNode_V5_Count	2

static const u32 SFInfluenceNode_V5_TypeToTag[2] = {
 TAG_MPEG4_XXPlanarObstacle, TAG_MPEG4_XXPointAttractor
};

#define SFDepthTextureNode_V5_NUMBITS		2
#define SFDepthTextureNode_V5_Count	2

static const u32 SFDepthTextureNode_V5_TypeToTag[2] = {
 TAG_MPEG4_PointTexture, TAG_MPEG4_SimpleTexture
};

#define SFSBBoneNode_V5_NUMBITS		1
#define SFSBBoneNode_V5_Count	1

static const u32 SFSBBoneNode_V5_TypeToTag[1] = {
 TAG_MPEG4_SBBone
};

#define SFSBMuscleNode_V5_NUMBITS		1
#define SFSBMuscleNode_V5_Count	1

static const u32 SFSBMuscleNode_V5_TypeToTag[1] = {
 TAG_MPEG4_SBMuscle
};

#define SFSBSegmentNode_V5_NUMBITS		1
#define SFSBSegmentNode_V5_Count	1

static const u32 SFSBSegmentNode_V5_TypeToTag[1] = {
 TAG_MPEG4_SBSegment
};

#define SFSBSiteNode_V5_NUMBITS		1
#define SFSBSiteNode_V5_Count	1

static const u32 SFSBSiteNode_V5_TypeToTag[1] = {
 TAG_MPEG4_SBSite
};

#define SFBaseMeshNode_V5_NUMBITS		1
#define SFBaseMeshNode_V5_Count	1

static const u32 SFBaseMeshNode_V5_TypeToTag[1] = {
 TAG_MPEG4_SubdivisionSurface
};

#define SFSubdivSurfaceSectorNode_V5_NUMBITS		1
#define SFSubdivSurfaceSectorNode_V5_Count	1

static const u32 SFSubdivSurfaceSectorNode_V5_TypeToTag[1] = {
 TAG_MPEG4_SubdivSurfaceSector
};


u32 NDT_V5_GetNumBits(u32 NDT_Tag);
u32 NDT_V5_GetNodeTag(u32 Context_NDT_Tag, u32 NodeType);
u32 NDT_V5_GetNodeType(u32 NDT_Tag, u32 NodeTag);




/* NDT BIFS Version 6 */

#define SFWorldNode_V6_NUMBITS		4
#define SFWorldNode_V6_Count	12

static const u32 SFWorldNode_V6_TypeToTag[12] = {
 TAG_MPEG4_Clipper2D, TAG_MPEG4_ColorTransform, TAG_MPEG4_Ellipse, TAG_MPEG4_LinearGradient, TAG_MPEG4_PathLayout, TAG_MPEG4_RadialGradient, TAG_MPEG4_SynthesizedTexture, TAG_MPEG4_TransformMatrix2D, TAG_MPEG4_Viewport, TAG_MPEG4_XCurve2D, TAG_MPEG4_XFontStyle, TAG_MPEG4_XLineProperties
};

#define SF3DNode_V6_NUMBITS		3
#define SF3DNode_V6_Count	5

static const u32 SF3DNode_V6_TypeToTag[5] = {
 TAG_MPEG4_Clipper2D, TAG_MPEG4_ColorTransform, TAG_MPEG4_PathLayout, TAG_MPEG4_TransformMatrix2D, TAG_MPEG4_Viewport
};

#define SF2DNode_V6_NUMBITS		3
#define SF2DNode_V6_Count	5

static const u32 SF2DNode_V6_TypeToTag[5] = {
 TAG_MPEG4_Clipper2D, TAG_MPEG4_ColorTransform, TAG_MPEG4_PathLayout, TAG_MPEG4_TransformMatrix2D, TAG_MPEG4_Viewport
};

#define SFGeometryNode_V6_NUMBITS		2
#define SFGeometryNode_V6_Count	2

static const u32 SFGeometryNode_V6_TypeToTag[2] = {
 TAG_MPEG4_Ellipse, TAG_MPEG4_XCurve2D
};

#define SFTextureNode_V6_NUMBITS		2
#define SFTextureNode_V6_Count	3

static const u32 SFTextureNode_V6_TypeToTag[3] = {
 TAG_MPEG4_LinearGradient, TAG_MPEG4_RadialGradient, TAG_MPEG4_SynthesizedTexture
};

#define SFFontStyleNode_V6_NUMBITS		1
#define SFFontStyleNode_V6_Count	1

static const u32 SFFontStyleNode_V6_TypeToTag[1] = {
 TAG_MPEG4_XFontStyle
};

#define SFLinePropertiesNode_V6_NUMBITS		1
#define SFLinePropertiesNode_V6_Count	1

static const u32 SFLinePropertiesNode_V6_TypeToTag[1] = {
 TAG_MPEG4_XLineProperties
};

#define SFTextureTransformNode_V6_NUMBITS		1
#define SFTextureTransformNode_V6_Count	1

static const u32 SFTextureTransformNode_V6_TypeToTag[1] = {
 TAG_MPEG4_TransformMatrix2D
};

#define SFViewportNode_V6_NUMBITS		1
#define SFViewportNode_V6_Count	1

static const u32 SFViewportNode_V6_TypeToTag[1] = {
 TAG_MPEG4_Viewport
};


u32 NDT_V6_GetNumBits(u32 NDT_Tag);
u32 NDT_V6_GetNodeTag(u32 Context_NDT_Tag, u32 NodeType);
u32 NDT_V6_GetNodeType(u32 NDT_Tag, u32 NodeTag);



u32 NDT_GetChildTable(u32 NodeTag);




#endif		/*_NDT_H*/

